每年雙十一創(chuàng)造奇跡的背后,是巨大的成本投入。為了完成對流量峰值的支撐,我們需要大量的計(jì)算資源,而在平時,這些資源往往又是空閑的。另一方面,為了在極端情況下,如機(jī)房整體斷電等還能保障阿里巴巴的業(yè)務(wù)不受損失,也需要在全國各地建立冗余資源。而且就算是一天當(dāng)中,在線服務(wù)的負(fù)載也是不一樣的,白天一般情況下要比凌晨高得多。根據(jù)蓋特納和麥肯錫前幾年的調(diào)研數(shù)據(jù),全球的服務(wù)器的CPU 利用率只有 6% 到 12%。即使通過虛擬化技術(shù)優(yōu)化,利用率還是只有 7% -17%,而阿里巴巴的在線服務(wù)整體日均利用率也在 10% 左右。
另一方面,全球從 IT時代全面走向了 DT時代,現(xiàn)在又在向更深入的 AI 時代邁進(jìn)。各各樣的大數(shù)據(jù)處理框架不斷涌現(xiàn),從 hadoop 到 Spark,從 JStorm 到 Flink,甚至包括深度學(xué)習(xí)框架 Tensorflow 的出現(xiàn),成千上萬的數(shù)據(jù)分析背后是大量的計(jì)算任務(wù),占用了大量的計(jì)算資源。由于計(jì)算任務(wù)占用的計(jì)算量很高,CPU 水位通常在50%-60% 以上,不同于在線服務(wù),計(jì)算任務(wù)的峰值通常出現(xiàn)在凌晨,水位甚至能達(dá)到 70% 以上。所以我們往往就會建立獨(dú)立的計(jì)算任務(wù)集群。
很多人都被車堵過,而堵車的時候,并不是所有的車道都在堵車。有一個比較有趣的情況,我們稱之為潮汐現(xiàn)象,而它造成的問題是在早高峰的時候是進(jìn)城方向堵車,而晚高峰是出城方向堵。而為了緩解這個問題,我們使用了潮汐車道的方式。
那么同樣的原理,是否如果能讓這兩個集群混合起來部署,讓計(jì)算任務(wù)的一部分任務(wù)跑到在線服務(wù)的資源之上,把在線服務(wù)空閑的資源利用起來呢?答案是肯定的。
混部技術(shù)簡介
混部技術(shù)示意圖
把集群混合起來,將不同類型的任務(wù)調(diào)度到相同的物理資源上,通過調(diào)度,資源隔離等控制手段 , 在保障 SLO 的基礎(chǔ)上,充分使用資源能力,極大降低成本,我們稱這樣的技術(shù)為混部(Co-loaction)。
打個比方,跑在容器里的在線服務(wù)就像石塊;而計(jì)算任務(wù)我們把它比喻成沙子和水。當(dāng)在線壓力小的時候,計(jì)算任務(wù)就占住那些空隙,把空閑的資源都使用起來,而當(dāng)在線忙的時候,計(jì)算任務(wù)就立即退出那些空隙,把資源還給在線業(yè)務(wù)。這樣的技術(shù)一方面在平時,我們可以極大地提升資源的利用率;另一方面,在大促活動需要突增在線服務(wù)器的時候,又可以通過在線業(yè)務(wù)占用計(jì)算任務(wù)資源的方式,來頂住那短暫的峰值壓力。
從原理中我們可以看到可以混部在一起的任務(wù)有兩個比較重要的特征:
1.可以劃分優(yōu)先級:一定需要優(yōu)先級比較低的任務(wù),它們能像水和沙子一樣,隨時能被趕走,而不會受到不可承受的影響,讓優(yōu)先級高的任務(wù)不受干擾。在線的特點(diǎn)是:峰值壓力時間不長,香港服務(wù)器租用,對延時比較敏感,業(yè)務(wù)的壓力抖動比較厲害,典型的如早上 10 點(diǎn)的聚劃算活動,就會在非常短的時間內(nèi),造成交易集群的壓力瞬間上升 10 幾倍,對于穩(wěn)定的要求非常高,在混部的時候,必須要保證在線的通暢,需要有極強(qiáng)的抗干擾能力。而計(jì)算任務(wù)的特點(diǎn)是:平時的壓力比較高,相對來說計(jì)算量可控,并且延遲不敏感,失敗后也可以重跑。至少需要幾分鐘跑完的計(jì)算任務(wù),相對于幾秒甚至幾十秒的延遲,并不會產(chǎn)生嚴(yán)重的問題,正好可以承提起水和沙子的角色。
2.資源占用互補(bǔ)性:兩種任務(wù)在不同的時間點(diǎn)對水位的占用不一樣。如在線服務(wù)是,平時比較低,大促時比較高;凌晨比較低,白天比較高。而計(jì)算任務(wù)則反過來,平時比較高,服務(wù)器租用 免備案服務(wù)器,大促時可以降級;凌晨非常高,白天卻要低一些。
這種方式帶來的成本節(jié)省是非常巨大的:假設(shè)數(shù)據(jù)中心有 N 臺服務(wù)器,利用率從R1 提高到 R2,不考慮其他實(shí)際制約因素的情況下,節(jié)約 X 臺,那么理想的公式是:
N*R1 = (N-X)*R2
=> X*R2 = N*R2 – N*R1
=> X = N*(R2-R1)/R2
也就是說如果企業(yè)有 10 萬臺服務(wù)器,利用率從 28% 提升到 40%,代入上述公式,就能節(jié)省出 3 萬臺機(jī)器。假設(shè)一臺機(jī)器的成本為 2 萬元,那么節(jié)約成本就有6 個億。
2015 年,Google 發(fā)表了 Borg 論文,其中就提到了在線服務(wù)與計(jì)算任務(wù)之間的混合運(yùn)行,也就是我們說的混部技術(shù)。Borg 論文中描述了 Google 由于采用了這項(xiàng)技術(shù),為 Google 節(jié)省了 20%-30% 的機(jī)器規(guī)模。
混部技術(shù)的歷程
阿里巴巴早期混合云架構(gòu)