北京2023年10月27日 /美通社/ -- 近日,浪潮云海首席科學(xué)家張東、資深研究員亓開元在《中國計(jì)算機(jī)學(xué)會(huì)通訊》2023年第9期發(fā)表論文《面向一云多芯的系統(tǒng)設(shè)計(jì)方法》,深入分析一云多芯背后的關(guān)鍵挑戰(zhàn)問題,闡釋面向一云多芯的系統(tǒng)設(shè)計(jì)方法和關(guān)鍵技術(shù)路線,并在此基礎(chǔ)上,描繪了一云多芯三階段發(fā)展路線圖,為促進(jìn)一云多芯向應(yīng)用感知、架構(gòu)無感知的目標(biāo)迭代演進(jìn)提供新思路。
近年來,巨大的市場需求加速了我國云計(jì)算軟硬件的發(fā)展,從芯片、整機(jī)、云操作系統(tǒng)、中間件到應(yīng)用軟件的云計(jì)算創(chuàng)新鏈、產(chǎn)業(yè)鏈已初步形成。隨著行業(yè)"上云用數(shù)賦智"進(jìn)程的不斷加速和深化,應(yīng)用場景呈現(xiàn)多樣化趨勢,越來越多的數(shù)據(jù)中心選擇多元化的算力構(gòu)建,給融合池化管理和靈活彈性調(diào)度帶來了新的挑戰(zhàn)。
中央處理器(CPU)作為應(yīng)用最廣泛的算力器件,多廠商、不同架構(gòu)疊加組合造成的多元異構(gòu)現(xiàn)象尤為突出。Intel、AMD等x86架構(gòu)仍是數(shù)據(jù)中心的主導(dǎo)力量,但占比逐步縮減;ARM架構(gòu)憑借運(yùn)算核心多、功耗低等優(yōu)勢,發(fā)展勢頭強(qiáng)勁;開源的RISC-V架構(gòu)也逐步興起。同時(shí),在全球產(chǎn)業(yè)鏈重構(gòu)的背景下,我國核心器部件的研發(fā)和生產(chǎn)也進(jìn)入蓬勃發(fā)展階段,但因起步較晚、技術(shù)路線各異、發(fā)展水平不一,多元異構(gòu)處理器將會(huì)長期并存發(fā)展。
一云多芯關(guān)鍵科學(xué)問題
云計(jì)算作為一種追求性價(jià)比的算力供給模式,其處理器的升級(jí)、換代和擴(kuò)容正從單一架構(gòu)向多元異構(gòu)轉(zhuǎn)變。在多元異構(gòu)處理器功能、性能和可靠性存在差異的情況下,為滿足高效穩(wěn)定的技術(shù)需求,實(shí)現(xiàn)應(yīng)用跨處理器低成本或自由切換,規(guī)避供應(yīng)風(fēng)險(xiǎn),保障關(guān)鍵業(yè)務(wù)長期穩(wěn)定運(yùn)行,"一云多芯"成為云計(jì)算發(fā)展的必然趨勢。
互聯(lián)網(wǎng)行業(yè)面向公有云的一云多芯工作開始得較早,憑借技術(shù)和資金儲(chǔ)備自研高性價(jià)比的處理器,如亞馬遜推出基于ARM的Graviton處理器,打破了對(duì)x86架構(gòu)的依賴。針對(duì)行業(yè)私有云南向資源多樣性與北向應(yīng)用復(fù)雜性的矛盾,目前國內(nèi)金融、電信、能源等行業(yè)也已開始進(jìn)行一云多芯的研究和建設(shè),早期通過云管理層實(shí)現(xiàn)納管多個(gè)異構(gòu)資源池,雖然能形成統(tǒng)一入口,但由于資源池割裂、應(yīng)用無法跨架構(gòu)編排,造成資源供給效率低下。
云海云操作系統(tǒng)(InCloud OS)、Apsara Stack、EasyStack等通過單一資源池實(shí)現(xiàn)異構(gòu)資源的統(tǒng)一調(diào)度和互聯(lián)互通,但當(dāng)前階段主要解決"多芯"的混部問題,距離以應(yīng)用為中心的跨架構(gòu)運(yùn)行和低成本切換尚有較大差距。為滿足多芯共存條件下業(yè)務(wù)的穩(wěn)定運(yùn)行、平滑切換和彈性伸縮,如下科學(xué)問題和技術(shù)難題亟待解決。
1.應(yīng)用跨架構(gòu)可移植及運(yùn)行環(huán)境等價(jià)性問題。應(yīng)用程序運(yùn)行在多芯系統(tǒng)不同處理器架構(gòu)的節(jié)點(diǎn)上,首先需要確保程序本身的跨架構(gòu)可移植。進(jìn)一步,層次化、模塊化的復(fù)雜應(yīng)用在異構(gòu)節(jié)點(diǎn)間進(jìn)行動(dòng)態(tài)遷移、遠(yuǎn)程調(diào)用或水平擴(kuò)展,如何保障運(yùn)行環(huán)境(操作系統(tǒng)、運(yùn)行時(shí)、依賴庫等)的跨架構(gòu)等價(jià)可執(zhí)行成為挑戰(zhàn)(見圖1)。
2.多元異構(gòu)算力量化分析和負(fù)載感知調(diào)度問題。多元異構(gòu)CPU性能差異達(dá)2~10倍,附加異構(gòu)加速單元的節(jié)點(diǎn)間計(jì)算能力的差異更是數(shù)量級(jí)的。應(yīng)用在異構(gòu)節(jié)點(diǎn)間遷移、切換或伸縮時(shí),需要保證用戶體驗(yàn)前后一致,遵守業(yè)務(wù)的服務(wù)水平協(xié)議(Service Level Agreement,SLA)。如何針對(duì)多元異構(gòu)算力等價(jià)關(guān)系進(jìn)行評(píng)估建模和量化分析,實(shí)現(xiàn)負(fù)載感知均衡調(diào)度和自適應(yīng)彈性伸縮成為關(guān)鍵科學(xué)問題。
3.非對(duì)等架構(gòu)下分布式應(yīng)用的狀態(tài)一致性保證問題。相比于傳統(tǒng)分布式節(jié)點(diǎn)的對(duì)等性,一云多芯應(yīng)用分布的異構(gòu)節(jié)點(diǎn)非對(duì)等性不容忽視。針對(duì)非對(duì)等分布式云原生應(yīng)用,實(shí)現(xiàn)有狀態(tài)任務(wù)在異構(gòu)節(jié)點(diǎn)間高效一致性共識(shí)協(xié)商和數(shù)據(jù)同步,以及無狀態(tài)任務(wù)的非侵入流量動(dòng)態(tài)控制和平滑切分,成為跨架構(gòu)云原生應(yīng)用編排的關(guān)鍵技術(shù)難點(diǎn)。
一云多芯系統(tǒng)設(shè)計(jì)和關(guān)鍵技術(shù)
ACM圖靈獎(jiǎng)獲得者尼古拉斯·沃斯(Niklaus Wirth)提出了著名的公式"程序=數(shù)據(jù)結(jié)構(gòu)+算法",揭示了程序的時(shí)間和空間本質(zhì)。一云多芯系統(tǒng)作為一種軟件定義外延,除了數(shù)據(jù)平面的指令邏輯和數(shù)據(jù)狀態(tài)兩個(gè)時(shí)空要素外,還包括控制平面對(duì)多元異構(gòu)資源的管控。因此,一云多芯系統(tǒng)可以抽象為"資源管理+運(yùn)行程序+數(shù)據(jù)狀態(tài)"。
其中,資源管理通過軟件定義提供計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)和安全等硬件資源抽象,以虛擬機(jī)、容器、裸金屬(bare metal)等粒度為應(yīng)用提供資源封裝及運(yùn)行環(huán)境;運(yùn)行程序按照分層解耦分為資源層、平臺(tái)層和應(yīng)用層,例如,承載用戶業(yè)務(wù)的應(yīng)用程序、資源管理程序;數(shù)據(jù)狀態(tài)是指程序運(yùn)行所依賴的內(nèi)存瞬時(shí)數(shù)據(jù)、數(shù)據(jù)庫持久化數(shù)據(jù)及流量狀態(tài)等。
根據(jù)上述定義,一云多芯系統(tǒng)應(yīng)從程序的可運(yùn)行性、資源的可管理性及狀態(tài)的可遷移性三方面分別進(jìn)行設(shè)計(jì)。
1. 程序的可運(yùn)行性程序的跨架構(gòu)運(yùn)行在一云多芯系統(tǒng)中,程序的首要設(shè)計(jì)目標(biāo)是可運(yùn)行性,即可以在不同處理器架構(gòu)的環(huán)境中移植運(yùn)行,技術(shù)路線包含跨平臺(tái)語言、跨平臺(tái)編譯以及指令翻譯技術(shù)(見下表程序的跨架構(gòu)運(yùn)行技術(shù))
主要特點(diǎn) |
適用場景 |
局限性 |
|
跨平臺(tái)語言 |
程序本身適用具有跨平臺(tái)特性的編程 |
Web應(yīng)用、OpenStack各組 |
運(yùn)行時(shí)環(huán)境依賴、本地庫依賴 |
跨平臺(tái)編譯 |
通過編譯生成與目標(biāo)架構(gòu)匹配的二進(jìn) |
應(yīng)用的跨平臺(tái)構(gòu)建。例如通過 |
對(duì)于可執(zhí)行程序、仍然需要二 |
二進(jìn)制翻譯 |
無需重新編譯。實(shí)現(xiàn)二進(jìn)制指令的直接 |
桌面輕量應(yīng)用、模擬器、科研 |
性能損耗較大,對(duì)處理器能力 |
跨平臺(tái)語言以Java、Python為代表,通過跨平臺(tái)語言實(shí)現(xiàn)程序架構(gòu)無關(guān)部分的跨架構(gòu)運(yùn)行,但仍然存在一些架構(gòu)相關(guān)的問題:(1)運(yùn)行時(shí)環(huán)境依賴,例如,Java程序在多芯系統(tǒng)中運(yùn)行需要提供不同架構(gòu)的Java虛擬機(jī)(Java Virtual Machine,JVM)運(yùn)行時(shí);(2)本地庫依賴,例如Java本地接口(Java Native Interface,JNI)需要跨平臺(tái)移植。
跨平臺(tái)編譯即交叉編譯,借助特定處理器架構(gòu)環(huán)境及編譯工具生成其他架構(gòu)的可執(zhí)行程序。交叉編譯通過架構(gòu)無關(guān)的源代碼實(shí)現(xiàn)程序的跨平臺(tái)二進(jìn)制代碼生成,但是對(duì)于可執(zhí)行程序,仍然需要統(tǒng)一二進(jìn)制代碼與處理器架構(gòu)。
二進(jìn)制翻譯即指令集翻譯技術(shù),是解決應(yīng)用跨架構(gòu)移植問題的研究熱點(diǎn),實(shí)現(xiàn)方法包括軟件級(jí)二進(jìn)制翻譯和芯片級(jí)二進(jìn)制翻譯。無論軟件級(jí)還是芯片級(jí),均受到翻譯系統(tǒng)的限制。軟件級(jí)二進(jìn)制翻譯需要對(duì)應(yīng)用運(yùn)行環(huán)境進(jìn)行改造,增加了運(yùn)行環(huán)境的復(fù)雜性,而芯片級(jí)二進(jìn)制翻譯過程性能損耗嚴(yán)重。例如,目前針對(duì)純運(yùn)算類程序的翻譯器效率是直接編譯的60%~70%,如果涉及系統(tǒng)調(diào)用、鎖等操作,效率將下降到30%~40%,并且二進(jìn)制翻譯過程依然存在指令集不兼容的問題,例如高級(jí)矢量擴(kuò)展(Advanced Vector Extensions,AVX)指令。
運(yùn)行時(shí)的等價(jià)封裝
跨平臺(tái)語言解決了應(yīng)用的跨架構(gòu)問題,但是需要提供跨架構(gòu)的運(yùn)行時(shí);交叉編譯解決了跨架構(gòu)編譯問題,但是仍然存在運(yùn)行時(shí)的動(dòng)態(tài)庫依賴問題。因此,程序在多芯系統(tǒng)中運(yùn)行不僅需要考慮自身的可運(yùn)行性,對(duì)于現(xiàn)代化的復(fù)雜應(yīng)用,還應(yīng)綜合考慮其依賴的運(yùn)行時(shí)??尚械穆肪€是結(jié)合標(biāo)準(zhǔn)化的容器方式對(duì)應(yīng)用程序及其運(yùn)行時(shí)依賴進(jìn)行封裝,作為實(shí)現(xiàn)應(yīng)用的跨架構(gòu)部署及切換的基礎(chǔ)資源封裝。
也就是說,基于同一套源代碼,針對(duì)不同的架構(gòu)構(gòu)建不同的容器鏡像,如果程序是基于跨平臺(tái)的語言構(gòu)建的,則將程序腳本或中間代碼與運(yùn)行時(shí)封裝為容器;如果程序是基于非跨平臺(tái)的語言構(gòu)建的,則可以通過交叉編譯,構(gòu)建各種架構(gòu)下的二進(jìn)制文件,然后將其與依賴庫等封裝為容器,此流程可以通過一套流水線作業(yè)自動(dòng)構(gòu)建,并推送至鏡像庫。
綜上所述,一云多芯程序可運(yùn)行性設(shè)計(jì)包括三個(gè)方面,首先實(shí)現(xiàn)應(yīng)用程序的跨架構(gòu)編譯及運(yùn)行,其次構(gòu)建標(biāo)準(zhǔn)容器化封裝,最后通過云資源編排管理實(shí)現(xiàn)輕量化部署(見圖2)。
2.資源的可管理性資源可管理性包括架構(gòu)感知和算力量化分析,以及面向系統(tǒng)的資源均衡調(diào)度和面向業(yè)務(wù)的彈性伸縮。
架構(gòu)感知技術(shù)架構(gòu)感知是一云多芯實(shí)現(xiàn)節(jié)點(diǎn)調(diào)度、界面功能自適應(yīng)展示的關(guān)鍵,是支撐程序的可運(yùn)行性、實(shí)現(xiàn)資源封裝生命周期管理的基礎(chǔ),可通過收集器、調(diào)度器、攔截器實(shí)現(xiàn)。(1)收集器采集并上報(bào)各節(jié)點(diǎn)的CPU架構(gòu)、硬件特性等信息,建立包含架構(gòu)特性的主機(jī)列表。(2)調(diào)度器為各種粒度的資源封裝選擇匹配的主機(jī)節(jié)點(diǎn),采用級(jí)聯(lián)過濾器機(jī)制,加載多個(gè)獨(dú)立的過濾器,依次對(duì)創(chuàng)建請(qǐng)求與主機(jī)進(jìn)行匹配。在一云多芯場景下,通過級(jí)聯(lián)架構(gòu)感知過濾器,識(shí)別資源封裝創(chuàng)建請(qǐng)求中的鏡像架構(gòu)標(biāo)簽,根據(jù)CPU架構(gòu)特性匹配結(jié)果過濾出主機(jī)節(jié)點(diǎn)。(3)攔截器用于建立可動(dòng)態(tài)擴(kuò)展的"架構(gòu)-功能"映射矩陣,解析資源封裝管理請(qǐng)求的動(dòng)作及架構(gòu)特征,執(zhí)行攔截請(qǐng)求并將結(jié)果反饋展示,從而實(shí)現(xiàn)不同架構(gòu)功能差異化的自動(dòng)識(shí)別、動(dòng)態(tài)擴(kuò)展,屏蔽底層實(shí)現(xiàn)差異,提供統(tǒng)一的資源管理視圖。
算力量化技術(shù)
因不同架構(gòu)的處理器計(jì)算能力不同,相同應(yīng)用即便使用了同等規(guī)格的資源封裝(例如相同的CPU核心、內(nèi)存等),在異構(gòu)環(huán)境上運(yùn)行的性能也存在差異。根據(jù)應(yīng)用場景,算力可分為CPU通用算力和XPU異構(gòu)算力。一云多芯系統(tǒng)目前面臨的主要問題是CPU的多元異構(gòu),多廠商的ARM、x86架構(gòu)處理器在指令集、核心數(shù)、生產(chǎn)工藝等方面均有所不同,因此在性能上也存在差異。這種差異性可以通過算力等價(jià)關(guān)系刻畫,根據(jù)層次劃分為規(guī)格算力、有效算力和業(yè)務(wù)算力(見表2)。
其中,規(guī)格算力的通用性最強(qiáng),有效算力對(duì)特定負(fù)載類型更具針對(duì)性,業(yè)務(wù)算力更加貼近真實(shí)的應(yīng)用場景,但由于負(fù)載和應(yīng)用的多樣性,有效算力、業(yè)務(wù)算力的測算需要聯(lián)合上下游生態(tài)共同完成。
定義 |
測算對(duì)象 |
量化方法 |
測算工具 |
|
規(guī)格算力 |
從服務(wù)器系統(tǒng)資源層面測試評(píng)估
|
處理器、內(nèi)存、磁盤和 |
系統(tǒng)整機(jī)規(guī)格性能基 |
SPEC CPU、 |
有效算力 |
從平臺(tái)層面測試評(píng)估中間件的資 |
Redis、MySQL、 |
針對(duì)中間件的井發(fā)性 |
Redis-Benchmark 、 |
業(yè)務(wù)算力 |
從應(yīng)用層面使用真實(shí)業(yè)務(wù)負(fù)載測 |
客戶關(guān)系管理(CRM) |
針對(duì)業(yè)務(wù)事務(wù)處理能 響應(yīng)時(shí)延、選代時(shí)間等 |
Jmeter、LoadRunner |
均衡調(diào)度技術(shù)
從資源層面,在為資源封裝選擇節(jié)點(diǎn)時(shí),根據(jù)節(jié)點(diǎn)計(jì)算能力利用均衡策略對(duì)負(fù)載進(jìn)行調(diào)度,這是一個(gè)以資源利用率最大化為目標(biāo)的約束優(yōu)化問題。均衡調(diào)度算法作用在級(jí)聯(lián)過濾器之后,從過濾出的主機(jī)節(jié)點(diǎn)中選擇負(fù)載相對(duì)最小的作為最終目標(biāo),對(duì)于一云多芯系統(tǒng),此過程的關(guān)鍵是節(jié)點(diǎn)的算力量化分析?;谝?guī)格算力評(píng)估多類型資源的規(guī)格系數(shù),再結(jié)合歸一化、主資源公平等數(shù)值方法,能夠測算出各節(jié)點(diǎn)的可用算力。基于歸一化的算法如下:
節(jié)點(diǎn)j的得分Scorej是r種資源類型權(quán)重得分之和,包括CPU、內(nèi)存、硬盤等,如式(1)。各資源類型權(quán)重得分算法如式(2),其中,ResourceNormalizedji為節(jié)點(diǎn)j資源i可分配量的最小-最大正向歸一化,如式(3)所示;WeighterMultiplieri為資源的權(quán)重,可根據(jù)負(fù)載的CPU、內(nèi)存或IO密集類型調(diào)整權(quán)重,體現(xiàn)每種資源的重要程度,coefficientji為各資源的規(guī)格算力系數(shù),例如,ARM型和x86型CPU的規(guī)格算力量化關(guān)系為1∶2,規(guī)格系數(shù)分別為1和2,可分配CPU核數(shù)相同的情況下,x86型節(jié)點(diǎn)被調(diào)度的優(yōu)先級(jí)更高,從而實(shí)現(xiàn)一云多芯場景下基于算力量化的均衡調(diào)度。
彈性伸縮技術(shù)
為了支撐面向業(yè)務(wù)峰值和低谷的彈性伸縮,要做到資源封裝的精準(zhǔn)規(guī)劃、快速調(diào)度和算力等價(jià),保證應(yīng)用服務(wù)彈得對(duì)、彈得快、彈得準(zhǔn)。(1)在資源規(guī)劃方面,根據(jù)應(yīng)用負(fù)載特定周期內(nèi)的概率分布特征,基于歷史數(shù)據(jù)時(shí)間序列建立負(fù)載趨勢模型,刻畫應(yīng)用負(fù)載、服務(wù)質(zhì)量與資源關(guān)系的負(fù)載畫像和容量畫像,通過負(fù)載趨勢預(yù)測和應(yīng)用異常反饋方式規(guī)劃資源封裝伸縮需求。(2)在快速調(diào)度方面,基于架構(gòu)感知、均衡調(diào)度技術(shù),在擴(kuò)展資源封裝時(shí)快速調(diào)度至最佳節(jié)點(diǎn),并拉起應(yīng)用服務(wù),保障應(yīng)用服務(wù)及時(shí)響應(yīng)。(3)在彈性伸縮引發(fā)資源封裝跨架構(gòu)切換時(shí),基于算力量化技術(shù)刻畫不同架構(gòu)的算力,根據(jù)有效算力、業(yè)務(wù)算力計(jì)算資源封裝的等價(jià)關(guān)系,確保業(yè)務(wù)的服務(wù)質(zhì)量隨資源增減而線性伸縮。
3.狀態(tài)的可遷移性資源層的應(yīng)用狀態(tài)遷移將持久化數(shù)據(jù)、內(nèi)存瞬時(shí)狀態(tài)、外設(shè)配置以及網(wǎng)絡(luò)流量整體遷移至目標(biāo)節(jié)點(diǎn),涉及資源封裝內(nèi)所有相關(guān)數(shù)據(jù)狀態(tài)。除了應(yīng)用本身之外,還涉及操作系統(tǒng)、中間件等,遷移難度較大。為解決此問題,可進(jìn)一步遵循資源層、平臺(tái)層和應(yīng)用層解耦的思路,采用基于云原生微服務(wù)治理的狀態(tài)同步和流量切分方法。
資源封裝遷移
虛擬機(jī)的在線熱遷移技術(shù)已經(jīng)相對(duì)成熟,通常通過預(yù)拷貝算法將源虛擬機(jī)的內(nèi)存增量狀態(tài)以迭代的方式傳輸?shù)侥康闹鳈C(jī),也出現(xiàn)了后拷貝、混合拷貝等優(yōu)化算法以及硬件壓縮加速技術(shù),加速內(nèi)存拷貝收斂,減少停機(jī)時(shí)間,提升遷移效率。但是虛擬機(jī)遷移仍存在相同廠商CPU代際差距、不同廠商同架構(gòu)兼容性、不同架構(gòu)無法熱遷移的限制。容器的在線遷移技術(shù)研究起步較晚,本質(zhì)上是進(jìn)程組的遷移,當(dāng)前的研究主要基于用戶空間的檢查點(diǎn)和恢復(fù)(Checkpoint and Restore In Userspace,CRIU)實(shí)現(xiàn)容器運(yùn)行時(shí)狀態(tài)的遷移,并衍生出了一系列縮短遷移時(shí)間、降低不可用時(shí)間的優(yōu)化方法。
此外,自適應(yīng)容器在線遷移通過動(dòng)態(tài)調(diào)整壓縮算法的加速因子實(shí)現(xiàn)CPU和網(wǎng)絡(luò)帶寬資源的匹配,減少容器快照的傳輸時(shí)間。以虛擬機(jī)和容器為資源封裝粒度的整體遷移,雖然已經(jīng)有了一些研究與應(yīng)用,但是仍存在遷移數(shù)據(jù)量大、停機(jī)時(shí)間和總遷移時(shí)間長的問題,實(shí)現(xiàn)應(yīng)用跨架構(gòu)平滑切換難度較大。隨著云原生技術(shù)的發(fā)展,結(jié)合服務(wù)治理方式成為可行路線,其中的關(guān)鍵技術(shù)包括有狀態(tài)服務(wù)的數(shù)據(jù)同步、無狀態(tài)服務(wù)的流量切換。
數(shù)據(jù)狀態(tài)同步
多副本的狀態(tài)同步依賴于分布式一致性算法。ACM圖靈獎(jiǎng)獲得者萊斯利·蘭伯特(Leslie Lamport)提出了基于消息傳遞且具有高容錯(cuò)性的Paxos共識(shí)算法,ZooKeeper的ZAB,MySQL的wsrep、Etcd,Redis的Raft協(xié)議都基于其核心思想實(shí)現(xiàn)了數(shù)據(jù)狀態(tài)一致性。在此基礎(chǔ)上,一云多芯平臺(tái)層的數(shù)據(jù)狀態(tài)同步需要進(jìn)一步考慮節(jié)點(diǎn)非對(duì)稱特征。下文以Raft協(xié)議為例進(jìn)行說明。
選舉(leader election)過程:主節(jié)點(diǎn)(leader)向所有的從節(jié)點(diǎn)(follower)周期性發(fā)送心跳來保證主節(jié)點(diǎn)地位,當(dāng)一個(gè)從節(jié)點(diǎn)在一個(gè)超時(shí)周期內(nèi)沒有收到心跳,則該節(jié)點(diǎn)轉(zhuǎn)化為候選(candidate)節(jié)點(diǎn)參與選舉。一云多芯系統(tǒng)中各節(jié)點(diǎn)的處理能力、網(wǎng)絡(luò)條件等不同導(dǎo)致超時(shí)影響差異化,可采用基于極大似然估計(jì)的適應(yīng)性方法,避免心跳延遲大、處理能力弱的節(jié)點(diǎn)頻繁觸發(fā)選舉,同時(shí)保證處理能力強(qiáng)的節(jié)點(diǎn)可快速發(fā)起選舉。對(duì)于投票策略,采用節(jié)點(diǎn)優(yōu)先級(jí)或縮小隨機(jī)超時(shí)取值范圍機(jī)制,使強(qiáng)節(jié)點(diǎn)更容易獲得多數(shù)票。
復(fù)制(log replication)過程:采用法定寫入(quorum write)機(jī)制,主節(jié)點(diǎn)接收來自客戶端的請(qǐng)求,向從節(jié)點(diǎn)發(fā)起寫入提議并接收反饋投票,每個(gè)提議獲得的票數(shù)大于半數(shù)才能提交寫入。在一云多芯中異構(gòu)節(jié)點(diǎn)作為容災(zāi)可用區(qū)(Availability Zone,AZ)設(shè)計(jì),須保證各容災(zāi)可用區(qū)都被寫入。
業(yè)務(wù)流量切分
云原生應(yīng)用通過網(wǎng)關(guān)或負(fù)載均衡器將流量分發(fā)至各無狀態(tài)副本實(shí)例,流量就是無狀態(tài)工作負(fù)載的狀態(tài)。在多芯系統(tǒng)中,當(dāng)應(yīng)用在異構(gòu)節(jié)點(diǎn)間遷移或彈性伸縮時(shí),需要切分流量,并引流至對(duì)應(yīng)節(jié)點(diǎn)的副本上。為保證服務(wù)質(zhì)量不降級(jí),根據(jù)有效算力、業(yè)務(wù)算力量化分析確定等價(jià)目標(biāo)副本的規(guī)格和數(shù)量,并分配其承擔(dān)的流量比例,流量切換應(yīng)與業(yè)務(wù)邏輯充分解耦,可采用服務(wù)網(wǎng)格的思想實(shí)現(xiàn)。
控制面感知副本變化生成流量切分策略,下發(fā)至網(wǎng)絡(luò)代理和網(wǎng)關(guān)。對(duì)于東西向流量,網(wǎng)絡(luò)代理劫持流量并根據(jù)切分策略按比例轉(zhuǎn)發(fā)到不同的副本。對(duì)于南北向流量,網(wǎng)關(guān)在流量轉(zhuǎn)發(fā)時(shí)根據(jù)切分策略轉(zhuǎn)發(fā)到不同副本。在流量切分的瞬時(shí)過程中,受目標(biāo)節(jié)點(diǎn)副本未啟動(dòng)、TCP連接延遲等因素的影響,會(huì)出現(xiàn)無法響應(yīng)、丟包等應(yīng)用服務(wù)質(zhì)量下降的情況,可以通過預(yù)熱、探針、重試、排水技術(shù)保障應(yīng)用跨架構(gòu)的平滑切換。
一云多芯發(fā)展路徑
按照資源可管理性、程序可運(yùn)行性、狀態(tài)可遷移性系統(tǒng)設(shè)計(jì),一云多芯可以分三個(gè)階段逐步演進(jìn)(見圖6)。
階段一:混合部署、統(tǒng)一管理、統(tǒng)一視圖
第一階段以可管理性為目標(biāo),實(shí)現(xiàn)異構(gòu)處理器節(jié)點(diǎn)的統(tǒng)一池化管理、統(tǒng)一服務(wù)目錄和統(tǒng)一監(jiān)控運(yùn)維,可運(yùn)行性和可遷移性方面通過同源異構(gòu)、離線遷移、手動(dòng)切換、業(yè)務(wù)切分實(shí)現(xiàn)應(yīng)用跨架構(gòu)的部署和協(xié)同。目前國內(nèi)外一云多芯建設(shè)主要處于這一階段。遵循系統(tǒng)設(shè)計(jì)方法,筆者團(tuán)隊(duì)在InCloud OS的研發(fā)實(shí)踐中,提出了基于同源異構(gòu)的持續(xù)集成、基于不可變基礎(chǔ)設(shè)施的持續(xù)交付及架構(gòu)感知調(diào)度方法,支持同一主線云操作系統(tǒng)源代碼編譯,構(gòu)建異構(gòu)節(jié)點(diǎn)的可執(zhí)行程序,實(shí)現(xiàn)C/C++、Java、Python、Go多語言千萬級(jí)代碼在8種主流處理器上的分鐘級(jí)構(gòu)建,為各類型應(yīng)用提供了參考指導(dǎo)方案。
在基于InCloud OS建設(shè)的云平臺(tái)中,單資源池支持所有主流處理器架構(gòu),并按每個(gè)控制器1000個(gè)節(jié)點(diǎn)級(jí)聯(lián)擴(kuò)展,實(shí)現(xiàn)了相距超過1000公里的三地?cái)?shù)據(jù)中心一云多芯跨域統(tǒng)一管理、互聯(lián)互通,支撐云數(shù)智多樣化業(yè)務(wù)需求,制定了技術(shù)規(guī)范和參考架構(gòu)。
階段二:業(yè)務(wù)牽引、分層解耦、架構(gòu)升級(jí)
在第一階段的基礎(chǔ)上,為進(jìn)一步滿足應(yīng)用的低成本跨架構(gòu)切換,第二階段通過分層解耦和架構(gòu)升級(jí),實(shí)現(xiàn)應(yīng)用的跨架構(gòu)遷移、多架構(gòu)混合部署和流量切分。筆者團(tuán)隊(duì)分別在資源層、平臺(tái)層及應(yīng)用層進(jìn)行了初步探索。
1.在資源層,結(jié)合GuestOS感知應(yīng)變機(jī)制進(jìn)一步提升面向多元CPU的遷移適用性,提出了基于一致性快照的在線遷移方法。通過變更數(shù)據(jù)塊追蹤和多線程異步優(yōu)化,實(shí)現(xiàn)10 TB大規(guī)格虛擬機(jī)的快速完整遷移。遷移后,系統(tǒng)啟動(dòng)初始化硬件檢查,若不支持相關(guān)CPU特性則切換到應(yīng)變(fallback)措施,保證系統(tǒng)正常運(yùn)行,特別針對(duì)Windows虛擬機(jī)實(shí)現(xiàn)了CPU、固件自適應(yīng),兼容Win XP以上桌面版和Win 2000以上服務(wù)器版,已在實(shí)際生產(chǎn)環(huán)境中展開應(yīng)用。然而,虛擬機(jī)遷移的方式對(duì)應(yīng)用是無感知的,遷移可能產(chǎn)生數(shù)據(jù)庫和應(yīng)用異常的風(fēng)險(xiǎn),需要應(yīng)用開發(fā)者配合,對(duì)虛擬機(jī)遷移后的可用性進(jìn)行進(jìn)一步驗(yàn)證。
2.在平臺(tái)層,目前生產(chǎn)環(huán)境采用的方案是通過數(shù)據(jù)同步、業(yè)務(wù)切分實(shí)現(xiàn)有狀態(tài)應(yīng)用的跨架構(gòu)運(yùn)行。基于InCloud OS提供x86和ARM數(shù)據(jù)庫集群服務(wù)及數(shù)據(jù)同步服務(wù),數(shù)據(jù)同步服務(wù)根據(jù)源端數(shù)據(jù)庫預(yù)寫日志(Write Ahead Log,WAL)捕獲數(shù)據(jù)變化,在傳輸中通過加密壓縮算法、事務(wù)合并、網(wǎng)絡(luò)包封裝優(yōu)化網(wǎng)絡(luò)協(xié)議開銷和延遲,在目標(biāo)端通過分組多任務(wù)并行和原生加載機(jī)制提升重放效率,實(shí)現(xiàn)亞秒級(jí)數(shù)據(jù)同步。應(yīng)用基于讀寫分離架構(gòu)設(shè)計(jì),面向x86架構(gòu)數(shù)據(jù)庫讀寫、ARM架構(gòu)數(shù)據(jù)庫只讀,實(shí)現(xiàn)一云多芯場景下數(shù)據(jù)庫跨架構(gòu)運(yùn)行。
3.在應(yīng)用層,InCloud OS于2023年1月完成首個(gè)一云多芯場景下SPEC Cloud基準(zhǔn)測試,驗(yàn)證了基于單一資源池承載多型x86、ARM處理器架構(gòu)的資源可管理性、計(jì)算密集型聚類算法K-means的跨架構(gòu)程序可運(yùn)行性、IO密集型分布式數(shù)據(jù)庫Cassandra的狀態(tài)可遷移性,并結(jié)合均衡調(diào)度算法,實(shí)現(xiàn)了擴(kuò)展性超過90%,性能超過SLA基線20%,平均上線時(shí)間超過世界紀(jì)錄25%。
階段三:軟件定義、算力標(biāo)準(zhǔn)、全棧多芯
一云多芯是芯與云的融合,是平臺(tái)和生態(tài)的協(xié)同。在第三階段,通過處理器、整機(jī)、云操作系統(tǒng)、數(shù)據(jù)庫、中間件和應(yīng)用等產(chǎn)業(yè)鏈上下游的共同配合,實(shí)現(xiàn)應(yīng)用與處理器架構(gòu)的徹底解耦,保障業(yè)務(wù)長期穩(wěn)定運(yùn)行。
1.在算力資源層,提升處理器性能、可靠性的同時(shí),通過系統(tǒng)設(shè)計(jì)定義處理器設(shè)計(jì)標(biāo)準(zhǔn)化和兼容性,同時(shí)推動(dòng)二進(jìn)制翻譯技術(shù)在應(yīng)用過程中不斷優(yōu)化。在支持處理器多芯的基礎(chǔ)上,擴(kuò)展對(duì)GPU、DPU等異構(gòu)算力的統(tǒng)一抽象,實(shí)現(xiàn)異構(gòu)加速協(xié)同。
2.在平臺(tái)層,突破應(yīng)用特征感知的可變粒度資源調(diào)度分配技術(shù),解決應(yīng)用類型與資源封裝的自適應(yīng)配置和編排問題,研究函數(shù)拓?fù)渚幣?、高效調(diào)度和快速啟動(dòng)技術(shù),解決大規(guī)模云原生應(yīng)用的靈活構(gòu)建和彈性擴(kuò)展問題。
3.在應(yīng)用層,促進(jìn)應(yīng)用支持多芯同源異構(gòu),完善云原生化轉(zhuǎn)型升級(jí)最佳實(shí)踐,與資源層和平臺(tái)層相結(jié)合,實(shí)現(xiàn)應(yīng)用感知、架構(gòu)無感知的平滑切換和彈性伸縮。
4.在算力評(píng)估、標(biāo)準(zhǔn)和測評(píng)方面,研究多元異構(gòu)有效算力的量化方法,聯(lián)合專業(yè)測評(píng)機(jī)構(gòu)及產(chǎn)業(yè)鏈上下游,建立一云多芯行業(yè)標(biāo)準(zhǔn)。
結(jié)束語:一云多芯是解決數(shù)據(jù)中心多芯共存問題的必然趨勢。為解決應(yīng)用跨架構(gòu)可運(yùn)行、算力量化分析、負(fù)載感知調(diào)度、非對(duì)等架構(gòu)分布式狀態(tài)一致性的問題,筆者團(tuán)隊(duì)提出了一云多芯系統(tǒng)的核心設(shè)計(jì)理念和系統(tǒng)設(shè)計(jì)方法。
1.堅(jiān)持系統(tǒng)觀念,場景驅(qū)動(dòng)、系統(tǒng)設(shè)計(jì)。從以CPU為核心向以系統(tǒng)為核心的設(shè)計(jì)模式轉(zhuǎn)變,以應(yīng)用為導(dǎo)向建立多元異構(gòu)融合、軟件定義和軟硬協(xié)同的技術(shù)發(fā)展路線,持續(xù)提升計(jì)算效率和能效比。
2.加強(qiáng)生態(tài)協(xié)作,分層解耦、開放標(biāo)準(zhǔn)。處理器、整機(jī)、云操作系統(tǒng)、中間件、應(yīng)用逐層解耦,通過生態(tài)協(xié)同消除單一技術(shù)路線帶來的垂直封閉、生態(tài)離散問題,實(shí)現(xiàn)一云多芯標(biāo)準(zhǔn)化和規(guī)范化。
3.制定發(fā)展路線圖,迭代創(chuàng)新、持續(xù)演進(jìn)。從混合部署、離線遷移和手動(dòng)切換,到基于架構(gòu)升級(jí)的平滑切換和彈性伸縮,再到算力標(biāo)準(zhǔn)和全棧多芯迭代演進(jìn)。
當(dāng)前的研究和實(shí)踐工作正處于第一階段向第二階段的過渡時(shí)期,圍繞程序可運(yùn)行性、資源可管理性和狀態(tài)可遷移性技術(shù)進(jìn)行了探索和布局,下一步需要加強(qiáng)產(chǎn)業(yè)鏈、創(chuàng)新鏈協(xié)作,向應(yīng)用感知、架構(gòu)無感知的目標(biāo)迭代演進(jìn),推動(dòng)一云多芯計(jì)算理論基礎(chǔ)更加堅(jiān)實(shí)完備,軟硬協(xié)同和軟件定義機(jī)制更加成熟有效,應(yīng)用感知場景范式更加清晰可行,產(chǎn)業(yè)生態(tài)更加標(biāo)準(zhǔn)規(guī)范。