2135億背后,你不知道的阿里規(guī)模化混部技術(shù)!
2135 億!11 月 12 日零點(diǎn),2018 天貓“雙11”全球狂歡節(jié)的成交額在數(shù)據(jù)大屏定格,較去年的記錄增長(zhǎng)近 27%,物流訂單超 10 億!天貓雙 11 再次成為阿里巴巴創(chuàng)造紀(jì)錄并突破紀(jì)錄的商業(yè)奇跡。
此刻,比雙 11 的數(shù)字更該被記錄的,是阿里巴巴在雙 11 背后做了哪些技術(shù)上的突破?
混部技術(shù)在業(yè)界還尚屬于較少研究的領(lǐng)域,該技術(shù)只有在資源及成本的體量達(dá)到一定規(guī)模時(shí),才會(huì)顯現(xiàn)出其可觀的技術(shù)紅利。
今天,阿里系統(tǒng)軟件部技術(shù)專家蔣玲從阿里巴巴混部探索簡(jiǎn)介、混部方案及架構(gòu)以及混部核心技術(shù)等幾個(gè)方面帶大家全面了解混部技術(shù),希望對(duì)你有所啟發(fā)。
阿里巴巴混部探索簡(jiǎn)介
混部技術(shù)的出發(fā)點(diǎn),源自于對(duì)不斷增長(zhǎng)的業(yè)務(wù)和日益攀升的資源成本如何平衡的思考,我們希望用最小的資源成本,支撐更大的業(yè)務(wù)需求。
是否能夠復(fù)用已有的存量資源,來(lái)滿足新增的業(yè)務(wù),這就是混部技術(shù)發(fā)展的思想源頭。
為什么做混部?
上圖是阿里巴巴從 2009 年開(kāi)始做雙十一購(gòu)物狂歡節(jié)以來(lái)的歷年交易額曲線,對(duì)業(yè)務(wù)同學(xué)而言,這張曲線增長(zhǎng)圖比較漂亮,但是對(duì)于技術(shù)人員和運(yùn)維人員而言,這張圖背后意味著重大的挑戰(zhàn)和資源壓力。
對(duì)于做電商平臺(tái)型業(yè)務(wù)的業(yè)界同行,大家應(yīng)該知道我們?cè)谧龃黉N活動(dòng)時(shí),技術(shù)壓力往往來(lái)自于開(kāi)賣的第一秒,是一個(gè)脈沖式的洪峰流量。
阿里巴巴在線業(yè)務(wù)的雙十一零點(diǎn)峰值流量(通常用秒級(jí)交易創(chuàng)建量來(lái)描述)跟這張圖的曲線走勢(shì)基本吻合。
從 2012 年往后的年份開(kāi)始,0 點(diǎn)峰值壓力基本是上一年的兩倍。可以看到在線側(cè)業(yè)務(wù)發(fā)展如此快,主要跟我們促銷活動(dòng)密不可分。
除了在線型業(yè)務(wù),阿里巴巴還擁有較大規(guī)模的離線計(jì)算型業(yè)務(wù)。隨著 AI 技術(shù)的興起,計(jì)算型業(yè)務(wù)也呈不斷上升趨勢(shì)。截止當(dāng)前,我司大數(shù)據(jù)存儲(chǔ)量達(dá)到 KPB 級(jí)、日均任務(wù)量在百萬(wàn)級(jí)。
業(yè)務(wù)不斷增長(zhǎng),在基礎(chǔ)設(shè)施層儲(chǔ)備了大量的資源以滿足在線型和離線業(yè)務(wù)的需求。
由于在線型業(yè)務(wù)和離線型業(yè)務(wù)有很多不一致的資源使用特性,最初設(shè)計(jì)時(shí)由兩個(gè)獨(dú)立的數(shù)據(jù)中心來(lái)支撐,當(dāng)前,兩個(gè)數(shù)據(jù)中心均已達(dá)到萬(wàn)臺(tái)服務(wù)器以上的規(guī)模。
然而我們發(fā)現(xiàn),數(shù)據(jù)中心的資源體量雖然龐大,但有些資源的利用率卻并不樂(lè)觀,尤其是在線業(yè)務(wù)數(shù)據(jù)中心,日均資源利用率僅在 10% 左右。
基于以上背景,同時(shí)考慮到不同業(yè)務(wù)對(duì)資源使用和要求的差異性:
- 一方面,不同業(yè)務(wù)具備不同時(shí)段峰值的特性(分時(shí)復(fù)用資源)。
- 另一方面,對(duì)資源被響應(yīng)的容忍度不一(資源按優(yōu)先級(jí)競(jìng)爭(zhēng)和搶占),促使我們探索不同業(yè)務(wù)混合部署的技術(shù)方向。
何為混部 ( Co-location )?
簡(jiǎn)而言之,混部技術(shù)就是:將不同類型的業(yè)務(wù)進(jìn)行混合部署,用一份資源同時(shí)提供兩份不同業(yè)務(wù)的資源當(dāng)量的技術(shù)。
混部技術(shù)首先,是資源整合,把原本物理分離的業(yè)務(wù)部署于統(tǒng)一的物理資源上。
其次,進(jìn)行資源共享,同一份資源,既支撐 A 業(yè)務(wù),又支撐 B 業(yè)務(wù),在 A 和 B 業(yè)務(wù)的視角,同時(shí)看到各一份的資源。
最后,是資源合理競(jìng)爭(zhēng),既然由原來(lái)的一份資源,一生為二,變成 2 份,必然存在資源的競(jìng)爭(zhēng),需要提供合理競(jìng)爭(zhēng)的手段,使得不同資源需求的業(yè)務(wù)符合各自的服務(wù)要求。
混部最大的價(jià)值在于通過(guò)資源共享的方式充分復(fù)用資源,實(shí)現(xiàn)無(wú)中生有。而混部技術(shù)的核心目標(biāo)在于出現(xiàn)資源競(jìng)爭(zhēng)時(shí),優(yōu)先保證高等級(jí)的業(yè)務(wù)。
因此,我們希望通過(guò)調(diào)度管控和內(nèi)核隔離的手段進(jìn)行資源充分共享和競(jìng)爭(zhēng)隔離。
在線離線混部
在線型業(yè)務(wù),在混部技術(shù)里主要描述的場(chǎng)景是交易型業(yè)務(wù)、支付型業(yè)務(wù)、瀏覽型請(qǐng)求。
在線型業(yè)務(wù)的特性是實(shí)時(shí)性,對(duì)實(shí)時(shí)性的要求非常高,以及不可降級(jí)。如果用戶在選購(gòu)寶貝的過(guò)程中,出現(xiàn)長(zhǎng)時(shí)間等待(比如秒級(jí)別),很有可能該用戶就會(huì)放棄購(gòu)買(mǎi);如果需要用戶重試,估計(jì)就很難留存該用戶了。
在線型業(yè)務(wù),尤其像我們做電商的,業(yè)務(wù)量趨勢(shì)非常明顯。伴隨用戶作息時(shí)間,白天高、晚上低,白天買(mǎi)買(mǎi)買(mǎi)。
電商型平臺(tái)另一個(gè)比較大的特性是,日常的流量相對(duì)于大促而言非常低,大促當(dāng)天的秒級(jí)創(chuàng)建量可能是平常峰值量的十倍甚至百倍以上,它具有很強(qiáng)的時(shí)間場(chǎng)景性。
離線型業(yè)務(wù),比如:計(jì)算業(yè)務(wù)、算法運(yùn)算、統(tǒng)計(jì)報(bào)告、數(shù)據(jù)處理等業(yè)務(wù),業(yè)務(wù)類型相比于在線而言,可以稱之為時(shí)延不敏感。
用戶提交的作業(yè)和業(yè)務(wù),本身的處理時(shí)長(zhǎng)就在秒級(jí)、分鐘級(jí)以上,甚至有小時(shí)級(jí)、天級(jí),因此它們可以運(yùn)行一段時(shí)間后才完成。
同時(shí)它們可以接受重試,技術(shù)上我們應(yīng)該更關(guān)心的是誰(shuí)幫它重試。用戶重試不可接受,但若有系統(tǒng)幫忙重試,用戶是無(wú)感的。
此外,離線業(yè)務(wù)的時(shí)間場(chǎng)景性沒(méi)有在線那么強(qiáng),隨時(shí)都可以跑,甚至表現(xiàn)出反在線業(yè)務(wù)時(shí)間特性,其有一定概率的白天比較低,凌晨比較高。
究其原因,也表現(xiàn)出和用戶行為有關(guān),例如:用戶在提交一份統(tǒng)計(jì)型,等待凌晨 0 點(diǎn)后開(kāi)始運(yùn)行,第二天早上上班前收取報(bào)告。
從不同業(yè)務(wù)的運(yùn)行時(shí)特性分析,我們可以發(fā)現(xiàn),在線型業(yè)務(wù)和離線型業(yè)務(wù),具備業(yè)務(wù)壓力錯(cuò)峰和資源錯(cuò)峰的條件。
另一方面,在線業(yè)務(wù)明顯具備更高的優(yōu)先級(jí)和資源搶占能力,與此同時(shí),離線業(yè)務(wù)表現(xiàn)出一定的資源不足時(shí)的容忍度。這些因素,成為在線、離線業(yè)務(wù)混部技術(shù)的可行性要素。
阿里巴巴在做混部探索的歷程
在展開(kāi)技術(shù)介紹前,簡(jiǎn)述下阿里巴巴混部技術(shù)探索的歷程:
- 2014 年提出混部技術(shù)。
- 2015 年做線下測(cè)試和原形模擬。
- 2016 年大概上 200 臺(tái)機(jī)器到生產(chǎn)環(huán)境,公司內(nèi)用戶作為第一批吃螃蟹的人,運(yùn)行了一年的時(shí)間;在內(nèi)部用戶適用,線上落地后有效。
- 2017 年生產(chǎn)環(huán)境小規(guī)?;觳?,達(dá)到數(shù)千臺(tái)物理機(jī)級(jí)別,直接面向外部用戶,并且支撐了 2017 年的雙十一大促。
- 2018 年,我們希望是規(guī)?;侀_(kāi)的一年,我們希望混部能在規(guī)?;?yīng)下帶來(lái)客觀的技術(shù)紅利,打造萬(wàn)臺(tái)體量的混部集群。
阿里巴巴規(guī)模化混部成果
阿里巴巴規(guī)?;觳砍晒缦拢?/p>
- 混部規(guī)模達(dá)數(shù)千臺(tái),經(jīng)歷雙 11 交易核心場(chǎng)景驗(yàn)證;在線集群上引入離線計(jì)算任務(wù)(在離線):日常 CPU 利用率從 10% 提升到 40%。
- 離線集群上部署在線業(yè)務(wù)(離在線),支撐雙 11 大促數(shù) W 筆/s 交易創(chuàng)建能力。
- 混部環(huán)境下對(duì)在線業(yè)務(wù)服務(wù)干擾影響小于 5%。
當(dāng)前初做混部,存在兩種場(chǎng)景:
- 由在線集群提供資源做混部,用在線的資源提供額外的離線計(jì)算力,供離線業(yè)務(wù)運(yùn)行。
- 由離線集群提供資源做混部,用離線的資源創(chuàng)造在線業(yè)務(wù)交易能力(主要應(yīng)對(duì)大促等在線流量洪峰)。
在我們內(nèi)部有個(gè)簡(jiǎn)單的約定,在線和離線,誰(shuí)提供機(jī)器,誰(shuí)就排在前面,因此有在離線混部和離在線混部的叫法。
2017 年雙 11,我司官方發(fā)布的秒級(jí)創(chuàng)建量是 37.5 萬(wàn)筆每秒,離在線混部集群做到萬(wàn)筆每秒的交易體量,使用離線的資源支撐在線高峰,節(jié)約了一定量的大促資源開(kāi)銷。
同時(shí),在離線混部集群上線后,將在線原生集群的日均資源利用率從 10% 提升到了 40%,給離線提供了額外的日常計(jì)算力。
如下圖所示:
這是真實(shí)監(jiān)控系統(tǒng)的數(shù)據(jù):
- 右圖這個(gè)代表非混部場(chǎng)景,時(shí)間點(diǎn)大概是 7 點(diǎn)到 11 點(diǎn)左右,在線中心利用率是 10%。
- 左圖這個(gè)代表混部場(chǎng)景的數(shù)據(jù),平均利用率在 40% 左右,抖動(dòng)性比較大,因?yàn)殡x線業(yè)務(wù)本身具有比較大的波動(dòng)性。
節(jié)約了這么多資源,業(yè)務(wù)(尤其在線業(yè)務(wù))的服務(wù)質(zhì)量是不是變得很差呢?
以下是負(fù)責(zé)交易處理的在線核心服務(wù)的 RT 曲線圖,其中綠色曲線代表混部集群中的 RT 表現(xiàn),黃色曲線為非混部集群的 RT 表現(xiàn)。
可以看出,兩條曲線基本重合,混部場(chǎng)景中的平均 RT 較普通集群差 5% 以內(nèi),符合服務(wù)質(zhì)量要求:
混部方案及架構(gòu)
由于混部技術(shù)跟公司的業(yè)務(wù)體系、運(yùn)維體系存在一定的關(guān)聯(lián)性,因此文中可能會(huì)提及不同的技術(shù)背景,由于篇幅關(guān)系只做了簡(jiǎn)單引述,未做詳細(xì)介紹。
下面將簡(jiǎn)單介紹混部方案,包括:整體架構(gòu)、混部場(chǎng)景業(yè)務(wù)部署策略、混部集群資源管理及分配機(jī)制、混部場(chǎng)景下的業(yè)務(wù)運(yùn)行策略等。
混部整體架構(gòu)
混部技術(shù)抽象來(lái)說(shuō),分為三個(gè)層面:
- 合并資源,整合資源池。既可以給 A 業(yè)務(wù)用,也可以給 B 業(yè)務(wù)用。
- 我們要做到很好的資源調(diào)度與分配。在做混部技術(shù)之前,阿里巴巴集團(tuán)已有多個(gè)資源調(diào)度平臺(tái),其中在線側(cè)資源調(diào)度系統(tǒng)稱之為 Sigma,離線側(cè)資源調(diào)度系統(tǒng)稱為 Fuxi。
- 混部技術(shù)的挑戰(zhàn)在于做好資源不同業(yè)務(wù)資源分配,統(tǒng)一多個(gè)資源調(diào)度系統(tǒng),并進(jìn)行決策仲裁。
運(yùn)行時(shí)做好資源競(jìng)爭(zhēng)時(shí)的隔離與優(yōu)先搶占。
上圖的架構(gòu)表現(xiàn)為一定的層次性:最底層,是基礎(chǔ)設(shè)施層,整個(gè)集團(tuán)的數(shù)據(jù)中心是統(tǒng)一的,不管上層怎么用,機(jī)器、網(wǎng)絡(luò)、等等的硬件設(shè)施及配套都是同一套。
往上一層,是資源層,我們要做混部,必須打通池子,把資源放在一起管控。
再往上一層,是調(diào)度層,分為服務(wù)端和客戶端。在線是 Sigma,離線是 Fuxi,我們把各業(yè)務(wù)自己的資源調(diào)度平臺(tái)稱為一層調(diào)度器。
在混部架構(gòu)中,引入“0 層”調(diào)度器,主要負(fù)責(zé)協(xié)調(diào)兩個(gè)一層調(diào)度器的資源管控和資源分配決策,它也有自己的 Agent。
最上面一層,是面向業(yè)務(wù)的資源調(diào)度與管控層,有些經(jīng)一層調(diào)度器直接交付資源給業(yè)務(wù),有些還會(huì)涉及二層,例如:Hippo 等。
而在混部架構(gòu)中還有一個(gè)特殊混部管控層,其主要負(fù)責(zé)混部模式下業(yè)務(wù)運(yùn)行的機(jī)制的編排與執(zhí)行,以及對(duì)物理資源的配置管控、業(yè)務(wù)監(jiān)控和決策判斷。
以上是資源分配的體系架構(gòu),由此可以將機(jī)器和資源分配給不同的業(yè)務(wù),然而在分配完后,運(yùn)行時(shí)的業(yè)優(yōu)先級(jí)和 SLA 如何保障?在線業(yè)務(wù)和離線業(yè)務(wù)同時(shí)跑在一個(gè)物理機(jī)上,如果業(yè)務(wù)間發(fā)生資源爭(zhēng)搶怎么辦?
我們通過(guò)內(nèi)核隔離來(lái)做到運(yùn)行時(shí)資源保障,我們開(kāi)發(fā)了很多內(nèi)核特性,支持不同類型資源隔離、切換和降級(jí)。內(nèi)核相關(guān)機(jī)制將在第三章中介紹。
混部場(chǎng)景在線業(yè)務(wù)部署策略
本小節(jié)將介紹如何將混部技術(shù)運(yùn)用于在線業(yè)務(wù)場(chǎng)景,為電商平臺(tái)提供交易創(chuàng)建能力。
首先,混部技術(shù)由于其新穎性及包含較多的技術(shù)改造點(diǎn),為了規(guī)避風(fēng)險(xiǎn),我們希望能夠在有限的、可控的范圍內(nèi)進(jìn)行小規(guī)模試驗(yàn)。
因此我們基于我司電商(在線)單元化部署架構(gòu)進(jìn)行了業(yè)務(wù)部署策略,將混部集群構(gòu)建出獨(dú)立的交易單元,一方面確?;觳考夹g(shù)在局部范圍內(nèi)收斂不影響全局,另一方面可以到單元的業(yè)務(wù)閉環(huán)和獨(dú)立的資源調(diào)配管控。
在電商在線型體系中,我們把買(mǎi)家購(gòu)買(mǎi)行為相關(guān)的全鏈條服務(wù),閉環(huán)到一個(gè)服務(wù)集合中,將這個(gè)服務(wù)集合定義為交易單元。
交易單元可以做到:買(mǎi)家交易行為相關(guān)的所有請(qǐng)求與指令,都在這個(gè)單元內(nèi)閉環(huán)完成,這就是異地多活-單元化部署架構(gòu)。
混部技術(shù)實(shí)施中的另外一項(xiàng)約束,來(lái)自于硬件資源限制。由于離線在線業(yè)務(wù)對(duì)硬件資源的訴求不一,而各自的存量資源都不一定適配另一方的業(yè)務(wù),在實(shí)施中我們遇到了存量資源的適配問(wèn)題,最為強(qiáng)烈的體現(xiàn)在磁盤(pán)。
離線業(yè)務(wù)的原生資源中,有大批低成本的 HDD 盤(pán)資源,并且離線在運(yùn)行中幾乎會(huì)將 HDD 盤(pán)用滿。這樣對(duì)在線業(yè)務(wù)來(lái)說(shuō)基本就不可用了。
為了屏蔽磁盤(pán) IOPS 性能問(wèn)題,我們引入了計(jì)算存儲(chǔ)分離技術(shù)。計(jì)算存儲(chǔ)分離技術(shù)是我們集團(tuán)內(nèi)在演進(jìn)的另一項(xiàng)技術(shù)。
它提供中心式的計(jì)算與存儲(chǔ)服務(wù),計(jì)算節(jié)點(diǎn)通過(guò)網(wǎng)絡(luò)連接存儲(chǔ)中心,可以屏蔽計(jì)算節(jié)點(diǎn)對(duì)本地磁盤(pán)的依賴。
存儲(chǔ)集群可以提供不同的存儲(chǔ)能力。在線業(yè)務(wù)對(duì)存儲(chǔ)性能要求高,吞吐量卻不大,因此我們通過(guò)計(jì)算存儲(chǔ)分離技術(shù),獲得了有 IOPS 保障的遠(yuǎn)程存儲(chǔ)服務(wù)。
混部集群資源分配
說(shuō)完整體架構(gòu),我們?cè)購(gòu)馁Y源的角度來(lái)看看混部集群的資源分配,是如何做到無(wú)中生有的。
首先是單機(jī)角度的資源,主要是 CPU、MEM、Disk、Net,下文將陳述如何實(shí)現(xiàn)額外資源的獲得。
先來(lái)看看 CPU,純?cè)诰€集群的日常資源利用差不多在 10% 左右,可以說(shuō)在線業(yè)務(wù)無(wú)法在日常狀況下將 CPU 充分地利用起來(lái),而當(dāng)大促等促銷場(chǎng)景時(shí),在線將會(huì)在瞬間達(dá)到一個(gè) CPU 使用高峰。
離線任務(wù)則更像是吸水的海綿,其業(yè)務(wù)體量巨大,對(duì)于 CPU 計(jì)算能力,有多少就能用多少。有了以上業(yè)務(wù)對(duì)資源使用的背景,促成了混部技術(shù)中讓 CPU 一生為二。
CPU 資源在內(nèi)核運(yùn)行機(jī)制中,以時(shí)間片輪詢分配給不同的進(jìn)程,我們將 1 個(gè) CPU 核,同時(shí)分配給在線業(yè)務(wù)和離線任務(wù),并確保在線有高的優(yōu)先級(jí)。
當(dāng)在線閑時(shí),離線可以使用該 CPU,而當(dāng)在線需要使用時(shí),將離線任務(wù)搶占并掛起。
上文有提到兩個(gè)資源調(diào)度器(在線調(diào)度器 Sigma 和離線調(diào)度器 Fuxi),在線業(yè)務(wù)以 Pouch 容器做為資源單元,Pouch 容器會(huì)綁定一定的 CPU 核,供某個(gè)在線業(yè)務(wù)使用。Sigma 會(huì)認(rèn)為整臺(tái)物理機(jī)都屬于在線。
同時(shí)候,離線 Fuxi 調(diào)度器認(rèn)為這臺(tái)機(jī)器屬于離線,它會(huì)把整體機(jī)器的 CPU 資源作為可分配資源分配給離線任務(wù)。通過(guò)這種方式,就做到 Double CPU 資源的效果。
將同一份 CPU 分配給兩個(gè)業(yè)務(wù)運(yùn)行,一定會(huì)存在競(jìng)爭(zhēng)的風(fēng)險(xiǎn),這就依賴核心內(nèi)核技術(shù)來(lái)進(jìn)行 CPU 隔離和調(diào)度,這些會(huì)在下文中提到。
CPU 可以被多進(jìn)程分享時(shí)間片,但 MEM 和 Disk 資源就比較棘手,其作為消耗型資源,分給一方使用,就不能被另外的進(jìn)程使用了,否則就會(huì)被新進(jìn)程給覆蓋。如何進(jìn)行內(nèi)存層面的復(fù)用就成為另一個(gè)研究重點(diǎn)。
如圖(右上)所示,介紹了混部技術(shù)中內(nèi)存超賣使用的機(jī)制,圖上側(cè)的括弧表示在線內(nèi)存分配額(藍(lán)色)和離線內(nèi)存分配額(紅色),而圖下側(cè)的括弧表示在線內(nèi)存使用額(藍(lán)色)和離線內(nèi)存使用額(紅色)。
圖中可見(jiàn),離線在使用內(nèi)存時(shí),多用了分配給在線的內(nèi)存額度,通過(guò)這種機(jī)制,實(shí)現(xiàn)內(nèi)存超賣使用。
為何在線內(nèi)存允許被超賣使用,由于我們公司在線業(yè)務(wù)以 Java 語(yǔ)言為主,分配到容器的內(nèi)存一方面用于 Java 堆內(nèi)存開(kāi)銷,剩余的內(nèi)存作為 Cache 使用。
這就造成在線容器內(nèi)存在一定量的空閑內(nèi)存,我們通過(guò)精細(xì)地內(nèi)存使用量監(jiān)聽(tīng),并結(jié)合一定的防護(hù)機(jī)制,把在線容器分配的空閑內(nèi)存分配給離線使用。
但由于這部分內(nèi)存屬于在線,對(duì)離線而言無(wú)法強(qiáng)保障,因此離線會(huì)把相對(duì)低等級(jí)可降級(jí)的業(yè)務(wù)調(diào)度到這些資源上。
Disk 方面,磁盤(pán)容量對(duì)于雙方業(yè)務(wù)還是比較充分的,故未做過(guò)多約束。而磁盤(pán) IO 方面,做了一系列帶寬限速,以約束離線任務(wù)使用的最大 IO 小于一定數(shù)量,避免完全擠占在線及系統(tǒng)的 IO。
另外,單機(jī) Net 層面,由于當(dāng)前容量較為富余,當(dāng)前不是瓶頸點(diǎn),不做過(guò)多介紹。
大促資源退讓機(jī)制:站點(diǎn)快上快下
以上談了單機(jī)層面的資源如何做到共享與競(jìng)爭(zhēng)隔離,再讓我們一起看看從整個(gè)資源集群層面,如果通過(guò)整體的運(yùn)維管控,實(shí)現(xiàn)資源的遷移和最大化利用。
混部技術(shù)中,我們追求資源利用的極致,讓不該用的業(yè)務(wù)場(chǎng)景不要浪費(fèi)每一份資源。
于是我們提出了站點(diǎn)快上快下的概念,其面向在線業(yè)務(wù)而言,如前文所述,每個(gè)混部集群即為一個(gè)在線交易單元,其獨(dú)立支撐一小部分用戶的交易行為。
因此我們也將其稱為“站點(diǎn)”,我們把在線站點(diǎn)的整體容量做伸縮變換,就是快上快下的過(guò)程。
如下圖所示:
在線型業(yè)務(wù)在日常運(yùn)行和特殊促銷活動(dòng)時(shí)的業(yè)務(wù)壓力表現(xiàn)出巨大的偏差,雙 11 期間有可能是日常流量的百倍以上,這個(gè)特性奠定了快上快下方案的可行性基礎(chǔ)。
如上圖所示,把兩個(gè)大的方塊圖,比作是在線站點(diǎn)整個(gè)容量,每一個(gè)小方塊代表某個(gè)在線服務(wù)的容器數(shù)量,每一行代表一個(gè)在線服務(wù)的容量?jī)?chǔ)備(容器總數(shù))。
我們通過(guò)對(duì)整個(gè)站點(diǎn)的容量規(guī)劃,實(shí)現(xiàn)日常狀態(tài)和大促狀態(tài)的容量模型切換,從而使得精細(xì)化地使用資源。
我們電商業(yè)務(wù)通常以一個(gè)業(yè)務(wù)目標(biāo),比如秒級(jí)交易創(chuàng)建筆數(shù),作為站點(diǎn)容量評(píng)估的基準(zhǔn)。
通常而言,在日常態(tài),單個(gè)站點(diǎn)保留 K 筆/s 的容量已經(jīng)足夠,而等到大促臨近,我們會(huì)將站點(diǎn)切換至大促態(tài),通常是 W 筆/s 容量級(jí)別。
通過(guò)以上模式,從整個(gè)站點(diǎn)的維度,把不必要的在線容量進(jìn)行整體縮容,以達(dá)到充分釋放資源,如此就可以讓離線業(yè)務(wù)拿到更多的物理資源,這就是快上快下機(jī)制。
站點(diǎn)快上過(guò)程(從低容量到高容量),執(zhí)行效率在一小時(shí)內(nèi)。站點(diǎn)快下過(guò)程(從高容量到低容量),執(zhí)行效率在半小時(shí)內(nèi)。
在日常狀態(tài)下,混部站點(diǎn)以最小容量模型支持日常在線流量,而當(dāng)大型促銷或全鏈路壓測(cè)前夕,將把混部站點(diǎn)迅速拉起到比較高的容量狀態(tài),并持續(xù)運(yùn)行幾個(gè)小時(shí)后,進(jìn)行站點(diǎn)快下。
通過(guò)這個(gè)機(jī)制,我們確保絕大部分地時(shí)間,在線僅占用極少的資源,而 90% 以上的資源均被離線充分使用。
下圖展示了快上快下各階段的資源分配細(xì)節(jié):
上圖資源分布的情況,左、中、右三個(gè)矩形框分別代表:日常態(tài)、壓測(cè)態(tài)、大促態(tài)混部集群的資源分配狀況。
其中,紅色代表離線,綠色代表在線。而每個(gè)矩形框中,又分為上、中、下三層,上層表示業(yè)務(wù)運(yùn)行及量級(jí);中層代表資源(宿主機(jī))分布,其中藍(lán)色小方塊代表混部資源;下層代表集群層面資源的分配比例及運(yùn)行模式。
在日常態(tài)(左矩形框),離線占用絕大部分資源,一部分通過(guò)分配獲得,小部分通過(guò)運(yùn)行時(shí)爭(zhēng)搶獲得(在線不使用即會(huì)被離線使用)。
而等到壓測(cè)態(tài)(中)和大促態(tài)(右),離線會(huì)進(jìn)行資源退讓,基本達(dá)到離線、在線各 50% 的分配比例,在線高壓力時(shí),離線不進(jìn)行超賣爭(zhēng)搶,而在準(zhǔn)備期內(nèi)(大促態(tài)但非高壓力時(shí)間),離線仍然可以爭(zhēng)搶在線空閑資源。
在雙 11 大促當(dāng)天,我們?yōu)榱烁_定地保障在線業(yè)務(wù)穩(wěn)定,離線會(huì)做一定程度的業(yè)務(wù)降級(jí)。
日常資源退讓機(jī)制:分時(shí)復(fù)用
上文呈述的快上快下機(jī)制是在線站點(diǎn)容量在大促態(tài)和日常態(tài)的切換過(guò)程,除此之外,在線業(yè)務(wù)在白天和凌晨也表現(xiàn)出一種規(guī)律性極強(qiáng)地流量高峰和低谷現(xiàn)象。
為了更進(jìn)一步提升資源利用率,我們還提出了日常情況下的資源退讓機(jī)制:分時(shí)復(fù)用。
上圖是在線業(yè)務(wù)日常表現(xiàn)出的一天的流量周期曲線,凌晨會(huì)比較低,白天比較高,我們針對(duì)每一個(gè)在線服務(wù),做到以天為周期的容量精細(xì)化伸縮,以最小化在線業(yè)務(wù)的資源使用,從而出讓資源給離線使用。
混部核心技術(shù)
混部核心技術(shù)主要分為兩方面:
- 內(nèi)核隔離技術(shù)
- 資源調(diào)度技術(shù)
由于涉及內(nèi)容均涉及專業(yè)領(lǐng)域,考慮到當(dāng)前文章篇幅,下文僅羅列了一系列技術(shù)點(diǎn),并不做細(xì)節(jié)展開(kāi)。
內(nèi)核隔離技術(shù)簡(jiǎn)介
我們?cè)趦?nèi)核各資源類型層面均做了較強(qiáng)地隔離特性開(kāi)發(fā),包括:CPU 維度、IO 維度、內(nèi)存維度、網(wǎng)絡(luò)維度。
整體上基于 CGroup 進(jìn)行在線、離線業(yè)務(wù)組別劃分,以區(qū)分兩類業(yè)務(wù)的內(nèi)核優(yōu)先級(jí)。
在 CPU 維度,我們實(shí)現(xiàn)了超線程對(duì)、調(diào)度器、三級(jí)緩存等的隔離特性。在內(nèi)存維度,實(shí)現(xiàn)了內(nèi)存帶寬隔離和 OOM kill 優(yōu)先級(jí)。
磁盤(pán)維度實(shí)現(xiàn)了 IO 帶寬限速。網(wǎng)絡(luò)維度,單機(jī)層面流量控制,還做了網(wǎng)絡(luò)全鏈條層的分等級(jí) QoS 保障。
混部?jī)?nèi)核隔離技術(shù)的詳細(xì)介紹大家可以自行搜索獲取,下文僅展開(kāi)有關(guān)內(nèi)存超賣機(jī)制的介紹。
Memory 動(dòng)態(tài)超賣機(jī)制:
如上圖中實(shí)線括弧所示,紅色、藍(lán)色分別代表離線、在線 CGroup 的內(nèi)存分配額,其和值代表整機(jī)可分配的內(nèi)存(已去除系統(tǒng)開(kāi)銷內(nèi)存)。
其下還有一個(gè)紫色實(shí)線括弧,代表離線的超賣內(nèi)存配額,其大小值因運(yùn)行時(shí)變化,是通過(guò)監(jiān)聽(tīng)運(yùn)行時(shí)發(fā)現(xiàn)在線未使用的空閑內(nèi)存大小來(lái)決定的。
如圖中上側(cè)虛線括弧,代表離線、在線實(shí)際使用內(nèi)存,其中,在線業(yè)務(wù)通常而言不會(huì)將內(nèi)存用滿,其剩余的內(nèi)存,離線作為其超賣配額進(jìn)行使用。
為了防止在線突發(fā)性內(nèi)存需求,在機(jī)制中預(yù)留了一定的內(nèi)存作為 buffer。通過(guò)以上機(jī)制,實(shí)現(xiàn)了離線超賣使用內(nèi)存。
資源調(diào)度技術(shù)
混部技術(shù)的第二大核心技術(shù)為資源調(diào)度技術(shù),混部場(chǎng)景中的資源調(diào)度,又可分為原生的一層資源調(diào)度(在線資源調(diào)度技術(shù) Sigma 和離線資源調(diào)度技術(shù)Fuxi)和混部 0 層調(diào)度。
在線資源調(diào)度:Sigma
在線資源調(diào)度器主要基于應(yīng)用資源畫(huà)像,進(jìn)行合理地資源調(diào)度與分配,包括一系列裝箱問(wèn)題、親和/互斥規(guī)則、全局最優(yōu)解等,并從全局維度進(jìn)行應(yīng)用容量自動(dòng)伸縮、分時(shí)復(fù)用以及戰(zhàn)斗維度快上快下。
上圖是在線一級(jí)調(diào)度 Sigma 的架構(gòu)圖,其兼容 Kubernetes API,基于阿里 Pouch 容器技術(shù)進(jìn)行調(diào)度,并且進(jìn)過(guò)多年阿里大規(guī)模流量及雙 11 大促驗(yàn)證。
離線資源調(diào)度:Fuxi
離線集群調(diào)度器主要實(shí)現(xiàn)分等級(jí)任務(wù)調(diào)度、動(dòng)態(tài)內(nèi)存超賣、無(wú)損/有損離線降級(jí)方案等。
這是離線資源調(diào)度 Fuxi 的運(yùn)行機(jī)制圖,其基于 Job 進(jìn)行調(diào)度,面向海量數(shù)據(jù)處理和大規(guī)模計(jì)算類型的復(fù)雜應(yīng)用,提供了一個(gè)數(shù)據(jù)驅(qū)動(dòng)的多級(jí)流水線并行計(jì)算框架。
其在表述能力上兼容 MapReduce,Map-Reduce-Merge,Cascading,F(xiàn)lumeJava 等多種編程模式,高可擴(kuò)展性,支持十萬(wàn)以上級(jí)的并行任務(wù)調(diào)度,并能根據(jù)數(shù)據(jù)分布優(yōu)化網(wǎng)絡(luò)開(kāi)銷。
統(tǒng)一資源調(diào)度:0 層
混部場(chǎng)景中,離線和在線業(yè)務(wù)通過(guò)各自的一層資源調(diào)度器進(jìn)行資源調(diào)度和分配,但在一層調(diào)度器下面,還有一個(gè)統(tǒng)一資源調(diào)度層—0 層,其職能為雙方資源的協(xié)調(diào)與仲裁,通過(guò)監(jiān)聽(tīng)與決策,合理分配資源。
以下為混部資源調(diào)度的整體架構(gòu)圖:
未來(lái)展望
混部技術(shù)的未來(lái)發(fā)展,將往三個(gè)方向演進(jìn),分別是:規(guī)?;⒍嘣途?xì)化方向。
規(guī)?;涸?2018 年,將會(huì)做到萬(wàn)臺(tái)級(jí)別的混部,這將是一次量級(jí)的飛躍,我們希望把混部作為集團(tuán)內(nèi)部資源交付的基礎(chǔ)能力,更大規(guī)模地節(jié)約資源成本。
多元化:未來(lái)希望能支持更多的業(yè)務(wù)類型、更多的硬件資源類型,以及更復(fù)雜的環(huán)境,甚至希望可以打通云上資源,阿里云和公司內(nèi)部資源混部互通。
精細(xì)化:未來(lái)希望能將業(yè)務(wù)的資源畫(huà)像刻畫(huà)得更加細(xì)致,調(diào)度層面時(shí)效更實(shí)時(shí)、調(diào)度精度更細(xì)致,內(nèi)核隔離更加精細(xì),監(jiān)控及運(yùn)維管控更加實(shí)時(shí)精準(zhǔn)。