亞馬遜云科技:直擊技術(shù)最前沿 | 無服務(wù)器的現(xiàn)狀與未來

來源: 亞馬遜云科技
作者:DATADOG
時間:2021-06-25
17413
無服務(wù)器是什么?Amazon Lambda跟無服務(wù)器有什么關(guān)系?它起到了什么作用呢?一起來了解Amazon Lambda吧!

無服務(wù)器是什么?

Amazon Lambda跟無服務(wù)器有什么關(guān)系?

它起到了什么作用呢?

一起來了解Amazon Lambda吧!

來自DATADOG的深度解析:

從云原生初創(chuàng)公司到大型企業(yè),無服務(wù)器技術(shù)已經(jīng)對不同規(guī)模的組織建立起強大的吸引力。借助無服務(wù)器技術(shù),各團(tuán)隊得以專注于快速將創(chuàng)意成果推向市場,而不必在基礎(chǔ)設(shè)施管理方面浪費時間與精力,且全程只需按實際資源使用量計費。在本份報告中,我們回顧了數(shù)千家企業(yè)運行的數(shù)百萬項函數(shù),希望了解無服務(wù)器在現(xiàn)實世界中的應(yīng)用情況。

無論是臨時性任務(wù)還是面向用戶的固定應(yīng)用程序,無服務(wù)器都能提供良好的用例支持效果。Amazon Lambda是目前最成熟、應(yīng)用范圍最廣的函數(shù)即服務(wù)(FaaS)產(chǎn)品。如今,無服務(wù)器生態(tài)系統(tǒng)已經(jīng)由FaaS擴展至數(shù)十種服務(wù),幫助開發(fā)人員快速構(gòu)建起動態(tài)水平更高的各類應(yīng)用。已經(jīng)有四分之一的Amazon CloudFront用戶開始接納無服務(wù)器邊緣計算,組織也在積極利用Amazon Step Functions管理各類分布式組件中的應(yīng)用邏輯。

下面,我們具體聊聊無服務(wù)器領(lǐng)域的更多分析結(jié)論與發(fā)展趨勢。

01 相較于兩年前,目前Amazon Lambda函數(shù)的調(diào)用頻率已增長3.5倍

Amazon Lambda讓開發(fā)人員不再分神于基礎(chǔ)設(shè)施,而能夠構(gòu)建起高度可擴展的應(yīng)用程序以加快創(chuàng)新嘗試。如今,團(tuán)隊不再將無服務(wù)器視為實驗性技術(shù),而是將其作為軟件堆棧中的關(guān)鍵組成部分。實際上,我們的研究結(jié)果表明,自2019年以來開始使用Amazon Lambda的企業(yè)一直在顯著擴大其技術(shù)使用率。平均而言,截至2021年初,日均函數(shù)調(diào)用頻率已經(jīng)達(dá)到兩年前的3.5倍。在這部分Amazon Lambda用戶當(dāng)中,各組織的日均各函數(shù)運行總時長可達(dá)900個小時。

640.webp (1).jpg

無論您使用何種框架、語言或云,無服務(wù)器都能幫助您輕松完成構(gòu)建與迭代。兩年之前,Next.js首次為無服務(wù)器函數(shù)提供絕佳支持,極大增強了動態(tài)服務(wù)器端渲染(SSR)與API路由的效能。自那時以來,我們見證了Vercel用戶在無服務(wù)器應(yīng)用方面的驚人增長,其調(diào)用量由每月2.62億次增長至每月74億次,增幅達(dá)28倍。

——Guillermo Rauch,

Vercel CEO兼Next.js聯(lián)合創(chuàng)始人

02 如今Amazon Lambda的調(diào)用延遲遠(yuǎn)低于一年之前

目前,Amazon Lambda正越來越多地為需要極低延遲的面向客戶應(yīng)用程序提供支持。2020年,全部Amazon Lambda調(diào)用的延遲中位數(shù)僅為60毫秒,相當(dāng)于上一年的一半。部分原因是由于越來越多的組織開始遵循Amazon Lambda最佳實踐,在函數(shù)設(shè)計中高度契合工作負(fù)載需求,由此縮短了調(diào)用時長。另外,我們還注意到延遲分布的拖尾效應(yīng)很明顯,代表著Amazon Lambda不僅支持大量臨時作業(yè),同時也在為計算密集型用例持續(xù)提供資源動力。

640.webp (2).jpg

03 Amazon Step Functions可支持從Web應(yīng)用到數(shù)據(jù)管道的一切實際應(yīng)用

Amazon Step Functions使開發(fā)人員得以構(gòu)建起事件驅(qū)動的工作流,并向其中引入多項Amazon Lambda函數(shù)與Amazon服務(wù)。在這類工作流程中,Amazon Step Functions負(fù)責(zé)協(xié)調(diào)錯誤處理、重試、超時以及其他應(yīng)用邏輯,借此降低無服務(wù)器應(yīng)用程序在擴展過程中的復(fù)雜性水平。我們的研究表明,Amazon Step Functions的工作流程中平均包含4項Amazon Lambda函數(shù),且具體數(shù)字仍然保持著逐月增長。

