一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于EMQX的多集群动态扩展方法及系统与流程

2022-06-11 08:08:27 来源:中国专利 TAG:

一种基于emq x的多集群动态扩展方法及系统
技术领域
1.本发明涉及物联网技术领域,尤其涉及一种基于emq x的多集群动态扩展方法以及一种基于emq x的多集群动态扩展系统。


背景技术:

2.目前,随着wifi模块和5g等接入技术日益成熟,智能家居场迸发出强大的生机。目前最流行的物联网联网方案是基于mqtt协议的长连接,其最关键的组件是mqtt broker
‑‑
负责维护mqtt长连接及消息发布订阅的路由。这个领域有一个出色的开源项目emq x,是基于erlang开发的分布式高性能mqtt broker。
3.随着公司业务增长,面对越来越多的设备连接,emq x集群的运行压力会越来越大。面对这样这种情况,运维人员一般只能通过增加集群的节点数、升级节点机器配置或简单增加集群数量来增加承载能力。
4.具体地,emq x具有以下问题:
5.1.emq x开源版本核心功能依赖于erlang mnesia分布式数据库,每个emq x节点也是一个mnesia数据节点。mnesia集群中不能有太多的数据节点,否则会导致集群效率降低。emq x官方建议单集群节点数维持在5-7个为宜。所以,不能通过无限增加单个集群节点数的方式来增大集群承载能力。
6.2.emq x的路由表数据存储于磁盘,高负载时对磁盘有大量读写。磁盘的容量容易扩展,但是读写速率是很难扩展的。所以纵向扩展也不能使单个emq x集群的处理能力无限扩展。高负载的集群中,纵向扩展的运维风险高,稍有不慎就有可能引起服务器雪崩效应,造成mqtt服务短时间内难以恢复。
7.3.若将多个独立的emq x集群放在同一个tcp负载均衡后面,前端暴露同一个域名,mqtt客户端所连接的集群将是随机的,当其他客户端需要跟此客户端通信时需要先确定其所在的集群。当网络质量不好时,mqtt客户端频繁上下线,连接会在不同emq x集群间切换,导致其他客户端与其的通信将越发困难,这些细节会明显影响通信质量。


技术实现要素:

8.针对上述问题,本发明提供了一种基于emq x的多集群动态扩展方法及系统,通过集群分配模块的分配算法和策略动态调整多个集群的不同负载权重,起到动态平滑分配负载的作用,能够根据业务承载需求自由扩展所需要的集群数量,通过独立域名的mqtt通信连接提高了连接的稳定性,提升了通信质量,降低了通信延迟,同时,独立域名的负载均衡能够有效阻隔连接波动或雪崩对其他集群的影响。
9.为实现上述目的,本发明提供了一种基于emq x的多集群动态扩展方法,包括:
10.设备连接于默认集群后,所述默认集群生成订阅成功消息,并通过消息队列发送至集群分配模块;
11.所述集群分配模块根据所述设备的用户id hash值以及预设的集群配置表,判断
所述设备当前连接集群是否与所述集群配置表中对应的应分配集群一致;
12.若判定一致,则将设备所属集群更新至数据库,若判定不一致,则将所述应分配集群的入网信息下发至所述设备;
13.所述设备断开与所述默认集群的连接,并连接至所述应分配集群,所述应分配集群发送订阅成功消息至所述集群分配模块进行重新判断;
14.应用程序由所述数据库中拉取账户设备列表,所述账户设备列表中当前设备的入网域名修改为该设备所属集群的域名;
15.所述应用程序根据所述账户设备列表与所述设备应分配集群建立mqtt连接,通过对应域名实现与所述设备的mqtt通信连接。
16.在上述技术方案中,优选地,所述集群配置表中针对每个集群配置hash边界值,使得每个集群对应一组hash值范围,根据设备的用户id hash值所属hash值范围确定对应的应分配集群,通过每个集群对应的hash值范围调整多集群的负载权重。
17.在上述技术方案中,优选地,所述集群分配模块预设有灰度功能,在所述设备的用户id hash值符合预设的灰度范围时对所述用户id hash值进行判断,不符合时则结束判断。
18.在上述技术方案中,优选地,集群在连接设备后生成的订阅成功消息中,通过插件附加集群编号,用于表示当前设备所连接集群,所述集群分配模块根据所述集群编号判断当前设备所连接集群与应分配集群是否一致。
19.在上述技术方案中,优选地,所述集群分配模块判断所述设备当前连接集群是否与所述集群配置表中对应的应分配集群一致的启动触发事件为接收到所述订阅成功消息或所述设备与集群连接成功实现上线,若启动触发事件为所述设备与集群连接成功实现上线,则需要加入延时执行操作。
20.在上述技术方案中,优选地,基于emq x的多集群动态扩展方法还包括:在缩减集群数量时,针对所要缩减的集群,首先在所述集群配置表中标记所要缩减的集群的状态,在所要缩减的集群对应的设备迁移至其他集群后再关闭该集群。
21.在上述技术方案中,优选地,将基于用户id实现集群分配替换为基于设备id实现集群分配。
22.在上述技术方案中,优选地,所述消息队列采用通用的中间件或常用网络协议实现通信,所述中间件包括redis、kafka、sqs和kinesis,所述常用网络协议包括http协议,所述常用网络协议应用于低负载系统中。
23.在上述技术方案中,优选地,设备在初次入网时默认连接指定的默认集群;或者,
24.在所述应用程序启动时由云端获取应入网域名列表,并在配置过程中将应入网域名下发至对应的设备,设备在入网过程中根据对应的应入网域名访问相应域名的集群。
25.本发明还提出一种基于emq x的多集群动态扩展系统,应用如上述技术方案中任一项公开的基于emq x的多集群动态扩展方法,包括:设备、集群、集群分配模块、数据库和应用程序;
26.所述设备与多个集群之一相连,集群在与设备连接后生成订阅成功消息,并发送至所述集群分配模块;
27.所述集群分配模块根据所述设备的用户id hash值以及预设的集群配置表,判断
所述设备当前连接集群是否与所述集群配置表中对应的应分配集群一致;
28.若判定一致,则将设备所属集群更新至所述数据库,若判定不一致,则将所述应分配集群的入网信息下发至所述设备;
29.所述数据库中存储设备所属集群,设备列表中当前设备的入网域名为该设备所属集群的域名;
30.所述应用程序由所述数据库中拉取所述设备列表,并根据所述设备列表与所述设备应分配集群建立mqtt连接,以实现与所述设备的mqtt通信连接。
31.与现有技术相比,本发明的有益效果为:通过集群分配模块的分配算法和策略动态调整多个集群的不同负载权重,起到动态平滑分配负载的作用,能够根据业务承载需求自由扩展所需要的集群数量,通过独立域名的mqtt通信连接提高了连接的稳定性,提升了通信质量,降低了通信延迟,同时,独立域名的负载均衡能够有效阻隔连接波动或雪崩对其他集群的影响。
附图说明
32.图1为本发明一种实施例公开的基于emq x的多集群动态扩展方法的流程示意图;
33.图2为本发明一种实施例公开的集群分配模块的分配过程示意图;
34.图3为本发明一种实施例公开的增加集群的流程示意图;
35.图4为本发明一种实施例公开的缩减集群的流程示意图。
具体实施方式
36.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
37.下面结合附图对本发明做进一步的详细描述:
38.如图1所示,根据本发明提供的一种基于emq x的多集群动态扩展方法,包括:
39.设备连接于默认集群后,默认集群生成订阅成功消息,并通过消息队列发送至集群分配模块;
40.集群分配模块根据设备的用户id hash值以及预设的集群配置表,判断设备当前连接集群是否与集群配置表中对应的应分配集群一致;
41.若判定一致,则将设备所属集群更新至数据库,若判定不一致,则将应分配集群的入网信息下发至设备;
42.设备断开与默认集群的连接,并连接至应分配集群,应分配集群发送订阅成功消息至集群分配模块进行重新判断;
43.应用程序由数据库中拉取账户设备列表,账户设备列表中当前设备的入网域名修改为该设备所属集群的域名;
44.应用程序根据账户设备列表与设备应分配集群建立mqtt连接,通过对应域名实现与设备的mqtt通信连接。
45.在该实施方式中,通过集群分配模块的分配算法和策略动态调整多个集群的不同
负载权重,起到动态平滑分配负载的作用,能够根据业务承载需求自由扩展所需要的集群数量,通过独立域名的mqtt通信连接提高了连接的稳定性,提升了通信质量,降低了通信延迟,同时,独立域名的负载均衡能够有效阻隔连接波动或雪崩对其他集群的影响。
46.具体地,该多集群动态扩展方法主要应用于支持物联网系统中对emq x集群数量进行扩展、缩减,或动态调整已有emq x集群之间负载的比例。同时,该方法能保证设备或设备组的mqtt连接稳定分配于固定的emq x集群。
47.其中,每个emq x集群都配置独立的负载均衡和独立的域名,设备需暴露给云端设置设备入网的域名和端口的接口,通过接口接收到新的域名后,可以根据场景选择即时生效或断线重连时生效。
48.优选地,每个emq x集群中设置有emq x插件(plugin),该插件能够将设备的mqtt生命周期事件和消息发布到后端服务,一般会通过通用的中间件实现通信,中间件包括redis、kafka、sqs和kinesis等。在低负载系统中,传递给集群分配模块的消息也可以不使用消息队列,而使用http等常用网络协议。此外,该插件还能够在对所有发布到后端的消息都附加上集群编号,集群编号为每个emq x集群的唯一标识。比如,在集群连接设备后生成的订阅成功消息中附加集群编号,订阅成功消息中的集群编号能够用于表示当前设备所连接集群,以便集群分配模块根据集群编号判断当前设备所连接集群与应分配集群是否一致。
49.优选地,在多个emq x集群中,可以有一个集群被指定为默认集群,一般为默认个集群,设备在初次入网时默认连接指定的默认集群。如果集群分配模块的分配策略判定当前设备的应分配集群不是该默认集群,则下发应分配集群的入网信息至该设备,此时,该设备再断开与默认集群的连接,重新连接至应分配集群。
50.此外,app在启动的时候获取应入网域名列表,app配置设备的时候直接将应入网域名下发给对应的设备,设备就不需要经过第一集群再分配的过程。
51.由于物联网领域的特性,每个用户可能拥有较多数量的物联网设备,因此,在该多集群动态扩展方法中,考虑到在不同场景下的分配策略的适配性,采用两种方式实现集群分配。具体地,在典型的智能家居场景(即一个用户对应多个物联网设备)下,使用用户id作为集群分配的基础,在不强调设备的分组的场景下,使用设备id作为集群分配的基础。以下以使用用户id进行集群分配进行具体说明。
52.如图2所示,在上述实施方式中,优选地,集群配置表中针对每个集群配置hash边界值,使得每个集群对应一组hash值范围,根据设备的用户id hash值所属hash值范围确定对应的应分配集群,通过每个集群对应的hash值范围调整多集群的负载权重。
53.具体地,如下表所示:
54.集群编号hash边界值集群状态1300012650013100001
55.表中每个集群对应一个0-10000以内的hash边界值,具体是集群1对应[0,3000),集群2对应[3000,6500),集群3对应[6500,10000)。用户id的hash值落在哪一个范围内,则该用户的所有设备都应该属于对应的集群。不同集群的范围大小代表该集群预期的负载权
重,通过调整每个集群的hash边界值,能够调整不同集群的负载权重。
[0056]
在上述实施方式中,优选地,集群分配模块预设有灰度功能,在设备的用户id hash值符合预设的灰度范围时对用户id hash值进行判断,不符合时则结束判断。
[0057]
具体地,假设集群分配策略为:hash(uid)<5000用户的设备分配到集群1,5000≤hash(uid)<10000用户的设备分配到集群2,集群分配模块的灰度功能能够避免骤然让所有设备都开始进行集群变动操作。优选地,一个可用的灰度策略是:$uid mod 100《50时生效。在该灰度策略下,集群分配模块首先获取到设备对应的用户id信息,当uid在该灰度范围之内时,继续进行集群分配策略,如果不在该灰度范围内,则结束集群分配过程。
[0058]
通过分配策略计算出hash(uid)预期的集群编号,并跟当前设备连接的集群编号比较:如果不同,则给设备发送mqtt消息,修改为预期集群的入网信息;如果相同,说明设备已经被正确分配,则将设备跟集群的关联更新至数据库。
[0059]
在上述实施方式中,优选地,集群分配模块判断设备当前连接集群是否与集群配置表中对应的应分配集群一致的启动触发事件为接收到订阅成功消息或设备与集群连接成功实现上线,若启动触发事件为设备与集群连接成功实现上线,则需要加入延时执行操作,在一定延时后再执行后续操作,以保证设备已经订阅好自己的topic。
[0060]
具体地,以接收到订阅成功消息作为启动触发事件,设备的重连和订阅发生频率较高,所以分配策略容易生效。当时间足够长,集群分配状态会趋于稳定,只要分配策略不改变,就不需要对设备再次下发修改设备入网信息的指令;同样,当分配策略修改之后,稳定状态会被打破,不符合分配策略的设备会重新被分配。这是一个自适应调整和自趋稳定的流程。
[0061]
具体地,如图3所示,具体介绍增加一个集群并进行设备分配的过程,其中,设备之前连接集群1,并增加集群2,扩展之后设备迁移至集群2,应用程序app的连接也随之迁移至集群2。具体步骤如下:
[0062]
1)设备初始连接到集群1,数据库中记录的设备的集群也是集群1;设备订阅成功后,集群1会生成订阅成功消息,并被plugin标记seq=1,表示消息从集群1而来;
[0063]
2)订阅成功消息被推入消息队中,并被集群分配模块消费;由于用户id的hash值为6000,根据集群分配表,该设备应该被分配到集群2;
[0064]
3)由于该设备seq=1,集群分配模块将集群2的入网信息下发给设备;
[0065]
4)设备断开集群1的连接,重新连接到集群2;
[0066]
5)设备重新上线并订阅,集群2将事件消息发送到消息队列,供集群分配模块消费;
[0067]
6)集群分配模块判断设备已经由预期的集群上线,将设备编号更新到该设备的数据库记录当中;
[0068]
7)app拉取账户设备列表,列表中该设备的入网域名已经变成集群2的域名;
[0069]
8)app建立到集群2的mqtt连接,这样就能跟设备进行mqtt通信。
[0070]
在上述实施方式中,优选地,基于emq x的多集群动态扩展方法还包括:在缩减集群数量时,针对所要缩减的集群,首先在集群配置表中标记所要缩减的集群的状态,在所要缩减的集群对应的设备迁移至其他集群后再关闭该集群。
[0071]
具体地,如图4所示,介绍缩减一个集群的过程。如图所示,起初有三个集群,后面
需要缩减集群3。设备最开始是连接到集群3的,最后被分配到了集群2,根据图中的标号分别说明。需要注意的是,缩减集群的时候,不能先关闭集群,而是修改集群配置,将集群3标记为废弃。只有等到设备都迁移走了,才能关闭集群3。具体步骤如下:
[0072]
1)设备初始连接到集群3,数据库中记录的设备的集群也是集群3;设备订阅成功后,集群3会生成订阅成功消息,并被plugin标记seq=3,表示消息从集群3而来;
[0073]
2)订阅成功消息被推入消息队中,并被集群分配模块消费;此时集群配置表有变化,集群3被标记为废弃,其权重被集群1和集群2分担;由于用户id的hash值为6000,根据集群分配表,该设备应该被分配到集群2;
[0074]
3)集群分配模块将集群2的入网信息下发给设备;
[0075]
4)设备断开集群1的连接,重新连接到集群2;
[0076]
5)设备重新上线并订阅,集群2将事件消息发送到消息队列,供集群分配模块消费;
[0077]
6)集群分配模块判断设备已经由预期的集群上线,将设备编号更新到该设备的数据库记录当中;
[0078]
7)app拉取设备列表,列表中该设备的入网域名已经变成集群2的域名;
[0079]
8)app建立到集群2的mqtt连接,这样就能跟设备进行mqtt通信。
[0080]
在上述实施方式中,针对使用设备id作为集群分配基础的场景,将基于用户id实现集群分配替换为基于设备id实现集群分配,在设备连接至集群过程中,在设备订阅成功之后,集群分配模块以设备id进行散列分布算法,例如crc32(uuid)来做散列分布算法,即每个设备与一个集群相对应,实现与应用程序的独立通信连接。
[0081]
在上述实施方式中,app拉取账户设备列表时,其中有每个设备的连接域名,app可通过连接域名分别连接集群中所有设备。由于分配策略的作用,正常情况下app都只会连接一个集群。
[0082]
如图1至4所示,本发明还提出一种基于emq x的多集群动态扩展系统,应用如上述实施方式中任一项公开的基于emq x的多集群动态扩展方法,包括:设备、集群、集群分配模块、数据库和应用程序;
[0083]
设备与多个集群之一相连,集群在与设备连接后生成订阅成功消息,并发送至集群分配模块;
[0084]
集群分配模块根据设备的用户id hash值以及预设的集群配置表,判断设备当前连接集群是否与集群配置表中对应的应分配集群一致;
[0085]
若判定一致,则将设备所属集群更新至数据库,若判定不一致,则将应分配集群的入网信息下发至设备;
[0086]
数据库中存储设备所属集群,设备列表中当前设备的入网域名为该设备所属集群的域名;
[0087]
应用程序由数据库中拉取设备列表,并根据设备列表与设备应分配集群建立mqtt连接,以实现与设备的mqtt通信连接。
[0088]
根据上述实施方式公开的基于emq x的多集群动态扩展方法及系统,用于针对emq x集群进行扩展,云端配置表中设置每个集群的负载权重、入网信息等重要信息;各个emq x集群相互独立,使用不同的域名进行分割,设备只会连接其中一个集群。通过集群分配算法
和策略,得出每一个设备应该连接的集群,并将集群连接信息直接下发给设备,达到动态平缓的迁移设备的功能。该方法及系统,具有以下技术效果:
[0089]
1.扩展友好:本发明支持根据业务承载需求自由扩展所需要的emq x集群数量,没有中心化依赖,理论上可以无限扩展;
[0090]
2.权重分配:本发明支持在集群配置表中为每个集群设置不同负载权重,起到动态平滑分配负载的作用;
[0091]
3.可增可减:本发明既支持平滑增加集群数量,也支持通过将集群配置表中集群标志为待停用,平滑缩减集群数量;
[0092]
4.连接稳定:通过集群分配算法和策略,可以为每个设备计算出一个稳定的连接集群编号,分配完成后设备将通过独立域名只连接该集群;这提高了mqtt连接的稳定性,提升了通信质量,降低了通信延迟;
[0093]
5.隔绝雪崩:如果一个集群发生连接波动或者雪崩事故,不会冲击到其他集群,有效阻隔雪崩的蔓延;相比之下,所有集群放在一个负载均衡之后是做不到的;
[0094]
6.app动态连接:app连接的域名是根据设备列表来的,这个域名又是根据设备实际连接的集群而记录在云端的,所以app也是动态链接到需要连接的集群上的。
[0095]
以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献