Serverless:基於個性化服務畫像的彈性伸縮實踐

作者 | zzbtie

導讀 

introduction

雲原生環境下業務大規模迭代的成本壓力日益增大。我們以 Serverless 理念爲指導,針對百度 Feed 的後端服務,從彈性、流量、容量角度構建多維度個性化服務畫像,並基於畫像對服務進行彈性伸縮,隨流量波動自適應調整服務容量,有效地降低業務運行成本,本文重點介紹上述相關策略與實踐方案。

01

背景

隨着雲原生在百度內部各產品線的推進,微服務已成爲各業務線的標配,在搜索、推薦、廣告這類重策略計算業務場景中,後端通常由很多微服務組成,這些微服務普遍存在如下特點:

百度 App 推薦服務(簡稱百度 Feed)作爲典型的推薦業務場景,後端包含衆多策略複雜、重計算的微服務,這些後端服務普遍使用固定的容量爲數億級用戶提供 7*24h 的信息流推薦服務。對於百度 Feed 的後端服務而言,用戶流量存在着典型的波峯浪谷現象,而在流量低谷期和高峯期使用相同的容量無疑存在資源浪費,本文介紹百度 Feed 在後端服務進行 Serverless 的實踐,詳細說明基於服務畫像的彈性伸縮相關技術方案與實現。

02

思路與目標

業界對 Serverless 的大規模實踐在 FaaS 側比較多,通常實例較輕量,容器的生命週期也比較短。而我們面對的是比較 “重” 的後端服務,這類服務的實例擴容通常包括以下幾個階段:

後端服務實例擴容的時間通常在分鐘級,而詞典文件的下載與解壓一般佔整體擴容時間 70% 以上,對於詞典較大的實例則耗時更多,這導致後端服務面對流量變化時無法在極短的時間內(例如秒級)進行伸縮來保障容量穩定。然而這些後端服務的流量通常是週期性地波動,具有明顯的潮汐特徵,如果我們能對服務的流量進行較爲準確的預測,那麼面對流量的上漲我們可以適當地提前擴容來保障容量,面對流量下降可以進行一定的縮容來節省資源成本,實現資源按需使用。

整體而言,我們以雲原生組件爲基礎,爲每個服務刻畫出多維度的個性化服務畫像,包括彈性維度、容量維度、流量維度,在保障服務穩定性的前提下實現服務容量隨流量波動的自適應調整。實現效果如下圖所示,左圖中常態方式下一個服務消耗的資源量是固定的不隨着流量波動而變化(資源量需滿足峯值流量所需的容量),右圖中 Serverless 模式下服務消耗的資源量隨流量波動而動態調整。

03

整體架構

整體的彈性伸縮架構如下圖:

接下來分別介紹核心的策略和實踐,包括服務畫像、彈性策略、穩定性保障。

04

服務畫像

百度 Feed 後端包含衆多服務,各服務的詞典文件大小不同,有些服務的 cpu 計算比較多,有些則 io 比較多,各服務在可伸縮性、流量波動情況和負載能力都存在差異。因此我們圍繞服務的線上運行數據,從彈性維度、流量維度和負載維度構建個性化的彈性畫像、流量畫像和容量畫像,多維度刻畫出每個服務的個性化特點。

4.1 彈性畫像

目標:從可伸縮角度刻畫服務的伸縮能力。根據雲原生指標、服務實例規格、實例部署遷移時間、資源依賴等維度刻畫服務的彈性能力,將業務內各服務劃分爲如下三類:

高彈性能力:完全無狀態服務,可隨意無損伸縮,伸縮速度較快。

中彈性能力:有一定伸縮能力,但需要較長時間恢復服務狀態,伸縮速度一般。

低彈性能力:幾乎無伸縮能力,需要較大的代價恢復服務狀態,伸縮速度較差。

彈性畫像構建**:**

對各服務從 PaaS 拿到多條最近實例擴容記錄獲取實例擴容時間,取中位數作爲該服務的實例部署時間,結合該服務的實例 quota(cpu、memory、磁盤),是否有狀態,是否存在外部依賴,通過簡單的規則將所有服務劃分爲高、中、低彈性能力;同時我們推動服務進行標準化容器改造和存算分離來提升服務彈性。

彈性能力提升**:**

4.2 流量畫像

目標:

刻畫服務的流量變化趨勢,預測未來某個時間的流量進而方便根據流量配置對應的容量。

流量畫像構建:

4.3 容量畫像

目標:

刻畫服務的容量需求,一般用該服務的峯值 cpu 利用率來代替。例如一個服務在穩定時峯值 cpu 利用率達 60% 表示至少爲該服務留有 40% 的 cpu buffer 來保障其穩定性。

容量畫像構建:

05

彈性策略

爲應對不同的業務伸縮場景,我們構建如下三類彈性策略來支撐業務彈性伸縮:

預測彈性:對於彈性較低的服務,根據各時間片內的流量波動,對未來流量進行預測提前對服務容量進行規劃調整。

負載反饋彈性:對於彈性較高的服務,根據近實時服務負載變化,及時對服務容量進行伸縮確保服務穩定。

定時彈性:有些服務在流量高峯期變化較大,在非高峯期變化較小,在高峯期需要提供最大容量來保障穩定性,在非高峯期不需要頻繁調整容量,通過定時彈性在高峯期來臨之前擴容,在高峯期過後進行縮容,高峯期和非高峯期期間容量保持不變。

5.1 預測彈性

目標:

根據服務配置的時間片,在當前時間片內對未來時間片的流量進行預測,根據預測流量對服務進行提前擴容、延遲縮容來應對不同的流量變化。

流量預測:

擴 / 縮容策略:

5.2 負載反饋彈性

目標:

根據服務近實時的負載情況,及時調整服務容量以應對流量突增變化。

擴 / 縮容策略:

5.3 定時彈性

目標:

某些服務的流量在非高峯期波動較小沒必要頻繁調整容量,高峯期和非高峯期期望固定但不同的容量。

擴 / 縮容策略:

5.4 彈性實踐

06

穩定性保障

如何在大規模頻繁動態調整服務容量的同時保障服務穩定性至關重要,我們從巡檢和干預止損的角度來建設相應穩定性能力,通過巡檢防患於未然,通過一鍵干預快速止損。

彈性巡****檢:週期性地觸發服務實例遷移,檢驗服務的彈性能力,提前暴露詞典文件依賴異常等導致的伸縮失敗。

容量巡檢:爲各類服務配置告警策略,週期性地巡檢服務各項資源容量,當容量不足時觸發告警或一鍵預案。

狀態巡檢:檢查各服務狀態是否正常輪轉,防止服務狀態異常,例如高峯期和非高峯期對應不同的服務容量狀態。

一鍵干預:提供快速止損能力,定期線上演練防止能力退化,包括一鍵退出 serverless 預案、一鍵打開 / 關閉實例軟硬限預案等。

07

總結

整體工作圍繞 Serverless 展開,通過彈性、流量、容量多維度的服務畫像刻畫每個服務的個性化特點,基於畫像構建多類彈性策略,滿足服務各類伸縮場景,有效地實現服務資源按需使用。當前 Serverless 已落地百度 Feed 業務線 10w 服務實例數規模,有效地降低了業務運行成本。

接下來,Serverless 將聚焦兩個方向:熱點事件的容量保障及應用機器學習提升流量畫像預測精確度,持續接入更大規模的服務爲業務創造價值!

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/5wzRErg-DL6soijWo-dgvA