孟景濤 王濤 蔣浩 孫婧 徐朽輝
摘要:隨著國產(chǎn)化新研航天地面測控數(shù)傳裝備需求的爆發(fā)式增長,帶來了更復雜多樣的數(shù)據(jù),傳統(tǒng)單體數(shù)據(jù)庫在此類數(shù)據(jù)面前明顯吃力。為滿足各型裝備用戶對高效、綜合運維管理的客觀需求,提出了一種基于國產(chǎn)化面向服務軟件架構(gòu)的多維數(shù)據(jù)管理平臺,對吞吐數(shù)據(jù)進行統(tǒng)一管理,來完成測控數(shù)傳設(shè)備的數(shù)據(jù)積累,形成良性循環(huán),逐步提高測控數(shù)傳設(shè)備可用度與可靠性。后續(xù)其他類似的項目數(shù)據(jù)中心部分建設(shè),只需要對數(shù)據(jù)中心進行參數(shù)配置,即可實現(xiàn)數(shù)據(jù)管理功能。同時為項目的微服務化提供技術(shù)棧架構(gòu)支撐。
關(guān)鍵詞:分布式;數(shù)據(jù)管理;Linux;Zookeeper;
中圖分類號:TP319文獻標志碼:A文章編號:1008-1739(2022)10-49-5
分布式數(shù)據(jù)管理中心軟件[1]是航天地面測控數(shù)傳裝備的組成部分,作為整個系統(tǒng)的數(shù)據(jù)管理中心,擔負著整個系統(tǒng)設(shè)備的數(shù)據(jù)存儲和管理等功能[2]。現(xiàn)有系統(tǒng)中數(shù)據(jù)存儲的形式主要有XML數(shù)據(jù)文件[3]、自定義格式數(shù)據(jù)文件和SQL Lite等,在數(shù)據(jù)安全性、擴展性和維護性上與現(xiàn)有應用場景和技術(shù)已不再匹配,并且現(xiàn)有系統(tǒng)架構(gòu)不支持高并發(fā)和大批量的數(shù)據(jù)存儲和數(shù)據(jù)檢索,所以提出將系統(tǒng)中的業(yè)務數(shù)據(jù)、基礎(chǔ)配置及其日志信息數(shù)據(jù)剝離出來,以數(shù)據(jù)庫為支撐,建立數(shù)據(jù)中心,實現(xiàn)對數(shù)據(jù)存儲和訪問的集中化管理[4]。
對測控軟件從整體架構(gòu)上進行了全新的設(shè)計,實現(xiàn)對數(shù)據(jù)存儲以數(shù)據(jù)庫為基礎(chǔ),通過模塊化將系統(tǒng)中的業(yè)務數(shù)據(jù)、配置數(shù)據(jù)和日志信息數(shù)據(jù)由之前的分散性和數(shù)據(jù)格式的多樣性進行了數(shù)據(jù)存儲的統(tǒng)一化、訪問的規(guī)范化和數(shù)據(jù)的獨立性。以此建立數(shù)據(jù)中心,實現(xiàn)數(shù)據(jù)和業(yè)務的隔離,在數(shù)據(jù)的管理和操作上方便、快捷、高效;在數(shù)據(jù)維護上簡單、安全[5];實現(xiàn)數(shù)據(jù)的集中控制、數(shù)據(jù)一致性和可維護性、數(shù)據(jù)共享、減少數(shù)據(jù)的冗余度、數(shù)據(jù)安全和數(shù)據(jù)的備份[6]。建立數(shù)據(jù)中心后,系統(tǒng)模塊劃分更加合理,降低了系統(tǒng)的耦合性,增強了系統(tǒng)訪問的高效性、可維護性和可擴展性。
目標的項目架構(gòu)在具有關(guān)系數(shù)據(jù)接口插件和ES(elasticsearch)數(shù)據(jù)接口插件上使用了Zookeeper,Kafka,Mycat等開源服務,通過對MySQL數(shù)據(jù)庫、神通數(shù)據(jù)庫、redis數(shù)據(jù)庫和ES數(shù)據(jù)存儲的使用,實現(xiàn)在不同場景下對于數(shù)據(jù)存儲和檢索的支持,項目架構(gòu)如圖1所示。
項目架構(gòu)對于系統(tǒng)性能、可用性和數(shù)據(jù)安全性均有優(yōu)化作用,能夠支持當前的業(yè)務需求,對系統(tǒng)的易維護性也有很好的支持。經(jīng)過實驗驗證,數(shù)據(jù)存儲服務在國產(chǎn)環(huán)境中的效率評估也有不凡表現(xiàn)。
2.1服務之間接口訪問設(shè)計
創(chuàng)建Dbserver插件處理關(guān)系數(shù)據(jù)[7],訂閱消息cti/dbserver/ request/*(cti/dbserver/receive/接口命令字/交易流水號),返回消息發(fā)送cti/dbserver/response/*(cti/dbserver/response/請求時命令字/請求時交易流水號)。
Dbserver插件通過thrift提供的RPC接口通信方式作為與數(shù)據(jù)庫服務間調(diào)用方式,調(diào)用方和服務提供方通過Thrift方式生成統(tǒng)一的方法string invoke(1:string para),入?yún)⒑头祷刂稻鶠閖son傳輸,這樣保持具體接口方法增加和修改的穩(wěn)定性。
出入?yún)⒔y(tǒng)一格式:
入?yún)ⅲ簕“reqtype”:“請求接口名”,“param”: “{param1”:“param2value”,“param1”:“param2value”}}
出參:{“restype”:“返回數(shù)據(jù)類型”,“param”:{“param1”:“param2value”,“param1”:“param2value”}}
ES插件部分與服務通信采用同樣方式處理。
2.2關(guān)系數(shù)據(jù)服務插件
關(guān)系數(shù)據(jù)服務插件與系統(tǒng)其他模塊間通過異步消息方式交互[8],上節(jié)描述了交互的方式及報文格式,插件在加載時向zk讀取可用關(guān)系數(shù)據(jù)服務列表,根據(jù)配置文件配置,可以采用主備方式優(yōu)先調(diào)用主數(shù)據(jù)服務,當主數(shù)據(jù)服務異常時切換到備用服務;或者采用無主混合模式隨機選用可用服務進行接口調(diào)用,當某一臺數(shù)據(jù)服務異常后插件主動剔除異常服務的鏈接。
關(guān)系數(shù)據(jù)服務插件架構(gòu)如圖2所示,插件采用zk提供的對于節(jié)點觀察的方式,通過zk的機制來進行及時的關(guān)系數(shù)據(jù)服務的主動斷開或者加入;關(guān)系數(shù)據(jù)插件與關(guān)系數(shù)據(jù)服務之間通過Thrift框架進行接口調(diào)用,連接的維持方法調(diào)用細節(jié)通過框架透明,只需要關(guān)注業(yè)務即可。
2.3關(guān)系數(shù)據(jù)服務
關(guān)系數(shù)據(jù)服務模塊由接口層、邏輯層和數(shù)據(jù)庫操作層組成[4],向上通過Thrift的RPC通信框架承接測控邏輯層的業(yè)務接口需求向下與Mycat交互,Mycat經(jīng)過數(shù)據(jù)庫代理對數(shù)據(jù)庫的分布式進行透明化處理,關(guān)系數(shù)據(jù)服務模塊如圖3所示。
業(yè)務數(shù)據(jù)服務負責業(yè)務相關(guān)的配置報表等持久化數(shù)據(jù),在邏輯劃分上分為接口層、邏輯層和數(shù)據(jù)庫連接層。各個層直接通過虛基類的方式向上提供功能,接口層承接上層對于功能的需求向外釋放功能接口,邏輯層根據(jù)業(yè)務需要和數(shù)據(jù)庫的設(shè)計進行數(shù)據(jù)加工,數(shù)據(jù)庫操作層負責數(shù)據(jù)庫的基礎(chǔ)操作功能和數(shù)據(jù)庫連接池的保持。
在數(shù)據(jù)庫連接層可根據(jù)配置方式選擇采用“讀寫都是MySQL”“寫MySQL+神通讀MySQL”“讀寫都是神通”的模式控制。
在數(shù)據(jù)連接層可根據(jù)配置文件配置主備2個Mycat組,連接層自檢測鏈接的可用性,當主Mycat可用性異常時自動切換到備用Mycat連接,上層業(yè)務層無感知。
2.4 ES日志數(shù)據(jù)插件
ES日志數(shù)據(jù)服務插件與系統(tǒng)其他模塊間通過異步消息方式交互,上文描述了交互的方式及報文格式,插件在加載時向zk讀取可用ES日志數(shù)據(jù)服務列表,根據(jù)配置文件配置可以采用主備方式優(yōu)先調(diào)用主ES服務,當主ES服務異常時切換到備用服務;或者采用無主混合模式隨機選用可用服務進行接口調(diào)用,當某一臺ES服務異常后插件主動剔除異常服務的鏈接,日志數(shù)據(jù)插件架構(gòu)如圖4所示。
ES日志數(shù)據(jù)服務插件采用zk提供的對于節(jié)點觀察的方式,通過zk的機制來進行及時的ES數(shù)據(jù)服務的主動斷開或者加入。ES數(shù)據(jù)插件與ES數(shù)據(jù)服務之間通過Thrift框架進行接口調(diào)用,連接的維持方法調(diào)用細節(jié)通過框架透明,只需要關(guān)注業(yè)務即可。
2.5日志模塊服務
由于項目中日志的數(shù)據(jù)輸出量比較大,所以不能不考慮對整個系統(tǒng)性能的影響。從另外一方面來看,大量的日志數(shù)據(jù)需要方便檢索,增強日志的可閱讀性和檢索效率。模塊基于使用方便,包括開發(fā)和信息檢索;組織合理,日志內(nèi)容被有效地組織起來。有助于基于日志內(nèi)容的分析;過程重現(xiàn),基于日志的分析,最重要的是重現(xiàn)當時運行的過程,日志模塊服務架構(gòu)如圖5所示。
模塊向上通過Thrift的RPC通信框架承接測控邏輯層的日志持久化需求,向下與消息中間件做對接將需要持久化的數(shù)據(jù)寫入文件數(shù)據(jù)庫ES。
項目對于消息中間件的引入在保證日志的完整性的同時,采用異步寫入的方式降低了日志寫入對業(yè)務系統(tǒng)性能的影響;另外,此部分增加日志異步寫入服務,讀取消息隊列中的日志數(shù)據(jù)進行必要的數(shù)據(jù)加工,可以根據(jù)需要增加邏輯處理對日志進行格式化匹配業(yè)務日志場景,然后再寫入ES進行持久化存儲。功能劃分上,日志模塊只負責接收上層日志寫入消息中間件,日志加工寫入模塊對日志數(shù)據(jù)進行格式化,或者根據(jù)業(yè)務場景進行日志數(shù)據(jù)的加工寫入ES。
通過對項目目標的分析,結(jié)合以往成熟的項目經(jīng)驗,針對當前流行的相關(guān)技術(shù)和框架進行分析,系統(tǒng)采用如下技術(shù)棧進行架構(gòu)實現(xiàn):通過MySQL進行業(yè)務數(shù)據(jù)的存儲;Mycat進行數(shù)據(jù)庫和項目的隔離到達數(shù)據(jù)庫的分布式部署和容災自動切換;Redis作為緩存數(shù)據(jù)的存儲提高系統(tǒng)的響應效率;ES作為日志存儲,達到大數(shù)據(jù)的檢索;Kafka作為消息中間件支持大并發(fā)數(shù)據(jù)的通信,通過異步方式降低系統(tǒng)調(diào)用延遲,對于后端數(shù)據(jù)持久化提供多服務支持;ZooKeeper[9]來實現(xiàn)微服務治理,保障系統(tǒng)的穩(wěn)定性[10],為系統(tǒng)的低耦合高內(nèi)聚做穩(wěn)定性支持[11];Thrift+Json來完成服務間調(diào)用,并方便地達到對于語言的透明,在業(yè)務設(shè)計上采用業(yè)務提取屬性的方式到達對業(yè)務配置化的支持。
運行環(huán)境采用銀河麒麟Kylin V10 Liunx操作系統(tǒng)、 Phytium FT-2000/4(64位,4核)處理器、8 GB內(nèi)存和銀河麒麟飛騰PC機,開發(fā)環(huán)境為Qt集成開發(fā)環(huán)境[12]。針對目標架構(gòu)中MySQL和ES在國產(chǎn)化機器設(shè)備中的存取效率測試評估如下:MySQL基礎(chǔ)數(shù)據(jù)為102萬條現(xiàn)有數(shù)據(jù)的基礎(chǔ)上插入10萬條數(shù)據(jù)做平均插入耗時計算;在銀河麒麟飛騰PC機中,帶有2個索引字段的MySQL表中以102萬數(shù)據(jù)為原始數(shù)據(jù),再增加10萬條數(shù)據(jù)為計算依據(jù),每秒可插入1 886條記錄;數(shù)據(jù)查詢單條查詢耗時均在1 ms以下;以一億數(shù)據(jù)為基準根據(jù)時間范圍條件查詢,每條查詢用時4 ms,效率評估結(jié)果如圖6所示。
在銀河麒麟飛騰PC機中,ES以1億數(shù)據(jù)為原始數(shù)據(jù),再增加10萬條數(shù)據(jù)為計算依據(jù),每秒可插入1.4萬條記錄;以普通字段為條件查詢耗時為每次4 ms。實驗結(jié)果表明,采用本架構(gòu),在國產(chǎn)操作系統(tǒng)下存取效率高,遠超系統(tǒng)使用要求[13],效率評估結(jié)果如圖7所示。
本軟件架構(gòu)的設(shè)計除了完成需求目標外,在系統(tǒng)的業(yè)務邏輯上達到流程可配置化;后續(xù)其他類似航天測控系統(tǒng)中涉及數(shù)據(jù)中心部分的建設(shè),只需要根據(jù)新的系統(tǒng)需求對數(shù)據(jù)中心的參數(shù)進行配置,即可實現(xiàn)新項目的業(yè)務需求。同時為后續(xù)項目的微服務化和多語言的混合編程,提前實施技術(shù)棧的架構(gòu)方案保障。
[1]王文龍.分布式軟件開發(fā)平臺的設(shè)計與實施[D].北京:北京郵電大學,2011.
[2]崔方園.支持分布式協(xié)同開發(fā)的軟件配置管理系統(tǒng)研究[D].大連:大連海事大學,2009.
[3]孫婧,劉瑩,孟景濤,等.基于XML的軟件通用程序框架[J].無線電工程,2015,45(6):25-27.
[4]史俊.分布式軟件技術(shù)及其應用研究[J].無線互聯(lián)科技, 2012(12):68.
[5]文姍,周壽章.一個實現(xiàn)軟件項目管理的統(tǒng)一軟件數(shù)據(jù)管理方法[J].云南大學學報(自然科學版),2007,29(S2):186-189.
[6]陸琴.計算機軟件開發(fā)與數(shù)據(jù)管理[J].計算機產(chǎn)品與流通, 2018(7):26.
[7]王玉文.總控與管理子系統(tǒng)數(shù)據(jù)管理軟件的設(shè)計與實現(xiàn)[D].西安:西安電子科技大學,2014.
[8]黃成剛.監(jiān)控組態(tài)軟件中數(shù)據(jù)管理子系統(tǒng)的設(shè)計與實現(xiàn)[D].大連:大連理工大學,2008.
[9]周國興.基于ZooKeeper的服務集成框架研究[D].南京:東南大學,2019.
[10]董龍成.基于ZooKeeper的配置中心系統(tǒng)設(shè)計與實現(xiàn)[D].西安:西安電子科技大學,2018.
[11]黃毅斐.基于ZooKeeper的分布式同步框架設(shè)計與實現(xiàn)[D].杭州:浙江大學,2012.
[12]許生模,余敏.嵌入式QT的內(nèi)核分析與優(yōu)化[J].微計算機信息,2007(29):59-61.
[13]林旭新,陳文吉,鄭大鵬.一種面向服務的跨平臺實時信息發(fā)布及交流軟件架構(gòu)[J].現(xiàn)代計算機(專業(yè)版),2014(8): 77-80.