位元組跳動開源Katalyst:在離線混部排程,成本最佳化升級

陶然陶然發表於2023-04-10

  Katalyst 是位元組跳動對多年大規模業務雲原生化場景中資源管理能力的抽象和總結,我們期望透過 Katalyst 的開源直接或間接的幫助使用者做好資源管理,實現降本增效。

  當下網際網路應用以天為單位,線上業務的資源使用情況往往會隨著訪問數量的波動而變化,具備明顯的潮汐特性。為了確保業務穩定性,業務方往往會參考高峰時段的資源使用情況來申請資源,但這部分資源在低峰時段容易被閒置。

  如果可以把這些閒置資源暫時出讓給優先順序低的服務,當線上業務需要使用的時候及時將資源歸還,形成在離線服務混部,就可以達到削峰填谷,節約成本的效果。

  位元組跳動雲原生混部實踐

  位元組跳動業務規模龐大、業務型別多元,其中涵蓋了包括微服務、推廣搜服務、機器學習與大資料、儲存在內的多種業務型別。通常來說,不同業務型別對底層基礎設施會有不同的資源管理訴求,傳統的管理模式是基於業務線或者服務型別切分資源池,實現定製化需求。

  但切分資源池的做法容易形成資源孤島,無法實現資源層面的靈活拆借,不利於全域性資源利用效率的提升和業務成本的最佳化,加重叢集運維的負擔。

  此外,由於不同型別業務的 SLO 要求、資源潮汐特性存在互補,基礎設施團隊期望充分利用這些特性,透過排程和管控等手段去最佳化資源效率,實現資源池的融合統一,幫助業務團隊獲得更低的資源成本和更強的彈效能力。  

  為實現資源統一託管,位元組跳動從 2016 年就開始基於 Kubernetes 構建統一的基礎設施。

  到現階段,位元組內部已經基本完成全量微服務、推廣搜服務以及大部分機器學習與大資料業務的雲原生化改造。在此過程中,基礎架構團隊持續探索統一資源池下的資源最佳化手段,並逐漸形成了 “彈性伸縮” 和 “常態混部” 互相配合的資源池混部方案。

  彈性伸縮:實現機器級別、Numa 級別的資源分時複用,結合業務指標和系統指標,共同指導業務例項的橫向和縱向擴縮容策略,最終使得離線類服務以更加低廉的價格購買更多閒時資源,線上類服務以更加高昂的價格購買更多峰時資源,透過資源市場化運營的方式實現綜合效率的提升。

  混合部署:提供資源超賣的能力,充分利用叢集中 “已經售賣但未充分使用的資源” 部署更多低優業務,同時在系統側完善 CPU、記憶體、磁碟、網路等多維度的資源隔離機制,並且智慧預測、感知各類服務的負載變化,結合服務的分級機制,透過分鐘級的指標感知和調控策略,保證服務的穩定性。

  該方案在鏈路上基於 Kubernetes 和 Yarn 兩套體系實現聯合管控,在單機上同時執行 Kubernetes 和 Yarn 的管控元件,配合中心協調元件對兩套系統可見的資源量進行分配。在聯合管控系統之上,團隊基於服務資源畫像實現實時的資源預估,在保證各類服務 SLA 要求的前提下,實現更加靈活和動態的資源分配。

  在該資源池混部方案落地實踐的過程中,基礎設施團隊完成了資源並池可行性的驗證,完成了混部基礎能力的構建,並且在部分核心業務叢集實現了整機天級利用率從 23% 到 60% 的提升。  

  Katalyst:從內部驗證到開源

  在經歷內部抖音、今日頭條等大規模潮汐流量業務驗證後,位元組跳動的雲原生混部實踐已日臻完善。

  為了幫助更多人瞭解大規模資源混部實踐的工作原理,方便更多開發者使用者體驗這種開箱即用、一鍵式部署的資源管控能力,研發團隊決定回饋社群,採用 Kubernetes Native 的方式重構並增強了資源管控系統的實現,提煉出資源管控系統 Katalyst 並正式開源。

  Katalyst 引申自單詞 catalyst (音 [ˈkætəlɪst]),本意為催化劑。首字母修改為 K,寓意該系統能夠為所有執行在 Kubernetes 體系中的負載提供更加強勁的自動化資源管理能力。

  什麼是 Katalyst

  Katalyst 脫胎於位元組跳動混部技術實踐,同時也從資源、管控、排程等多個維度對資源管控能力進行了擴充套件和補充。它的主要特點包括:

  完全孵化於超大規模混部實踐,並在位元組服務雲原生化的程式中同步接管資源管控鏈路,真正實現內外技術體系的複用

  搭載位元組跳動內部的 Kubernetes 發行版 Enhanced Kubernetes 同步開源,相容性好,體驗更多位元組自研的核心功能

  系統基於外掛化模式構建,使用者可以在 Katalyst Framework 之上自定製各類排程、管控、策略、資料等模組外掛

  提供一鍵式部署模版和詳盡運維手冊,降低外部使用者的理解和接入使用成本

  Katalyst 如何實現資源抽象

  在資源層,Kubernetes 原生 QoS 分級無法滿足大規模生產環境的要求,Katalyst 在此基礎上進行了進一步的抽象。

  Katalyst 以 CPU 為主維度,為應用提供了 system_core 系統核、dedicated_core 獨佔核、shared_core 共享核、reclaimed_core 回收核等多種不同等級,同時每種等級又輔助以多種 enhancement 機制(例如是否需要 numa node 繫結,是否需要網路卡親和或者頻寬限制等),實現差異化的資源分配和管控策略。  

  透過抽象資源模型,Katalyst 為使用者提供了統一的資源入口,使用者根據實際業務需求,將業務服務對映到對應的 QoS 和售賣模式上準確地表達自身的需求,最終實現從統一的資源池獲取資源而不用關注底層資源池細節。  

  Katalyst 的架構設計

  早期的混部架構存在幾方面的問題:Kubernetes 和 Yarn 兩套系統的聯合管控雖然實現了在離線業務的常態混部,但是複雜的系統也使得維護成本變高。

  另外這種架構也帶來了額外的資源損耗,這些損耗一方面來自於聯合管控模式下單機 Agent 元件資源佔用,尤其在超大規模的叢集中,這部分資源非常可觀。此外,由於兩套管控導致系統複雜度變高,系統互動過程中會產生多級資源漏斗,任何環節的異常都會導致資源丟失。

  在 Katalyst 中,我們對整體的混部架構做了最佳化重構:  

  在管控層,我們將位元組早期基於 Kubernetes 和 Yarn 兩套體系的融合系統整合成一套基於 Kubernetes 的系統。

  具體來說,我們在接入層同時保留了 Kubernetes 以及 Yarn 各自的 API 入口,底層系統的後設資料管理和資源管控實現則統一收斂到基於 Kubernetes 的管控系統 Katalyst 上。

  在排程層, Katalyst 在統一後設資料的基礎上實現了 “中心” 和 “單機” 互相協調的資源排程機制。

  在單機排程側:Katalyst 搭載 Enhanced Kubernetes 裡的擴充套件模組 QoS Resource Manager (QRM) 能夠實現可外掛化的微拓撲親和性分配,並透過自定 CRD 將微拓撲上報到中心打通排程流程;在服務執行過程中,Katalyst 會持續觀察 Pod 執行時系統指標,集合業務 QoS 要求和業務指標反饋進行預估,決策出 Pod 在各個資源維度上的分配量,透過 QRM reconcile 機制實時下發到 CRI。上述過程中的資源預估模型和 QRM 實現,都可以透過外掛化的方式定製,使得資源調控的策略更加匹配不同業務場景的訴求。

  在中心排程側:Katalyst 基於原生 Scheduler Framework 擴充套件了更加豐富的排程能力,在排程過程中同時考慮不同 QoS 業務在同一個叢集中執行時資源層應該如何分配及協作,配合單機排程實現更加細粒度的排程語義要求;同時,中心排程還會結合業務容器執行時的實時資料和服務畫像,在全叢集範圍內實現動態的 Rebalance 策略,降低叢集空置率,提升業務穩定性。  

  透過收斂資源管控,Katalyst 有效減少了系統執行中的資源損耗。此外,在聯合管控體系下,Katalyst 將旁路非同步管控的實現切換成基於標準 CRI 介面的同步管控實現,避免因為各種非同步引發的 race 或者衝突,從而引發服務效能抖動。

  最後,在一套管控體系下,我們還能夠充分享受 Kubernetes 面向 API 設計的優勢,透過自定義 CRD 的方式去解耦內部系統,泛化管控策略,使得系統能夠透過外掛化的方式更加靈活地系統迭代,真正實現了內外同源。

  RoadMap

  Katalyst 作為一個資源管理系統,在離線混部是其核心應用場景之一。除了抽象上述核心概念之外,我們還為 Katalyst 提供和規劃了豐富的 QoS 能力:

  精細化的資源出讓策略:Katalyst 支援基於靜態啟發式、無監督演算法、QoS Aware 的多種資源預估策略,更準確的計算和預測節點可出讓資源量,進一步提高資源利用率。

  多維度的資源隔離能力:基於 cgroup, rdt, iocost, tc 等能力,實現不同混部場景中對 cpu,記憶體,磁碟,網路等多種資源的有效隔離,保障線上業務的 QoS 不受影響。

  多層級的負載驅逐策略:支援基於多種指標,多層級的驅逐策略,在保障線上業務 QoS 的同時也儘可能提高離線業務的 QoS。

  除了混部場景,Katalyst 也提供一些增強的資源管理能力:

  資源彈性管理:提供靈活可擴充套件的 HPA/VPA 資源彈性策略,幫助使用者提高部署率和資源利用率。

  微拓撲感知排程:感知節點上 CPU,記憶體,異構裝置的微拓撲,基於更細粒度的微拓撲資訊完成資源分配,滿足高效能業務的 QoS 要求。

  詳細的功能規劃請參考 roadmap()。

  雖然混部技術在位元組內部已經經歷了幾次的技術迭代,但是一個通用、標準化的平臺底座必然要經過各種場景的打磨,我們非常期待更多朋友加入到 Katalyst 開源社群中!

來自 “ 位元組跳動技術團隊 ”, 原文作者:Katalyst開源團隊;原文連結:http://server.it168.com/a2023/0410/6798/000006798160.shtml,如有侵權,請聯絡管理員刪除。

相關文章