北京網(wǎng)站設(shè)計方案優(yōu)化品牌seo關(guān)鍵詞
作者:拂衣、叢霄
2019 年 Berkeley 預(yù)測 Serverless 將取代 Serverful 計算成為云計算新范式。Serverless 為應(yīng)用開發(fā)提供了一種全新系統(tǒng)架構(gòu)。借助 2023 年由 OpenAI 所帶來的 AIGC 風(fēng)潮,以阿里云函數(shù)計算 FC、AWS Lambda 為代表的 Serverless 以其更高成本效益、更簡化的后端代碼 & 擴(kuò)展性及更極致的彈性等眾多特性,將開發(fā)者從繁重的手動資源管理與性能成本優(yōu)化中解放,再次激發(fā)開發(fā)者蓬勃的想象力與創(chuàng)造力。國內(nèi)越來越多開發(fā)者及企業(yè)開始嘗試如何將 Serverless 應(yīng)用于實際業(yè)務(wù)或者場景。
但在優(yōu)雅使用 Serverless 之前,依舊有不少小問題需要提前解決。由于 Serverless 平臺的擴(kuò)縮容是基于請求處理/事件驅(qū)動的并發(fā)度進(jìn)行擴(kuò)縮容的,對于習(xí)慣基于 CPU 指標(biāo)進(jìn)行 Pod 水平擴(kuò)縮的的開發(fā)者而言,就會遇到以下難題,比如并發(fā)度、最小實例數(shù)、最大實例數(shù)這幾個參數(shù)之間的關(guān)系是什么樣的?又比如單個實例最大并發(fā)度怎么設(shè)置,才能夠符合自己的業(yè)務(wù)需求?
01 Serverless 參數(shù)配置的考量維度
Serverless 能提供一定通用能力,但針對不同業(yè)務(wù)邏輯需要采取合適的配置才能更好的發(fā)揮 Serverless 價值。但如何評估函數(shù)的最佳配置涉及到多變量協(xié)同優(yōu)化的問題,雖然函數(shù)計算 FC 提供了基于應(yīng)用“每日請求總數(shù)”和“平均請求響應(yīng)時間”的請求預(yù)估、基于應(yīng)用目前使用的服務(wù)器“規(guī)格”和“利用率”的現(xiàn)有服務(wù)器用量預(yù)估等方式輔助進(jìn)行參數(shù)配置。但想要更好進(jìn)行配置,我們建議從以下三個維度去評估配置 Serverless 服務(wù)參數(shù)。
(1)在成本與性能之間進(jìn)行取舍
如何根據(jù)業(yè)務(wù)偏好選擇性能優(yōu)先或成本優(yōu)先是參數(shù)配置需要考慮的第一大難點。在單實例多并發(fā)數(shù)相對固定的情況下,可以提高單實例并行處理請求數(shù)量,減少實例數(shù),從而降低成本。當(dāng)并發(fā)數(shù)過高時會增加資源競爭,導(dǎo)致性能延遲增加,從而增加成本;如果對于延時敏感度相對較低,可以選取較低實例規(guī)格,單價成本更低,與之相反,想要更短延時,可以選擇較高的實例規(guī)格,但單價成更高。
(2)結(jié)合不同函數(shù)業(yè)務(wù)邏輯的復(fù)雜度
除了成本和性能取舍,針對不同類型函數(shù)邏輯,不同配置參數(shù)效果也有著巨大差異。很多函數(shù)業(yè)務(wù)邏輯復(fù)雜,只針對單一邏輯分支進(jìn)行特定配置并不代表整體性能最優(yōu);不恰當(dāng)?shù)呐渲每赡墚a(chǎn)生大量預(yù)期之外的運維成本。對此,我們針對 CPU 密集型、 IO 密集型不同類型函數(shù)進(jìn)行測試,以便更好的挖掘不同規(guī)格與不同類型函數(shù)TPS之間的關(guān)系。
- 在不同規(guī)格下,對 CPU 密集型函數(shù)進(jìn)行壓測
可以看到 CPU 密集型規(guī)格越高, maxTPS 越大,規(guī)格與 maxTPS 呈現(xiàn)明顯線性關(guān)系。規(guī)格越大,maxRT 越低 ,說明 CPU 密集型的函數(shù),增大資源規(guī)格可以顯著降低 RT。但規(guī)格增大到 4G、8G 后,對 RT 的降低效果邊際效應(yīng)遞減。
- 在不同規(guī)格下,對 IO 密集型函數(shù)進(jìn)行壓測
可以看到規(guī)格提升對 IO 密集型的性能改善非常有限,規(guī)格與 maxRT、maxTPS 關(guān)聯(lián)度有限。特別擴(kuò)展到高規(guī)格后,對于 maxTPS 的提升較小。
借助上面壓測,我們可以看到這樣子的結(jié)論:對于 CPU 密集型函數(shù),規(guī)格增加對單實例性能的提升能夠提供較大的改善。但對于 IO 密集型函數(shù),規(guī)格增加對單實例性能的提升存在邊際遞減效應(yīng)。當(dāng)超過一定規(guī)格后,規(guī)格提升對性能提升幾乎沒有提升。
(3)兼顧函數(shù)配置對計算資源配置的影響
由于函數(shù)并發(fā)度、最小實例數(shù)、最大實例數(shù)等配置會影響到 Serverless 平臺的資源分配,保證單函數(shù)資源剛性交付、多函數(shù)的資源隔離同時,合理利用平臺彈性調(diào)度能力并提高資源利用率是最后要考慮的問題。
以同時處理 x 個并發(fā)請求場景舉例,當(dāng)實例并發(fā)度設(shè)置為 1 時,每個實例同時只能處理 1 個請求,函數(shù)計算需要創(chuàng)建 x 個實例來處理這 x 個請求。當(dāng)實例并發(fā)度設(shè)置為 X10 時,每個實例同時可以處理 X10 個請求,函數(shù)計算只需要創(chuàng)建 1 個實例就能處理這 x 個請求。
單實例多并發(fā)適用于函數(shù)中有較多時間在等待下游服務(wù)響應(yīng)的場景。等待響應(yīng)一般不消耗資源,在一個實例內(nèi)并發(fā)處理可以節(jié)省費用。但較低單實例并發(fā)度在函數(shù)流量波動變化時會提前達(dá)到單實例并發(fā)上限,導(dǎo)致實例擴(kuò)縮容、冷啟動更頻繁。與此同時,需要創(chuàng)建和維護(hù)更多實例個數(shù),造成整體資源利用率偏低。
02 評估參數(shù)配置的合理性
結(jié)合以上三個維度,我們可以看到評估 Serverless 的參數(shù)配置絕非易事。很多用戶在開始嘗試使用 Serverless 時僅是通過文檔指引進(jìn)行相關(guān)參數(shù)配置。在函數(shù)正式上線后,很快就會發(fā)現(xiàn)之前配置不合理,所造成的成本超預(yù)期以及性能不及預(yù)期等問題,并嘗試反復(fù)修改函數(shù)配置進(jìn)行驗證。資深開發(fā)者會選擇進(jìn)行壓測,以便測試出最佳的函數(shù)配置。但壓測腳本配置、壓測數(shù)據(jù)報告解讀需要有一定的實踐經(jīng)驗,開發(fā)者也無法十分篤定壓測所得出的配置結(jié)論是否是符合業(yè)務(wù)預(yù)期的最優(yōu)選擇。在統(tǒng)計了海量用戶實際配置使用情況后,我們發(fā)現(xiàn)表示用戶實際資源使用量較低,實際配置規(guī)格偏大,造成一定的浪費。
為了更好的驗證配置參數(shù)的合理性,函數(shù)計算 FC 提供基于性能測試 PTS 能力的函數(shù)性能探測功能來評估函數(shù)單個實例在不同規(guī)格下的性能上限,借以推薦滿足用戶預(yù)期延遲的最佳并發(fā)度與函數(shù)規(guī)格配置,探測方法基于 little’s law [ 1] 排隊理論(并發(fā)數(shù) = 請求的平均延遲 * TPS ),如圖示:
(橫坐標(biāo)是并發(fā)數(shù),左邊的縱坐標(biāo)是 TPS,右邊的縱坐標(biāo)是延遲)
由于每個服務(wù)器的處理能力都有限,所以會出現(xiàn)隨著并發(fā)數(shù)上升,吞吐量先上升后平緩,可能出現(xiàn)下降,即性能惡化;當(dāng)并發(fā)度過高時,延遲會變高,甚至?xí)眲夯?。通過性能探測,我們會得到每種規(guī)格的關(guān)鍵性能數(shù)據(jù),即每個規(guī)格最高能承受的 QPS,在知曉自身對業(yè)務(wù)流量規(guī)模前提下,即可得出最恰當(dāng)?shù)暮瘮?shù)所需的最小實例數(shù)和最大實例數(shù)以最佳規(guī)格和規(guī)格下的最佳并發(fā)度。我們可以只壓測單實例,因為在性能表現(xiàn)平穩(wěn)的系統(tǒng),多實例的性能是單實例性能的線性疊加,所以只需要壓測出單實例的性能,就可以推算出多實例的性能。
比如,用戶預(yù)期函數(shù)調(diào)用端到端延遲為 1000 ms,根據(jù) 1000 毫秒的延遲限制選型出最佳的規(guī)格及該規(guī)格下最佳并發(fā)度,即滿足延遲限制的最高 QPS 的對應(yīng)并發(fā)度。
由于目前性能探測僅支持對 HTTP 函數(shù)進(jìn)行壓測,不支持對事件函數(shù)進(jìn)行壓測。僅支持單實例壓測,不支持多實例壓測。因此,我們提供性能探測(單實例)、性能測試 PTS(多實例)兩種方式進(jìn)行驗證。
- 關(guān)于性能探測
作為函數(shù)計算 FC 的功能之一,為了進(jìn)一步降低行能探測的使用門檻,功能采取流程化指引,同時性能探測功能完全免費, 用戶只需要為函數(shù)承接的請求流量付費,不需要為壓測功能付費。
- 關(guān)于性能測試 PTS
作為阿里巴巴集團(tuán)淘寶雙十一的性能測試工具,性能測試 PTS 支持按需發(fā)起壓測任務(wù),可提供百萬并發(fā)、千萬 TPS 流量發(fā)起能力,100% 兼容 JMeter。提供的場景編排、API 調(diào)試、流量定制、流量錄制等功能,可快速創(chuàng)建業(yè)務(wù)壓測腳本,精準(zhǔn)模擬不同量級用戶訪問業(yè)務(wù)系統(tǒng),幫助業(yè)務(wù)快速提升系統(tǒng)性能和穩(wěn)定性。目前,提供新用戶 5000VUM 的免費試用額度。
03 針對單實例,如何通過性能探測驗證單實例配置參數(shù)
接下來,我們簡單介紹性能探測的配置流程,僅需三步即可快速發(fā)起性能探測。
-
登錄函數(shù)計算控制臺 [ 2] ,在左側(cè)導(dǎo)航欄選擇服務(wù)及函數(shù),并在服務(wù)列表頁面選擇目標(biāo)服務(wù)。
-
在函數(shù)管理頁面,選擇目標(biāo)函數(shù)并在性能探測頁簽新建壓測任務(wù)。
-
在單實例性能壓測評估頁簽,輸入必要的壓測 API 信息(見下表),單擊執(zhí)行壓測。
(在執(zhí)行壓測前,請先點擊 API 測試,驗證 API 的 HTTP 請求參數(shù)是否配置正確,函數(shù)是否能成功執(zhí)行。)
- 查看壓測結(jié)果分析報告:在單實例壓測結(jié)果分析頁簽,查看壓測結(jié)果。壓測過程中,界面會提示壓測預(yù)估時間。壓測的規(guī)格越多,壓測時間越長,壓測費用也越高。壓測結(jié)果中包含推薦的實例規(guī)格和最佳并發(fā)請求數(shù)。您還可以從壓測結(jié)果下方的兩張分析圖中,查看分析過程。
說明: 函數(shù)計算的壓測功能僅支持單實例壓測。如您需要配置多實例壓測,請單擊單實例壓測結(jié)果分析頁簽右側(cè)的多實例彈性能力壓測,跳轉(zhuǎn)至 PTS 控制臺 [3 ] 配置。
- 查看單實例壓測數(shù)據(jù)詳情:單擊查看單實例壓測詳情跳轉(zhuǎn)至單實例壓測數(shù)據(jù)詳情頁簽,查看每個規(guī)格的壓測詳情。每個規(guī)格的壓測詳情中,您可以看到隨著并發(fā)度增加,延遲和最大 QPS 的變化情況。
但需要特別說明的是,性能探測推薦的函數(shù)配置優(yōu)先保證滿足性能需求,實現(xiàn)最高的資源利用率,但真正實現(xiàn)最低成本配置,需要結(jié)合函數(shù)線上歷史流量數(shù)據(jù)分析,進(jìn)行推薦。在進(jìn)行成本優(yōu)化推薦規(guī)格時,不僅需要達(dá)到節(jié)約成本的目的,還需要保證不破壞現(xiàn)有服務(wù)的 QoS,即性能不會因為實例規(guī)格的降低,而導(dǎo)致延遲增大。
04 針對多實例,如何借助性能測試 PTS 進(jìn)行多實例配置參數(shù)
接下來,我們簡單介紹性能測試 PTS 的配置流程,僅需配置 API,即可快速發(fā)起壓測。
-
前往性能測試 PTS 控制臺。在左側(cè)導(dǎo)航欄中,選擇性能測試>創(chuàng)建場景。
-
在創(chuàng)建場景頁面,單擊 PTS 壓測。
- 在創(chuàng)建 PTS 場景頁面,設(shè)置場景名,例如函數(shù)計算 Serverless 應(yīng)用壓測,然后在場景配置頁簽,輸入壓測 API 名稱,例如 demo,單擊添加壓測節(jié)點右側(cè)的[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳圖標(biāo)。在壓測 URL 區(qū)域中輸入上一小節(jié)復(fù)制保存的 Serverless 應(yīng)用的訪問域名。配置完成后,您可以單擊調(diào)試 API,驗證 API 接口配置是否符合預(yù)期。當(dāng)調(diào)試的響應(yīng)狀態(tài)碼為 200 時,表示該 API 可以正常訪問。
- 在創(chuàng)建 PTS 場景頁面單擊施壓配置頁簽,配置相關(guān)壓測參數(shù),遞增模式選擇自動遞增,最大并發(fā)輸入 500,遞增百分比輸入 20,單量級持續(xù)時長輸入 1,壓測總時長輸入 5,串聯(lián)鏈路1的最大并發(fā)權(quán)重輸入 100,串聯(lián)鏈路1的起始百分比輸入 20。確認(rèn)參數(shù)后,單擊保存去壓測。在溫馨提示對話框中,確認(rèn)任務(wù)預(yù)估的預(yù)估消耗,未超過免費額度。確認(rèn)后單擊確定,啟動壓測。(以上參數(shù)僅為示例,請根據(jù)實際業(yè)務(wù)進(jìn)行調(diào)整)
- 大約等待 3 分鐘,即可在壓測中頁面查看當(dāng)前應(yīng)用實時的壓測數(shù)據(jù)。
- 在壓測中頁面,您可以看到成功率、RT 和 TPS 等概覽數(shù)據(jù)。
- 在壓測完成之后,會自動跳轉(zhuǎn)到編輯場景頁面,然后單擊壓測報告。在壓測報告頁簽,找到您的壓測報告,單擊右側(cè)操作列下的查看。
- 在壓測報告了解詳細(xì)的壓測報告內(nèi)容,查看本次壓測詳細(xì)的性能數(shù)據(jù)。關(guān)于壓測報告的更多詳情,請參見查看 PTS 壓測報告 [ 4] 。此時已實現(xiàn)通過性能測試 PTS 對 Serverless 應(yīng)用的壓測。
05 開發(fā)者場景體驗
目前,「通過性能測試 PTS 對 Serverless 應(yīng)用進(jìn)行性能壓測」場景已經(jīng)上線云啟實驗室。在提供相關(guān)的免費試用額度的同時,提供相關(guān)操作流程與模板,以便大家快速體驗通過 FC 創(chuàng)建應(yīng)用以及通過 PTS 進(jìn)行壓測。
傳送門:https://developer.aliyun.com/adc/scenario/186a9f71954b42419ebfa1f27fd8b042
相關(guān)鏈接:
[1] little’s law
https://en.wikipedia.org/wiki/Little%27s_law
[2] 函數(shù)計算控制臺
https://account.aliyun.com/login/login.htm?oauth_callback=https%3A%2F%2Ffcnext.console.aliyun.com%2F&lang=zh
[3] PTS 控制臺
https://account.aliyun.com/login/login.htm?oauth_callback=https%3A%2F%2Fpts.console.aliyun.com%2F&lang=zh#/pts/create
[4] 查看 PTS 壓測報告
https://help.aliyun.com/document_detail/65304.html
點擊此處立即體驗