4.6版jxTMS已经发布,升级了多个重大能力,本系列文章将逐一进行讲解。
docker版本的使用,请查看:docker版jxTMS使用指南
4.0版jxTMS的说明,请查看:4.0版升级内容
4.2版jxTMS的说明,请查看:4.2版升级内容
4.4版jxTMS的说明,请查看:4.4版升级内容
本系列文章包括:
用数据总线来实现数据采集的分布式处理
用命令行开关动态启动功能模块
取代本地文件而使用网络化配置
配置化方式提供设备数据
动态加载与更新模块
webSocket
之前的数据采集由于频率低【秒级或百毫秒级】,一天也就10万左右的数据量,基本没啥压力,所以考虑到方便,数据采集系统的架构为standalone构型。
但近来笔者遇到一个高频采集与处理的需求,而python有一个天然的限制:GIL【全局锁】。所以笔者不得不开始考虑将数据采集系统的standalone构型变更为分布式构型。
增加分布式处理能力,主要思路就两个方向:
-
横切:将处理对象切分为几个片,每个片交给一个子系统进行处理
-
纵拆:将处理过程拆分为几个环节,各环节分别交不同的系统进行处理
就jxTMS的数据采集系统来说,数据主要通过mqtt推送,所以只要采取不同子系统订阅各自的主题就可以轻松实现横切。实现这种横切有两种方法:
1、通配符预置:利用mqtt的主题通配符能力,通过规范站点命名的方式来实现横切
这一方案的优点就是简单,不需要任何额外的开发,只需要做好站点命名的规范化管理就可以了。
缺点就是不够灵活,无法适用于动态的、弹性的、可伸缩的应用场景下。
2、动态配置:可以基于数据总线简单实现一个配置中心,由配置中心根据预先的配置、算法、人工干预等多种手段来实现针对性的配置,从而对不同子系统需要订阅的主题进行动态的调整
这一方案的优缺点恰好和通配符预置相反。
由于横切的技术特性较少,所以我们暂不讨论,我们主要考虑纵拆。
之前我们在讨论jxTMS的数据采集框架时,曾经指出应当把数据采集和数据的应用拆开,以避免数据的加工与应用对采集、解析、转换、保存的过程产生干扰。
当时我们采用的机制就是本地数据总线。
所以4.6版jxTMS解决数据采集系统分布式处理的关键就是改造本地数据总线,使其依托消息总线成为跨进程、跨服务器的数据总线。
数据采集系统是在原有的jxTMS体系中,通过catalogService体制实现的扩展。原本的这些扩展都考虑为standalone构型的单一功能,现在这个扩展进一步发展为分布式构型后,也需要做一定的适应性调整,如:
-
以命令行开关的方式动态调整所需启动的功能模块
-
将本地配置文件的静态配置调整为配置中心的可编程动态配置
-
支持高可用性
除此之外,还增加了几个小功能。
参考资料:
下面的系列文章讲述了如何用jxTMS开发一个实用的业务功能:
下面的系列文章讲述了jxTMS的一些基本开发能力: