李朝陽,徐同喬,張小鋒,張萬彬
(中國西昌衛星發射中心,四川 西昌 615000)
以組播信息交互為基礎的一體化綜合業務信息管理系統是融合業務實時調度、業務流程實時展示及信息基礎設施可視化管理等多種功能為一體的企業級核心應用軟件。大規模網絡拓撲實時高效的可視化監控管理作為該軟件中面向信息基礎設施管理的重要組成部分,其相應服務端組播信息發送軟件的研發面臨諸多新的難題:短時間內完成對大規模IP 地址的連通性測試;網絡拓撲狀態信息測試結果真實可靠,盡量避免由于監測軟件或網絡環境因素出現的偽結果;進一步提升網絡拓撲可視化顯示軟件的應急處置能力。
Python3 生態下的網絡拓撲狀態信息實時采集方法的特點及其優劣見表1。綜合考慮并行編程技術、軟件可靠性、互聯網控制協議(Internet Control Message Protocol,ICMP)響應時間以及大規模高頻次測試對設備性能的影響等各方面因素,本文選擇基于ICMP 協議的方式實現對網絡拓撲狀態信息的實時采集處理。

表1 網絡拓撲狀態信息實時采集方法概略
數為ping_method_x();偽碼中octet3 表示IP 地址的第3 個八位組;octet4 表示IP 地址的第4 個八位組;octet3 和octet4 的取值見表2 中Num 一行所列,譬如當octet3 取值(0:5)、octet4 取值(1:255)時,構造出的IP 地址集合大小為1 270。

圖1 ping 方法應用偽碼
關于IP 地址分配情況解釋如下:設置網絡設備地址探測范圍為20×255,縱坐標(octet3)取值范圍為0~20,橫坐標(octet4)實際取值范圍1~255,構造出的目標可達主機見圖2。

圖2 測試用IP 地址分布示意
測試結果見表2,其中Num 一行反映測試IP地址集合的大小以及目標地址IP 可達率大小,譬如當50/254 的主機目標可達率為19.68%。此外,表2 中的*代表其實測值遠超出可接受范圍。

表2 基于Python3 的5 種ping 方法性能比較
綜合考慮網絡拓撲狀態信息實時處理軟件在穩定性和實時性方面的實際需求,在比較分析Python3 生態中的5 種常用ping 測試方法性能優劣(見表2)的基礎上,本文提出一種采用Python3并行編程處理的、面向大規模網絡設備運維的、基于subprocess 模塊且資源占用獨立的網絡拓撲狀態信息實時測試方法。
網絡拓撲狀態信息實時處理軟件體系結構見圖3。整個軟件架構包括主框架、參數配置解析、核心調度模塊以及資源獨立的進程模型等4 個部分。

