技術(shù)抉擇:阿里云13年后重構(gòu)全部核心調(diào)度系統(tǒng)
在阿里云十三年的發(fā)展歷史上,重新設(shè)計(jì)調(diào)度系統(tǒng)算得上是一個(gè)重要的技術(shù)抉擇。
云計(jì)算是一個(gè)龐大的技術(shù)工程。2009 年,阿里云從 0 到 1 自建國(guó)產(chǎn)云計(jì)算系統(tǒng)“飛天”,為了確保對(duì)每一行代碼都有控制力,阿里云選擇了一條艱難的道路:自主研發(fā)。伏羲調(diào)度系統(tǒng)是“飛天”三大服務(wù)之一。調(diào)度系統(tǒng)作為云計(jì)算的核心技術(shù),無(wú)論是對(duì)亞馬遜、谷歌還是其他云計(jì)算企業(yè)來(lái)說(shuō),都是他們最保守的秘密,而伏羲憑借自研與優(yōu)異的性能,與 YARN、Mesos 等技術(shù)一起成為了調(diào)度系統(tǒng)的典型代表之一。
這么多年發(fā)展下來(lái),很多人認(rèn)為阿里云戰(zhàn)略上最與眾不同之處,就是堅(jiān)持自研核心技術(shù)。作為全球集群規(guī)模最大的云計(jì)算平臺(tái)之一,阿里云在技術(shù)已然成熟、穩(wěn)定運(yùn)行著數(shù)量龐大的業(yè)務(wù)情況下,選擇了用云原生的標(biāo)準(zhǔn)重新設(shè)計(jì)和構(gòu)建云計(jì)算的調(diào)度系統(tǒng),并在 2021 年“雙十一”大促之前將全球幾十個(gè)數(shù)據(jù)中心、數(shù)百萬(wàn)容器、數(shù)千萬(wàn)核的資源統(tǒng)統(tǒng)搬到了新的調(diào)度系統(tǒng)之上。
阿里云為什么在十三年之后重構(gòu)調(diào)度系統(tǒng)?在不影響業(yè)務(wù)運(yùn)行的情況下,阿里云是如何更換“引擎”的?這種技術(shù)思路給我們帶來(lái)什么啟示?新調(diào)度系統(tǒng)有開(kāi)源計(jì)劃嗎?InfoQ 采訪了幾位調(diào)度系統(tǒng)負(fù)責(zé)人,為大家一一解惑。
01 發(fā)展十三年,成績(jī)斐然的老調(diào)度系統(tǒng)
資源調(diào)度系統(tǒng)可謂是云計(jì)算的大腦,負(fù)責(zé)在眾多集群內(nèi)的機(jī)器里,選擇一臺(tái)最合適的,以最佳的資源使用姿勢(shì),做到最少的相互干擾來(lái)運(yùn)行用戶提交的計(jì)算作業(yè)。云計(jì)算最終目的之一是降低 IT 成本,最大限度地利用單臺(tái) PC 的 CPU 處理能力,而調(diào)度系統(tǒng)恰恰就決定著基礎(chǔ)設(shè)施的利用率和整體運(yùn)作成本。
無(wú)論是亞馬遜、谷歌、微軟還是阿里,某種程度上,“大腦”代表的是企業(yè)技術(shù)競(jìng)爭(zhēng)力。核心技術(shù)的重要性不言而喻,像谷歌的調(diào)度系統(tǒng) Borg,在很長(zhǎng)一段時(shí)間內(nèi),一直是谷歌最保守的秘密之一。
02 艱難起步,從 0 到 1 自研伏羲調(diào)度系統(tǒng)
2008 年,阿里巴巴確定了“云計(jì)算”戰(zhàn)略,決定自主研發(fā)大規(guī)模分布式計(jì)算操作系統(tǒng)“飛天”,目標(biāo)是將幾千臺(tái)乃至上萬(wàn)臺(tái)普通 PC 服務(wù)器連接到一起,使其像一臺(tái)多功能的超級(jí)計(jì)算機(jī),實(shí)現(xiàn)超強(qiáng)計(jì)算性能。
2009 年 2 月,飛天團(tuán)隊(duì)在北京寫下了第一行代碼,“飛天”系統(tǒng)也從此成為阿里云的奠基技術(shù)平臺(tái)。伏羲調(diào)度系統(tǒng)是十年前飛天成立時(shí)創(chuàng)建的三大服務(wù)之一,另兩個(gè)是飛天分布式存儲(chǔ)盤古和分布式計(jì)算 MaxCompute。
2011 年 7 月,阿里云作為中國(guó)第一個(gè)公有云正式對(duì)外開(kāi)放。這之后的十多年里,伏羲能調(diào)度的單集群規(guī)模,也從最初的幾百臺(tái)物理機(jī),發(fā)展到了 10 萬(wàn)臺(tái)機(jī)器。我們知道,規(guī)模每放大十倍,就意味著很多架構(gòu)設(shè)計(jì)點(diǎn)都需要重新調(diào)整,當(dāng)橫向擴(kuò)展遭遇不可逾越的瓶頸,就代表著系統(tǒng)重構(gòu)的開(kāi)始,伏羲就因此經(jīng)歷了兩次重構(gòu)。
2013 年,伏羲在飛天“5K”項(xiàng)目中對(duì)系統(tǒng)架構(gòu)進(jìn)行了第一次大重構(gòu)。“5K”顧名思義,就是能讓調(diào)度系統(tǒng)支持單集群 5000 節(jié)點(diǎn),并解決大規(guī)模單集群下的性能、利用率、容錯(cuò)等問(wèn)題。
不斷擴(kuò)大單集群的規(guī)模,到現(xiàn)在依然是業(yè)界不同調(diào)度系統(tǒng)在做的事情。
如果依靠早期的 Hadoop 開(kāi)源調(diào)度器技術(shù),以當(dāng)時(shí)的實(shí)踐經(jīng)驗(yàn)來(lái)看,并不是容易的事情,因此伏羲團(tuán)隊(duì)選擇了架構(gòu)和代碼都是自己構(gòu)建的自研方式。這個(gè)項(xiàng)目,在阿里云歷史上也是一次非常有里程碑意義的“攻堅(jiān)戰(zhàn)”。
?。ò⒗镲w天 5K 項(xiàng)目紀(jì)念碑)
隨后歷經(jīng)一年半時(shí)間,阿里巴巴和螞蟻金服完成“登月計(jì)劃”,將所有數(shù)據(jù)存儲(chǔ)、計(jì)算任務(wù)全部遷移至飛天平臺(tái)。在 2015 年 Sort Benchmark 排序競(jìng)賽中,飛天用 377 秒完成 100TB 的數(shù)據(jù)排序,打破四項(xiàng)世界紀(jì)錄。
隨著阿里云的業(yè)務(wù)需求變化,伏羲的內(nèi)涵也在不斷擴(kuò)大。最開(kāi)始是作為一款對(duì)標(biāo)開(kāi)源 YARN 的單一資源調(diào)度器,而后擴(kuò)展成了覆蓋數(shù)據(jù)調(diào)度、資源調(diào)度、計(jì)算調(diào)度、單機(jī)調(diào)度等的核心調(diào)度系統(tǒng),伏羲也于 2019 年經(jīng)歷了第二次重構(gòu),并將單集群規(guī)模擴(kuò)展到了十萬(wàn)臺(tái)。
03 雙調(diào)度系統(tǒng)混部實(shí)踐
伏羲是負(fù)責(zé)阿里離線業(yè)務(wù)的調(diào)度系統(tǒng),而于 2015 年正式立項(xiàng)的 ASI 調(diào)度器則支撐著阿里搜索、電商等龐大的在線業(yè)務(wù)。
在線調(diào)度歷史也比較悠久,最早起源于 2011 年上線的 T4 系統(tǒng),即阿里早期基于 LXC 和 Linux Kernel 定制的容器調(diào)度器。T4 的技術(shù)理念與如今云原生領(lǐng)域的核心技術(shù)——容器,如出一轍。在線調(diào)度最開(kāi)始是一個(gè)簡(jiǎn)單的資源分配系統(tǒng),而后逐漸演進(jìn)為 Sigma 調(diào)度器、ASI 調(diào)度器,在發(fā)展過(guò)程中又進(jìn)一步吸收并融合了伏羲離線調(diào)度系統(tǒng)、搜索團(tuán)隊(duì)基于 YARN 的 Hippo 系統(tǒng)的先進(jìn)經(jīng)驗(yàn)。
?。? 層調(diào)度器負(fù)責(zé)全局資源視圖和管理,并對(duì) 1 層調(diào)度器 Sigma、伏羲進(jìn)行仲裁)
據(jù)稱全球服務(wù)器平均利用率不到 20%,因此提升服務(wù)器的資源利用率是很多大廠不斷追逐的目標(biāo)。
2014 年左右,阿里巴巴開(kāi)始大力探索混部技術(shù),通過(guò)將在線業(yè)務(wù)和離線大數(shù)據(jù)計(jì)算的負(fù)載混部運(yùn)行在共享的集群中,以期可以顯著提高數(shù)據(jù)中心資源利用率。與離線調(diào)度不一樣的是,類似雙十一活動(dòng)中的零點(diǎn)峰值場(chǎng)景,它對(duì)在線調(diào)度 CPU 的集群化編排要求非常高,對(duì)延遲和抖動(dòng)敏感;離線業(yè)務(wù)正好相反,平時(shí)資源使用壓力較高,業(yè)務(wù)資源使用較為固定,對(duì)時(shí)延不敏感。所以,只要兩類負(fù)載能跑在共享的集群中使用“分時(shí)復(fù)用”的策略,就可以達(dá)到提升利用率的目的。
正是因?yàn)樵诰€離線混部對(duì)于提高集群利用率非常有意義,所以無(wú)論是在學(xué)術(shù)界,還是在各大廠商實(shí)際落地中,都對(duì)混部做了深入的研究,各大企業(yè)中最早做混部實(shí)踐的是谷歌 Borg。雖然有 Borg、Omega 先例存在,但谷歌很少對(duì)外分享自己的混部實(shí)踐,僅在 2015 年、2019 年對(duì)外發(fā)布過(guò)兩篇論文。這也意味著,如果想做好“混部”調(diào)度,企業(yè)都得靠自己去摸索。阿里的混部實(shí)踐也于 2015 年正式立項(xiàng),并于當(dāng)年的雙十一經(jīng)歷了一次資源調(diào)度能力的“考驗(yàn)”。據(jù)公開(kāi)資料顯示,混部能將阿里云的 CPU 資源利用率從 10% 提升到 40%。
作為自研的調(diào)度系統(tǒng),伏羲和 Sigma 運(yùn)行在一起,這種混部系統(tǒng)形式曾存在很多干擾和影響,一方面是兩個(gè)系統(tǒng)之間節(jié)點(diǎn)狀態(tài)不一致造成的干擾,另一方面是兩個(gè)系統(tǒng)所分配的容器互相之間的干擾。然而“混部”帶來(lái)的收益又不可忽視,因此阿里于 2016 年開(kāi)始重點(diǎn)研發(fā)了 Sigma 1.0,基于 Docker Swarm 通道創(chuàng)建容器,并將演進(jìn)中的各種語(yǔ)言技術(shù)棧統(tǒng)一為 Golang,同時(shí)在實(shí)踐層面做了很多隔離、協(xié)同的優(yōu)化工作,也將不同等級(jí)的任務(wù)調(diào)度做得更精細(xì)化。
整個(gè)演進(jìn)過(guò)程中,調(diào)度團(tuán)隊(duì)也曾將實(shí)踐成果分享為數(shù)篇頂會(huì)論文,得到了學(xué)術(shù)界和工業(yè)界的認(rèn)可。有意思的是,谷歌曾在 2019 年 11 月分享了 Borg 集群運(yùn)行數(shù)據(jù),在對(duì)應(yīng)的論文中谷歌特地指出其系統(tǒng)很少在集群中使用超過(guò) 50% 的內(nèi)存,但據(jù)報(bào)道競(jìng)爭(zhēng)對(duì)手阿里巴巴達(dá)到了 80% 的利用率。
大船難調(diào)頭,阿里的調(diào)度系統(tǒng)發(fā)展了十多年,成果斐然,性能優(yōu)異,運(yùn)行的業(yè)務(wù)規(guī)模也是數(shù)千萬(wàn)級(jí)別了,但 2021 年,阿里云還是決定將伏羲、Sigma 雙調(diào)度協(xié)同系統(tǒng)重構(gòu)為基于 ACK 的“統(tǒng)一調(diào)度系統(tǒng)”。
04 基于阿里云容器服務(wù) ACK 的調(diào)度系統(tǒng)
我們?cè)诩夹g(shù)上到達(dá)了一個(gè)新的臨界點(diǎn)。
2020 年 6 月,阿里云集結(jié)了 100 多位調(diào)度團(tuán)隊(duì)核心技術(shù)人員,開(kāi)始了重構(gòu)的進(jìn)程。
經(jīng)過(guò)一年多的研發(fā),趕在雙十一之前,將數(shù)千萬(wàn)量級(jí)的業(yè)務(wù)切換到了新一代的“統(tǒng)一調(diào)度系統(tǒng)”上。新框架基于阿里云容器服務(wù) Kubernetes 版(簡(jiǎn)稱容器服務(wù) ACK),通過(guò)一套調(diào)度協(xié)議、一套系統(tǒng)架構(gòu),統(tǒng)一管理底層的計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)資源。ACK 本身提供了一個(gè)全托管的 Kubernetes 集群的調(diào)度能力,對(duì)于 IaaS 層不同類型的計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)等能力都可以統(tǒng)一調(diào)度,是統(tǒng)一調(diào)度大資源池化生產(chǎn)運(yùn)行的基座。
2021 年雙十一,新系統(tǒng)打通并統(tǒng)一了阿里巴巴電商、搜推廣、MaxCompute 大數(shù)據(jù)和螞蟻業(yè)務(wù),全面支撐了全球數(shù)十個(gè)數(shù)據(jù)中心、數(shù)百萬(wàn)容器、數(shù)千萬(wàn)核的大規(guī)模資源調(diào)度。
05 為什么要重建?
Kubernetes 項(xiàng)目始于 2014 年,源自谷歌內(nèi)部的 Borg,吸收了 Borg 項(xiàng)目多年的實(shí)踐經(jīng)驗(yàn),它超前引入了 Pod 概念將容器分組,大量使用了 Sidecar 設(shè)計(jì)模式,為容器化應(yīng)用提供了自動(dòng)化的資源調(diào)度,并具備動(dòng)態(tài)擴(kuò)容、滾動(dòng)升級(jí)、負(fù)載均衡、服務(wù)發(fā)現(xiàn)等功能,受到大廠的大力推崇。
在接下來(lái)的兩年里,與其對(duì)應(yīng)的 Mesos、Docker Swarm 等相比,Kubernetes 作為容器編排引擎的采用緩慢卻很穩(wěn)定,領(lǐng)先的科技巨頭如亞馬遜、阿里巴巴、微軟 Azure、紅帽都開(kāi)始啟動(dòng)了基于 Kubernetes 的新解決方案。
2019 年,Sigma 全面遷移到了基于 ACK 的調(diào)度系統(tǒng)。同時(shí),在這幾年里,阿里的技術(shù)體系也逐漸全面切向云原生技術(shù),去年 9 月,阿里云容器服務(wù)全面升級(jí)為 ACK Anywhere。
據(jù)在線調(diào)度系統(tǒng)負(fù)責(zé)人智清回憶,在線調(diào)度系統(tǒng)最初是完全自研的,云原生興起之后,在線調(diào)度團(tuán)隊(duì)于 2017 年決定將這套技術(shù)框架遷移到 Kubernetes,消除兩者之間的差異并跑在阿里云容器服務(wù) ACK 上?!皠傞_(kāi)始是比較艱難的,嘗試過(guò)好多版本,包括 Sigma on Kubernetes、Kubernetes on Sigma 等方式,最后還是決定用最標(biāo)準(zhǔn)、最原生的、完全基于 Kubernetes 的方式。”后面啟動(dòng)的 ASI 項(xiàng)目,它做的事情就是將整個(gè)調(diào)度框架以非常原生的標(biāo)準(zhǔn)方式搬到 Kubernetes 上,在 Kubernetes 基礎(chǔ)上做到在線、離線調(diào)度的真正融合。而且在業(yè)務(wù)側(cè),阿里也專門組織了一支云原生團(tuán)隊(duì)來(lái)推進(jìn)容器化,最終形成一個(gè)整體的云原生資源池。
云原生統(tǒng)一調(diào)度架構(gòu)師懿川將這些年調(diào)度系統(tǒng)的發(fā)展過(guò)程總結(jié)為三個(gè)階段:
第一個(gè)階段是非容器階段,僅有調(diào)度的需求,并且基礎(chǔ)設(shè)施還沒(méi)有完善,屬于調(diào)度的最初期階段。在這個(gè)階段,無(wú)論是伏羲還是 T4,基本都是借助一些比較簡(jiǎn)單的隔離概念,以及一些內(nèi)核的能力,靠自身的演進(jìn)來(lái)實(shí)現(xiàn)對(duì)調(diào)度的最樸素的需求。
第二個(gè)階段是開(kāi)始進(jìn)入容器階段。容器技術(shù)使用場(chǎng)景變多,規(guī)模變大,Sigma 以容器為主進(jìn)行了改造。在這個(gè)階段,需要調(diào)度系統(tǒng)既能承接業(yè)務(wù)的需求,又能同時(shí)深耕容器技術(shù)。
第三個(gè)階段是云原生化,調(diào)度系統(tǒng)完全基于新一代的容器技術(shù),包含阿里自己的安全容器、RunC 以及其他的虛擬化技術(shù),同時(shí)調(diào)度器的實(shí)現(xiàn)框架上也需適應(yīng)整個(gè) Kubernetes 生態(tài)。也就是將電商、搜索和大促這種創(chuàng)造洪峰型的業(yè)務(wù),以及十多年調(diào)度系統(tǒng)技術(shù)積累,再結(jié)合 Kubernetes 開(kāi)源架構(gòu)的優(yōu)勢(shì),整合到一起進(jìn)行大規(guī)模應(yīng)用。
總而言之,阿里重建調(diào)度系統(tǒng)的決策,是基于業(yè)務(wù)演進(jìn)的需要,也是希望能有一個(gè)全局資源池,統(tǒng)一支撐所有業(yè)務(wù)形態(tài)。
云計(jì)算的本質(zhì),是將小的計(jì)算碎片變成更大的資源池,充分削峰填谷,提供極致的能效比?;觳考夹g(shù)打破了多資源池的割裂,不同計(jì)算領(lǐng)域的多調(diào)度大腦協(xié)同共用資源,讓業(yè)務(wù)間峰谷互補(bǔ)的優(yōu)勢(shì)發(fā)揮到最大,但兩個(gè)調(diào)度器,由于彼此間無(wú)法高效地交互細(xì)粒度信息,阻礙了混部效果的進(jìn)一步提升。
另外調(diào)度成本、資源的調(diào)度效率和業(yè)務(wù)獨(dú)占資源池有很大的關(guān)系。從過(guò)去的調(diào)度系統(tǒng)演進(jìn)經(jīng)驗(yàn)來(lái)推斷,建設(shè)統(tǒng)一資源池是最好的提升效率的方法:業(yè)務(wù)上有很多共同性的調(diào)度需求是可以互相配合和優(yōu)化借鑒的,各自演進(jìn)并不利于發(fā)展。無(wú)論是搜索還是電商,在線還是離線,如果作業(yè)類型越來(lái)越相近的話,就可以通過(guò)合作和共建,作為同一種調(diào)度類型去建設(shè)和演進(jìn),集中力量將云原生終態(tài)方案一起做到極致,并希望最后能做到自研、商用、開(kāi)源三位一體。
雙調(diào)度系統(tǒng)協(xié)同的方式跟谷歌的 Borg 或微軟的系統(tǒng)相比,在集群管理模式上有一定的區(qū)別,那是否是因?yàn)殡p調(diào)度系統(tǒng)協(xié)同模式存在缺陷才會(huì)導(dǎo)致重構(gòu)?回復(fù) InfoQ 的采訪時(shí),懿川認(rèn)為調(diào)度系統(tǒng)的發(fā)展和業(yè)務(wù)形態(tài)密切相關(guān)。國(guó)內(nèi)很多企業(yè)確實(shí)會(huì)存在擁有多種調(diào)度系統(tǒng)的情況,原因是在線業(yè)務(wù)和離線業(yè)務(wù)特點(diǎn)有很大的不同,性能、吞吐量、任務(wù)長(zhǎng)短類型等,以及對(duì)調(diào)度業(yè)務(wù)的需求決定了調(diào)度器的架構(gòu)設(shè)計(jì)。
“反倒是做成一個(gè)統(tǒng)一的調(diào)度系統(tǒng)是比較難的,做成多種調(diào)度系統(tǒng)相對(duì)來(lái)講更容易。而且類似谷歌的Borg或微軟的Apollo系統(tǒng)一開(kāi)始也不是所有的調(diào)度策略、邏輯以及場(chǎng)景都能支持,也有一個(gè)在演進(jìn)過(guò)程中逐步增加功能的過(guò)程。”
06 新調(diào)度系統(tǒng)對(duì) Kubernetes 的改進(jìn)和增強(qiáng)
新調(diào)度系統(tǒng)需要支持在線離線、低頻高頻各種調(diào)度類型和眾多業(yè)務(wù)種類,且要完全兼容 Kubernetes 生態(tài),還需要是模塊化、組件化,形成一個(gè)可插拔式的機(jī)制。
統(tǒng)一調(diào)度團(tuán)隊(duì)針對(duì) Kubernetes 社區(qū)版在 Pod 和資源安全上做了很多優(yōu)化,圍繞 API Server、ETCD、Kubelet 做了不少功能優(yōu)化和代碼修改。統(tǒng)一調(diào)度在 Pod 和接口調(diào)用上也做了很多安全防御方面的事情,例如 ETCD 錯(cuò)配或出現(xiàn)其它問(wèn)題時(shí)如何進(jìn)行防護(hù),從而保證底座平臺(tái)的安全。但最重要的兩方面改造在單集群規(guī)模、調(diào)度頻次性能上。
Kubernetes 早期版本僅支持幾百節(jié)點(diǎn)的單集群規(guī)模,與 Mesos 支持的節(jié)點(diǎn)數(shù)量相去甚遠(yuǎn),各大廠集合力量一起大幅提升了 Kubernetes 的集群管理規(guī)模,到 1.9 版本就已可以穩(wěn)定支持 5000 個(gè)節(jié)點(diǎn),但遠(yuǎn)達(dá)不到阿里原來(lái)調(diào)度系統(tǒng)單集群上萬(wàn)節(jié)點(diǎn)的性能要求。并且 Kubernetes 以 API Server 為中心的消息同步機(jī)制,更適用于調(diào)度頻度較低的在線服務(wù)場(chǎng)景,對(duì)于阿里系統(tǒng)中的大數(shù)據(jù)計(jì)算場(chǎng)景,可達(dá)每秒 10 萬(wàn)次的調(diào)度頻度。所以“盡管 Kubernetes 已經(jīng)演進(jìn)很久了,但是在我們的調(diào)度器上仍然需要投入大量的工作來(lái)改造,才能夠滿足我們的要求?!?/p>
如果要問(wèn)哪些歷史經(jīng)驗(yàn)有助于新系統(tǒng)重構(gòu)的話,集群管理規(guī)模的突破必定是其中之一。
2013 年的飛天 5K 項(xiàng)目,已經(jīng)早早突破了單集群 5000 節(jié)點(diǎn)的規(guī)模。在后面的演進(jìn)中,伏羲再次經(jīng)歷了第二次重構(gòu),據(jù)伏羲分布式調(diào)度負(fù)責(zé)人李超回憶說(shuō),當(dāng)時(shí)主要考慮到“現(xiàn)在集群的規(guī)??赡軇?dòng)不動(dòng)就過(guò)萬(wàn)臺(tái),不光是物理節(jié)點(diǎn)在增加,CPU 的處理能力也在不斷增強(qiáng)。5 年前一臺(tái)物理機(jī)上一般二三十個(gè) CPU core,現(xiàn)在一臺(tái)物理機(jī)節(jié)點(diǎn)里已經(jīng)變成了一百多個(gè) CPU core 了。相當(dāng)于即便物理機(jī)節(jié)點(diǎn)不增加,可調(diào)度的總資源擴(kuò)大了五六倍,甚至擴(kuò)大了一個(gè)數(shù)量級(jí),這對(duì)調(diào)度的挑戰(zhàn)是很大的?!?/p>
“如果規(guī)模無(wú)限擴(kuò)展下去,在架構(gòu)和設(shè)計(jì)上也要有一個(gè)應(yīng)對(duì)的方案。隨著規(guī)模繼續(xù)變大,我們也要 Hold 得住。”
在伏羲 2.0 資源調(diào)度的重構(gòu)里,伏羲團(tuán)隊(duì)提出了一些比較新穎的觀點(diǎn),在混部中引入去中心化的多調(diào)度器架構(gòu),基于悲觀鎖這種 Partition 策略,解決調(diào)度之間的沖突,保證調(diào)度 latency 性能達(dá)到與小規(guī)模下的系統(tǒng)相同的水平。
但 Kubernetes 單集群規(guī)模有限,遠(yuǎn)不能滿足今天的訴求。統(tǒng)一調(diào)度團(tuán)隊(duì)通過(guò)對(duì) API Server 和 ETCD 的算法優(yōu)化、在服務(wù)端進(jìn)行數(shù)據(jù)壓縮以及鏈路治理的方式,將集群規(guī)模從8千臺(tái)(2020年)擴(kuò)展到1.2 萬(wàn)臺(tái)(2021年)節(jié)點(diǎn),而業(yè)界一般達(dá)到8千臺(tái)就已經(jīng)是超大規(guī)模。
此外,由于 Kubernetes 容器拉起的時(shí)間在幾秒甚至幾十秒,如果需要做到一秒鐘有十萬(wàn)次的調(diào)度,也必須對(duì)其進(jìn)行大量改造。
統(tǒng)一調(diào)度團(tuán)隊(duì)參考了 Kubernetes 社區(qū) scheduler framework 插件化和多調(diào)度機(jī)制,通過(guò)靈活的調(diào)度框架讓不同的調(diào)度團(tuán)隊(duì)可以定制各自的調(diào)度需求,從而讓 Kubernetes 能夠很好的去支持一些場(chǎng)景下的大規(guī)模高并發(fā)的調(diào)度需求。比如在阿里大數(shù)據(jù)場(chǎng)景下,對(duì)調(diào)度系統(tǒng)的要求是每秒鐘能發(fā)生十萬(wàn)次調(diào)度。
07 飛行中更換引擎
2021 年雙十一之前,伏羲和 ASI 調(diào)度系統(tǒng)中的機(jī)器和計(jì)算資源已遷移到了統(tǒng)一調(diào)度系統(tǒng),僅伏羲就包含幾萬(wàn)臺(tái)機(jī)器、數(shù)百萬(wàn)核計(jì)算資源,遷移過(guò)程需全程對(duì)業(yè)務(wù)和用戶透明無(wú)感。
同時(shí)這個(gè)系統(tǒng)本身是一個(gè)涉及非常多人的協(xié)同項(xiàng)目,中間涉及到一次完整的系統(tǒng)重新設(shè)計(jì)和實(shí)現(xiàn),還要將原有積累的伏羲、Sigma、ASI 以及 Hippo 的設(shè)計(jì)經(jīng)驗(yàn)融合進(jìn)來(lái),且保持對(duì)業(yè)務(wù)的兼容性和對(duì)開(kāi)源框架的兼容性。
可以說(shuō),整體設(shè)計(jì)非常復(fù)雜,代碼開(kāi)發(fā)涉及的耦合也很高,各個(gè)系統(tǒng)之間還存在各種對(duì)接。
以伏羲為例,在阿里 MaxCompute 技術(shù)體系中,伏羲一方面是分布式系統(tǒng)的資源管理和調(diào)度組件,需要與上層作業(yè)執(zhí)行引擎進(jìn)行資源交互,另一方面也是各種運(yùn)維管控的數(shù)據(jù)源,復(fù)雜的模塊依賴決定了系統(tǒng)升級(jí)是一件非常艱巨的事情。如果將 MaxCompute 比作一架高速飛行的飛機(jī),統(tǒng)一調(diào)度升級(jí)就是要給這架飛行中的飛機(jī)更換引擎,難度可想而知。
“留給我們上線的時(shí)間窗口很小,但整體的業(yè)務(wù)要求卻很高。雙十一的時(shí)間點(diǎn)是擺在那里的一個(gè)硬性指標(biāo),我們不可能錯(cuò)過(guò)?!避泊ń榻B項(xiàng)目背景時(shí)講到。
在這種情況下,要讓新系統(tǒng)在“雙十一”大促中表現(xiàn)得更有保障,李超表示主要有兩大技術(shù)舉措:
第一是灰度上線之前,有專門的風(fēng)洞測(cè)試機(jī)制,它能把歷史上真實(shí)生產(chǎn)的一些需求、請(qǐng)求在測(cè)試環(huán)境去做回放(Replay),從而驗(yàn)證經(jīng)過(guò)新一輪的修改或者新的功能后系統(tǒng)是否能穩(wěn)定上線。
第二是在穩(wěn)定性上,在狀態(tài)的可恢復(fù)上,傳統(tǒng)的方式是基于 Kubernetes ETCD 的持久化機(jī)制,但是因?yàn)榇髷?shù)據(jù)的調(diào)度頻率達(dá)到每秒十萬(wàn)次的調(diào)度,這種狀態(tài)要做持久化保障是比較困難的。新系統(tǒng)引入了軟硬狀態(tài) fail over 機(jī)制,簡(jiǎn)單來(lái)說(shuō)是基于這個(gè)狀態(tài)的重新收集,而不是完全依賴于狀態(tài)的持久化。在不同的角色上去收集狀態(tài),重建調(diào)度器當(dāng)時(shí)的狀態(tài)。
另外在工程上也需要一套很嚴(yán)格的實(shí)施和上線機(jī)制:
保證代碼高質(zhì)量和低缺陷率,并做好全面的單元測(cè)試,平時(shí)基本功扎實(shí)才能保證最終的工程質(zhì)量。
上線之前,用接近真實(shí)生產(chǎn)的環(huán)境進(jìn)行測(cè)試和驗(yàn)證,確保能夠跑通,如果出現(xiàn)問(wèn)題及時(shí)解決和處理,符合整體的上線進(jìn)度?!拔覀冏詈笊戏思旱倪^(guò)程中,出現(xiàn)的問(wèn)題都是日清日結(jié),讓問(wèn)題快速收斂,保證整個(gè)集群的交付可以符合要求?!?/p>
分階段灰度測(cè)試。第一階段用小規(guī)模的遷移,“當(dāng)時(shí)只是用幾十臺(tái)節(jié)點(diǎn)機(jī)器統(tǒng)一調(diào)度跑起來(lái),再到后面就逐漸放大規(guī)模”,而且還需要先從重要程度相對(duì)低的業(yè)務(wù)開(kāi)始切換,并保證足夠長(zhǎng)的灰度時(shí)間,最后才在線全面鋪開(kāi),沒(méi)問(wèn)題后再將更復(fù)雜的離線調(diào)度引入混部運(yùn)行。
保證每天有一定的切換量,最終將系統(tǒng)按時(shí)切完?!爱?dāng)然這也有一定運(yùn)氣成分在:我們沒(méi)有出現(xiàn)特別嚴(yán)重的問(wèn)題,這也非??简?yàn)整個(gè)項(xiàng)目成員的設(shè)計(jì)和實(shí)現(xiàn)的功底。當(dāng)然也需要我們有整體的機(jī)制和流程的保障?!?/p>
系統(tǒng)需要一個(gè)完善的監(jiān)控機(jī)制?!吧暇€一個(gè)系統(tǒng)之前,我們先得想好怎么去監(jiān)測(cè)它。觀測(cè)方方面面的上百個(gè)維度的元數(shù)據(jù)是不是正常,通過(guò)完善的監(jiān)測(cè),系統(tǒng)一旦出現(xiàn)問(wèn)題,我們能第一時(shí)間發(fā)現(xiàn),做一些回滾動(dòng)作,或者提前準(zhǔn)備好一些處理機(jī)制,來(lái)保證用戶受到影響之前系統(tǒng)能夠恢復(fù)到一個(gè)正常的狀態(tài)?!?/p>
08 未來(lái)規(guī)劃
每個(gè)技術(shù)都有自己的生命周期,十多年前大家很難想到 Kubernetes 會(huì)成為當(dāng)今技術(shù)界的扛把子,而技術(shù)演進(jìn)過(guò)程中,開(kāi)發(fā)者的使命就是用最合適的技術(shù)來(lái)構(gòu)建我們的系統(tǒng)。使用新技術(shù)不代表過(guò)去的經(jīng)驗(yàn)和成果不再有價(jià)值,統(tǒng)一調(diào)度系統(tǒng)也是吸取了伏羲和 Sigma 系統(tǒng)構(gòu)建中的精華。
開(kāi)源技術(shù)影響著調(diào)度系統(tǒng)的演進(jìn),而部署在大型企業(yè)生產(chǎn)環(huán)境中的系統(tǒng),無(wú)論是谷歌的Borg、微軟的Apollo 還是臉書的 Twine,反過(guò)來(lái)也在影響開(kāi)源項(xiàng)目的系統(tǒng)演進(jìn)。統(tǒng)一調(diào)度團(tuán)隊(duì)表示,未來(lái)會(huì)進(jìn)一步提升和完善整個(gè)調(diào)度器的功能和能力,繼續(xù)往2.0推進(jìn);另一方面,要完成自研、商用、開(kāi)源三位一體的目標(biāo),作為戰(zhàn)略計(jì)劃推進(jìn)項(xiàng)目的開(kāi)源,包括開(kāi)源關(guān)鍵能力和標(biāo)準(zhǔn)、框架。建設(shè)這樣一個(gè)超級(jí)系統(tǒng),投入和挑戰(zhàn)都非常大,而開(kāi)源能夠?qū)⒏嗟娜司奂饋?lái),一起把這套系統(tǒng)做得更好。
采訪嘉賓簡(jiǎn)介:
懿川,阿里巴巴研究員,云原生統(tǒng)一調(diào)度架構(gòu)師。全面負(fù)責(zé)統(tǒng)一調(diào)度項(xiàng)目,在分布式領(lǐng)域和資源管理領(lǐng)域有多年的經(jīng)驗(yàn)積累。
李超,阿里云智能計(jì)算平臺(tái)事業(yè)部資深技術(shù)專家,飛天平臺(tái)伏羲分布式調(diào)度負(fù)責(zé)人,擁有十多年分布式系統(tǒng)與大數(shù)據(jù)研發(fā)經(jīng)驗(yàn)。
智清,阿里云智能容器服務(wù)資深技術(shù)專家,ASI 調(diào)度系統(tǒng)負(fù)責(zé)人,負(fù)責(zé)了阿里巴巴在線調(diào)度從 Sigma、ASI、到全面統(tǒng)一調(diào)度的迭代演進(jìn)。
