陽亦斌,楊 將,歐盛芬
(湖南中車時代通信信號有限公司,長沙 410119)
隨著2018年國家《網絡安全法》,2019年底《信息安全技術網絡安全等級保護基本要求》的正式實施,在中國制造向中國智造轉型的關鍵期,“國產、自主可控”已成為我國信息技術產業(yè)發(fā)展的時代標志,中國國家鐵路集團有限公司(以下簡稱“國鐵集團”)以及下屬18個鐵路局集團有限公司將信息系統(tǒng)網絡安全提升到前所未有的高度。為落實《中共中國鐵路總公司黨組關于進一步加強鐵路網絡安全和信息化工作的通知》(鐵總黨[2019]28號)的要求,由國鐵集團信息公司牽頭,聯(lián)合中華人民共和國公安部、中國鐵道科學研究院集團有限公司測評中心,2019年7月對全路3 896個信息系統(tǒng)進行網絡安全等級保護定級。按照《國鐵集團工電部關于做好工電信息系統(tǒng)整改相關工作的通知》(工電綜技電[2019]132號)的要求,全路各鐵路局集團有限公司對信息應用系統(tǒng)開展全面安全性整改。
LKJ信息系統(tǒng)具體包含LKJ設備運行監(jiān)測管理系統(tǒng)、LKJ數(shù)據(jù)無線換裝系統(tǒng)、電務車載設備生產管理平臺、調車防護等系統(tǒng)。其中LKJ設備運行監(jiān)測管理系統(tǒng)和LKJ數(shù)據(jù)無線換裝系統(tǒng)已被定級為信息安全等級保護第三級,各系統(tǒng)主要采用國外X86服務器,閉源Windows操作系統(tǒng)平臺,數(shù)據(jù)庫采用Oracle系列版本,消息中間件采用IBM MQ,整個業(yè)務系統(tǒng)體系基本搭建在國外的平臺基礎之上。
目前LKJ信息系統(tǒng)主要采用Windows服務器、IBM MQ中間件、Oracle數(shù)據(jù)庫等國外的技術和產品,因此需從操作系統(tǒng)、數(shù)據(jù)庫、消息中間件、業(yè)務系統(tǒng)等層面進行全面安全可控跨平臺移植。原始系統(tǒng)技術選型分析示意如圖1所示。
圖1 原始系統(tǒng)技術選型分析示意圖Fig.1 Analysis diagram of original system technology selection
LKJ信息系統(tǒng)對操作系統(tǒng)的應用要求主要體現(xiàn)在安全性、穩(wěn)定性、兼容性、易用性和可維護性方面。Linux作為運行在全球數(shù)據(jù)中心服務器、大型計算機、超級計算機上的開源操作系統(tǒng),應用廣泛,可滿足LKJ信息系統(tǒng)應用要求。Linux發(fā)行版本多,本文主要對主流Linux版本分支,結合應用需求進行對比分析。具體對比如表1所示。
表1 Linux版本分支對比表Tab.1 Comparison table of Linux revision branch
從表1中看出,Rhel、CentOS、Debian適用于服務器,穩(wěn)定性和兼容性是其追求的主要目標,其內核版本的更新頻率較低;Fedora、Ubuntu、優(yōu)麒麟、Deepin主要應用于個人辦公桌面,穩(wěn)定性要求不高,追求功能的新穎性。綜合本次業(yè)務需求,采用CentOS 8.x作為數(shù)據(jù)庫、消息中間件、通信子系統(tǒng)、業(yè)務子系統(tǒng)的操作系統(tǒng)承載平臺,并在CentOS基礎上進行優(yōu)化定制和安全加固。
Mysql被公認為是最流行的開源關系型數(shù)據(jù)庫,PostgreSQL被公認為是最先進的開源關系型數(shù)據(jù)庫,是Oracle的“開源版數(shù)據(jù)庫”。目前既有LKJ信息系統(tǒng)采用Oracle數(shù)據(jù)庫,PostgreSQL、Mysql數(shù)據(jù)庫均能滿足替代要求,重點從語法對數(shù)據(jù)庫移植復雜度、工作量和成本進行分析。具體對比如表2、3所示。
PostgreSQL、Mysql、Qracle、Ms sql server等數(shù)據(jù)庫語法結構差異較小,差異主要來源于數(shù)據(jù)庫提供的功能、數(shù)據(jù)庫字段類型、系統(tǒng)提供的函數(shù)。PostgreSQL在數(shù)據(jù)移植難度、數(shù)據(jù)完整性、大數(shù)據(jù)量操作、密集運算、重型負載方面的表現(xiàn)都要好于 Mysql數(shù)據(jù)庫和 Ms sql server,因此采用PostgreSQL數(shù)據(jù)庫。
消息中間件是指利用高效可靠的消息傳遞機制進行與平臺無關的數(shù)據(jù)交流,并基于數(shù)據(jù)通信來進行分布式系統(tǒng)的集成。通過提供消息傳遞和消息排隊模型,它可以在分布式環(huán)境下提供應用解耦、彈性伸縮、冗余存儲、流量削峰、異步通信、數(shù)據(jù)同步等功能,屬于分布式系統(tǒng)架構中的一個重要組件。
表2 數(shù)據(jù)類型對比表Tab.2 Comparison table of data type
表3 語法函數(shù)對比表Tab.3 Comparison table of syntax functions
目前開源的消息中間件種類較多,常見的有ActiveMQ、RabbitMQ、Kafka、Rocketmq、ZeroMQ等產品。根據(jù)LKJ信息系統(tǒng)業(yè)務的需要,對中間件進行定制、調優(yōu)、改進、固化。具體對比如表4所示。
綜上從消息中間件在持久化、可靠性(消息)、性能、易用性(使用難度)等多個維度進行了對比分析,單純從吞吐量和TPS角度分析,Kafka、Memcacheq、ZeroMQ性能較好,經過測試,Kafaka在單臺服務器上處理小消息時TPS能夠達到100 W/S,在同等條件下RabbitMQ的吞吐量只有Kafka的1/10至1/5之間,但RabbitMQ在使用RAM模式時,其性能較高。Rocketmq和ActiveMQ的性能居于其間,約幾十萬條每秒?;谀壳皩嶋HLKJ信息系統(tǒng)需求,并綜合性能考慮,Kafaka更具有優(yōu)勢。
表4 中間件對比表Tab.4 Comparison table of middleware
根據(jù)LKJ信息系統(tǒng)跨平臺設計總體要求,實現(xiàn)高并發(fā)、高穩(wěn)定車地平臺化通信,支持TCP和UDP協(xié)議,支持IPV4和IPV6網絡協(xié)議,支持車地通信協(xié)議的用戶自定義,且基于國產或開源操作系統(tǒng)。
Epoll是Linux下多路復用IO接口Select/Poll的增強版本,它能顯著提高程序在大量并發(fā)連接中只有少量活躍的情況下系統(tǒng)CPU利用率。在獲取事件時,無需遍歷整個被偵聽的描述符集,只要遍歷那些被內核IO事件異步喚醒而加入Ready隊列的描述符集合。Epoll除了提供Select/Poll那種IO事件的電平觸發(fā)(Level Triggered)外,還提供了邊沿觸發(fā)(Edge Triggered),使得用戶空間程序有可能緩存IO狀態(tài),減少Epoll_Wait/Epoll_Pwait的調用,提高應用程序效率。綜合考慮采用基于開源的Epoll第三方通信庫進行設計完成替代。
LKJ信息系統(tǒng)由操作系統(tǒng)、數(shù)據(jù)庫、消息中間件、及各個子系統(tǒng)等組成。LKJ信息系統(tǒng)跨平臺總體系統(tǒng)架構示意如圖2所示。
對本方案中涉及到的關鍵信息進行分層,總體可以分為車載設備、車地傳輸層(通信子系統(tǒng))、數(shù)據(jù)分發(fā)層(消息中間件:Kafka)、數(shù)據(jù)處理層、數(shù)據(jù)存儲層(數(shù)據(jù)庫:PostgreSQL)、應用服務層、終端應用層,以及操作系統(tǒng)承載層(操作系統(tǒng):Linux CentOS 8.x 平臺操作系統(tǒng) )。
LKJ信息系統(tǒng)跨平臺技術架構示意如圖3所示。
根據(jù)LKJ信息系統(tǒng)跨平臺設計總體要求,所有子系統(tǒng)均進行跨平臺設計,兼容Linux和Windows平臺。各個子系統(tǒng)均使用標準的C/C++語言和STL標準模板庫,避免使用與系統(tǒng)相關的API接口;使用PostgreSQL數(shù)據(jù)庫,均支持在Linux平臺和Windows平臺上部署,具有良好的跨平臺部署能力;使用Kafka消息中間件,在業(yè)界比較常用且有大量實踐案例,API支持多種語言,支持Windows和Linux雙平臺。系統(tǒng)采用Reactor網絡編程模型,利用Reactor實例、多路復用器、事件處理器以及事件源四個核心組件,引入開源高性能事件驅動I/O庫,進行平臺通用模塊框架設計,實現(xiàn)對Linux CentOS/Windows Server操作系統(tǒng)平臺的兼容。
圖2 總體系統(tǒng)架構示意圖Fig.2 Overall system architecture
圖3 技術架構示意圖Fig.3 Technical architecture
根據(jù)對LKJ信息系統(tǒng)通信子系統(tǒng)性能分析,影響高并發(fā)、高性能的主要技術瓶頸在網絡IO的快速收發(fā)、業(yè)務包的高速處理和轉發(fā)。
通過網絡IO模型的選型,使用復雜度O(1)的Epoll模型,在網絡IO層面實現(xiàn)快速的網絡吞吐,為了充分使用SMP多核的并發(fā)處理優(yōu)勢,在包的解析處理和轉發(fā)層面,通信子系統(tǒng)使用可配置數(shù)量的業(yè)務線程池技術,避免線程頻繁的創(chuàng)建和銷毀,并充分利用硬件多核資源,以應對在多終端大并發(fā)連接情況下對通信數(shù)據(jù)包的高效處理。
在通信子系統(tǒng)內部,按照消息流向,可以架構為消息收發(fā)(Epoll)、消息處理(工作線程池)、消息分發(fā)(內部消息中間件處理)這3個流程。
通信子系統(tǒng)基礎架構示意如圖4所示。
圖4 通信子系統(tǒng)基礎架構示意圖Fig.4 Communication subsystem infrastructure
目前LKJ信息系統(tǒng)采用國外Windows操作系統(tǒng)平臺,通過前期可行性替代研究,同時考慮對Kafka消息中間件、PostgreSQL數(shù)據(jù)庫版本的支持,通過定制化的Linux操作系統(tǒng)平臺,是實現(xiàn)操作系統(tǒng)安全可控的有效替換方案。CentOS是基于Linux 平臺的操作系統(tǒng),其內核kernel代碼全部安全可控,可定制成具有高性能、高可用、高可靠和高易用等特征,支持多核、雙態(tài)、多進程,可用于業(yè)務功能復雜、擴展性、穩(wěn)定性、安全性較高的綜合業(yè)務,滿足業(yè)務對系統(tǒng)的實時性需求,同時支持QT應用或Web應用開發(fā),并支持運行上層桌面,方便集成應用組件。操作系統(tǒng)軟件架構示意如圖5所示。
圖5 操作系統(tǒng)軟件架構示意圖Fig.5 Operating system software architecture
通過對業(yè)務場景的需求分析以及數(shù)據(jù)庫軟件技術選型,LKJ信息系統(tǒng)跨平臺選用PostgreSQL12(64位)數(shù)據(jù)庫作為系統(tǒng)架構的數(shù)據(jù)庫系統(tǒng)。
1)數(shù)據(jù)庫接口機設計
在需要入庫的業(yè)務和數(shù)據(jù)庫之間,建立一層緩存機制,避免大量數(shù)據(jù)入庫時PostgreSQL數(shù)據(jù)庫處理不過來導致阻塞,影響查詢等業(yè)務;接口機會匯聚多個入庫請求,批量進行入庫提交,以極大的提供入庫的效率;在PostgreSQL數(shù)據(jù)庫發(fā)生異常時,接口機會將入庫數(shù)據(jù)緩存到文件中,當數(shù)據(jù)庫上線時,再將數(shù)據(jù)插入至數(shù)據(jù)庫中,提高系統(tǒng)整體的容災能力。
為保證接口機數(shù)據(jù)高速寫入,數(shù)據(jù)緩存采用內存緩存和磁盤文件相結合的方式。接口機的數(shù)據(jù)先寫入到內存中,當小塊數(shù)據(jù)緩存到較大數(shù)據(jù)量時,再調用接口批量寫入到磁盤文件中,通過內存緩存累積成大塊IO寫入文件,來提高寫入磁盤的效率。
入庫數(shù)據(jù)流示意如圖6所示。
圖6 入庫數(shù)據(jù)流示意圖Fig.6 Inbound data flow
2)PostgreSQL數(shù)據(jù)庫優(yōu)化
LKJ信息系統(tǒng)跨平臺設計需完成既有基于Oracle數(shù)據(jù)庫的腳本移植(包括數(shù)據(jù)結構、字段類型、字段長度)、數(shù)據(jù)庫內置存儲過程觸發(fā)器定時任務的移植,客戶端訪問數(shù)據(jù)庫語句的代碼移植,數(shù)據(jù)庫的優(yōu)化遵循由“硬”及“軟”的方式進行調優(yōu)。
數(shù)據(jù)庫調優(yōu)主要考慮LKJ信息系統(tǒng)單表海量數(shù)據(jù),為確保操作數(shù)據(jù)的效率,對數(shù)據(jù)庫進行分表分區(qū)設計,提升數(shù)據(jù)庫的并發(fā)訪問能力,避免單臺數(shù)據(jù)庫服務器成為瓶頸。按照日期對主表進行水平拆分,以一日一表的原則建立表結構相同的虛擬主表,按照每5 s 1 000條實時數(shù)據(jù)的量來進行計算,日表數(shù)據(jù)量約172.8萬條。為避免主表拆分后對用戶查詢數(shù)據(jù)帶來的額外開銷,數(shù)據(jù)庫設計時提供存儲過程調用,用戶操作主表,將查詢語句提交給存儲過程,存儲過程根據(jù)傳入的時間及條件,返回翻譯后的查詢、修改、刪除等語句供業(yè)務系統(tǒng)調用,用戶不再關注數(shù)據(jù)存放在哪張?zhí)摂M主表中。
數(shù)據(jù)庫虛擬主表示意如圖7所示。
圖7 數(shù)據(jù)庫虛擬主表示意圖Fig.7 Database virtual main table
3)PostgreSQL數(shù)據(jù)庫可靠性設計
雙機熱備,以主備兩臺數(shù)據(jù)庫為基礎構建高可用框架,提升整套數(shù)據(jù)系統(tǒng)的穩(wěn)定性、數(shù)據(jù)安全性和性能,雙機方案基于ROSE HA框架進行部署。ROSE負責數(shù)據(jù)庫雙機的資源管理層和消息傳遞,負責仲裁指定誰雙機中的活動節(jié)點、IP地址的轉移、本地資源管理系統(tǒng)、雙機的心跳信息(heartbeat),以及負責數(shù)據(jù)庫服務的啟動、停止和狀態(tài)查看。
數(shù)據(jù)同步,主數(shù)據(jù)庫A對外提供讀寫,將數(shù)據(jù)同步至從數(shù)據(jù)庫B,從數(shù)據(jù)庫B不斷從主數(shù)據(jù)庫A接收到數(shù)據(jù)并入庫,主從數(shù)據(jù)同步基于時間點的備份(簡稱PITR),其中把數(shù)據(jù)庫變動日志記錄WAL日志傳送到另外一臺服務器上有兩種方式,WAL日志歸檔(base-file)和流復制(streaming replication)。
數(shù)據(jù)庫異常及恢復,當數(shù)據(jù)庫雙機處于正常運行狀態(tài)時,浮動IP位于數(shù)據(jù)庫主數(shù)據(jù)庫A上,客戶端數(shù)據(jù)采集器通過浮動IP連接到A的接口機,數(shù)據(jù)由A進行緩存并入庫,客戶端通過該IP地址進行數(shù)據(jù)庫連接和操作。從數(shù)據(jù)庫B異常時,不影響數(shù)據(jù)庫A的正常工作,待數(shù)據(jù)庫B恢復后,繼續(xù)進行數(shù)據(jù)的同步;主數(shù)據(jù)庫A異常時,雙機軟件會將浮動IP切換到從數(shù)據(jù)庫B,從數(shù)據(jù)庫B上的數(shù)據(jù)接口機接收外部傳入的數(shù)據(jù)并緩存到本地文件中,此時數(shù)據(jù)并不入庫,只提供數(shù)據(jù)的讀取操作,不提供數(shù)據(jù)的修改、刪除、插入操作。待主數(shù)據(jù)庫A修復后,雙機軟件將切回至主數(shù)據(jù)庫A,此時主數(shù)據(jù)庫接口機主動將從數(shù)據(jù)庫B緩存的本地數(shù)據(jù)文件拷貝至主數(shù)據(jù)庫A,由主數(shù)據(jù)庫A上的入庫接口機進行入庫操作,以保證數(shù)據(jù)的完整性。
鑒于目前國內外形勢,結合《信息安全技術網絡安全等級保護基本要求》,本文采用基于國產或開源的操作系統(tǒng)、數(shù)據(jù)庫、消息中間件等對LKJ信息系統(tǒng)進行跨平臺設計、轉型給出具體替代方案。通過部署與試用,所設計的替代方案滿足LKJ信息系統(tǒng)工程化應用所需的安全性、可靠性及其他各項性能指標要求,有效保障了既有LKJ信息系統(tǒng)應用的平穩(wěn)過渡,為今后在軌道交通領域信息系統(tǒng)自主化設計提供了具體思路。