使用率激增 250%,這份報(bào)告再次將 Serverless 推向幕前
本文是對(duì) Datadog 最新的一份 Serverless 報(bào)告的解讀,歡迎大家留言討論。
每項(xiàng)新技術(shù)的產(chǎn)生和演進(jìn)過程中,都會(huì)有他自己的擁躉,也會(huì)有持懷疑論者。Serverless 的美在于他可以盡可能的解放客戶在基礎(chǔ)設(shè)施上的投入,只需專注于自己的業(yè)務(wù),讓技術(shù)產(chǎn)生更多商業(yè)價(jià)值,同時(shí),客戶只需要真正為使用量付費(fèi),無(wú)須讓計(jì)算資源常駐。
“ Datadog 上一半的 AWS 客戶使用了 Lambda,80% 的 AWS 容器客戶使用了 Lambda。”
是的,這個(gè)數(shù)據(jù)來自 Datadog 去年的一份調(diào)研報(bào)告,客觀反映了 Serverless 在海外市場(chǎng)的落地進(jìn)程。一年之后,Datadog 發(fā)布了第二份 Serverless 調(diào)研報(bào)告,我們來一起看看 Serverless 在海外的最新進(jìn)展,這對(duì)于無(wú)論是已經(jīng)投入建設(shè) Serverless,還是仍處于觀望狀態(tài)的決策者和使用者而言,也許都能獲得一些參考。
觀點(diǎn)
觀點(diǎn)一:Lambda 的調(diào)用頻率比兩年前高 3.5 倍,運(yùn)行時(shí)長(zhǎng)達(dá) 900 小時(shí) / 天
Serverless 的使用深度如何來定義?
自 2019 年以來,一直在使用 Lambda 的企業(yè)已大大提高了其使用率。平均而言,到 2021 年初,這些公司每天調(diào)用函數(shù)的次數(shù)是兩年前的 3.5 倍。此外,在同一組 Lambda 用戶中,每家企業(yè)的功能平均每天平均運(yùn)行達(dá) 900 個(gè)小時(shí)。
普通云服務(wù)器,是按服務(wù)器的租用配置和租用時(shí)長(zhǎng)進(jìn)行收費(fèi)的,其中,租用配置是依據(jù) vCPU 和內(nèi)存定價(jià)。
而函數(shù)計(jì)算則不同,按使用過程中的調(diào)用次數(shù)和函數(shù)運(yùn)行時(shí)長(zhǎng)收費(fèi)的。因此,調(diào)用次數(shù)和函數(shù)運(yùn)行時(shí)長(zhǎng)是衡量客戶使用 Serverless 深度的指標(biāo)。報(bào)告中未提供每天調(diào)用次數(shù)絕對(duì)值的信息,但我們可以依據(jù)每天運(yùn)行 900 小時(shí)運(yùn)行時(shí)長(zhǎng)的數(shù)據(jù),對(duì)客戶在 Serverless 的消費(fèi)做一個(gè)區(qū)間預(yù)估。
以阿里云函數(shù)計(jì)算的收費(fèi)標(biāo)準(zhǔn)來計(jì)算,使用預(yù)付費(fèi)模式:
每 1 GB 計(jì)算力的實(shí)例運(yùn)行 1 秒所需的費(fèi)用是 0.00003167 元,以內(nèi)存規(guī)格 1GB,每天運(yùn)行 900 小時(shí)來計(jì)算,預(yù)計(jì)將消費(fèi) 102.6 元,年度消費(fèi)是 3.7 萬(wàn),再搭上存儲(chǔ)、網(wǎng)絡(luò)、安全、數(shù)據(jù)庫(kù)等其他云產(chǎn)品的消費(fèi),已經(jīng)是一個(gè)中型企業(yè)的云上支出了。此外,函數(shù)的調(diào)用次數(shù)所產(chǎn)生的費(fèi)用通常不會(huì)太多,尤其是 Python 這類和 AI 建模相關(guān)的函數(shù)應(yīng)用,阿里云函數(shù)計(jì)算每天調(diào)用 100 萬(wàn)次的費(fèi)用是 13.3 元。
觀點(diǎn)二:Lambda 執(zhí)行時(shí)長(zhǎng)的中位數(shù)是 60 毫秒,僅為一年前的一半
事件驅(qū)動(dòng)架構(gòu)下,執(zhí)行時(shí)長(zhǎng)是一個(gè)關(guān)鍵生產(chǎn)因素
函數(shù)的執(zhí)行時(shí)長(zhǎng)是 FaaS 領(lǐng)域的新概念,因?yàn)?FaaS 是事件驅(qū)動(dòng)架構(gòu),實(shí)際觸發(fā)時(shí),才會(huì)調(diào)用計(jì)算資源執(zhí)行函數(shù)應(yīng)用并進(jìn)行計(jì)費(fèi),函數(shù)應(yīng)用執(zhí)行時(shí)間越長(zhǎng),費(fèi)用就會(huì)越高。不同于函數(shù)計(jì)算,普通云服務(wù)器則是按租用服務(wù)器來計(jì)費(fèi),雖然普通云服務(wù)器也提供自動(dòng)彈性伸縮的功能,但由于本身不是事件驅(qū)動(dòng)架構(gòu),導(dǎo)致伸縮規(guī)則上是受限的,而且,普通云服務(wù)器是按秒計(jì)費(fèi),而業(yè)內(nèi)的 FaaS 產(chǎn)品,例如 Lambda、阿里云函數(shù)計(jì)算都已經(jīng)支持按毫秒計(jì)費(fèi),計(jì)費(fèi)顆粒度越細(xì),計(jì)算成本的優(yōu)化空間就越大。
從數(shù)據(jù)結(jié)構(gòu)上我們可以看到,越來越多的 AWS 客戶正在遵循官方提供的成本優(yōu)化最佳實(shí)踐,來縮短函數(shù)的執(zhí)行時(shí)長(zhǎng),從而進(jìn)一步優(yōu)化計(jì)算成本,最大程度發(fā)揮 Serverless 的成本優(yōu)勢(shì)。
下圖中,函數(shù)執(zhí)行時(shí)長(zhǎng)曲線的尾巴很長(zhǎng),這表明 Lambda 不僅支持短期作業(yè),而且已經(jīng)在支持計(jì)算密集型的用例。雖然此份報(bào)告沒有展示哪些計(jì)算密集型的業(yè)務(wù)場(chǎng)景使用了 Lambda,但從國(guó)內(nèi)云廠商宣傳的案例看,主要是音視頻處理、AI 建模類的應(yīng)用。
觀點(diǎn)三:除 AWS Lambda 外,Azure Function 和 Google Cloud Function 的增長(zhǎng)也很迅速
百家齊放是行業(yè)走向成熟的必經(jīng)階段
AWS Lambda 是最早的 FaaS 產(chǎn)品,Azure 和 Google 緊隨其后,推出了 FaaS 產(chǎn)品,他們的增速可能得益于整個(gè)行業(yè)的成熟度,從一年前只有 20% 的 Azure 客戶使用 Azure Function,一年后,這一數(shù)據(jù)已經(jīng)增長(zhǎng)到了 36%,而 Google 已經(jīng)有 25% 的云上客戶在使用 Cloud Function 了。
該部分,報(bào)告中引用了 Vercel 這個(gè)案例:
Vercel 是一個(gè)很實(shí)用的網(wǎng)站管理和托管工具,可以快速部署網(wǎng)站、App,甚至不需要購(gòu)買服務(wù)器、域名、安裝與配置 Nginx、上傳網(wǎng)站文件、添加 DNS 解析項(xiàng)、配置網(wǎng)頁(yè)證書,最重要的是個(gè)人使用是永久免費(fèi)。
Vercel 托管的都是一些耦合度不高的應(yīng)用。很顯然, Vercel 的這一商業(yè)模式充分利用了 Serverless 技術(shù)的成本優(yōu)勢(shì),來盡可能降低免費(fèi)個(gè)人用戶帶來的服務(wù)器成本,通過函數(shù)應(yīng)用來處理來自服務(wù)端渲染、API 路由等的請(qǐng)求。在過去的一年里,Vercel 每月的服務(wù)器調(diào)用次數(shù)從 2.62 億次增加到每月 74 億次,增長(zhǎng)了 28 倍。
觀點(diǎn)四:AWS Step Functions 是 Lambda 的最佳伴侶,平均每個(gè)工作流包含 4 個(gè)函數(shù),并逐月上升
函數(shù)應(yīng)用的編排功能正在拓展函數(shù)應(yīng)用的邊界
一個(gè)完整的業(yè)務(wù)邏輯通常不是一個(gè)函數(shù)應(yīng)用就能完成的,需要用到多個(gè)函數(shù)應(yīng)用,甚至還涉及到彈性計(jì)算、批量計(jì)算等計(jì)算單元。這時(shí)候,通過工作流的編排能力,對(duì)各個(gè)計(jì)算任務(wù)進(jìn)行順序、分支、并行等方式的分布式編排,可以簡(jiǎn)化繁瑣的業(yè)務(wù)拼接帶來的代碼工作,還能可視化監(jiān)控整個(gè)業(yè)務(wù)流程中各個(gè)執(zhí)行環(huán)節(jié)的狀態(tài),一舉兩得。AWS Step Functions 就提供了這樣的功能。
報(bào)告顯示,平均每個(gè) Step Functions 工作流包含 4 個(gè) Lambda 函數(shù),并且呈現(xiàn)逐月增長(zhǎng)的趨勢(shì)。說明越來越的客戶正使用工作流來處理越來越復(fù)雜的業(yè)務(wù)邏輯。其中,執(zhí)行時(shí)間在 1 分鐘內(nèi)的工作流占比 40%,但也不乏一些執(zhí)行時(shí)長(zhǎng)多于 1 小時(shí)甚至超過 1 天的工作流,這些長(zhǎng)時(shí)間執(zhí)行的工作流以 AI 建模為主。
該部分,報(bào)告中引用了 Stedi 這一案例,這家企業(yè)是在 B2B 交易的交易領(lǐng)域提供結(jié)構(gòu)化消息發(fā)送的服務(wù),例如營(yíng)銷郵件的推送等服務(wù),這類業(yè)務(wù)場(chǎng)景具備事件觸發(fā)、短時(shí)間需要調(diào)用海量目標(biāo)郵箱郵箱的特點(diǎn),Serverless + 工作流就可以很好的滿足了客戶在成本和開發(fā)運(yùn)維效率上進(jìn)行優(yōu)化的訴求。
觀點(diǎn)五:四分之一的 AWS CluodFront 客戶使用 Lambda @Edge
邊緣正成為 Serverless 的新市場(chǎng)
Lambda @ Edge 是 Amazon CloudFront 的一個(gè)功能,它可讓客戶在靠近應(yīng)用程序用戶的地方運(yùn)行代碼,從而提高性能,降低延遲。使用 Lambda @ Edge,客戶無(wú)需在全球多個(gè)地方預(yù)置或管理基礎(chǔ)設(shè)施,只需按使用的計(jì)算時(shí)間付費(fèi),代碼未運(yùn)行時(shí)不產(chǎn)生費(fèi)用。
相當(dāng)于在邊緣的場(chǎng)景下,網(wǎng)絡(luò)將 Serverless 的計(jì)算能力一起提供給客戶,而無(wú)須從云端調(diào)用算力,提高了那些對(duì)延遲敏感的邊緣業(yè)務(wù)的客戶體驗(yàn),例如物聯(lián)網(wǎng)場(chǎng)景下視頻監(jiān)控和智能分析、業(yè)務(wù)監(jiān)測(cè)和分析等任務(wù)。
報(bào)告顯示,四分之一的 Amazon CloudFront 客戶使用了 Lambda@Edge,其中 67% 的客戶的函數(shù)執(zhí)行時(shí)長(zhǎng)不到 20 毫秒,說明這部分應(yīng)用對(duì)延遲非常敏感,這類的邊緣業(yè)務(wù)需求越多,Serverless 在邊緣端的潛力就越大。
觀點(diǎn)六:超過一半的客戶函數(shù)預(yù)留實(shí)例的資源使用率不到 80%
冷啟動(dòng)是事件驅(qū)動(dòng)架構(gòu)下一個(gè)無(wú)法回避的命題
尤其是在 Java/.Net 的編程框架下,應(yīng)用的啟動(dòng)會(huì)更慢,因?yàn)?Java 需要初始化其虛擬機(jī) (JVM) ,并將大量類加載到內(nèi)存中,然后才能執(zhí)行用戶代碼。業(yè)內(nèi)提供了很多優(yōu)化冷啟動(dòng)的思路,例如提供函數(shù)預(yù)留實(shí)例,或者通過按需加載和更高效的存儲(chǔ)和算法來提升容器鏡像的拉取速度,從而優(yōu)化冷啟動(dòng)速度。
本質(zhì)上講,函數(shù)預(yù)留實(shí)例是避免冷啟動(dòng)的一個(gè)見效很快的方式,但他并沒有從根本上解決冷啟動(dòng)的問題,資源預(yù)留的越多,浪費(fèi)的就越多,這和 Serverless 主張的按需使用是背道而馳的。因此,今年的報(bào)告非常關(guān)注客戶在函數(shù)預(yù)留實(shí)例的使用率情況。
報(bào)告顯示,57% 使用函數(shù)預(yù)留實(shí)例的客戶用了不到預(yù)留實(shí)例中 80% 的資源,其中,超過 30% 的客戶僅用了不到 40% 的資源;使用率達(dá) 80%-100% 的客戶超過 40%,那么這部分客戶應(yīng)當(dāng)仍然會(huì)遇到冷啟動(dòng)的問題。因此,不斷優(yōu)化業(yè)務(wù)的預(yù)留實(shí)例設(shè)計(jì)仍是廠商和客戶需要共同面對(duì)的命題,相關(guān)的最佳實(shí)踐會(huì)有較高的指導(dǎo)意義。感興趣的朋友可以看看阿里云函數(shù)計(jì)算的這份最佳實(shí)踐。
觀點(diǎn)七:開源無(wú)服務(wù)器框架是部署函數(shù)應(yīng)用的主要方式
應(yīng)用拆的越細(xì),部署難度越大
Serverless 架構(gòu)下,手動(dòng)部署幾個(gè)函數(shù)應(yīng)用可能不太復(fù)雜,一旦當(dāng)應(yīng)用擴(kuò)展到幾十、幾百個(gè)的時(shí)候,應(yīng)用的部署難度就會(huì)被成倍放大,此時(shí)通過一些部署工具來部署,可以提高部署效率。正如 Kubernetes 是用來自動(dòng)部署、擴(kuò)展和管理容器化應(yīng)用程序的,在管理容器的過程,Kubernetes 已經(jīng)是必不可少的工具。
報(bào)告顯示,80% 以上的客戶使用 Serverless Framework 來部署和管理函數(shù)應(yīng)用,雖然報(bào)告未給出原因,但大體離不開 Serverless Framework 的易用性、開放性和社區(qū)屬性,報(bào)告預(yù)計(jì)基礎(chǔ)設(shè)施即代碼類的部署工具在大規(guī)模部署無(wú)服務(wù)器應(yīng)用程序方面將扮演更重要的角色,AWS 自研的三個(gè)部署工具,vanilla CloudFormation、AWS CDK 和 AWS SAM 的使用率分別是 19%、18% 和 13%。(存在同一個(gè)客戶同時(shí)使用兩個(gè)或多個(gè)工具,因此使用率疊加后高于 100%)
回到國(guó)內(nèi),阿里云、百度云、華為云、騰訊云均提供了自家閉源的部署工具,騰訊云和 Serverless Framework 合作,開發(fā)了 Serverless 應(yīng)用中心,阿里云則是在去年開源了 Serverless Devs,提供函數(shù)應(yīng)用的部署、運(yùn)維和監(jiān)控,此外,國(guó)內(nèi)另一款提供 Node.js 開發(fā)態(tài)框架的開源項(xiàng)目 Midway,已經(jīng)獲得 4k+ 的 star,相信隨著參與 Serverless 的開發(fā)者的增加,國(guó)內(nèi)開源工具生態(tài)會(huì)越發(fā)活躍。
觀點(diǎn)八:Python 是最流行的 Lambda 運(yùn)行時(shí),尤其是在大型環(huán)境中
Serverless 天然支持多語(yǔ)言的開發(fā)框架。那么問題也來了,哪類編程語(yǔ)言最為流行呢?
報(bào)告顯示,58% 的用戶使用 Python、Node.js 則占據(jù)了 31% 的份額,Java、Go、.NET Core 和 Ruby 的份額均未超過 10%。但考慮到不同廠商各自的特點(diǎn),阿里云上的 Java 份額可能會(huì)更高些,Azure 上 .NET 的客戶會(huì)更多些。
有趣的是,在小型的 Lambda 運(yùn)行環(huán)境中,Node.js 的份額高于 Python,隨著函數(shù)規(guī)模的增長(zhǎng),Python 就越來越流行,而在企業(yè)級(jí)組織中,Python 的使用頻率是 Node.js 的 4 倍,如下圖:
雷卷在阿里云內(nèi)網(wǎng)分享了報(bào)告中編程語(yǔ)言部分的分析:大型企業(yè)在大數(shù)據(jù)、AI 等方面,使用 Python 比較多,而且他們使用的 Lambda 量也比較大,所以在 Lambda 的數(shù)量上 Python 有絕對(duì)的優(yōu)勢(shì);Node.js 應(yīng)用用不了那么大的運(yùn)行期 (多核 CPU 和大內(nèi)存),通常都是小型實(shí)例,另外可能是個(gè)人的 Node.js 開發(fā)者,通常也會(huì)選擇小型的 Lambda 環(huán)境。
此外,各類編程語(yǔ)言的版本的使用分布如下,依次遞減,Python 3.x、Node.js 12、Node.js 10、Python 2.7、Java 8、Go 1.x、.NET Core 2.1、.NET Core 3.1。
總結(jié)
整體上,相比去年,國(guó)外 Serverless 的使用群體在迅速擴(kuò)大,函數(shù)執(zhí)行時(shí)長(zhǎng)不斷增加,使用方式也越加成熟,開發(fā)者工具也更佳開放。在國(guó)內(nèi),Serverless 已經(jīng)不在局限一些離線任務(wù)或低耦合性應(yīng)用,已經(jīng)有不少企業(yè)客戶將 Serverless 應(yīng)用于生產(chǎn)環(huán)節(jié)的核心鏈路上,例如世紀(jì)聯(lián)華將交易系統(tǒng)、會(huì)員系統(tǒng)、庫(kù)存系統(tǒng)、后臺(tái)系統(tǒng)和促銷模塊等核心應(yīng)用均部署在函數(shù)計(jì)算上,來減輕客戶在基礎(chǔ)設(shè)施上的投入;閑魚已經(jīng)開始實(shí)踐對(duì)傳統(tǒng)巨型應(yīng)用的 Serverless 化改造,去攻克在 Functions 之間代碼復(fù)用、對(duì)函數(shù)的依賴做統(tǒng)一升級(jí)等業(yè)內(nèi)難題。應(yīng)用的改造需要時(shí)間和窗口期,相信會(huì)有越來越的企業(yè)客戶選擇 Serverless 來解放雙手。