李朝陽,徐同喬,張小鋒,張萬彬
(中國西昌衛(wèi)星發(fā)射中心,四川 西昌 615000)
以組播信息交互為基礎(chǔ)的一體化綜合業(yè)務(wù)信息管理系統(tǒng)是融合業(yè)務(wù)實(shí)時(shí)調(diào)度、業(yè)務(wù)流程實(shí)時(shí)展示及信息基礎(chǔ)設(shè)施可視化管理等多種功能為一體的企業(yè)級(jí)核心應(yīng)用軟件。大規(guī)模網(wǎng)絡(luò)拓?fù)鋵?shí)時(shí)高效的可視化監(jiān)控管理作為該軟件中面向信息基礎(chǔ)設(shè)施管理的重要組成部分,其相應(yīng)服務(wù)端組播信息發(fā)送軟件的研發(fā)面臨諸多新的難題:短時(shí)間內(nèi)完成對(duì)大規(guī)模IP 地址的連通性測(cè)試;網(wǎng)絡(luò)拓?fù)錉顟B(tài)信息測(cè)試結(jié)果真實(shí)可靠,盡量避免由于監(jiān)測(cè)軟件或網(wǎng)絡(luò)環(huán)境因素出現(xiàn)的偽結(jié)果;進(jìn)一步提升網(wǎng)絡(luò)拓?fù)淇梢暬@示軟件的應(yīng)急處置能力。
Python3 生態(tài)下的網(wǎng)絡(luò)拓?fù)錉顟B(tài)信息實(shí)時(shí)采集方法的特點(diǎn)及其優(yōu)劣見表1。綜合考慮并行編程技術(shù)、軟件可靠性、互聯(lián)網(wǎng)控制協(xié)議(Internet Control Message Protocol,ICMP)響應(yīng)時(shí)間以及大規(guī)模高頻次測(cè)試對(duì)設(shè)備性能的影響等各方面因素,本文選擇基于ICMP 協(xié)議的方式實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)拓?fù)錉顟B(tài)信息的實(shí)時(shí)采集處理。
表1 網(wǎng)絡(luò)拓?fù)錉顟B(tài)信息實(shí)時(shí)采集方法概略
數(shù)為ping_method_x();偽碼中octet3 表示IP 地址的第3 個(gè)八位組;octet4 表示IP 地址的第4 個(gè)八位組;octet3 和octet4 的取值見表2 中Num 一行所列,譬如當(dāng)octet3 取值(0:5)、octet4 取值(1:255)時(shí),構(gòu)造出的IP 地址集合大小為1 270。
圖1 ping 方法應(yīng)用偽碼
關(guān)于IP 地址分配情況解釋如下:設(shè)置網(wǎng)絡(luò)設(shè)備地址探測(cè)范圍為20×255,縱坐標(biāo)(octet3)取值范圍為0~20,橫坐標(biāo)(octet4)實(shí)際取值范圍1~255,構(gòu)造出的目標(biāo)可達(dá)主機(jī)見圖2。
圖2 測(cè)試用IP 地址分布示意
測(cè)試結(jié)果見表2,其中Num 一行反映測(cè)試IP地址集合的大小以及目標(biāo)地址IP 可達(dá)率大小,譬如當(dāng)50/254 的主機(jī)目標(biāo)可達(dá)率為19.68%。此外,表2 中的*代表其實(shí)測(cè)值遠(yuǎn)超出可接受范圍。
表2 基于Python3 的5 種ping 方法性能比較
綜合考慮網(wǎng)絡(luò)拓?fù)錉顟B(tài)信息實(shí)時(shí)處理軟件在穩(wěn)定性和實(shí)時(shí)性方面的實(shí)際需求,在比較分析Python3 生態(tài)中的5 種常用ping 測(cè)試方法性能優(yōu)劣(見表2)的基礎(chǔ)上,本文提出一種采用Python3并行編程處理的、面向大規(guī)模網(wǎng)絡(luò)設(shè)備運(yùn)維的、基于subprocess 模塊且資源占用獨(dú)立的網(wǎng)絡(luò)拓?fù)錉顟B(tài)信息實(shí)時(shí)測(cè)試方法。
網(wǎng)絡(luò)拓?fù)錉顟B(tài)信息實(shí)時(shí)處理軟件體系結(jié)構(gòu)見圖3。整個(gè)軟件架構(gòu)包括主框架、參數(shù)配置解析、核心調(diào)度模塊以及資源獨(dú)立的進(jìn)程模型等4 個(gè)部分。
圖3 網(wǎng)絡(luò)拓?fù)湫畔?shí)時(shí)處理軟件結(jié)構(gòu)
首先,程序主框架基于PyQt5.15 開發(fā)而成,由運(yùn)行參數(shù)配置模塊、參數(shù)加載器、軟件運(yùn)行狀態(tài)實(shí)時(shí)監(jiān)測(cè)模塊、應(yīng)急處置模塊和核心調(diào)度模塊構(gòu)成。
其次,參數(shù)配置解析模塊主要用于對(duì)存儲(chǔ)于Excel 文件[2]中的網(wǎng)絡(luò)拓?fù)鋮?shù)和存儲(chǔ)于文本文件中的系統(tǒng)配置參數(shù)進(jìn)行解析提取,進(jìn)而為網(wǎng)絡(luò)數(shù)據(jù)采集、apscheduler 調(diào)度行為控制以及交互式參數(shù)配置管理提供依據(jù)和支撐。構(gòu)建于Excel 解析模塊和Txt 解析模塊之上的參數(shù)加載器的作用,表述為在程序啟動(dòng)前一次性加載所有參數(shù)至計(jì)算機(jī)內(nèi)存。此設(shè)計(jì)成為確保網(wǎng)絡(luò)拓?fù)湫畔⒉杉咝Э焖俸驼麄€(gè)軟件運(yùn)行穩(wěn)定可靠的前提和基礎(chǔ)。
再次,基于apscheduler3.7 開發(fā)的核心調(diào)度模塊是連接程序主框架(用戶GUI 界面)和軟件內(nèi)部邏輯模塊的橋梁。從用戶操作角度而言,為確保內(nèi)部子線程和進(jìn)程的運(yùn)行狀態(tài)信息及時(shí)反饋給軟件使用者,以Python3 類形式實(shí)現(xiàn)的核心調(diào)度模塊應(yīng)當(dāng)繼承QObject 類,使其具備Qt 的特性,進(jìn)而通過signal-slot 機(jī)制實(shí)現(xiàn)對(duì)數(shù)據(jù)發(fā)送與線程狀態(tài)的實(shí)時(shí)監(jiān)控顯示。從軟件內(nèi)部邏輯的角度而言,為確保大規(guī)模網(wǎng)絡(luò)設(shè)備在線狀態(tài)信息的高效準(zhǔn)確采集,核心調(diào)度模塊必須以Python3 并行編程的方式啟動(dòng)相應(yīng)數(shù)目的一級(jí)進(jìn)程和隸屬于每個(gè)進(jìn)程的若干子線程。其中,計(jì)算機(jī)CPU 的核數(shù)和apscheduler3.7 工具對(duì)進(jìn)程池的支持度是開啟一級(jí)進(jìn)程個(gè)數(shù)的重要參考因素。從軟件運(yùn)行穩(wěn)定性的角度分析,為確保用戶實(shí)時(shí)掌握組播數(shù)據(jù)入網(wǎng)情況及協(xié)議載荷構(gòu)造的有效性,核心調(diào)度模塊必須根據(jù)加載參數(shù)的不同而分門別類構(gòu)造出相應(yīng)的進(jìn)程執(zhí)行跟蹤器,采用Python3.7.5 中開始提供的@dataclass 裝飾器的形式提供。
最后,資源獨(dú)立的進(jìn)程模型是核心調(diào)度模塊依據(jù)不同參數(shù)集產(chǎn)生一級(jí)進(jìn)程的基礎(chǔ)和關(guān)鍵所在。從該模型的特點(diǎn)而言,資源獨(dú)立性是其確保大規(guī)模IP 地址在較短時(shí)間內(nèi)得以測(cè)試完畢并順利回顯的獨(dú)特優(yōu)勢(shì)。前文所述的參數(shù)加載器是確保進(jìn)程模型資源獨(dú)立性的重要設(shè)計(jì)手段。從內(nèi)部結(jié)構(gòu)而言,該模型由拓?fù)湫畔l(fā)送器、協(xié)議數(shù)據(jù)產(chǎn)生器、拓?fù)湫畔⒉杉骱筒杉瘋鞲衅? 部分組成。其中,前3 者與相應(yīng)的Python3 實(shí)現(xiàn)庫一一對(duì)應(yīng),如組播庫、協(xié)議庫以及struct 庫等。采集傳感器池是整個(gè)網(wǎng)絡(luò)拓?fù)湫畔?shí)時(shí)處理軟件的核心所在,本質(zhì)是一個(gè)基于Python 并行編程技術(shù)的線程池??紤]到后期運(yùn)維的跨平臺(tái)特性,該軟件提供windows 和Linux 兩種風(fēng)格的采集傳感器。
網(wǎng)絡(luò)拓?fù)錉顟B(tài)信息實(shí)時(shí)處理軟件的主程序基于PyQt 5.15 開發(fā)而成,其邏輯結(jié)構(gòu)見圖4。從程序控制權(quán)更迭的時(shí)間順序而言,其運(yùn)行過程包括系統(tǒng)參數(shù)配置、拓?fù)滟Y源參數(shù)配置、參數(shù)加載、模塊初始化、并行處理、后臺(tái)執(zhí)行和用戶響應(yīng)7 個(gè)步驟[3]。
每個(gè)步驟的實(shí)現(xiàn)細(xì)節(jié)詳見圖4。其中,需要重點(diǎn)關(guān)注:①在第4 步模塊初始化中,將整個(gè)程序運(yùn)行界定為前臺(tái)GUI 進(jìn)程和后臺(tái)守護(hù)進(jìn)程,其中后臺(tái)Daemon 守護(hù)進(jìn)程基于apscheduler3.7 實(shí)現(xiàn);②在第5 步并行處理中,存在一個(gè)內(nèi)部多級(jí)嵌套線程(進(jìn)程)結(jié)構(gòu)。首先,為避免大量拓?fù)湫畔?shí)時(shí)監(jiān)測(cè)不至于影響用戶的響應(yīng)操作,生成以調(diào)度模塊為核心的后臺(tái)守護(hù)進(jìn)程,其生命周期貫穿于軟件的整個(gè)運(yùn)行階段。其次,為充分發(fā)揮多核CPU 的并行特性,核心調(diào)度模塊基于apscheduler3.7 的多進(jìn)程并行模式創(chuàng)建與CPU 核數(shù)相同的子進(jìn)程,其生命周期也貫穿于軟件的整個(gè)運(yùn)行階段。最后,為應(yīng)對(duì)網(wǎng)絡(luò)拓?fù)錉顟B(tài)快速響應(yīng)的實(shí)際應(yīng)用需求,在每個(gè)子進(jìn)程內(nèi)部基于Python3 線程池技術(shù)生成與目標(biāo)主機(jī)數(shù)目相適應(yīng)的子線程,其生命周期與apscheduler3.7 的調(diào)度周期相匹配。
圖4 實(shí)時(shí)處理軟件主程序邏輯結(jié)構(gòu)示意
核心調(diào)度模塊是基于Python3 開源庫apscheduler3.7實(shí)現(xiàn)的、具備Qt 信號(hào)-槽機(jī)制的、面向周期性任務(wù)執(zhí)行的、具備并行處理能力的定時(shí)作業(yè)調(diào)度工具。在網(wǎng)絡(luò)拓?fù)錉顟B(tài)信息實(shí)時(shí)處理軟件結(jié)構(gòu)中,核心調(diào)度模塊是實(shí)現(xiàn)Daemon 守護(hù)進(jìn)程的基礎(chǔ)和關(guān)鍵,其內(nèi)部結(jié)構(gòu)見圖5。
從核心調(diào)度模塊的特性而言,它的內(nèi)部組成在圖5 中被劃分為左右兩個(gè)部分:一部分功能(圖5右側(cè))是對(duì)apscheduler3.7 特性的進(jìn)一步擴(kuò)展;另一部分(圖5 左側(cè))則是在繼承Qt 信號(hào)-槽機(jī)制的基礎(chǔ)上而開發(fā)的新功能。
圖5 中核心調(diào)度模塊源于apscheduler3.7 的部分主要由作業(yè)調(diào)度器、作業(yè)觸發(fā)器、作業(yè)存儲(chǔ)器以及作業(yè)執(zhí)行器構(gòu)成。內(nèi)部運(yùn)行邏輯和信息流程如圖5 中箭頭所示,其中作業(yè)的概念隨作業(yè)調(diào)度器輸入?yún)?shù)的不同而與網(wǎng)絡(luò)拓?fù)錉顟B(tài)信息實(shí)時(shí)處理軟件的子進(jìn)程相互對(duì)應(yīng)。
圖5 核心調(diào)度模塊
圖5 中核心調(diào)度模塊源于Qtobject 的部分主要由參數(shù)加載器、調(diào)度控制器、進(jìn)程跟蹤器和狀態(tài)監(jiān)視器構(gòu)成。其中:進(jìn)程跟蹤器基于Python3.7.5 新特性@dataclass 實(shí)現(xiàn);調(diào)度控制器主要實(shí)現(xiàn)核心調(diào)度模塊的啟動(dòng)任務(wù)執(zhí)行操作、停止任務(wù)執(zhí)行操作、暫停任務(wù)執(zhí)行操作和恢復(fù)任務(wù)執(zhí)行操作;狀態(tài)監(jiān)視器一方面通過對(duì)apscheduler3.7 內(nèi)部運(yùn)行機(jī)制的監(jiān)控而獲得運(yùn)行時(shí)各進(jìn)程的狀態(tài)信息,另一方面通過Qt 的信號(hào)-槽機(jī)制將子進(jìn)程的周期性執(zhí)行結(jié)果發(fā)送至用戶GUI 界面,為軟件的實(shí)時(shí)狀態(tài)監(jiān)控提供基礎(chǔ)支撐。
本文基于Python3.8.1 與apscheduler3.7 實(shí)現(xiàn)的核心調(diào)度模塊偽碼見圖6。
圖6 基于apscheduler 的核心調(diào)度模塊實(shí)現(xiàn)偽碼示例
為提高和增強(qiáng)網(wǎng)絡(luò)拓?fù)錉顟B(tài)信息實(shí)時(shí)處理軟件的穩(wěn)定性和時(shí)效性,本文設(shè)計(jì)實(shí)現(xiàn)如圖7 所示的資源占用完全獨(dú)立的進(jìn)程模型。所謂資源獨(dú)立,一方面的含義是程序啟動(dòng)時(shí)一次性解析加載所有參數(shù)至計(jì)算機(jī)內(nèi)存,核心調(diào)度模塊據(jù)此為將要產(chǎn)生的各子進(jìn)程實(shí)例分配相互獨(dú)立的輸入?yún)?shù)集;另一方面的含義是基于subprocess 模塊調(diào)用操作系統(tǒng)級(jí)別的ping 指令。兩者綜合起來看,每個(gè)底層線程所占資源是完全獨(dú)立的。
圖7 資源獨(dú)立的進(jìn)行模型
資源獨(dú)立的進(jìn)程模型對(duì)于軟件的核心調(diào)度模塊而言,其內(nèi)部的各種操作及信息流程相當(dāng)于一個(gè)黑盒設(shè)計(jì)。從資源獨(dú)立的進(jìn)程模型外部觀察,調(diào)度模塊向其輸入兩類參數(shù),即參數(shù)集與空載的跟蹤器對(duì)象。該模型實(shí)例向調(diào)度模塊輸出的也是兩類參數(shù),即結(jié)果集與載荷跟蹤器對(duì)象。進(jìn)程的執(zhí)行結(jié)果裝載于各類跟蹤器。
資源獨(dú)立的進(jìn)程模型內(nèi)部結(jié)構(gòu)如圖7 虛線框所示,由功能模塊、支撐參數(shù)以及依賴庫3 部分構(gòu)成。其中,功能模塊主要包括底層并行處理子模塊、拓?fù)湫畔⒉杉?、協(xié)議數(shù)據(jù)產(chǎn)生器和拓?fù)湫畔l(fā)送器4 個(gè)組成單元。底層并行處理子模塊與基于apscheduler3.7 研發(fā)的核心調(diào)度模塊共同構(gòu)成網(wǎng)絡(luò)拓?fù)錉顟B(tài)信息實(shí)時(shí)處理軟件的多層嵌套并行處理架構(gòu),為大規(guī)模IP 地址的高效ping 測(cè)試提供支撐。
限于篇幅,本文僅給出圖7中采集傳感器-B(面向Linux 系統(tǒng))的實(shí)現(xiàn)偽碼,見圖8 和圖9。
圖8 拓?fù)湫畔⒉杉瘋鞲衅鲗?shí)現(xiàn)偽碼示例A 部分
圖9 拓?fù)湫畔⒉杉瘋鞲衅鲗?shí)現(xiàn)偽碼示例B 部分
網(wǎng)絡(luò)拓?fù)錉顟B(tài)信息實(shí)時(shí)處理軟件還包括運(yùn)行狀態(tài)實(shí)時(shí)監(jiān)測(cè)模塊、拓?fù)湫畔?yīng)急處理模塊、Excel數(shù)據(jù)解析模塊、系統(tǒng)參數(shù)解析模塊、性能參數(shù)圖表繪制模塊[4]、組播模塊、協(xié)議數(shù)據(jù)處理模塊[5]、時(shí)間服務(wù)模塊、日志記錄模塊以及用戶GUI 界面等。上述模塊的編程實(shí)現(xiàn)邏輯較為簡(jiǎn)單,皆借助各類Python3 開源庫實(shí)現(xiàn)。
本文所述網(wǎng)絡(luò)拓?fù)錉顟B(tài)信息實(shí)時(shí)處理軟件作為以組播信息交互為基礎(chǔ)的一體化綜合業(yè)務(wù)信息管理系統(tǒng)的后臺(tái)服務(wù)端軟件之一,可長時(shí)間穩(wěn)定可靠運(yùn)行,很好地滿足了大型企業(yè)對(duì)信息基礎(chǔ)設(shè)施實(shí)時(shí)監(jiān)控管理的實(shí)際需求。它的軟件運(yùn)行狀態(tài)實(shí)時(shí)監(jiān)視情況和數(shù)據(jù)發(fā)送監(jiān)視情況見圖10,軟件驅(qū)動(dòng)的網(wǎng)絡(luò)拓?fù)錉顟B(tài)頁面見圖11。
圖10 拓?fù)錉顟B(tài)信息實(shí)時(shí)處理軟件運(yùn)行狀態(tài)監(jiān)視界面
圖11 網(wǎng)絡(luò)拓?fù)鋵?shí)時(shí)驅(qū)動(dòng)頁面
文章在對(duì)大規(guī)模網(wǎng)絡(luò)拓?fù)湫畔⒖梢暬媾R的各類新問題及其相關(guān)技術(shù)解決途徑進(jìn)行深入剖析的基礎(chǔ)上,提出了一種基于Python3 并行編程處理技術(shù)的網(wǎng)絡(luò)拓?fù)錉顟B(tài)信息實(shí)時(shí)采集發(fā)送方法,據(jù)此設(shè)計(jì)了融合快速數(shù)據(jù)處理、運(yùn)行狀態(tài)實(shí)時(shí)監(jiān)測(cè)、配置參數(shù)自動(dòng)解析及高效應(yīng)急處置等關(guān)鍵功能于一體的具有并行實(shí)時(shí)信息處理特性的軟件體系架構(gòu),結(jié)構(gòu)清晰,流程合理。同時(shí),本文對(duì)上述設(shè)計(jì)基于Python3 生態(tài)環(huán)境進(jìn)行了編程實(shí)現(xiàn),在大量實(shí)踐中取得了良好應(yīng)用效果。實(shí)踐表明,本文所述方法穩(wěn)妥可靠,可操作性強(qiáng),具有良好可擴(kuò)展性和技術(shù)先進(jìn)性。