先来搞数据采集模块吧, 简单做一下需求分析,大概暂时就这几个需求吧,很简单。
1. 需求分析
1.1 syslog协议采集
1)采用udp协议对宿主机指定端口进行监听,实时获取数据后将数据放入redis缓存。
2)可通过配置文件对UDP协议绑定的IP、端口进行设置。
3)端口默认 514 syslog标准端口,IP默认 0.0.0.0 即宿主机所有IP地址。
1.2 服务中心消息通信
1)提供与服务中心交互接口,便于服务中心对该模块进行状态数据采集,这是考虑以后如果采用集群部署形式时,可以通过
服务中心模块进行系统状态追踪。
2)接口采用应答模式,由服务中心发送状态获取请求,采集模块回应相应数据。
3)采集端可通过配置文件配置所属服务中心IP地址。
4)服务中心交互内容包括一下内容:
获取节点系统信息:计算机名、IP地址
检查节点数据采集模块运行状态
1.3 资产自动发现
1)支持资产自动发现,通过网络自动发现存在数据交互关系的客户端资产。
2.概要设计
资产数据由服务中心从mysql数据库缓存到redis中,数据采集模块从redis中获取资产数据,redis仅做内存级缓存,不做数 据持久化,这样可以避免如果mysql中资产数量大导致的查询时长影响采集端的入库效率问题。
2.1 syslog协议采集流程图
2.2 接口设计
3.详细设计
3.1 syslog协议采集
1)UDP采用非阻塞式监听,确保可以第一之间返回监听状态,减少数据丢失的概率,非阻塞式监听:Selector
2)采用固定线程池进行多线程数据处理,集中java线程池的对比,固定线程池较为适合。
3)固定线程池暂时采用n*2+1的计算方式确定线程数量,n代表cpu的核心数,这是一个基础算法。
3.2 接口命令列表
1)get_sysinfo:获取系统基本信息
返回数据格式:{"runstatus":"1","nodename":"node1"}
runstatus:节点运行状态,接口正常调用则返回1
nodename:节点计算机名称
状态检测及系统信息获取暂时使用一个命令
3.3 redis表设计
3.4 mysql表设计
mysql中spartacus_nodes表设计时预设了部分字段,这是为将来部分功能做的预留,这个阶段可以不用在意。