基于并行编程的网络拓扑信息实时处理软件*

2021-12-23 03:04李朝阳徐同乔张小锋张万彬
通信技术 2021年10期
关键词:网络拓扑线程进程

李朝阳,徐同乔,张小锋,张万彬

(中国西昌卫星发射中心,四川 西昌 615000)

0 引言

以组播信息交互为基础的一体化综合业务信息管理系统是融合业务实时调度、业务流程实时展示及信息基础设施可视化管理等多种功能为一体的企业级核心应用软件。大规模网络拓扑实时高效的可视化监控管理作为该软件中面向信息基础设施管理的重要组成部分,其相应服务端组播信息发送软件的研发面临诸多新的难题:短时间内完成对大规模IP 地址的连通性测试;网络拓扑状态信息测试结果真实可靠,尽量避免由于监测软件或网络环境因素出现的伪结果;进一步提升网络拓扑可视化显示软件的应急处置能力。

1 技术途径

1.1 拓扑信息实时采集方法

Python3 生态下的网络拓扑状态信息实时采集方法的特点及其优劣见表1。综合考虑并行编程技术、软件可靠性、互联网控制协议(Internet Control Message Protocol,ICMP)响应时间以及大规模高频次测试对设备性能的影响等各方面因素,本文选择基于ICMP 协议的方式实现对网络拓扑状态信息的实时采集处理。

表1 网络拓扑状态信息实时采集方法概略

2.2 基于Python3 生态链的ping 方法

数为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 方法性能比较

2.3 面向运维的并行编程解决途径

综合考虑网络拓扑状态信息实时处理软件在稳定性和实时性方面的实际需求,在比较分析Python3 生态中的5 种常用ping 测试方法性能优劣(见表2)的基础上,本文提出一种采用Python3并行编程处理的、面向大规模网络设备运维的、基于subprocess 模块且资源占用独立的网络拓扑状态信息实时测试方法。

3 软件结构设计

网络拓扑状态信息实时处理软件体系结构见图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 两种风格的采集传感器。

4 软件实现过程

4.1 主程序逻辑

网络拓扑状态信息实时处理软件的主程序基于PyQt 5.15 开发而成,其逻辑结构见图4。从程序控制权更迭的时间顺序而言,其运行过程包括系统参数配置、拓扑资源参数配置、参数加载、模块初始化、并行处理、后台执行和用户响应7 个步骤[3]。

每个步骤的实现细节详见图4。其中,需要重点关注:①在第4 步模块初始化中,将整个程序运行界定为前台GUI 进程和后台守护进程,其中后台Daemon 守护进程基于apscheduler3.7 实现;②在第5 步并行处理中,存在一个内部多级嵌套线程(进程)结构。首先,为避免大量拓扑信息实时监测不至于影响用户的响应操作,生成以调度模块为核心的后台守护进程,其生命周期贯穿于软件的整个运行阶段。其次,为充分发挥多核CPU 的并行特性,核心调度模块基于apscheduler3.7 的多进程并行模式创建与CPU 核数相同的子进程,其生命周期也贯穿于软件的整个运行阶段。最后,为应对网络拓扑状态快速响应的实际应用需求,在每个子进程内部基于Python3 线程池技术生成与目标主机数目相适应的子线程,其生命周期与apscheduler3.7 的调度周期相匹配。

图4 实时处理软件主程序逻辑结构示意

4.2 核心调度模块

核心调度模块是基于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 的核心调度模块实现伪码示例

4.3 资源独立的进程模型

为提高和增强网络拓扑状态信息实时处理软件的稳定性和时效性,本文设计实现如图7 所示的资源占用完全独立的进程模型。所谓资源独立,一方面的含义是程序启动时一次性解析加载所有参数至计算机内存,核心调度模块据此为将要产生的各子进程实例分配相互独立的输入参数集;另一方面的含义是基于subprocess 模块调用操作系统级别的ping 指令。两者综合起来看,每个底层线程所占资源是完全独立的。

图7 资源独立的进行模型

资源独立的进程模型对于软件的核心调度模块而言,其内部的各种操作及信息流程相当于一个黑盒设计。从资源独立的进程模型外部观察,调度模块向其输入两类参数,即参数集与空载的跟踪器对象。该模型实例向调度模块输出的也是两类参数,即结果集与载荷跟踪器对象。进程的执行结果装载于各类跟踪器。

资源独立的进程模型内部结构如图7 虚线框所示,由功能模块、支撑参数以及依赖库3 部分构成。其中,功能模块主要包括底层并行处理子模块、拓扑信息采集器、协议数据产生器和拓扑信息发送器4 个组成单元。底层并行处理子模块与基于apscheduler3.7 研发的核心调度模块共同构成网络拓扑状态信息实时处理软件的多层嵌套并行处理架构,为大规模IP 地址的高效ping 测试提供支撑。

限于篇幅,本文仅给出图7中采集传感器-B(面向Linux 系统)的实现伪码,见图8 和图9。

图8 拓扑信息采集传感器实现伪码示例A 部分

图9 拓扑信息采集传感器实现伪码示例B 部分

4.4 其他模块实现

网络拓扑状态信息实时处理软件还包括运行状态实时监测模块、拓扑信息应急处理模块、Excel数据解析模块、系统参数解析模块、性能参数图表绘制模块[4]、组播模块、协议数据处理模块[5]、时间服务模块、日志记录模块以及用户GUI 界面等。上述模块的编程实现逻辑较为简单,皆借助各类Python3 开源库实现。

5 软件应用实践

本文所述网络拓扑状态信息实时处理软件作为以组播信息交互为基础的一体化综合业务信息管理系统的后台服务端软件之一,可长时间稳定可靠运行,很好地满足了大型企业对信息基础设施实时监控管理的实际需求。它的软件运行状态实时监视情况和数据发送监视情况见图10,软件驱动的网络拓扑状态页面见图11。

图10 拓扑状态信息实时处理软件运行状态监视界面

图11 网络拓扑实时驱动页面

6 结语

文章在对大规模网络拓扑信息可视化面临的各类新问题及其相关技术解决途径进行深入剖析的基础上,提出了一种基于Python3 并行编程处理技术的网络拓扑状态信息实时采集发送方法,据此设计了融合快速数据处理、运行状态实时监测、配置参数自动解析及高效应急处置等关键功能于一体的具有并行实时信息处理特性的软件体系架构,结构清晰,流程合理。同时,本文对上述设计基于Python3 生态环境进行了编程实现,在大量实践中取得了良好应用效果。实践表明,本文所述方法稳妥可靠,可操作性强,具有良好可扩展性和技术先进性。

猜你喜欢
网络拓扑线程进程
基于通联关系的通信网络拓扑发现方法
实时操作系统mbedOS 互斥量调度机制剖析
基于国产化环境的线程池模型研究与实现
债券市场对外开放的进程与展望
改革开放进程中的国际收支统计
能量高效的无线传感器网络拓扑控制
2017款捷豹F-PACE网络拓扑图及图注
劳斯莱斯古斯特与魅影网络拓扑图
社会进程中的新闻学探寻
计算机中的多线程问题