基于开源框架的全网拨测系统设计

/ 2

基于开源框架的全网拨测系统设计

王林何映军李绍龙王勇

(云南电网有限责任公司信息中心云南昆明650206)

随着网络技术飞速发展,采用B/S架构网络应用成为企业信息化主流技术,为我们提供随时随地免安装应用,但分布式应用也存在服务无法访问、打开速度缓慢、服务异常等等的问题,造成用户体验不佳的问题等使用上的困扰。因此,如何获取真实用户体验数据便显得尤为重要。全网拨测系统是一套分布式的网络性能监控系统,通过对用户的业务感知,来获取用户“真实体验”信息,为网络维护人员提供最直接最科学的维护依据,本文介绍的探针系统即是模拟用户请求以进行数据采集的系统。

全网拨测系统设计

全网拨测系统是基于C/S的分布式网络监测系统。本系统由三部分组成:前端、中心服务器,以及探针。前台负责所有的用户交互过程以及各类数据呈现,是整个系统与各种类型的用户打交道的窗口。前台服务器主要由负责用户界面的web服务器和负责客户端接口的API服务器构成。用户界面:以WEB形式向用户提供监控分析平台的各种功能的使用界面,包括对平台的管理,提供数据的可视化展现。不同的用户角色对应不同的用户界面。API接口:提供开发的API接入服务,为各类客户端提供便捷、高效、一致、安全的接入方式。也为后续可能的第三方接入提供必要条件。中心服务器是整个系统的核心,几乎所有的业务逻辑的控制和执行都是由它完成。中心服务器作为核心的三个模块分别是:任务管理、模型管理、资源管理,这三个模块负责中心服务器的三大核心功能。任务管理:对测试任务运行中的各个过程进行跟踪和管理。包括测试任务的分发、启动、监控、告警等等。模型管理:测试模型定义了测试过程中的各个细节,模型管理模块负责测试模型的定义、条件检测、以及模型的存储。资源管理:该模块负责管理整个系统的各类资源,包括各个探针和探针能够提供各项服务,以及其他可用资源。探针作为客户端,通过模拟用户对目标服务器的访问,获取目标服务器的连接状态信息,并将信息发送到中心服务器;中心服务器根据用户的需求对探针收集到的原始数据进行分析统计,从而实现对目标服务器的监测。

拨测探针设计

探针采用模块化开发,各模块职责明确,相互独立,通过内部接口交互信息,各模块的改变不会影响其他模块的结构。该架构在解决当前业务需求和管理需求的前提下,充分考虑将来会出现的需求变化,为后序系统升级、扩展以及与其他应用系统的互通接口提供了快速响应和良好的扩展能力。

探针端的主要工作包括1)连接服务器,接受服务器的命令,完成命令解析,并根据不同类型的命令执行相应的操作,例如启动监控任务、停止监控任务;2)完成对监控任务列表的数据采集工作;3)将监测到的结果数据发送回服务器。

其中通信模块是探针和服务器交互的接口。通信模块接收服务器的命令,并将命令发送到控制模块,控制模块解析命令。如果是启动任务,就重新创建一个监控任务,并将监控任务存储到任务队列中;如果是停止任务,就将该任务从任务队列里移除。当队列中的监控任务被调度后,就会调用数据收集模块对应子模块的API接口,完成一次数据收集动作,同时将该监控任务重新放入队列中(因为任务是每隔固定时间执行一次)。收集到的数据先不发送到服务器,而是分类暂时存放到内存中。报告模块会定时从缓存模块获取所有数据,并将数据通过通信模块发送到服务器,同时将缓存模块清空。下面对各个模块进行详细介绍:

通信模块

通信模块是服务器和探针之间信息交换的接口,负责将服务器的命令发送到探针,并且把探针的监测结果数据发送回服务器。通信模块基于JAVA序列化,实现服务器和探针端全双工的传输数据。系统中采用了通过MINA网络通信应用框架,实现了开放API的方式,将真正的网络通信与应用程序隔离开来,服务器和探针只需要关心要发送、接受的数据以及业务逻辑即可,服务器可以通过调用对方的API接口将命令发送给探针,探针也可以讲监测结果数据以同样的方式发送给服务器。

控制模块

控制模块又分为监听组件和操作组件。监听组件负责监听由服务端发送的命令,接收到服务端命令后,监听组件对命令解析并发送到操作组件,操作组件接受命令,对命令进行响应,完成启动、停止任务等操作。服务器向探针端发送的命令分为启动命令和停止命令两种,启动命令即给探针分配一个新的监控任务,停止命令即删除一个监控任务。控制模块同时也监视探针和服务器之间连接的状态。

任务存储于调度模块

任务存储与调度模块实现对监控任务的存储和调度。该模块把监控任务实例存储在一个优先级队列中,并在适当的时间调度监控任务。对任务的存储采用基于优先级堆的极大优先队列实现,每次从队列中取出的都是具有最高优先级的任务,往队列添加任务的时候也会根据优先级自动排序,系统中使用的优先级既是监控任务离下一次调度剩余的时间,剩余的时间越少优先级越高。对监控任务完成一次调度之后,将任务下次执行的时间重置为任务的监控频率,并且将监控任务放到任务队列中,以待下次调度,所以监控任务在停止之前会以用户指定的监控频率循环调度执行。

数据收集模块

数据收集模块是系统的核心模块,是实际进行信息获取的模块。该模块给任务调度模块提供接口,当有任务启动时,启动的监控任务会调用该模块的接口,模拟对目标服务器的访问,从而获取监测结果,并将结果数据发送到缓存模块。该模块针对不同的监测类型有不同的子模块,每个子模块可以完成一种类型的监测。目前系统支持的有HTTP类型、TCP/UDP类型、SMTP/POP3类型、PING类型。HTTP类型使用HTTPClient模拟HTTP访问,从而获取访问过程中的响应时间。TCP/UDP类型通过iperf网络测试工具获取最大TCP/UDP带宽性能,同时可以获取延时、抖动、丢包率等。对于SMTP/POP3类型监使用JAVA实现邮件发送和接收的功能,获取这两个过程的响应时间。PING类型使用Linux的fping命令获取延时和丢包率。

数据缓存模块

数据缓存模块实现是监测结果数据的缓存区。如果每完成一次数据收集就把收集到的数据发送到服务器,探针会和服务器就会频繁的进行数据交换,但是由于每次发送的数据量很小,所以数据发送的效率整体不高。数据缓存模块对监测结果进行暂时存放,积累到一定数据量时才向服务器发送一次数据,发送完成之后清空缓存数据,以便下次使用;这样可以大大减少探针和服务器数据发送的次数,增加每次发送的数据量,从而提高数据发送的效率。

报告模块

报告模块负责将探针端的信息通过通信模块发送到服务器。探针端发送到服务器的信息分为三种:1)探针注册信息,注册信息既是探针端向服务器发送的连接请求,其中包括探针的状态信息,服务器会根据这些信息决定是否与该探针建立连接。2)监测结果数据,报告模块会定时的从缓存模块读取数据,并将数据发送给通信模块,由通信模块将数据发送到中心服务器。3)异常信息,当监测结果出现异常数据时,异常数据也是通过报告模块发送到服务器。

本文概述了拨测系统探针端的整体设计,系统基于MINA框架进行通信,模拟访问页面的过程从而获取HTTP类型监控的相应时间,从而实现了数据收集的功能。目前,本文所设计的系统监控的任务达几十个,稳定运行收集了大量数据,为用户提供了大量有价值的数据,在实际应用中取得良好效果。