圖3 網絡拓撲信息實時處理軟件結構
首先,程序主框架基于PyQt5.15 開發而成,由運行參數配置模塊、參數加載器、軟件運行狀態實時監測模塊、應急處置模塊和核心調度模塊構成。
其次,參數配置解析模塊主要用于對存儲于Excel 文件[2]中的網絡拓撲參數和存儲于文本文件中的系統配置參數進行解析提取,進而為網絡數據采集、apscheduler 調度行為控制以及交互式參數配置管理提供依據和支撐。構建于Excel 解析模塊和Txt 解析模塊之上的參數加載器的作用,表述為在程序啟動前一次性加載所有參數至計算機內存。此設計成為確保網絡拓撲信息采集高效快速和整個軟件運行穩定可靠的前提和基礎。
再次,基于apscheduler3.7 開發的核心調度模塊是連接程序主框架(用戶GUI 界面)和軟件內部邏輯模塊的橋梁。從用戶操作角度而言,為確保內部子線程和進程的運行狀態信息及時反饋給軟件使用者,以Python3 類形式實現的核心調度模塊應當繼承QObject 類,使其具備Qt 的特性,進而通過signal-slot 機制實現對數據發送與線程狀態的實時監控顯示。從軟件內部邏輯的角度而言,為確保大規模網絡設備在線狀態信息的高效準確采集,核心調度模塊必須以Python3 并行編程的方式啟動相應數目的一級進程和隸屬于每個進程的若干子線程。其中,計算機CPU 的核數和apscheduler3.7 工具對進程池的支持度是開啟一級進程個數的重要參考因素。從軟件運行穩定性的角度分析,為確保用戶實時掌握組播數據入網情況及協議載荷構造的有效性,核心調度模塊必須根據加載參數的不同而分門別類構造出相應的進程執行跟蹤器,采用Python3.7.5 中開始提供的@dataclass 裝飾器的形式提供。
最后,資源獨立的進程模型是核心調度模塊依據不同參數集產生一級進程的基礎和關鍵所在。從該模型的特點而言,資源獨立性是其確保大規模IP 地址在較短時間內得以測試完畢并順利回顯的獨特優勢。前文所述的參數加載器是確保進程模型資源獨立性的重要設計手段。從內部結構而言,該模型由拓撲信息發送器、協議數據產生器、拓撲信息采集器和采集傳感器4 部分組成。其中,前3 者與相應的Python3 實現庫一一對應,如組播庫、協議庫以及struct 庫等。采集傳感器池是整個網絡拓撲信息實時處理軟件的核心所在,本質是一個基于Python 并行編程技術的線程池。考慮到后期運維的跨平臺特性,該軟件提供windows 和Linux 兩種風格的采集傳感器。
網絡拓撲狀態信息實時處理軟件的主程序基于PyQt 5.15 開發而成,其邏輯結構見圖4。從程序控制權更迭的時間順序而言,其運行過程包括系統參數配置、拓撲資源參數配置、參數加載、模塊初始化、并行處理、后臺執行和用戶響應7 個步驟[3]。
每個步驟的實現細節詳見圖4。其中,需要重點關注:①在第4 步模塊初始化中,將整個程序運行界定為前臺GUI 進程和后臺守護進程,其中后臺Daemon 守護進程基于apscheduler3.7 實現;②在第5 步并行處理中,存在一個內部多級嵌套線程(進程)結構。首先,為避免大量拓撲信息實時監測不至于影響用戶的響應操作,生成以調度模塊為核心的后臺守護進程,其生命周期貫穿于軟件的整個運行階段。其次,為充分發揮多核CPU 的并行特性,核心調度模塊基于apscheduler3.7 的多進程并行模式創建與CPU 核數相同的子進程,其生命周期也貫穿于軟件的整個運行階段。最后,為應對網絡拓撲狀態快速響應的實際應用需求,在每個子進程內部基于Python3 線程池技術生成與目標主機數目相適應的子線程,其生命周期與apscheduler3.7 的調度周期相匹配。

圖4 實時處理軟件主程序邏輯結構示意
核心調度模塊是基于Python3 開源庫apscheduler3.7實現的、具備Qt 信號-槽機制的、面向周期性任務執行的、具備并行處理能力的定時作業調度工具。在網絡拓撲狀態信息實時處理軟件結構中,核心調度模塊是實現Daemon 守護進程的基礎和關鍵,其內部結構見圖5。
從核心調度模塊的特性而言,它的內部組成在圖5 中被劃分為左右兩個部分:一部分功能(圖5右側)是對apscheduler3.7 特性的進一步擴展;另一部分(圖5 左側)則是在繼承Qt 信號-槽機制的基礎上而開發的新功能。
圖5 中核心調度模塊源于apscheduler3.7 的部分主要由作業調度器、作業觸發器、作業存儲器以及作業執行器構成。內部運行邏輯和信息流程如圖5 中箭頭所示,其中作業的概念隨作業調度器輸入參數的不同而與網絡拓撲狀態信息實時處理軟件的子進程相互對應。

