数据采集程序的一般架构(C++ ACE实现)

数据采集程序的一般功能

通过socket将对方的数据拿到。端方可以是接入智能电表的采集器,也可以是持有和你同一个通信规约的通信计算机(你们约定好谁是客户端,谁是服务端,也就是数据的流向)

对采集程序的要求

可扩展:当新的电表协议到来的时候,你可以不改动其他代码,只创建对应的解码器和通信类即可。

可配置:可以通过文件或者数据库来加载对方和自己的配置信息。

模块化程度高:采集程序按照模块功能划分为如下的几个主要模块(配置加载模块、两级消息队列、消费线程、解码器管理器、两级解码器、通信模块)

采集程序的一般架构

数据采集程序的一般架构(C++ ACE实现)_第1张图片

此结构历经JSPTPD多个项目成型,在软件院朱磊总的设计下由多人(zhulei,.zhuyongjin,chenfan,,yuanweiwei,chenlinkong,zhuzhongzhi,lvzhiqianq)实现,各个模块均由DLL封装,出现问题容易定位,满足采集程序的一般要求。

关键接口和系统架构

下面是关键路径上的主要接口明细

数据采集程序的一般架构(C++ ACE实现)_第2张图片

上面的接口展示了详细设计中各个模块之间的关系和纽带,可以看出由于功能模块划分的清晰,可以方便的扩展和测试。

目前难度较大和待完善的部分主要有:

(1)ConfigLoader,因为当成千上万的采集器和电表在线的时候,结构化的配置库将是系统不可或缺的信息支撑;当前的ConfigLoader类接口还比较简单,另外ConfigLoader虽然扩展容易,但在扩展的同时仍要提供一个清晰易用的接口还是需要仔细斟酌的,也许需要多个项目打磨才会比较完善。

(2)使用Acceptor-Connector加Proactor模式实现自动异步处理大并发,这个正在进行,期待期待。

平台能力

按照半个小时采集一次的频率算,上面的结构只要部署一到两个个副本应足以应付一个二线城市全市的智能电表数据的采集。

你可能感兴趣的:(数据采集程序的一般架构(C++ ACE实现))