Amazon Step Functions提供兩種工作流程類型:標(biāo)準(zhǔn)型(Standard)與快速型(Express)。我們注意到,超過四成工作流會在一分鐘之內(nèi)執(zhí)行完畢,意味著組織在使用快速型工作流支持相當(dāng)一部分事件處理工作負(fù)載。但也有不少工作流會持續(xù)整整一天。實際上,最長的Amazon Step Functions工作流能夠持續(xù)一年以上。例如,Amazon Step Functions工作流也包括運行在Amazon ECS或Amazon EC2實例上的活動工作程序,因此工作流本身的執(zhí)行時長完全可以超過Amazon Lambda函數(shù)設(shè)定的15分鐘超時上限。以此為基礎(chǔ),Amazon Step Functions得以支撐起多種用例,包括Web請求處理等延遲敏感型任務(wù)以及大數(shù)據(jù)處理作業(yè)等更復(fù)雜、運行時間更長的任務(wù)。

640.webp (3).jpg

我們在整個無服務(wù)器架構(gòu)中廣泛使用Amazon Step Functions。它讓我們得以設(shè)計并運行起穩(wěn)定可靠的工作流程,在我們的B2B交易平臺上處理大量交易,同時極大降低整體系統(tǒng)的運營復(fù)雜性。

——Zack Kanter,

Stedi公司CEO

04 四分之一的Amazon CloudFront用戶已經(jīng)采用無服務(wù)器邊緣計算功能

邊緣計算憑借著極快的數(shù)據(jù)處理能力引起各行業(yè)的廣泛關(guān)注。如今,四分之一的Amazon CloudFront企業(yè)客戶已經(jīng)在使用Amazon Lambda Edge向全球用戶群體交付個性化使用體驗。例如,Amazon Lambda Edge能夠根據(jù)用戶特征(例如設(shè)備類型)實現(xiàn)圖像的動態(tài)轉(zhuǎn)換,或者在A/B測試中提供Web應(yīng)用程序的不同版本。

640.webp (4).jpg

利用Amazon CloudFront的邊緣位置網(wǎng)絡(luò),Amazon Lambda Edge可幫助組織進(jìn)一步縮短函數(shù)執(zhí)行位置與用戶實際位置間的距離,且無需設(shè)置和管理任何原始服務(wù)器。我們的數(shù)據(jù)顯示,67%的Amazon Lambda Edge函數(shù)可實現(xiàn)20毫秒以內(nèi)的運行延遲,這也證明無服務(wù)器邊緣計算擁有巨大的發(fā)展?jié)摿?,特別是有能力以最低運營成本良好匹配對延遲高度敏感的應(yīng)用程序。隨著這項技術(shù)的發(fā)展成熟,未來將有更多組織借助它的力量改善最終用戶體驗。

640.webp (5).jpg

05 對于大部分函數(shù),組織在并發(fā)設(shè)計當(dāng)中使用的Provisioned Concurrency存在過度配置

在經(jīng)歷一段時間的非活動狀態(tài)后,Amazon Lambda函數(shù)重新調(diào)用時會經(jīng)歷短暫的執(zhí)行延遲,也就是冷啟動狀態(tài)。對于需要毫秒級響應(yīng)水平的應(yīng)用程序,這種冷啟動顯然不可接受。2019年底,亞馬遜云科技決定推出Provisioned Concurrency,希望通過保持執(zhí)行環(huán)境初始化與響應(yīng)請求準(zhǔn)備狀態(tài)幫助Amazon Lambda用戶從容應(yīng)對冷啟動難題。

根據(jù)調(diào)查數(shù)據(jù),我們發(fā)現(xiàn)用戶似乎很難準(zhǔn)確判斷Amazon Lambda函數(shù)的最佳Provisioned Concurrency配置量。目前超過半數(shù)函數(shù)所使用的并發(fā)份額不足Provisioned Concurrency配置的80%。與此同時,超過40%的函數(shù)用盡了全部配額,意味著其在使用過程中仍有可能遭遇冷啟動問題,需要進(jìn)一步提升并發(fā)水平。Application Auto Scaling提供一套解決方案,允許用戶根據(jù)調(diào)用情況自動調(diào)節(jié)Provisioned Concurrency配置。

640.webp (6).jpg

我們還看到,Provisioned Concurrency與Java以及.NET Core函數(shù)的配合頻率更高。由于這些運行時的固有特性,它們的啟動速度往往要比Python以及Node.js更慢。例如,Java需要首先初始化其虛擬機(JVM)并將各種類加載到內(nèi)存中,之后才能開始執(zhí)行用戶代碼。