圖5 核心調度模塊
圖5 中核心調度模塊源于Qtobject 的部分主要由參數加載器、調度控制器、進程跟蹤器和狀態監視器構成。其中:進程跟蹤器基于Python3.7.5 新特性@dataclass 實現;調度控制器主要實現核心調度模塊的啟動任務執行操作、停止任務執行操作、暫停任務執行操作和恢復任務執行操作;狀態監視器一方面通過對apscheduler3.7 內部運行機制的監控而獲得運行時各進程的狀態信息,另一方面通過Qt 的信號-槽機制將子進程的周期性執行結果發送至用戶GUI 界面,為軟件的實時狀態監控提供基礎支撐。
本文基于Python3.8.1 與apscheduler3.7 實現的核心調度模塊偽碼見圖6。

圖6 基于apscheduler 的核心調度模塊實現偽碼示例
為提高和增強網絡拓撲狀態信息實時處理軟件的穩定性和時效性,本文設計實現如圖7 所示的資源占用完全獨立的進程模型。所謂資源獨立,一方面的含義是程序啟動時一次性解析加載所有參數至計算機內存,核心調度模塊據此為將要產生的各子進程實例分配相互獨立的輸入參數集;另一方面的含義是基于subprocess 模塊調用操作系統級別的ping 指令。兩者綜合起來看,每個底層線程所占資源是完全獨立的。

圖7 資源獨立的進行模型
資源獨立的進程模型對于軟件的核心調度模塊而言,其內部的各種操作及信息流程相當于一個黑盒設計。從資源獨立的進程模型外部觀察,調度模塊向其輸入兩類參數,即參數集與空載的跟蹤器對象。該模型實例向調度模塊輸出的也是兩類參數,即結果集與載荷跟蹤器對象。進程的執行結果裝載于各類跟蹤器。
資源獨立的進程模型內部結構如圖7 虛線框所示,由功能模塊、支撐參數以及依賴庫3 部分構成。其中,功能模塊主要包括底層并行處理子模塊、拓撲信息采集器、協議數據產生器和拓撲信息發送器4 個組成單元。底層并行處理子模塊與基于apscheduler3.7 研發的核心調度模塊共同構成網絡拓撲狀態信息實時處理軟件的多層嵌套并行處理架構,為大規模IP 地址的高效ping 測試提供支撐。
限于篇幅,本文僅給出圖7中采集傳感器-B(面向Linux 系統)的實現偽碼,見圖8 和圖9。

圖8 拓撲信息采集傳感器實現偽碼示例A 部分

圖9 拓撲信息采集傳感器實現偽碼示例B 部分
網絡拓撲狀態信息實時處理軟件還包括運行狀態實時監測模塊、拓撲信息應急處理模塊、Excel數據解析模塊、系統參數解析模塊、性能參數圖表繪制模塊[4]、組播模塊、協議數據處理模塊[5]、時間服務模塊、日志記錄模塊以及用戶GUI 界面等。上述模塊的編程實現邏輯較為簡單,皆借助各類Python3 開源庫實現。
本文所述網絡拓撲狀態信息實時處理軟件作為以組播信息交互為基礎的一體化綜合業務信息管理系統的后臺服務端軟件之一,可長時間穩定可靠運行,很好地滿足了大型企業對信息基礎設施實時監控管理的實際需求。它的軟件運行狀態實時監視情況和數據發送監視情況見圖10,軟件驅動的網絡拓撲狀態頁面見圖11。

圖10 拓撲狀態信息實時處理軟件運行狀態監視界面

圖11 網絡拓撲實時驅動頁面
文章在對大規模網絡拓撲信息可視化面臨的各類新問題及其相關技術解決途徑進行深入剖析的基礎上,提出了一種基于Python3 并行編程處理技術的網絡拓撲狀態信息實時采集發送方法,據此設計了融合快速數據處理、運行狀態實時監測、配置參數自動解析及高效應急處置等關鍵功能于一體的具有并行實時信息處理特性的軟件體系架構,結構清晰,流程合理。同時,本文對上述設計基于Python3 生態環境進行了編程實現,在大量實踐中取得了良好應用效果。實踐表明,本文所述方法穩妥可靠,可操作性強,具有良好可擴展性和技術先進性。