無(wú)服務(wù)器是什么?
Amazon Lambda跟無(wú)服務(wù)器有什么關(guān)系?
它起到了什么作用呢?
一起來(lái)了解Amazon Lambda吧!
來(lái)自DATADOG的深度解析:
從云原生初創(chuàng)公司到大型企業(yè),無(wú)服務(wù)器技術(shù)已經(jīng)對(duì)不同規(guī)模的組織建立起強(qiáng)大的吸引力。借助無(wú)服務(wù)器技術(shù),各團(tuán)隊(duì)得以專(zhuān)注于快速將創(chuàng)意成果推向市場(chǎng),而不必在基礎(chǔ)設(shè)施管理方面浪費(fèi)時(shí)間與精力,且全程只需按實(shí)際資源使用量計(jì)費(fèi)。在本份報(bào)告中,我們回顧了數(shù)千家企業(yè)運(yùn)行的數(shù)百萬(wàn)項(xiàng)函數(shù),希望了解無(wú)服務(wù)器在現(xiàn)實(shí)世界中的應(yīng)用情況。
無(wú)論是臨時(shí)性任務(wù)還是面向用戶的固定應(yīng)用程序,無(wú)服務(wù)器都能提供良好的用例支持效果。Amazon Lambda是目前最成熟、應(yīng)用范圍最廣的函數(shù)即服務(wù)(FaaS)產(chǎn)品。如今,無(wú)服務(wù)器生態(tài)系統(tǒng)已經(jīng)由FaaS擴(kuò)展至數(shù)十種服務(wù),幫助開(kāi)發(fā)人員快速構(gòu)建起動(dòng)態(tài)水平更高的各類(lèi)應(yīng)用。已經(jīng)有四分之一的Amazon CloudFront用戶開(kāi)始接納無(wú)服務(wù)器邊緣計(jì)算,組織也在積極利用Amazon Step Functions管理各類(lèi)分布式組件中的應(yīng)用邏輯。
下面,我們具體聊聊無(wú)服務(wù)器領(lǐng)域的更多分析結(jié)論與發(fā)展趨勢(shì)。
01 相較于兩年前,目前Amazon Lambda函數(shù)的調(diào)用頻率已增長(zhǎng)3.5倍
Amazon Lambda讓開(kāi)發(fā)人員不再分神于基礎(chǔ)設(shè)施,而能夠構(gòu)建起高度可擴(kuò)展的應(yīng)用程序以加快創(chuàng)新嘗試。如今,團(tuán)隊(duì)不再將無(wú)服務(wù)器視為實(shí)驗(yàn)性技術(shù),而是將其作為軟件堆棧中的關(guān)鍵組成部分。實(shí)際上,我們的研究結(jié)果表明,自2019年以來(lái)開(kāi)始使用Amazon Lambda的企業(yè)一直在顯著擴(kuò)大其技術(shù)使用率。平均而言,截至2021年初,日均函數(shù)調(diào)用頻率已經(jīng)達(dá)到兩年前的3.5倍。在這部分Amazon Lambda用戶當(dāng)中,各組織的日均各函數(shù)運(yùn)行總時(shí)長(zhǎng)可達(dá)900個(gè)小時(shí)。
無(wú)論您使用何種框架、語(yǔ)言或云,無(wú)服務(wù)器都能幫助您輕松完成構(gòu)建與迭代。兩年之前,Next.js首次為無(wú)服務(wù)器函數(shù)提供絕佳支持,極大增強(qiáng)了動(dòng)態(tài)服務(wù)器端渲染(SSR)與API路由的效能。自那時(shí)以來(lái),我們見(jiàn)證了Vercel用戶在無(wú)服務(wù)器應(yīng)用方面的驚人增長(zhǎng),其調(diào)用量由每月2.62億次增長(zhǎng)至每月74億次,增幅達(dá)28倍。
——Guillermo Rauch,
Vercel CEO兼Next.js聯(lián)合創(chuàng)始人
02 如今Amazon Lambda的調(diào)用延遲遠(yuǎn)低于一年之前
目前,Amazon Lambda正越來(lái)越多地為需要極低延遲的面向客戶應(yīng)用程序提供支持。2020年,全部Amazon Lambda調(diào)用的延遲中位數(shù)僅為60毫秒,相當(dāng)于上一年的一半。部分原因是由于越來(lái)越多的組織開(kāi)始遵循Amazon Lambda最佳實(shí)踐,在函數(shù)設(shè)計(jì)中高度契合工作負(fù)載需求,由此縮短了調(diào)用時(shí)長(zhǎng)。另外,我們還注意到延遲分布的拖尾效應(yīng)很明顯,代表著Amazon Lambda不僅支持大量臨時(shí)作業(yè),同時(shí)也在為計(jì)算密集型用例持續(xù)提供資源動(dòng)力。
03 Amazon Step Functions可支持從Web應(yīng)用到數(shù)據(jù)管道的一切實(shí)際應(yīng)用
Amazon Step Functions使開(kāi)發(fā)人員得以構(gòu)建起事件驅(qū)動(dòng)的工作流,并向其中引入多項(xiàng)Amazon Lambda函數(shù)與Amazon服務(wù)。在這類(lèi)工作流程中,Amazon Step Functions負(fù)責(zé)協(xié)調(diào)錯(cuò)誤處理、重試、超時(shí)以及其他應(yīng)用邏輯,借此降低無(wú)服務(wù)器應(yīng)用程序在擴(kuò)展過(guò)程中的復(fù)雜性水平。我們的研究表明,Amazon Step Functions的工作流程中平均包含4項(xiàng)Amazon Lambda函數(shù),且具體數(shù)字仍然保持著逐月增長(zhǎng)。
Amazon Step Functions提供兩種工作流程類(lèi)型:標(biāo)準(zhǔn)型(Standard)與快速型(Express)。我們注意到,超過(guò)四成工作流會(huì)在一分鐘之內(nèi)執(zhí)行完畢,意味著組織在使用快速型工作流支持相當(dāng)一部分事件處理工作負(fù)載。但也有不少工作流會(huì)持續(xù)整整一天。實(shí)際上,最長(zhǎng)的Amazon Step Functions工作流能夠持續(xù)一年以上。例如,Amazon Step Functions工作流也包括運(yùn)行在Amazon ECS或Amazon EC2實(shí)例上的活動(dòng)工作程序,因此工作流本身的執(zhí)行時(shí)長(zhǎng)完全可以超過(guò)Amazon Lambda函數(shù)設(shè)定的15分鐘超時(shí)上限。以此為基礎(chǔ),Amazon Step Functions得以支撐起多種用例,包括Web請(qǐng)求處理等延遲敏感型任務(wù)以及大數(shù)據(jù)處理作業(yè)等更復(fù)雜、運(yùn)行時(shí)間更長(zhǎng)的任務(wù)。
我們?cè)谡麄€(gè)無(wú)服務(wù)器架構(gòu)中廣泛使用Amazon Step Functions。它讓我們得以設(shè)計(jì)并運(yùn)行起穩(wěn)定可靠的工作流程,在我們的B2B交易平臺(tái)上處理大量交易,同時(shí)極大降低整體系統(tǒng)的運(yùn)營(yíng)復(fù)雜性。
——Zack Kanter,
Stedi公司CEO
04 四分之一的Amazon CloudFront用戶已經(jīng)采用無(wú)服務(wù)器邊緣計(jì)算功能
邊緣計(jì)算憑借著極快的數(shù)據(jù)處理能力引起各行業(yè)的廣泛關(guān)注。如今,四分之一的Amazon CloudFront企業(yè)客戶已經(jīng)在使用Amazon Lambda Edge向全球用戶群體交付個(gè)性化使用體驗(yàn)。例如,Amazon Lambda Edge能夠根據(jù)用戶特征(例如設(shè)備類(lèi)型)實(shí)現(xiàn)圖像的動(dòng)態(tài)轉(zhuǎn)換,或者在A/B測(cè)試中提供Web應(yīng)用程序的不同版本。
利用Amazon CloudFront的邊緣位置網(wǎng)絡(luò),Amazon Lambda Edge可幫助組織進(jìn)一步縮短函數(shù)執(zhí)行位置與用戶實(shí)際位置間的距離,且無(wú)需設(shè)置和管理任何原始服務(wù)器。我們的數(shù)據(jù)顯示,67%的Amazon Lambda Edge函數(shù)可實(shí)現(xiàn)20毫秒以內(nèi)的運(yùn)行延遲,這也證明無(wú)服務(wù)器邊緣計(jì)算擁有巨大的發(fā)展?jié)摿Γ貏e是有能力以最低運(yùn)營(yíng)成本良好匹配對(duì)延遲高度敏感的應(yīng)用程序。隨著這項(xiàng)技術(shù)的發(fā)展成熟,未來(lái)將有更多組織借助它的力量改善最終用戶體驗(yàn)。
05 對(duì)于大部分函數(shù),組織在并發(fā)設(shè)計(jì)當(dāng)中使用的Provisioned Concurrency存在過(guò)度配置
在經(jīng)歷一段時(shí)間的非活動(dòng)狀態(tài)后,Amazon Lambda函數(shù)重新調(diào)用時(shí)會(huì)經(jīng)歷短暫的執(zhí)行延遲,也就是冷啟動(dòng)狀態(tài)。對(duì)于需要毫秒級(jí)響應(yīng)水平的應(yīng)用程序,這種冷啟動(dòng)顯然不可接受。2019年底,亞馬遜云科技決定推出Provisioned Concurrency,希望通過(guò)保持執(zhí)行環(huán)境初始化與響應(yīng)請(qǐng)求準(zhǔn)備狀態(tài)幫助Amazon Lambda用戶從容應(yīng)對(duì)冷啟動(dòng)難題。
根據(jù)調(diào)查數(shù)據(jù),我們發(fā)現(xiàn)用戶似乎很難準(zhǔn)確判斷Amazon Lambda函數(shù)的最佳Provisioned Concurrency配置量。目前超過(guò)半數(shù)函數(shù)所使用的并發(fā)份額不足Provisioned Concurrency配置的80%。與此同時(shí),超過(guò)40%的函數(shù)用盡了全部配額,意味著其在使用過(guò)程中仍有可能遭遇冷啟動(dòng)問(wèn)題,需要進(jìn)一步提升并發(fā)水平。Application Auto Scaling提供一套解決方案,允許用戶根據(jù)調(diào)用情況自動(dòng)調(diào)節(jié)Provisioned Concurrency配置。
我們還看到,Provisioned Concurrency與Java以及.NET Core函數(shù)的配合頻率更高。由于這些運(yùn)行時(shí)的固有特性,它們的啟動(dòng)速度往往要比Python以及Node.js更慢。例如,Java需要首先初始化其虛擬機(jī)(JVM)并將各種類(lèi)加載到內(nèi)存中,之后才能開(kāi)始執(zhí)行用戶代碼。
06 目前,大部分用戶使用Serverless Framework通過(guò)Amazon CloudFormation部署Amazon Lambda應(yīng)用程序
隨著無(wú)服務(wù)器應(yīng)用程序的快速擴(kuò)展,手動(dòng)部署Amazon Lambda函數(shù)及其他資源的難度也變得越來(lái)越高。Amazon CloudFormation可幫助開(kāi)發(fā)人員在集合(即棧)中配置Amazon基礎(chǔ)設(shè)施與第三方資源。事實(shí)上,Amazon CloudFormation也已經(jīng)成為Amazon Cloud Development Kit(CDK),Amazon Serverless Application Model(SAM)以及Serverless Framework等框架的底層部署機(jī)制。
開(kāi)源Serverless Framework已經(jīng)成為目前最受歡迎的工具選項(xiàng)——截至目前,超過(guò)九成的組織通過(guò)Amazon CloudFormation配合Serverless Framework管理無(wú)服務(wù)器資源。除Serverless Framework之外,還有19%的組織使用原版Amazon CloudFormation、18%的組織使用Amazon CDK、13%的組織使用Amazon SAM。請(qǐng)注意,由于各組織可能同時(shí)使用多種部署工具,因此份額數(shù)值相加可能超過(guò)100%。
在無(wú)服務(wù)器應(yīng)用程序中使用的Amazon CloudFormation棧內(nèi),高達(dá)65%的比例僅包含一項(xiàng)Amazon Lambda函數(shù)。此外,全部函數(shù)中仍有超過(guò)一半(57%)未部署在Amazon CloudFormation之內(nèi)。這表明不少組織仍處于使用基礎(chǔ)設(shè)施即代碼形式實(shí)現(xiàn)無(wú)服務(wù)器工作流自動(dòng)化與優(yōu)化的早期嘗試階段。但正如Kubernetes與Amazon Elastic Container Service(ECS)等編排工具逐步成為批量容器管理的最優(yōu)解一樣,預(yù)計(jì)未來(lái)以代碼為基礎(chǔ)的工具將在大規(guī)模無(wú)服務(wù)器應(yīng)用程序部署中扮演更為關(guān)鍵的角色。
隨著開(kāi)發(fā)人員及企業(yè)利用無(wú)服務(wù)器技術(shù)構(gòu)建起更多高級(jí)應(yīng)用程序,他們必然需要更強(qiáng)大的工具對(duì)服務(wù)開(kāi)展更加穩(wěn)定可靠的構(gòu)建、測(cè)試、部署與管理。也正是這種需求,催生出Serverless Framework、Amazon CDK等開(kāi)源基礎(chǔ)設(shè)施即代碼項(xiàng)目。單是Serverless Framework的下載量就由2019年的1200萬(wàn)次增加至2020年的2500萬(wàn)次。隨著開(kāi)發(fā)者繼續(xù)使用無(wú)服務(wù)器技術(shù)構(gòu)建更多工具,預(yù)計(jì)這些工具的采用量與復(fù)雜性都將快速增長(zhǎng)。
——Jeremy Daly,
Serverless有限公司
Serverless Cloud總經(jīng)理
07 Python是目前最受歡迎的Amazon Lambda運(yùn)行時(shí),在大型環(huán)境中尤其受到青睞
自2018年以來(lái),Amazon Lambda先后為六大運(yùn)行時(shí)提供支持:Node.js、Python、Java、Go、.NET Core以及Ruby。但Python與Node.js在Amazon Lambda用戶中仍然占據(jù)主導(dǎo)地位,在全部函數(shù)中份額高達(dá)近九成。在所有已部署的Amazon Lambda中,有58%運(yùn)行Python(較上年增長(zhǎng)11%),另有31%運(yùn)行Node.js(較上年降低8%)。
在調(diào)查不同規(guī)模環(huán)境下運(yùn)行時(shí)使用情況的具體細(xì)分時(shí),我們發(fā)現(xiàn)一種有趣的趨勢(shì):Node.js在小型環(huán)境中占比高于Python,但隨著環(huán)境規(guī)模的擴(kuò)大,Python的流行度一路飆升。在亞馬遜云科技應(yīng)用規(guī)模最大的組織內(nèi),Python的使用頻率達(dá)到Node.js的四倍。
截至2021年3月,使用比例最高的各運(yùn)行時(shí)按版本排序如下:
1.Python 3.x
2.Node.js 12
3.Node.js 10
4.Python 2.7
5.Java 8
6.Go 1.x
7.NET Core 2.1
8.NET Core 3.1
在使用Python編寫(xiě)的函數(shù)中,超過(guò)九成函數(shù)使用Python 3,其中Python 3.8的受歡迎程度最高。隨著用戶逐步轉(zhuǎn)向Python 3,Python 2.7的比例與上年相比下降達(dá)25%。亞馬遜云科技已經(jīng)宣布計(jì)劃于2021年5月停止對(duì)Node.js 10的支持,因此預(yù)計(jì)Node.js 12以及最新納入支持清單的Node.js 14都將迎來(lái)一波份額上漲。在全體Amazon Lambda用戶當(dāng)中,Java 8的人氣達(dá)到Java 11的五倍,看來(lái)2019年底以來(lái)的正式支持還沒(méi)能幫Java 11快速得到使用者們的肯定。
*本文于2021年5月更新,基于2020年發(fā)表的第一版報(bào)告(https://www.datadoghq.com/state-of-serverless-2020/)