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