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