劉峰
(中國(guó)電子科學(xué)研究院,北京 100041)
軍用國(guó)產(chǎn)計(jì)算機(jī)工程應(yīng)用日益廣泛,而國(guó)產(chǎn)器件的穩(wěn)定性、可靠性尚有不足,這對(duì)軍用國(guó)產(chǎn)計(jì)算機(jī)設(shè)備的狀態(tài)監(jiān)控和健康管理提出了較高要求,如何提高軍用國(guó)產(chǎn)計(jì)算機(jī)設(shè)備管理水平已成為軍用國(guó)產(chǎn)計(jì)算機(jī)設(shè)備相關(guān)領(lǐng)域研究的熱點(diǎn)之一。
通常,軍用國(guó)產(chǎn)計(jì)算機(jī)設(shè)備硬件平臺(tái)遵循VPXVITA 46.11[1]標(biāo)準(zhǔn)和IPMI 2.0[2]協(xié)議。機(jī)箱管理系統(tǒng)主要滿足管理員通過(guò)統(tǒng)一的機(jī)箱管理系統(tǒng)平臺(tái)上對(duì)機(jī)箱內(nèi)不同功能刀片模塊的監(jiān)視和管理需求。
廣泛應(yīng)用在軍事計(jì)算機(jī)設(shè)備的IPMI管理技術(shù),為軍事計(jì)算機(jī)設(shè)備的高可靠、智能化管理提供一種開放的機(jī)箱管理系統(tǒng)解決方案[3]。
機(jī)箱管理系統(tǒng)可有效地實(shí)時(shí)監(jiān)控各模塊的CPU、內(nèi)存、硬盤、散熱單元和主板等各部件的硬件工作狀。此外,利用部署在功能模塊操作系統(tǒng)側(cè)的監(jiān)控組件還可進(jìn)行系統(tǒng)資源監(jiān)控管理。
本文旨在從工程化角度出發(fā),發(fā)現(xiàn)當(dāng)下主流VPX機(jī)箱管理系統(tǒng)的設(shè)計(jì)缺陷,結(jié)合微服務(wù)架構(gòu)提高國(guó)產(chǎn)VPX機(jī)箱管理系統(tǒng)的工程化和管理水平。
VPX是基于高速串行總線的新一代總線標(biāo)準(zhǔn),可提供超大帶寬和超大功率[4]。VPX總線目前廣泛應(yīng)用于軍事等抗惡劣環(huán)境下,軍用國(guó)產(chǎn)計(jì)算機(jī)設(shè)備多遵循VPX總線標(biāo)準(zhǔn)設(shè)計(jì)制造。本文設(shè)計(jì)的微服務(wù)化機(jī)箱管理系統(tǒng)基于由VPX架構(gòu)的硬件平臺(tái)刀片服務(wù)器機(jī)箱設(shè)計(jì)實(shí)現(xiàn)。
VPX架構(gòu)的硬件平臺(tái)刀片服務(wù)器機(jī)箱由機(jī)箱結(jié)構(gòu)件和核心刀片模塊組成。通常,基于對(duì)VPX機(jī)箱的功能需求和可靠性設(shè)計(jì)要求,VPX機(jī)箱設(shè)置2個(gè)VPX電源模塊、1個(gè)或2個(gè)VPX數(shù)據(jù)交換模塊及若干VPX功能模塊。
VPX機(jī)箱管理系統(tǒng)通常分為三個(gè)子系統(tǒng):系統(tǒng)管理子系統(tǒng)、機(jī)箱管理子系統(tǒng)和板卡管理子系統(tǒng)[5]。
VPX機(jī)箱管理系統(tǒng)架構(gòu)如圖1所示。其中Agent是部署在各模塊操作系統(tǒng)側(cè)的監(jiān)控組件。
系統(tǒng)管理子系統(tǒng)通常部署在國(guó)產(chǎn)Linux操作系統(tǒng)上,如銀河麒麟或中標(biāo)麒麟等。子系統(tǒng)通常為基于Qt開發(fā)的C/S架構(gòu)管理軟件,服務(wù)器端負(fù)責(zé)以太網(wǎng)總線消息過(guò)濾與解析,客戶端負(fù)責(zé)參數(shù)監(jiān)控與健康管理等人機(jī)交互操作界面。
機(jī)箱管理子系統(tǒng)通常由部署在交換模塊上的ShMC(Shelf Management Controller,機(jī)箱管理控制器)和Agent組成,通過(guò)IPMB總線實(shí)現(xiàn)對(duì)機(jī)箱內(nèi)其他模塊的健康管理數(shù)據(jù)收集匯總,通過(guò)以太網(wǎng)實(shí)現(xiàn)數(shù)據(jù)統(tǒng)一上報(bào)。
板卡管理子系統(tǒng)通常由部署在機(jī)箱內(nèi)其他功能模塊上的ChMC(Chassis Management Controller,板級(jí)管理控制器)和Agent組成,處理對(duì)本模塊管理請(qǐng)求和事件上報(bào)。
隨著互聯(lián)網(wǎng)和計(jì)算機(jī)技術(shù)的發(fā)展,軟件系統(tǒng)規(guī)模不斷擴(kuò)大,系統(tǒng)需求量的激增和快速變更給系統(tǒng)開發(fā)帶來(lái)極大挑戰(zhàn)。在系統(tǒng)架構(gòu)演變和迭代的過(guò)程中涌現(xiàn)出如單一應(yīng)用、垂直拆分、分布式服務(wù)、SOA(Service Oriented Architecture,面向服務(wù)架構(gòu))、微服務(wù)[6]等一系列面向系統(tǒng)設(shè)計(jì)的架構(gòu)思想。
VPX機(jī)箱管理系統(tǒng)的發(fā)展和迭代主要表現(xiàn)出從垂直拆分架構(gòu)向SOA架構(gòu)的演變趨勢(shì)。VPX機(jī)箱管理系統(tǒng)向管理員提供面向機(jī)箱級(jí)別的監(jiān)控管理服務(wù),單一應(yīng)用無(wú)法滿足需求。我們根據(jù)業(yè)務(wù)功能和VPX機(jī)箱硬件特點(diǎn)對(duì)管理系統(tǒng)進(jìn)行了自上而下的三級(jí)拆分,即上文提到的系統(tǒng)管理子系統(tǒng)、機(jī)箱管理子系統(tǒng)和板卡管理子系統(tǒng)。在這一階段,我們稱其滿足垂直拆分架構(gòu)范式。
滿足垂直拆分架構(gòu)范式的VPX機(jī)箱管理系統(tǒng)解決了針對(duì)不同模塊進(jìn)行優(yōu)化的問(wèn)題,方便模塊水平擴(kuò)展。同時(shí),該架構(gòu)存在拆分相互獨(dú)立,重復(fù)開發(fā)工作繁重和開發(fā)效率低的問(wèn)題。
VPX機(jī)箱管理系統(tǒng)通常會(huì)涉及ARM、X86、MIPS、PowerPC等架構(gòu)的嵌入式基板管理控制器或板卡CPU,并需要滿足多系統(tǒng)環(huán)境下的監(jiān)控管理需求。機(jī)箱管理系統(tǒng)的發(fā)展過(guò)程中,通過(guò)服務(wù)重用和消息總線解決不同系統(tǒng)或架構(gòu)之間整合的問(wèn)題。在這一階段,我們稱其滿足SOA架構(gòu)范式。
滿足SOA架構(gòu)范式的VPX機(jī)箱管理系統(tǒng)通過(guò)消息總線(IPMB總線和以太網(wǎng)總線)來(lái)承載業(yè)務(wù)邏輯,并構(gòu)建出中心化的中間件(ShMC)。系統(tǒng)在IPMB總線上走向集中,服務(wù)間依賴關(guān)系強(qiáng),IPMB總線發(fā)生問(wèn)題對(duì)系統(tǒng)影響較大。
與SOA架構(gòu)類似,微服務(wù)架構(gòu)設(shè)計(jì)方法也包含多個(gè)服務(wù)。微服務(wù)和SOA的特點(diǎn)對(duì)比見(jiàn)表1。
微服務(wù)架構(gòu)強(qiáng)調(diào)業(yè)務(wù)需要徹底的組件化和服務(wù)化,即業(yè)務(wù)系統(tǒng)拆分成多個(gè)可獨(dú)立設(shè)計(jì)、開發(fā)及運(yùn)行的小應(yīng)用。微服務(wù)中的每一個(gè)服務(wù)對(duì)應(yīng)唯一的業(yè)務(wù)能力,做到單一職責(zé)和服務(wù)自治。
圖1 VPX機(jī)箱管理系統(tǒng)架構(gòu)圖
表1 微服務(wù)和SOA
VPX機(jī)箱管理系統(tǒng)通常由嵌入式基板管理控制器、系統(tǒng)軟件、數(shù)據(jù)庫(kù)和人機(jī)交互等部分構(gòu)成。VPX機(jī)箱內(nèi)各功能模塊處理器架構(gòu)和操作系統(tǒng)互異,滿足垂直拆分范式或SOA范式的機(jī)箱管理系統(tǒng)不能妥善解決異構(gòu)帶來(lái)的數(shù)據(jù)通信異構(gòu)、組件在總線上集中化問(wèn)題。
本文提出的VPX機(jī)箱管理系統(tǒng)設(shè)計(jì)方案,面向細(xì)粒度和服務(wù)自治,使開發(fā)團(tuán)隊(duì)獨(dú)立、技術(shù)獨(dú)立、前后端分離、數(shù)據(jù)庫(kù)分離和部署獨(dú)立。
微服務(wù)間通信基本方式是IPC(Inter Process Communication,進(jìn)程間通信),應(yīng)用于微服務(wù)架構(gòu)的輕量級(jí)通信兩種主流方式為REST(Representational State Transfer,表征狀態(tài)轉(zhuǎn)移)和RPC(Remote Procedure Call,遠(yuǎn)程過(guò)程調(diào)用)。
在RPC通信方式中,不同的服務(wù)具有不同的專有接口。每個(gè)接口具有自己的語(yǔ)義和操作參數(shù),服務(wù)的接口契約對(duì)服務(wù)的定義非常關(guān)鍵[7]。在REST通信方式中,REST要求消息是自描述的,且數(shù)據(jù)格式取決于客戶端和服務(wù)端協(xié)商結(jié)果是可以變化的[7]。
RPC通信方式在具備統(tǒng)一開發(fā)規(guī)范和統(tǒng)一服務(wù)框架條件下,傳輸協(xié)議更為高效和可控。對(duì)于強(qiáng)類型編程語(yǔ)言,如Java、CC++和Golang等,如果數(shù)據(jù)格式發(fā)生變化則需要重新編譯使新定義生效。這就違背了接口與實(shí)現(xiàn)分離的原則,增加了服務(wù)間的耦合性。
REST通信方式允許服務(wù)處理多種數(shù)據(jù)格式,即客戶端和服務(wù)端可以選取合適的數(shù)據(jù)格式,更容易實(shí)現(xiàn)和被接受。REST的設(shè)計(jì)約束有效地對(duì)客戶端和服務(wù)端解耦合,使用HTTP標(biāo)準(zhǔn)的GET、POST、PUT和DELETE進(jìn)行請(qǐng)求和響應(yīng)。
基于RESTful接口和JSON數(shù)據(jù)模型的Redfish[8,9]服務(wù)器管理標(biāo)準(zhǔn)被分布式任務(wù)管理組采用為新的服務(wù)器管理標(biāo)準(zhǔn)[10]。Redfish使用現(xiàn)代網(wǎng)絡(luò)接口方式,使用更簡(jiǎn)單,允許使用腳本編程方法訪問(wèn)數(shù)據(jù)[11]。
我們將基于Redfish標(biāo)準(zhǔn)實(shí)現(xiàn)的板卡管理功能服務(wù)化,作為系統(tǒng)服務(wù)層中的板卡監(jiān)控管理微服務(wù)。該解決方案將用于提高VPX機(jī)箱管理系統(tǒng)的靈活性,進(jìn)一步實(shí)現(xiàn)系統(tǒng)功能解耦。
服務(wù)注冊(cè)中心實(shí)現(xiàn)了VPX機(jī)箱管理系統(tǒng)服務(wù)之間的服務(wù)消費(fèi)發(fā)現(xiàn)機(jī)制,用于服務(wù)消費(fèi)之間互相感知,服務(wù)注冊(cè)中心提供服務(wù)注冊(cè)和服務(wù)查詢功能的REST API(URL:/{service}/{version}/{ip:port}),并保存了各個(gè)可用服務(wù)實(shí)例的網(wǎng)絡(luò)地址。服務(wù)端使用POST請(qǐng)求注冊(cè)服務(wù)信息(ip:port)并周期性更新注冊(cè)信息,可通過(guò)刪除命令請(qǐng)求注銷服務(wù)。客戶端則通過(guò)對(duì)應(yīng)的獲取請(qǐng)求獲取可用的服務(wù)實(shí)例信息。
服務(wù)注冊(cè)中心必須要有高可用性和實(shí)時(shí)更新功能。服務(wù)注冊(cè)中心定時(shí)向各個(gè)服務(wù)提供者發(fā)送一個(gè)請(qǐng)求,如果長(zhǎng)期沒(méi)有響應(yīng),服務(wù)中心將其剔除。一旦服務(wù)注冊(cè)中心/{service}/{version}/{ip:port}路徑上的數(shù)據(jù)增加或減少,服務(wù)注冊(cè)中心都會(huì)通知服務(wù)消費(fèi)者服務(wù)提供者地址列表已經(jīng)發(fā)生改變,從而進(jìn)行更新。
API網(wǎng)關(guān)層提供的基本功能有:統(tǒng)一接入、身份驗(yàn)證、容錯(cuò)策略和流量監(jiān)控等。
API網(wǎng)關(guān)層是微服務(wù)系統(tǒng)的唯一入口。API網(wǎng)關(guān)層封裝了系統(tǒng)內(nèi)部架構(gòu),保護(hù)內(nèi)部資源并為客戶端提供定制API。
VPX機(jī)箱管理系統(tǒng)具有服務(wù)實(shí)例類型復(fù)雜、業(yè)務(wù)邏輯復(fù)雜和安全性要求高等特點(diǎn)。如何有效地控制客戶端及不同角色的資源訪問(wèn)權(quán)限對(duì)管理系統(tǒng)是一種挑戰(zhàn)。我們?cè)贏PI網(wǎng)關(guān)層引入基于OAuth2.0[12]協(xié)議的身份驗(yàn)證機(jī)制,對(duì)客戶端或用戶進(jìn)行授權(quán)管理。
我們?cè)贏PI網(wǎng)關(guān)層引入流量監(jiān)控和容錯(cuò)策略來(lái)保障VPX機(jī)箱管理系統(tǒng)可靠性。常見(jiàn)的容錯(cuò)策略有快速失敗、失效切換、失敗自動(dòng)恢復(fù)、熔斷和限流降級(jí)等。
快速失敗策略是指服務(wù)消費(fèi)者只發(fā)起一次服務(wù)調(diào)用,失敗立即報(bào)錯(cuò)。通常用于非冪等性[13]下的寫操作。
失效切換策略是指服務(wù)消費(fèi)者發(fā)起服務(wù)調(diào)用失敗后,重試其他服務(wù)。通常用于非冪等性下的讀操作。
失敗自動(dòng)恢復(fù)策略是指服務(wù)消費(fèi)者發(fā)起服務(wù)調(diào)用失敗后,記錄失敗請(qǐng)求后再次發(fā)起請(qǐng)求。通常用于非冪等性下的讀操作或消息通知。
熔斷策略是指服務(wù)調(diào)用失敗比例過(guò)高,自動(dòng)切斷REST調(diào)用防止故障升級(jí)。通常用于可能失敗的遠(yuǎn)程服務(wù)或共享資源。
限流降級(jí)策略是指為了保證核心服務(wù)的穩(wěn)定性,隨著服務(wù)訪問(wèn)量的持續(xù)增加,根據(jù)系統(tǒng)容量限制,為系統(tǒng)的服務(wù)數(shù)量設(shè)置一個(gè)上限,不允許超限工作。
VPX機(jī)箱管理系統(tǒng)在微服務(wù)化前,通常為板卡管理子系統(tǒng)、機(jī)箱管理子系統(tǒng)和系統(tǒng)管理子系統(tǒng)三級(jí)架構(gòu)。用戶通過(guò)人機(jī)交互客戶端訪問(wèn)板卡數(shù)據(jù)需經(jīng)過(guò)機(jī)箱管理子系統(tǒng)代理。
借鑒微服務(wù)參考架構(gòu),將VPX機(jī)箱管理系統(tǒng)拆分成多個(gè)體量小的微服務(wù)/微應(yīng)用。微服務(wù)化VPX機(jī)箱管理系統(tǒng)對(duì)板卡硬件管理和系統(tǒng)資源管理進(jìn)行統(tǒng)一管理和維護(hù)。用戶直接通過(guò)微服務(wù)網(wǎng)關(guān)訪問(wèn)數(shù)據(jù),避免多余的請(qǐng)求和響應(yīng)過(guò)程。同時(shí)微服務(wù)化后的系統(tǒng)自成體系,解決異構(gòu)數(shù)據(jù)帶來(lái)的系統(tǒng)復(fù)雜問(wèn)題,避免系統(tǒng)在總線上走向集中。
基于微服務(wù)架構(gòu)的VPX機(jī)箱管理系統(tǒng)架構(gòu)實(shí)例如圖2所示。
基于微服務(wù)的VPX機(jī)箱管理系統(tǒng)使用當(dāng)下熱門的前后端分離架構(gòu)軟件開發(fā)技術(shù)。前端服務(wù)是對(duì)后端服務(wù)必要的聚合和呈現(xiàn),后端服務(wù)提供細(xì)粒度的業(yè)務(wù)邏輯操作。系統(tǒng)中的所有服務(wù)向服務(wù)注冊(cè)中心注冊(cè)后即可被感知。系統(tǒng)配置中心服務(wù)用于解決微服務(wù)間的依賴配置和運(yùn)行期間的動(dòng)態(tài)調(diào)整。日志服務(wù)承擔(dān)系統(tǒng)運(yùn)行期間日志記錄業(yè)務(wù)功能。監(jiān)控通知服務(wù)承擔(dān)系統(tǒng)告警觸發(fā)業(yè)務(wù)功能。
系統(tǒng)外部的請(qǐng)求可能來(lái)自于PC網(wǎng)頁(yè)端、自動(dòng)化腳本或其他應(yīng)用服務(wù)等。API網(wǎng)關(guān)層是VPX機(jī)箱管理系統(tǒng)的唯一入口,所有客戶端請(qǐng)求通過(guò)API網(wǎng)關(guān)層訪問(wèn)受保護(hù)的資源數(shù)據(jù)。
系統(tǒng)服務(wù)層由部署在各功能模塊上的硬件監(jiān)控管理服務(wù)和系統(tǒng)資源監(jiān)控管理服務(wù)構(gòu)成。為保障系統(tǒng)可靠性,我們?cè)诿總€(gè)功能模塊上均部署2個(gè)硬件監(jiān)控管理服務(wù)和系統(tǒng)監(jiān)控管理服務(wù),通過(guò)API網(wǎng)關(guān)層做負(fù)載均衡控制。
與傳統(tǒng)的VPX機(jī)箱管理系統(tǒng)比較,我們摒棄了系統(tǒng)管理子系統(tǒng)通過(guò)以太網(wǎng)總線級(jí)聯(lián)ShMC再通過(guò)IPMB總線級(jí)聯(lián)ChMC的三層架構(gòu)。采用REST替代原SNMP或UDP報(bào)文進(jìn)行進(jìn)程間通信,避免異構(gòu)系統(tǒng)下的數(shù)據(jù)格式繁雜和迭代困難等問(wèn)題。我們利用前后端分離技術(shù)開發(fā)B/S架構(gòu)的系統(tǒng)人機(jī)交互客戶端,是系統(tǒng)可擴(kuò)展性更強(qiáng),并可服務(wù)于其他軍用系統(tǒng),為系統(tǒng)升級(jí)為集群管理系統(tǒng)奠定了基礎(chǔ)。
圖2 基于微服務(wù)的VPX機(jī)箱管理系統(tǒng)架構(gòu)
一般情況下,VPX機(jī)箱管理系統(tǒng)均能較好的實(shí)現(xiàn)機(jī)箱管理功能。但基于面向服務(wù)架構(gòu)設(shè)計(jì)的機(jī)箱管理系統(tǒng)缺乏工程化水平和機(jī)箱管理水平。主要表現(xiàn)在基于面向服務(wù)架構(gòu)設(shè)計(jì)思想的機(jī)箱管理系統(tǒng)其業(yè)務(wù)邏輯高度耦合,無(wú)法妥善解決VPX總線機(jī)箱多異構(gòu)帶來(lái)數(shù)據(jù)異構(gòu)和工程化管理難題,也難以解決因升級(jí)或需求變更帶來(lái)的數(shù)據(jù)遷移、云或容器部署和系統(tǒng)維護(hù)等問(wèn)題。
本文提出的VPX機(jī)箱管理系統(tǒng)微服務(wù)化設(shè)計(jì)方案,借鑒利用了高內(nèi)聚、松耦合和去中心化等現(xiàn)代系統(tǒng)設(shè)計(jì)思想,專注于VPX機(jī)箱管理系統(tǒng)單獨(dú)任務(wù)或小型業(yè)務(wù)邏輯組件化。具有易于開發(fā)維護(hù)、啟動(dòng)快、易部署和高伸縮的特點(diǎn)。