Key Takeaways:
1. 盡管 Serverless 的迅猛發(fā)展吸引了廣泛深入的關(guān)注,Serverless 函數(shù)總成本的事先估計(jì)仍缺乏有效的理論指導(dǎo)。本文基于 FunctionGraph 在 Serverless 領(lǐng)域的 FinOps 探索和實(shí)踐,提出業(yè)界首個(gè) Serverless 函數(shù)總成本估計(jì)模型;
2. 根據(jù)對(duì)成本模型的關(guān)鍵因素分析,提出五大類函數(shù)運(yùn)行成本的優(yōu)化方法;同時(shí),為更好地幫助用戶實(shí)現(xiàn)降本增效,華為云首次提出透明、高效、一鍵式的 “用戶函數(shù)成本研究中心”。
Serverless 精確到毫秒級(jí)的按用付費(fèi)模式使得用戶不再需要為資源的空閑時(shí)間付費(fèi)。然而,對(duì)于給定的某個(gè)應(yīng)用函數(shù),由于影響其計(jì)費(fèi)成本的因素并不唯一,使得用戶對(duì)函數(shù)運(yùn)行期間的總計(jì)費(fèi)進(jìn)行精確的事先估計(jì)變成了一項(xiàng)困難的工作。
以傳統(tǒng)云資源的周期性租賃模式為例,通過周期數(shù)乘以周期單價(jià),用戶可以很容易地估計(jì)出租賃期間的總費(fèi)用,形成清晰的心理賬戶預(yù)期,即使在云平臺(tái)采用階梯 定價(jià) 或價(jià)格歧視策略的情形下,計(jì)算租賃總成本也不是一件難事。
但在 Serverless 場景中,事先估計(jì)函數(shù)總成本仍缺乏有效的理論指導(dǎo)。一方面,影響函數(shù)計(jì)費(fèi)的關(guān)鍵因素不唯一,如包括函數(shù)內(nèi)存規(guī)格、單實(shí)例并發(fā)度、函數(shù)執(zhí)行時(shí)長等;另一方面,函數(shù)調(diào)用流量的波動(dòng)通常具有隨機(jī)性和非平穩(wěn)性,使得基于流量的“按用計(jì)費(fèi)”具有較大的不確定性。
當(dāng)然,尋找函數(shù)計(jì)費(fèi)的理論指導(dǎo)主要是為用戶評(píng)估函數(shù)總成本提供一種有效依據(jù),但更加重要地,如何進(jìn)一步利用估計(jì)模型,幫助用戶優(yōu)化應(yīng)用函數(shù)及其配置選擇,進(jìn)而顯著降低用戶函數(shù)總成本,是 Serverless 領(lǐng)域中,F(xiàn)inOps 亟待回答的問題。
FinOps 聚焦云上資源管理和成本優(yōu)化,通過有機(jī)鏈接技術(shù)、業(yè)務(wù)、和財(cái)務(wù)專業(yè)人士,來優(yōu)化用戶、企業(yè)、組織的云資源成本,提高云上業(yè)務(wù)的投入 - 產(chǎn)出比[1]。本文結(jié)合華為云 FunctionGraph 在 Serverless 領(lǐng)域的 FinOps 探索和實(shí)踐,剖析 Serverless 場景下的函數(shù)計(jì)費(fèi)模式和關(guān)鍵影響因素,介紹一種對(duì)函數(shù)運(yùn)行期間總計(jì)費(fèi)進(jìn)行事先估計(jì)的模型框架 ; 更重要地,該模型為幫助用戶優(yōu)化函數(shù)運(yùn)行總成本、提升用戶云上 Serverless 資源管理效能,實(shí)現(xiàn)經(jīng)濟(jì)型 (Economical) Serverless 提供有效依據(jù)。
首先對(duì)表 1 所列的幾個(gè)概念做簡要說明。
表 1:Serverless 函數(shù)常見名詞
內(nèi)存規(guī)格 (Memory):內(nèi)存規(guī)格也即函數(shù)規(guī)格、函數(shù)實(shí)例規(guī)格,表示 Serverless 平臺(tái)為函數(shù)的單個(gè)實(shí)例所分配的資源大小,一般表示為函數(shù)可使用的內(nèi)存大小,由用戶指定;實(shí)例可使用的 CPU 份額與內(nèi)存大小成正比。Serverless 云平臺(tái)通常提供多種規(guī)格供用戶選擇,以 FunctionGraph 為例,用戶可選 15 種函數(shù)規(guī)格,如圖 1 所示。
圖 1:FunctionGraph 提供多種函數(shù)內(nèi)存規(guī)格
函數(shù)執(zhí)行時(shí)延 (Function Execution Time): 這里指完成一次調(diào)用請(qǐng)求響應(yīng)的過程中,函數(shù)本身執(zhí)行所消耗的時(shí)間,主要由函數(shù)代碼邏輯決定。一般地,對(duì)于 CPU 密集型的函數(shù),增大函數(shù)資源規(guī)格(內(nèi)存 -CPU Share),可以顯著降低函數(shù)執(zhí)行時(shí)延。但對(duì)于消耗大部分時(shí)間在網(wǎng)絡(luò) IO 等操作上的函數(shù),增大資源規(guī)格對(duì)執(zhí)行時(shí)延的改善則非常有限。
單實(shí)例最大并發(fā)度 (Maximum Requests per Instance):函數(shù)的單個(gè)實(shí)例可以同時(shí)處理的最大請(qǐng)求數(shù),主要適用于函數(shù)執(zhí)行過程中有顯著時(shí)間在等待下游服務(wù)返回的場景,如訪問 數(shù)據(jù)庫 操作或磁盤 IO 等。對(duì)于相同的流量負(fù)載,提高函數(shù)的單實(shí)例并發(fā)度可以降低按量實(shí)例個(gè)數(shù),為用戶節(jié)省計(jì)費(fèi),同時(shí),也可以降低函數(shù)調(diào)用請(qǐng)求的冷啟動(dòng)比例。
單函數(shù)最大實(shí)例數(shù) (Maximum Instances per Function):指同一函數(shù)同一時(shí)刻下同時(shí)運(yùn)行的實(shí)例數(shù)上限。對(duì)用戶來說,最大實(shí)例數(shù)可以防止異常流量洪峰下或函數(shù)發(fā)生故障時(shí)由于云平臺(tái)的過度擴(kuò)容而導(dǎo)致的費(fèi)用失控;對(duì)云平臺(tái)來說,最大實(shí)例數(shù)可以防止異常情況下平臺(tái)資源被部分函數(shù)耗光,從而保障不同函數(shù)間的性能隔離。
單實(shí)例視角下的函數(shù)計(jì)費(fèi)估計(jì)模型,可參考[2]。在真實(shí)生產(chǎn)環(huán)境中,除異步函數(shù)外,Serverless 云平臺(tái)通常采用 FCFS(First Come First Serve)的方式響應(yīng)調(diào)用請(qǐng)求,對(duì)于函數(shù)流量的潮汐波動(dòng),平臺(tái)通過自動(dòng)擴(kuò)縮容實(shí)例進(jìn)行自適應(yīng),系統(tǒng)中運(yùn)行的并發(fā)實(shí)例數(shù)隨時(shí)間的變化,可以由一個(gè)分段常線性函數(shù)完全刻畫,如圖 2 所示。
圖 2:函數(shù)并發(fā)實(shí)例數(shù)隨擴(kuò)縮容過程的變化
盡管不同 Serverless 云廠商之間的計(jì)費(fèi)方法存在差異,函數(shù)計(jì)費(fèi)一般主要包括兩部分:對(duì)函數(shù)所使用資源的計(jì)費(fèi)以及對(duì)請(qǐng)求次數(shù)的計(jì)費(fèi),表示如下:
本文主要討論了 Serverless 計(jì)算場景下的 FinOps 問題,給出了業(yè)界首個(gè)用戶函數(shù)總成本估計(jì)模型,并根據(jù)該模型,為用戶優(yōu)化應(yīng)用函數(shù)、提升 Serverless 資源管理效能、降低總成本提供理論參考和實(shí)踐依據(jù)。
一項(xiàng)新興技術(shù)領(lǐng)域的興起,首先需要回答的問題是“Why & Value”, FunctionGraph 作為華為元戎加持的下一代 Serverless 函數(shù)計(jì)算與編排服務(wù),結(jié)合 FinOps 等技術(shù)理念,持續(xù)為用戶提供經(jīng)濟(jì)型 Serverless 服務(wù)。后續(xù)我們將分享更多圍繞通用全場景 Serverless 的前沿理論及其案例實(shí)踐,回饋社區(qū),包括 FunctionGraph 在微服務(wù) Serverless 化上的實(shí)踐經(jīng)驗(yàn)等。
作者介紹:
歷川:華為云 Serverless 研發(fā)專家
平山:華為云中間件 Serverless 負(fù)責(zé)人
馮嘉:華為云中間件首席專家