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