Serverless X OpenKruise 部署效率優化之道
Serverless 作為雲端計算的最佳實踐、雲原生髮展的方向和未來演進趨勢,其核心價值在於快速交付、智慧彈性、更低成本。SAE(Serverless應用引擎, https://www.aliyun.com/product/aliware/product/sae)作為首款面向應用的Serverless PaaS 平臺,實現了 Serverless 架構與微服務架構的完美結合,使存量應用也可以零程式碼改造享受 Serverless 賦予的技術紅利,目前正在增強多語言特性,向多負載型別多元化場景方向演進。作為 Serverless 平臺,高效的應用部署效率無疑是產品的核心競爭力,也是彈性伸縮、智慧託管的基礎。更快的部署效率,意味著更好的使用者體驗,更低的使用者成本,更極致的彈效能力。SAE 極致彈性專案,力求提升應用端到端啟動速度,保證使用者在突發場景下的快速擴容效率和系統穩定性 SLA 。
專案背景
SAE 底層使用 Kubernetes 架構,使用神龍裸金屬安全容器、 ECI 兩種資源池,使用者在SAE中執行的應用會對映到 Kubernetes 中相應的資源。
通過採集線上全量 K8s 事件,整個 Pod 的建立生命週期進行分節點、分階段的耗時統計分析,以神龍節點為例,各階段比例如圖:
從圖中可以看出,整個 pod 的建立生命週期包括排程,拉取並建立 init 容器,拉取使用者業務映象,建立和啟動容器等。其耗時主要集中在排程和拉取使用者映象上。究其原因在於 SAE 神龍節點排程鏈路整體耗時較長,而映象耗時主要在於拉取映象與解壓映象的時長,特別是在大容量映象部署的情況下尤為突出。
實施方案
SAE 團隊從長期架構規劃,使用場景通用性等多個方面進行方案調研分析, 考慮採用原地升級的部署策略代替重建升級策略,避免部署過程中重排程,減少整體耗時。
所謂原地升級,即只更新 Pod 中某一個或多個容器版本、而不影響整個 Pod 物件、其餘容器的升級,而且在升級過程中保證 ip、node 不發生改變。在阿里巴巴內部,絕大部分電商應用在雲原生環境都統一使用原地升級的方式做釋出,這種原地升級的模式極大地提升了應用釋出的效率,節省了排程,分配網路,掛載磁碟以及拉取映象的耗時。通過分析線上 SAE 使用者歷史部署記錄,發現只更新映象/程式包部署應用的佔大多數,也就是說原地升級能力非常適合在 SAE 產品中落地。
原地升級給 SAE 帶來的優勢在於:
1、避免重排程,避免 sidecar 容器重建,整個部署耗時只需要拉取和建立業務容器
2、無需排程,可以預先在 Node 上快取新映象,提高彈性效率。
3、可以保持 ip 不變,避免因 ip 變化導致依賴元件如註冊中心感知的延時。
4、減少重建 pod 對排程器,註冊中心,業務上下游的壓力。
與此同時,OpenKruise專案(https://openkruise.io/)已經將原地升級能力通過 CloneSet/AdvanceStatefulSet 貢獻於開源。CloneSet 是 OpenKruise 中提供的核心 workload 之一,它主要面向無狀態應用,提供了更加高效、確定可控的應用管理和部署能力,支援優雅原地升級、指定刪除、釋出順序可配置、並行/灰度釋出等豐富的策略,可以滿足更多樣化的應用場景。CloneSet 與原生 kubernetes workload 功能對比如圖:
SAE 決定採用 CloneSet 作為新的應用負載,一方面藉助其原地升級的能力提升應用整體部署效率,另一方面也結合 OpenKruise 開源的力量,共同打造通用標準的無狀態應用負載的大規模使用實踐。針對於增量應用, SAE 會預設採用 CloneSet 進行使用者應用的部署,並結合最大不可用例項數和優雅升級時長來保證釋出的流量無損,而對於存量應用, SAE 將採用基於有限狀態機的滾動升級進行線上遷移操作。
方案上線後效果顯著,在一個月的時間內,已經有近千個應用使用 CloneSet 進行部署,且原地升級次數為重建升級的兩倍,部署效率比原生 K8s 提升 42% ,結合映象快取,使用者部署應用到容器啟動在秒級內完成。SAE 後續會對更多 OpenKruise 的高階能力產品化,同時結合使用者場景,不斷打磨穩定性與最佳實踐回饋於開源。
原生 K8s 部署應用重建升級策略 VS SAE部署應用原生升級策略
未來展望
在追求部署效率的道路中,SAE 正在探索更多維度,更細粒度的解決方案。相信在不久的將來,SAE 的極致彈性,無論在彈性效率,彈性規模,還是智慧精準等方面都會大放異彩。
相關文章
- Serverless X OpenKruise 部署效率最佳化之道ServerUI
- 如何做Serverless自動化部署Server
- Serverless 場景下 Pod 建立效率最佳化Server
- MySQL exists 優化 in 效率MySql優化
- Webpack打包效率優化篇Web優化
- 海量之道之弱聯網優化優化
- Serverless 工程實踐 | Serverless 應用優化與除錯祕訣Server優化除錯
- Serverless 應用優化四則祕訣Server優化
- Python 程式碼的效能優化之道Python優化
- [Serverless] ? Laravel Serverless 部署平臺內測招募中 ?ServerLaravel
- 資料庫的優化和效率資料庫優化
- 優化資料庫EXP的效率優化資料庫
- Tomcat部署及優化Tomcat優化
- tomcat 部署效能優化Tomcat優化
- vue客戶端渲染首屏優化之道Vue客戶端優化
- Tomcat—部署配置及優化(安裝部署;虛擬主機配置;優化)Tomcat優化
- C#效率優化(2)-- 方法內聯C#優化
- 羅景:連線效率優化實踐優化
- mysql update join優化update in查詢效率MySql優化
- webpack4.x 效能優化Web優化
- nginx部署及簡單優化Nginx優化
- 1 分鐘在 Serverless 上部署現代化 Deno Web 應用ServerWeb
- MYSQL order by排序導致效率低小優化MySql排序優化
- 【效能優化】Oracle 效能優化:降低列值聚簇因子 提高查詢效率優化Oracle
- Tomcat部署解析及配置優化Tomcat優化
- 如何透過 Serverless 提高 Java 微服務治理效率?ServerJava微服務
- 【效能優化之道】每秒上萬併發下的Spring Cloud引數優化實戰優化SpringCloud
- serverless與容器優缺點Server
- 如何用 Serverless 一鍵部署 Stable Diffusion?Server
- 48 條高效率的 PHP 優化寫法PHP優化
- 新手推薦,前端效能優化小整理,效率加倍前端優化
- switch...case && if...else效率比較和優化優化
- 關於資料字典的查詢效率優化優化
- UNION效率比UNION ALL效率高——SQL優化之Everything is possibleSQL優化
- Cocos2d-x優化中關於背景圖片優化優化
- Serverless Devs 的官網是如何透過 Serverless Devs 部署的Serverdev
- cocos2d-x 優化(紋理渲染優化、資源快取、記憶體優化)優化快取記憶體
- 向多方協同與技術管理要效率!高校數字化的躍升之道