06 目前,大部分用戶使用Serverless Framework通過Amazon CloudFormation部署Amazon Lambda應(yīng)用程序

隨著無服務(wù)器應(yīng)用程序的快速擴展,手動部署Amazon Lambda函數(shù)及其他資源的難度也變得越來越高。Amazon CloudFormation可幫助開發(fā)人員在集合(即棧)中配置Amazon基礎(chǔ)設(shè)施與第三方資源。事實上,Amazon CloudFormation也已經(jīng)成為Amazon Cloud Development Kit(CDK),Amazon Serverless Application Model(SAM)以及Serverless Framework等框架的底層部署機制。

開源Serverless Framework已經(jīng)成為目前最受歡迎的工具選項——截至目前,超過九成的組織通過Amazon CloudFormation配合Serverless Framework管理無服務(wù)器資源。除Serverless Framework之外,還有19%的組織使用原版Amazon CloudFormation、18%的組織使用Amazon CDK、13%的組織使用Amazon SAM。請注意,由于各組織可能同時使用多種部署工具,因此份額數(shù)值相加可能超過100%。

640.webp (7).jpg

在無服務(wù)器應(yīng)用程序中使用的Amazon CloudFormation棧內(nèi),高達(dá)65%的比例僅包含一項Amazon Lambda函數(shù)。此外,全部函數(shù)中仍有超過一半(57%)未部署在Amazon CloudFormation之內(nèi)。這表明不少組織仍處于使用基礎(chǔ)設(shè)施即代碼形式實現(xiàn)無服務(wù)器工作流自動化與優(yōu)化的早期嘗試階段。但正如Kubernetes與Amazon Elastic Container Service(ECS)等編排工具逐步成為批量容器管理的最優(yōu)解一樣,預(yù)計未來以代碼為基礎(chǔ)的工具將在大規(guī)模無服務(wù)器應(yīng)用程序部署中扮演更為關(guān)鍵的角色。

640.webp (8).jpg

隨著開發(fā)人員及企業(yè)利用無服務(wù)器技術(shù)構(gòu)建起更多高級應(yīng)用程序,他們必然需要更強大的工具對服務(wù)開展更加穩(wěn)定可靠的構(gòu)建、測試、部署與管理。也正是這種需求,催生出Serverless Framework、Amazon CDK等開源基礎(chǔ)設(shè)施即代碼項目。單是Serverless Framework的下載量就由2019年的1200萬次增加至2020年的2500萬次。隨著開發(fā)者繼續(xù)使用無服務(wù)器技術(shù)構(gòu)建更多工具,預(yù)計這些工具的采用量與復(fù)雜性都將快速增長。

——Jeremy Daly,

Serverless有限公司

Serverless Cloud總經(jīng)理

07 Python是目前最受歡迎的Amazon Lambda運行時,在大型環(huán)境中尤其受到青睞

自2018年以來,Amazon Lambda先后為六大運行時提供支持:Node.js、Python、Java、Go、.NET Core以及Ruby。但Python與Node.js在Amazon Lambda用戶中仍然占據(jù)主導(dǎo)地位,在全部函數(shù)中份額高達(dá)近九成。在所有已部署的Amazon Lambda中,有58%運行Python(較上年增長11%),另有31%運行Node.js(較上年降低8%)。

640.webp (9).jpg

在調(diào)查不同規(guī)模環(huán)境下運行時使用情況的具體細(xì)分時,我們發(fā)現(xiàn)一種有趣的趨勢:Node.js在小型環(huán)境中占比高于Python,但隨著環(huán)境規(guī)模的擴大,Python的流行度一路飆升。在亞馬遜云科技應(yīng)用規(guī)模最大的組織內(nèi),Python的使用頻率達(dá)到Node.js的四倍。

640.webp (10).jpg

截至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編寫的函數(shù)中,超過九成函數(shù)使用Python 3,其中Python 3.8的受歡迎程度最高。隨著用戶逐步轉(zhuǎn)向Python 3,Python 2.7的比例與上年相比下降達(dá)25%。亞馬遜云科技已經(jīng)宣布計劃于2021年5月停止對Node.js 10的支持,因此預(yù)計Node.js 12以及最新納入支持清單的Node.js 14都將迎來一波份額上漲。在全體Amazon Lambda用戶當(dāng)中,Java 8的人氣達(dá)到Java 11的五倍,看來2019年底以來的正式支持還沒能幫Java 11快速得到使用者們的肯定。

*本文于2021年5月更新,基于2020年發(fā)表的第一版報告(https://www.datadoghq.com/state-of-serverless-2020/)

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于亞馬遜云科技,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
掃碼登錄
打開掃一掃, 關(guān)注公眾號后即可登錄/注冊
加載中
二維碼已失效 請重試
刷新
賬號登錄/注冊
個人VIP
小程序
快出海小程序
公眾號
快出海公眾號
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家