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