一种分布式物联网中间件及工作方法
技术领域
本发明涉及计算机技术,更具体的说,涉及一种分布式物联网中间件及工作方法。
背景技术
中间件是位于平台操作系统和应用之间的通用服务。现有中间件软件产品一般部署在单独一台服务器上,直接和电子标识设备交互,处理能力有限,一般最多支持200多台设备同时工作。如果需要支持上千台设备同时工作,需要部署多套中间件软件产品,比较繁琐。
随着汽车电子标识行业的逐步发展,已经出现需要部署大量电子标识设备的需求,对现有的中间件软件产品构成较大的压力。在部署多套中间件软件产品时,每个中间件产品都需要配置一套相同的规则信息,容易出现差错;而当中间件软件产品出现单点故障,或者网络中断时,设备也无法迅速恢复到正常工作状态。
发明内容
基于此,提出一种分布式物联网中间件及工作方法,方便系统的扩容,能有效避免网络中断、单点故障导致的电子标识设备无法工作情况的发生。
为达到上述目的,本发明提出的技术方案为:
一种分布式物联网中间件,所述中间件包括:主节点系统、子节点系统、zookeeper代理、kafka代理、主节点系统接收用户的请求,通过kafka代理把任务下发到所述的子节点系统,同时通过kafka代理接收子节点系统上报的信息,主节点系统通过zookeeper代理把子节点的变更情况通知给子节点系统。
进一步的,当所述主节点系统启动时,创建主节点和主节点状态节点,主节点系统创建负载节点,其中一个负载节点中包含多个负载单元,每个负载单元中含有与其对应的负载数量,子节点系统创建子节点状态节点。
进一步的,主节点系统包括:访问控制模块、节点管理模块、负载均衡模块、设备管理模块、节点通信模块、业务模块,操作者通过节点管理模块增加或删除子节点,负载均衡模块用于动态均衡负载设备,设备管理模块用于增加和删除设备,业务模块与节点通信模块相连,节点通信模块和kafka代理相连接,主节点系统通过业务模块、节点通信模块、kafka代理将业务下发给子节点系统,访问控制模块用于验证用户。
进一步的,子节点系统包括:子节点管理模块、子节点通信模块、设备代理模块、子节点业务模块、设备通信模块,子节点管理模块用于接收zookeeper代理发送的子节点变更通知,子节点通信模块用于接收主节点下发的业务消息并下发给设备,子节点通信模块还用于把设备返回的业务消息返回给主节点系统,子节点系统通过设备代理模块连接主节点系统分配的设备,设备通信模块接收设备的信息,子节点业务模块与设备通信模块相连接用于将设备的信息上传至数据库。
进一步的,主节点系统对应多个子节点系统,中间件与设备交互的工作被分配到不同的所述子节点系统中。
进一步的,当一个所述子节点系统宕机时,负载的设备会动态的分配给其他所述子节点系统。
与现有技术相比,本发明的有益效果在于:
1、本发明把传统的中间件系统中和大量设备交互的任务分散给各个子节点系统;
2、某个子节点系统宕机时,负载的设备会动态分配给其他子节点系统,提高了系统的可靠性。
本发明的另一目的在于提出一种分布式物联网中间件的工作方法,步骤包括:
步骤1,用户通过主节点系统的访问控制模块的验证;
步骤2,用户通过主节点系统的节点管理模块,进行子节点的增加和删除;
步骤3,Zookeeper代理把子节点的变更情况通知给子节点系统的子节点管理模块;
步骤4,用户通过主节点系统的设备管理模块,进行设备的增加和删除;
步骤5,步骤4的操作会触发负载均衡模块中的负载均衡算法把设备动态分配给在线的所有的子节点;
步骤6,子节点系统通过设备代理模块,连接主节点系统分配的设备;
步骤7,主节点系统通过业务模块、节点通信模块、Kafka代理下发业务消息给每个子节点系统;
步骤8,子节点系统通过子节点通信模块接收主节点下发的业务消息,并下发给设备;
步骤9,子节点系统把设备返回的业务消息通过子节点通信模块、Kafka代理上报给主节点系统;
步骤10,主节点系统把子节点系统上报的消息展示给用户。
进一步的,当负载设备或在线所述子节点系统数量发生变化,或所述子节点系统超负荷时,所述主节点系统调用负载均衡模块中的负载均衡算法动态均衡所述子节点系统中的负载,负载均衡算法包括步骤:
步骤1,判断是否存在未分配的负载单元,如果存在,则执行步骤2,否则执行步骤8;
步骤2,根据负载量,对待分配的负载单元进行排序;
步骤3,根据负载量,对所有在线的子节点进行排序;
步骤4,根据所有在线子节点系统的运行情况,判断是否存在没有超负荷的子节点,如果存在,则执行步骤5,否则执行步骤12;
步骤5,把负载量最大的待分配负载单元分配给负载量最小且没有超负荷的子节点;
步骤6,标识该负载单元已经被分配;
步骤7,判断所有的待分配负载单元是否分配完毕,如果已经分配完毕,则执行步骤8,否则执行步骤3;
步骤8,根据负载量对在线子节点进行排序;
步骤9,取得所有在线子节点中最大和最小负载量的差,并记做M;
步骤10,取得最大负载量节点中最小负载单元的负载量,并记做N;
步骤11,比较N和M/2,如果N<=M/2,则把最大负载量节点的最小负载单元分配给最小负载量节点,执行步骤8,否则,则执行步骤12;
步骤12,不再进行分配处理,负载均衡终止。
本发明所述的一种分布式物联网中间件的工作方法与上述一种分布式物联网中间件的有益效果相同,在此不再赘述。
附图说明
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是本发明的系统模块示意图;
图2是本发明的节点存储模型示意图;
图3是本发明的工作流程图;
图4是本发明的负载均衡算法流程图。
具体实施方式
如图1所示,一种分布式物联网中间件包括:主节点系统、子节点系统、zookeeper代理、kafka代理,主节点系统接收用户的请求,通过kafka代理把任务下发到所述的子节点系统,同时通过kafka代理接收子节点系统上报的信息,主节点系统通过zookeeper代理把子节点的变更情况通知给子节点系统。
主节点系统包括:访问控制模块、节点管理模块、负载均衡模块、设备管理模块、节点通信模块、业务模块,操作者通过节点管理模块增加或删除子节点,负载均衡模块用于动态均衡负载设备,设备管理模块用于增加和删除设备,业务模块与节点通信模块相连,节点通信模块和kafka代理相连接,主节点系统通过业务模块、节点通信模块、kafka代理将业务下发给子节点系统,访问控制模块用于验证用户。
子节点系统包括:子节点管理模块、子节点通信模块、设备代理模块、子节点业务模块、设备通信模块,子节点管理模块用于接收zookeeper代理发送的子节点变更通知,子节点通信模块用于接收主节点下发的业务消息并下发给设备,子节点通信模块还用于把设备返回的业务消息返回给主节点系统,子节点系统通过设备代理模块连接主节点系统分配的设备,设备通信模块接收设备的信息,子节点业务模块与设备通信模块相连接用于将设备的信息上传至数据库。
图1中的Zookeeper服务为开源的分布式可靠协调系统,数据库服务为数据库软件系统,Kafka服务为开源的分布式发布订阅消息系统。
如图2所示,主节点系统启动时创建主节点和主节点状态节点,主节点系统中的负载均衡模块创建负载节点,其中一个负载节点中包含多个负载单元,每个负载单元中含有与其对应的负载数量。操作者通过节点管理模块增加或删除子节点,子节点系统创建子节点状态节点。其中“/”为Zookeeper的根节点,“/dms”为分布式物联网中间件的根节点,“/dms/master”为主节点,“/dms/master/status”为主节点的状态节点,“/dms/master/slave”为子节点,子节点的存在依赖于主节点,“/dms/master/slave/status”为子节点的状态节点。不同种类的节点都在Zookeeper中生成并进行管理的。主节点对应主节点系统,根据主节点的状态节点实时监控主节点系统是否在线,子节点对应一个子节点系统,根据子节点的状态节点实时监控当前子节点系统是否在线,主节点下可以包含多个子节点,也就是说一个主节点系统,对应多个子节点系统。
如图3所示,本发明一种分布式物联网中间件的工作流程为:
步骤1:用户通过主节点系统的访问控制模块的验证。
步骤2:用户通过主节点系统的节点管理模块,进行子节点的增加和删除。
步骤3:Zookeeper代理把子节点的变更情况通知给子节点系统的子节点管理模块。
步骤4:用户通过主节点系统的设备管理模块,进行设备的增加和删除。
步骤5:步骤4的操作会触发负载均衡模块中的负载均衡算法把设备均衡分配给在线的所有的子节点。
步骤6:子节点系统通过设备代理模块,连接主节点系统分配的设备。
步骤7:主节点系统通过业务模块、节点通信模块、Kafka服务下发业务消息给每个子节点系统。
步骤8:子节点系统通过子节点通信模块接收主节点下发的业务消息,并下发给设备。
步骤9,子节点系统把设备返回的业务消息通过子节点通信模块、Kafka代理上报给主节点系统。
步骤10,主节点系统把子节点系统上报的消息展示给用户。
如图4所示,当负载设备或在线所述子节点系统数量发生变化,或所述子节点系统超负荷时,所述主节点系统调用负载均衡模块中的负载均衡算法动态均衡所述子节点系统中的负载,负载均衡算法包括步骤:
步骤1,判断是否存在未分配的负载单元。如果存在,则执行步骤2;否则执行步骤8。
步骤2,根据负载量,对待分配的负载单元进行排序
步骤3,根据负载量,对所有在线的子节点进行排序
步骤4,根据所有在线子节点系统的运行情况,判断是否存在没有超负荷的子节点。如果存在,则执行步骤5;否则执行步骤12。
步骤5,把负载量最大的待分配负载单元分配给负载量最小且没有超负荷的子节点
步骤6,标识该负载单元已经被分配。
步骤7,判断所有的待分配负载单元是否分配完毕。如果已经分配完毕,则执行步骤8;否则执行步骤3。
步骤8,根据负载量对在线子节点进行排序
步骤9,取得所有在线子节点中最大和最小负载量的差,并记做M。
步骤10,取得最大负载量节点中负载数最小的负载单元的负载量,并记做N。
步骤11,比较N和M/2,如果N<=M/2,则把最大负载量节点上的负载数最小的负载单元分配给最小负载量节点,执行步骤8;否则,则执行步骤12。
步骤12,不再进行分配处理,负载均衡终止。
以上所述仅为本发明创造的较佳实施例而已,并不用以限制本发明创造,凡在本发明创造的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明创造的保护范围之内。