CN113242272B - 基于mqtt服务集群的会话处理方法及系统 - Google Patents
基于mqtt服务集群的会话处理方法及系统 Download PDFInfo
- Publication number
- CN113242272B CN113242272B CN202110315876.5A CN202110315876A CN113242272B CN 113242272 B CN113242272 B CN 113242272B CN 202110315876 A CN202110315876 A CN 202110315876A CN 113242272 B CN113242272 B CN 113242272B
- Authority
- CN
- China
- Prior art keywords
- client
- mqtt
- server
- session
- scheduler
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
- H04L67/1004—Server selection for load balancing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
- H04L67/1004—Server selection for load balancing
- H04L67/1008—Server selection for load balancing based on parameters of servers, e.g. available memory or workload
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1001—Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
- H04L67/1004—Server selection for load balancing
- H04L67/1023—Server selection for load balancing based on a hash applied to IP addresses or costs
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/14—Session management
- H04L67/146—Markers for unambiguous identification of a particular session, e.g. session cookie or URL-encoding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
- H04L67/5682—Policies or rules for updating, deleting or replacing the stored data
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明提供一种基于MQTT服务集群的会话处理方法及系统,该方法包括:MQTT网关接收MQTT客户端的订阅请求,订阅请求携带客户端ID信息以及是否清空会话的指示;MQTT网关向调度器发送调用请求,以由调度器查找订阅请求中携带的清空会话的指示;在未查找到清空会话的指示的情况下,调度器查找缓存区中的反映订阅消息中携带的客户端ID与第一服务端的映射关系的信息;在查找到反映订阅消息中携带的客户端ID与第一服务端的映射关系的信息的情况下,获取第一服务端的地址信息,并将获取到的地址信息发送至MQTT网关;在查找到清空会话的指示的情况下,清空缓存区中的与订阅消息中携带的客户端ID具有映射关系的缓存信息,并基于负载均衡算法为客户端ID分配第二服务端。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于MQTT服务集群的会话处理方法及系统。
背景技术
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP 协议上,由IBM在1999年发布。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务;作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
MQTT协议规范只给出了MQTT协议的报文规范,未给出集群实现方案。MQTT协议中定义了持久化Session的概念,即如果MQTT客户端连接时将CleanSession标记设置为false,且发起了订阅,那么当客户端断开连接后如果有其他客户端发送了满足该连接的订阅数据,那么MQTT服务端应该将这些数据保存,且当MQTT客户端下次以相同的 ClientID发起连接后,将这些缓存的数据发送过去。而MQTT集群负载均衡一般采用硬件负载或者LVS(Linux Virtual Serve)软件负载方案,因此在MQTT集群中,MQTT客户端最终连接到哪台MQTT服务端是不确定的。因而当MQTT客户端以相同的ClientID先后连接时,它们可能会被分配到不同的MQTT服务端上;如果有持久化的数据,那么这些数据需要从一台服务端转移到另外一台。
现有的一些方案的实现忽略了此问题,比如:一种基于Mqtt协议服务端实现方法(申请号:201710041498.X)基于开源的Mosquitto来实现MQTT协议服务端,但是Mosquitto本质上是一个单机版,不能处理Session转移的问题。
而在另外一些方案中,为了解决上述问题,一般是将数据存储到数据库或者消息中间件中;这样当MQTT客户端连接到另外一台MQTT服务端后,进一步的从数据库或者消息中间件中恢复数据。例如,MQTT客户端以相同的Client ID且将Clean Session标记设置为false发起多次登录;客户端第一次连接到服务端A后,发起订阅操作后下线,此后服务端A会将客户端的订阅情况和所有在离线期间发送给此客户端的数据存储到数据库或者消息中间件中;如果此客户端第二次上线时登录到了服务端B上,此时服务端B需要从数据库或者消息中间件中加载当前客户端的所有订阅消息,并从数据库或者消息中间件中恢复离线期间的数据,同时通知服务端A清理订阅情况。由上可以看出,在现有技术中,当Session发生转移时会有数据转移和旧的Session清理操作,这些操作比较繁琐且会消耗一定的时间和资源。因此,对于持久化Session,如何减小系统开销,以及缩短客户端 Session恢复时间是亟待解决的技术问题。
发明内容
有鉴于此,本发明提供了一种基于MQTT服务集群的会话处理方法及系统,以解决现有技术中存在的一个或多个问题。
根据本发明的一个方面,本发明公开了一种基于MQTT服务集群的会话处理方法,所述方法包括:
MQTT网关接收MQTT客户端的订阅请求,所述订阅请求携带客户端ID信息以及是否清空会话的指示;
所述MQTT网关向调度器发送调用请求,以由所述调度器查找所述订阅请求中携带的清空会话的指示;
在未查找到清空会话的指示的情况下,所述调度器查找缓存区中的反映所述订阅消息中携带的客户端ID与第一服务端的映射关系的信息;
在查找到反映所述订阅消息中携带的客户端ID与第一服务端的映射关系的信息的情况下,获取所述第一服务端的地址信息,并将获取到的所述地址信息发送至所述MQTT网关;
MQTT网关基于接收到的所述地址信息将所述订阅请求发送至所述第一服务端;
在查找到清空会话的指示的情况下,所述调度器清空缓存区中的与所述订阅消息中携带的客户端ID具有映射关系的缓存信息,并基于负载均衡算法为所述客户端ID分配第二服务端。
在本发明的一些实施例中,在基于负载均衡算法为所述客户端ID分配第二服务端之后,还包括:
将客户端ID与被分配的第二服务端的进行信息绑定,并将对应的映射关系存储至缓存区。
在本发明的一些实施例中,所述方法还包括:
在未查找到反映所述订阅消息中携带的客户端ID与第一服务端的映射关系的信息的情况下,基于负载均衡算法为所述客户端ID分配第三服务端。
在本发明的一些实施例中,在基于负载均衡算法为所述客户端ID分配第三服务端之后,还包括:
将客户端ID与被分配的第三服务端进行信息绑定,并将对应的映射关系存储至缓存区。
在本发明的一些实施例中,所述负载均衡算法为默认负载均衡算法或自定义负载均衡算法。
在本发明的一些实施例中,所述订阅请求还携带有用户名信息。
在本发明的一些实施例中,在MQTT网关基于接收到的所述地址信息将所述订阅请求发送至第一服务端之后,还包括:
所述第一服务端对所述MQTT客户端进行鉴权,在所述MQTT客户端通过鉴权后,查找所述订阅请求携带的清空会话的指示;
在查找到清空会话的指示的情况下,所述第一服务端通过所述调度器向所述MQTT客户端发送绑定请求,所述第一服务端在接收到所述MQTT客户端返回的绑定确认信息后,将连接响应发送至MQTT网关。
根据本发明的另一方面,还公开了一种基于MQTT服务集群的会话处理系统,所述系统包括MQTT网关、调度器和多个服务端,
其中,所述MQTT网关用于接收MQTT客户端的订阅请求,并向所述调度器发送调用请求,所述订阅请求携带客户端ID信息以及是否清空会话的指示;
所述调度器用于查找所述订阅请求中携带的清空会话的指示;
在所述调度器未查找到清空会话的指示的情况下,所述调度器用于查找缓存区中的反映所述订阅消息中携带的客户端ID与第一服务端的映射关系的信息;
在查找到反映所述订阅消息中携带的客户端ID与第一服务端的映射关系的信息的情况下,所述调度器用于获取所述第一服务端的地址信息,并将获取到的所述服务端地址信息发送至MQTT网关;
MQTT网关基于接收到的所述地址信息将所述订阅请求发送至所述第一服务端;
在查找到清空会话的指示的情况下,所述调度器用于清空缓存区中的与所述订阅消息中携带的客户端ID具有映射关系的缓存信息,并基于负载均衡算法为所述客户端ID分配第二服务端。
在本发明的一些实施例中,,所述系统还包括负载均衡器,所述负载均衡器用于为所述客户端ID分配新的服务端地址信息。
在本发明的一些实施例中,
所述调度器包括供MQTT网关调用的RPC接口、供多个服务端调用的用于清除客户端 ID与服务端映射关系的解绑接口、供多个服务端调用的用于建立客户端ID与服务端映射关系的绑定接口以及供多个服务端调用的心跳RPC接口。
本发明实施例中的基于MQTT服务集群的会话处理方法及系统,MQTT网关(MQTTGateway)通过MQTT调度器(MQTT Scheduler)分配MQTT服务端(MQTT Broker)地址;而对于持久化Session,MQTT调度器会缓存ClientID与MQTT服务端的对应关系,从而保证前后两次连接的数据都只会由同一个MQTT服务端处理,从而无需数据转移,也避免了旧的Session清理过程,从而减小了系统开销,并缩短了客户端Session的恢复时间。
另外,MQTT调度器提供内置负载均衡算法,同时支持插件扩展,允许用户自定义负载均衡策略,从而可适用于不同应用场景。
本发明的附加优点、目的,以及特征将在下面的描述中将部分地加以阐述,且将对于本领域普通技术人员在研究下文后部分地变得明显,或者可以根据本发明的实践而获知。本发明的目的和其它优点可以通过在书面说明及其权利要求书以及附图中具体指出的结构实现到并获得。
本领域技术人员将会理解的是,能够用本发明实现的目的和优点不限于以上具体所述,并且根据以下详细说明将更清楚地理解本发明能够实现的上述和其他目的。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,并不构成对本发明的限定。附图中的部件不是成比例绘制的,而只是为了示出本发明的原理。为了便于示出和描述本发明的一些部分,附图中对应部分可能被放大,即,相对于依据本发明实际制造的示例性装置中的其它部件可能变得更大。在附图中:
图1为本发明一实施例的基于MQTT服务集群的会话处理方法的流程示意图。
图2为本发明另一实施例的基于MQTT服务集群的会话处理方法的处理流程图。
图3为本发明一实施例的基于MQTT服务集群的会话处理系统的MQTT集群架构图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
在此,需要说明的是,为了避免因不必要的细节而模糊了本发明,在附图中仅仅示出了与根据本发明的方案密切相关的结构和/或处理步骤,而省略了与本发明关系不大的其他细节。
应该强调,术语“包括/包含/具有”在本文使用时指特征、要素、步骤或组件的存在,但并不排除一个或更多个其它特征、要素、步骤或组件的存在或附加。
为了提高服务端内存的利用率,保证暂停活动的客户端在会话超时之前继续原来的会话,一般需要对象持久化。而在现有技术中,对于持久化的数据,一般是需要将数据存储在数据库或消息中间件中,这样在MQTT客户端连接到另外一台MQTT服务端后,需要从数据库或消息中间件中恢复数据,上述方案在MQTT服务集群的会话处理过程中,虽然可实现Session持久化,但由于存在数据转移以及旧Session清理操作过程,使得操作繁琐,增加了系统开销。为了解决上述问题,本发明提出了一种基于MQTT服务集群的会话处理方法及系统,如图1所示,该基于MQTT服务集群的会话处理方法包括步骤S10~S60。
步骤S10:MQTT网关接收MQTT客户端的订阅请求,所述订阅请求携带客户端ID信息以及是否清空会话的指示。
其中,MQTT服务端集群由MQTT网关(MQTT Gateway)、MQTT调度器(MQTTScheduler) 和MQTT服务端(MQTT Broker)组成。而MQTT客户端(MQTT Client)可通过软/硬件负载均衡器与MQTT服务集群相连。在该步骤中,MQTT客户端的订阅请求发送至MQTT网关,订阅请求中应携带有用于标识MQTT客户端身份的信息,从而在持续性会话过程中,可通过订阅请求中携带的客户端ID信息匹配到该客户端在暂停会话之前的历史数据。MQTT客户端的订阅请求中除了携带有客户端ID信息之外,还携带有是否清空会话的指示,示例性的如CleanSession标记。其中CleanSession标记为“true”及“false”标记;当标记为“true”时,意味着该客户端不再继续之前的会话内容,即需要重新向其分配服务端,也即意味着调度器在该客户端的订阅请求中查找到了清空会话的指示;而当清空会话的指示为“false”时,意味着存储订阅的消息且当客户端重新连接时向其发送,也即意味着调度器在该客户端的订阅请求中未查找到清空会话的指示。
进一步的,MQTT客户端订阅请求除了携带有客户端ID信息以及是否清空会话的指示之外,还可携带有用户名信息,从而以使服务端端可对请求连接的客户端进行鉴权操作。
步骤S20:所述MQTT网关向调度器发送调用请求,以由所述调度器查找所述订阅请求中携带的清空会话的指示。
为了完成该步骤,MQTT调度器可提供一个供MQTT网关调用的调度RPC(remoteprocedure call,远程过程调度)接口,此接口参数包括MQTT客户端的客户端ID(ClientID)信息以清空会话的指示。清空会话的标记示例性的如:“true”标记或“false”标记。应当理解的是,上述所列的清空会话的指示还可以是除“true”“false”之外的其他标记。并且,在MQTT客户端订阅请求中还携带有用户名信息的情况下,调度器所提供的调度RPC接口的接口参数还包括用户名(UserName)信息。
步骤S30:在未查找到清空会话的指示的情况下,所述调度器查找缓存区中的反映所述订阅消息中携带的客户端ID与第一服务端的映射关系的信息。
在该步骤中,未查找到清空会话的指示的情况是指客户端的订阅请求中携带的清空会话标记为“false”的情况,此情况意味着不仅存储订阅的消息且当客户端重新连接时向该客户端发送。客户端ID与第一服务端的映射关系具体可指客户端ID与第一服务端的地址之间的对应关系。客户端ID与第一服务端的地址之间的对应关系是在客户端在首次连接服务端时存储在缓存区的;具体的,当客户端首次发起订阅请求时,调度器可基于负载均衡算法为该客户端分配一个服务端,并且将该客户端的ID以及该服务端的地址信息之间的对应关系保存,从而使该客户端暂停会话之后再次发起订阅请求时,可基于客户端 ID与服务端之间的映射关系获取在暂停会话之前与该客户端连接的服务端。
步骤S40:在查找到反映所述订阅消息中携带的客户端ID与第一服务端的映射关系的信息的情况下,获取所述第一服务端的地址信息,并将获取到的所述地址信息发送至所述MQTT网关。
当调度器进一步的查找缓存区中暂存的客户端ID与第一服务端的映射关系的信息时,会存在两种情况。即缓存区中保存有客户端ID与第一服务端的映射关系,及缓存区中没有保存有客户端ID与第一服务端的映射关系;对于第二种情况,客户端可能是首次发起订阅请求的客户端或者在缓存区中保存的信息已被清除。
在该步骤中,调度器尝试从缓存信息中获取当前客户端ID上次分配的MQTT服务端地址;当在缓存区中查找到反映所述订阅消息中携带的客户端ID与第一服务端的映射关系的信息的情况下,也即调度器从缓存信息中获取到了当前客户端ID上次分配的MQTT服务端地址。此时MQTT调度器将获取到的MQTT服务端地址返回给MQTT网关。而此外,若在缓存区中未查找到反映所述订阅消息中携带的客户端ID与第一服务端的映射关系的信息的情况下,也即调度器从缓存信息中没有获取到当前客户端ID上次分配的MQTT服务端地址时,MQTT调度器根据负载均衡算法,利用传来的客户端ID、用户名以及缓存中的MQTT服务端负载情况为当前客户端分配第三服务端。其中,MQTT服务端主要用于MQTT 报文处理,它会通过心跳的方式将当前MQTT服务端的地址、负载等信息发送给MQTT调度器。另外,MQTT服务端以主备的形式部署,进而以提高系统的容错性。
另外,当MQTT调度器根据负载均衡算法为当前客户端重新分配第三服务端时,可设置为当前客户端分配的第三服务端为负载最小的服务端。除此之外,用户也可自定义设置负载均衡算法,这就使得MQTT调度器可基于用户的自定义要求为当前客户端分配第三服务端。示例性的,MQTT调度器可允许用户自定义插件;插件要求实现一个输入参数为客户端ID信息,用户名以及CleanSession标记,输出参数为MQTT服务端地址的接口,通过此设置用户可以实现任意的负载均衡策略,比如为特定的用户分配独享的MQTT服务端的策略等。应当理解的是,当客户端的订阅请求中未携带用户名信息的情况下,插件也可要求实现一个输入参数为客户端ID信息及CleanSession标记,输出参数为MQTT服务端地址的接口。
进一步的,当MQTT调度器根据负载均衡算法为当前客户端重新分配第三服务端之后, MQTT调度器还将客户端ID与被分配的第三服务端进行信息绑定,并将对应的映射关系存储至缓存区。具体的,MQTT调度器可提供一个供MQTT服务端调用的绑定客户端ID信息与MQTT服务端映射关系的绑定接口。
步骤S50:MQTT网关基于接收到的所述地址信息将所述订阅请求发送至所述第一服务端。
在该步骤中,若MQTT网关获取到与当前发起订阅请求的客户端具有映射关系的第一服务端的地址信息后,就可直接将当前客户端的订阅请求发送至与其获取到的地址信息相对应的第一服务端,以此使暂停会话的客户端实现了持久化Session。
通过上述内容可以发现,对于持久化Session,本发明实施例中的基于MQTT服务集群的会话处理方法,MQTT调度器会缓存客户端ID信息与MQTT服务端的对应关系,从而保证前后两次连接的数据都只会由同一个MQTT服务端处理,从而避免了Session转移以及旧Session清理步骤,进而减小系统开销,以及缩短了客户端Session恢复时间。
步骤S60:在查找到清空会话的指示的情况下,所述调度器清空缓存区中的与所述订阅消息中携带的客户端ID具有映射关系的缓存信息,并基于负载均衡算法为所述客户端ID分配第二服务端。
在该步骤中,查找到清空会话的指示的情况是指客户端的订阅请求中携带的清空会话标记为“true”的情况,此情况意味着该客户端不再继续之前的会话内容。对于持久化Session,当前客户端在暂停会话之前,缓存区中已缓存有反映客户端ID与服务端之间映射关系的信息;而当调度器获取到要清空当前客户端在暂停会话之前的会话指示时,会将缓存区中的与该当前客户端对应的缓存信息进行清空。具体的,MQTT调度器可提供一个供MQTT服务端调用的清除客户端ID与MQTT服务端映射关系的解绑接口,此接口参数只有客户端ID。因此当调度器接收到MQTT服务端发来的解绑请求后,从缓存区中删除与给定客户端ID相关的信息。
进一步的,调度器会基于负载均衡算法为当前客户端分配一个第二服务端。负载均衡算法具体的可为默认的负载均衡算法,也可为用户自定义的负载均衡算法。当为默认的负载均衡算法时,可默认为向当前客户端分配一个负载最小的服务端,从而实现各个服务端的负载均匀化;而当为自定义的负载均衡算法时,可根据用户的自定义需求为当前客户端分配适合的服务端。其中当需要用户自定义负载均衡算法时,可通过设置插件的方式来实现,因而可实现任意的负载策略。
在为当前客户端分配服务端时,MQTT调度器提供一个供MQTT服务端调用的心跳RPC 接口,此接口参数包括MQTT服务端的地址和负载情况等信息。MQTT调度器当收到MQTT服务端发来的心跳请求后,缓存这些信息,进而便于进一步的将向当前客户端与被分配的第二服务端进行信息绑定。另外,MQTT调度器还提供一个供MQTT服务端调用的绑定客户端ID与MQTT服务端映射关系的绑定接口,且MQTT调度器进一步的可将客户端ID与被分配的第二服务端的映射关系存储至缓存区。
在本发明一实施例中,在步骤S50之后,还包括以下步骤:所述第一服务端对所述MQTT客户端进行鉴权,在所述MQTT客户端通过鉴权后,查找所述订阅请求携带的清空会话的指示;在查找到清空会话的指示的情况下,所述第一服务端通过所述调度器向所述 MQTT客户端发送绑定请求,所述第一服务端在接收到所述MQTT客户端返回的绑定确认信息后,将连接响应发送至MQTT网关。
在该实施例中,客户端向MQTT网关发起订阅请求,而当调度器将在缓存区中查找到的与当前客户端具有映射关系的服务端的地址信息发送至MQTT网关后,MQTT网关进一步的基于其获取到的与当前客户端具有映射关系的服务端的地址信息,将其接收到的当前客户端的订阅请求数据包发送至第一服务端,以使第一服务端进一步对该数据包进行处理。
MQTT服务端在处理该数据包时,还进一步的对该当前客户端进行鉴权等操作。如果鉴权失败则MQTT服务端向MQTT网关返回鉴权失败的连接响应;若鉴权成功,则进一步的判断CleanSession标记是否为true。若清空会话的标记为true,则向MQTT网关返回连接响应,否则先向MQTT调度器发起绑定Session的绑定请求,再向MQTT网关返回连接响应。MQTT网关并将连接响应返回给MQTT客户端。
另外,图2中示出了本发明另一实施例的基于MQTT服务集群的会话处理方法处理流程图,其主要操作步骤如下:
MQTT客户端发起连接请求,通过硬件或者软件负载均衡后会连接到其中的一台MQTT 网关上。MQTT网关解析MQTT客户端发来的连接包,从中解析出客户端ID、用户名和CleanSession标记等。MQTT网关利用解析得到的客户端ID、用户名和CleanSession标记向MQTT调度器发起调度RPC调用。MQTT调度器收到调度RPC调用后,首先检查 CleanSession标记是否为true。
如果是true则表示要清空缓存的Session,此时清空缓存中与给定的客户端ID相关的信息;且MQTT调度器根据负载均衡算法,利用传来的客户端ID、用户名以及缓存中的MQTT服务端负载情况分配MQTT服务端;其中默认返回负载最小的MQTT客户端,另外,用户也可自定义负载均衡算法。进而,MQTT调度器将为当前客户端分配的MQTT服务端地址返回给MQTT网关。
而相反,如果CleanSession标记为false,则尝试从缓存信息中获取当前客户端ID上次分配的MQTT服务端地址。其中,若缓存信息中没有当前客户端ID上次分配的MQTT 服务端地址时,MQTT调度器根据负载均衡算法,利用传来的客户端ID、用户名以及缓存中的MQTT服务端负载情况分配MQTT服务端。且MQTT调度器进一步的将为当前客户端分配的MQTT服务端地址返回给MQTT网关。相反,若缓存信息中具有当前客户端ID上次分配的MQTT服务端地址时,MQTT调度器将获取到的MQTT服务端地址返回给MQTT网关。
当MQTT调度器将MQTT服务端地址返回给MQTT网关后,MQTT网关将接收到的当前客户端的数据包发送给对应的MQTT服务端进行数据处理。
进一步的,MQTT服务端处理连接包,进行鉴权等操作。如果鉴权失败则向MQTT网关返回鉴权失败的连接响应,否则判断CleanSession是否为true。如果为true,则向MQTT 网关返回连接响应,否则先向MQTT调度器发起绑定Session的绑定请求,再向MQTT网关返回连接响应。MQTT网关进而将连接响应返回给MQTT客户端。
图3为本发明一实施例的基于MQTT服务集群的会话处理系统的架构图,如图3所示,该系统包括MQTT网关、调度器和多个服务端。其中,MQTT网关用于接收MQTT客户端的订阅请求,并向调度器发送调用请求,订阅请求中携带客户端ID信息以及是否清空会话的指示;示例性的,MQTT客户端通过软/硬件负载均衡器与MQTT客户端相连,软/硬件负载均衡器可为F5硬件负载或者LVS等软件负载均衡器。
调度器用于查找订阅请求中携带的清空会话的指示;且在所述调度器未查找到清空会话的指示的情况下,所述调度器用于查找缓存区中的反映所述订阅消息中携带的客户端 ID与第一服务端的映射关系的信息;而在所述调度器查找到清空会话的指示的情况下,所述调度器用于清空缓存区中的与所述订阅消息中携带的客户端ID具有映射关系的缓存信息,并基于负载均衡算法为所述客户端ID分配第二服务端。
其中,调度器在缓存区中查找到反映订阅消息中携带的客户端ID与第一服务端的映射关系的信息的情况下,调度器用于获取所述第一服务端的地址信息,并将获取到的所述服务端地址信息发送至MQTT网关;并且进一步的,MQTT网关基于接收到的所述地址信息将所述订阅请求发送至所述第一服务端。
在该实施例中,MQTT调度器还可提供MQTT网关调用的RPC接口、供多个服务端调用的用于清除客户端ID与服务端映射关系的解绑接口、供多个服务端调用的用于建立客户端ID与服务端映射关系的绑定接口以及供多个服务端调用的心跳RPC接口。其中,MQTT 网关在接收到MQTT客户端的连接包后,首先通过RPC接口向调度器发起服务端地址查询,而调度器根据具体的算法为当前客户端分配一个用于处理其报文数据的服务端,而当 MQTT网关收到RPC响应后,将后续所有数据都转发给分配的客户端处理。其中,MQTT调度器不仅提供了默认的负载均衡算法,也支持以插件的方式由用户自定义负载均衡算法,从而实现任意的负载策略。
对于上述会话处理系统,通过MQTT调度器的调度算法来分配具体处理报文的MQTT服务端,从而避免了Session转移,减少系统开销,缩短客户端Session恢复时间。能实现多实例部署,实现横向扩展,且MQTT网关与MQTT服务端的数量可根据实际自由分配。
另外,现有的MQTT集群负载均衡一般采用硬件负载或者LVS软件负载方案,这些方案只能提供简单的负载均衡算法,无法实现用户自定义的负载均衡策略。在实际的使用过程中,可能存在需要自定义负载均衡算法的情况,比如集群内部需要分区以将VIP用户的请求路由到指定的服务端上以独占系统资源,或者需要将指定用户的请求路由到带全量日志的服务端上以进行线上环境调试等。为了解决上述问题,该会话处理系统的MQTT调度器不仅提供了默认的负载均衡算法,以满足大多数应用场景;还允许通过插件的方式自定义负载均衡算法,从而可实现任意的负载均衡策略。
还需要说明的是,本发明中提及的示例性实施例,基于一系列的步骤或者装置描述一些方法或系统。但是,本发明不局限于上述步骤的顺序,也就是说,可以按照实施例中提及的顺序执行步骤,也可以不同于实施例中的顺序,或者若干步骤同时执行。
本发明中,针对一个实施方式描述和/或例示的特征,可以在一个或更多个其它实施方式中以相同方式或以类似方式使用,和/或与其他实施方式的特征相结合或代替其他实施方式的特征。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.一种基于MQTT服务集群的会话处理方法,其特征在于,所述方法包括:
MQTT网关接收MQTT客户端的订阅请求,所述订阅请求携带客户端ID信息以及是否清空会话的指示;
所述MQTT网关向调度器发送调用请求,以由所述调度器查找所述订阅请求中携带的清空会话的指示;
在未查找到清空会话的指示的情况下,所述调度器查找缓存区中的反映所述订阅消息中携带的客户端ID与第一服务端的映射关系的信息;
在查找到反映所述订阅消息中携带的客户端ID与第一服务端的映射关系的信息的情况下,获取所述第一服务端的地址信息,并将获取到的所述地址信息发送至所述MQTT网关;
MQTT网关基于接收到的所述地址信息将所述订阅请求发送至所述第一服务端;
在查找到清空会话的指示的情况下,所述调度器清空缓存区中的与所述订阅消息中携带的客户端ID具有映射关系的缓存信息,并基于负载均衡算法为所述客户端ID分配第二服务端;其中,所述调度器提供有供服务端调用的清除客户端ID与服务端映射关系的解绑接口,所述解绑接口的参数为客户端ID;
在未查找到反映所述订阅消息中携带的客户端ID与第一服务端的映射关系的信息的情况下,基于负载均衡算法为所述客户端ID分配第三服务端。
2.根据权利要求1所述的会话处理方法,其特征在于,在基于负载均衡算法为所述客户端ID分配第二服务端之后,还包括:
将客户端ID与被分配的第二服务端的进行信息绑定,并将对应的映射关系存储至缓存区。
3.根据权利要求1所述的会话处理方法,其特征在于,在基于负载均衡算法为所述客户端ID分配第三服务端之后,还包括:
将客户端ID与被分配的第三服务端进行信息绑定,并将对应的映射关系存储至缓存区。
4.根据权利要求1至3中任意一项所述的会话处理方法,其特征在于,所述负载均衡算法为默认负载均衡算法或自定义负载均衡算法。
5.根据权利要求1所述的会话处理方法,其特征在于,所述订阅请求还携带有用户名信息。
6.根据权利要求1所述的会话处理方法,其特征在于,在MQTT网关基于接收到的所述地址信息将所述订阅请求发送至第一服务端之后,还包括:
所述第一服务端对所述MQTT客户端进行鉴权,在所述MQTT客户端通过鉴权后,查找所述订阅请求携带的清空会话的指示;
在查找到清空会话的指示的情况下,所述第一服务端通过所述调度器向所述MQTT客户端发送绑定请求,所述第一服务端在接收到所述MQTT客户端返回的绑定确认信息后,将连接响应发送至MQTT网关。
7.一种基于MQTT服务集群的会话处理系统,其特征在于,所述系统包括MQTT网关、调度器和多个服务端,
其中,所述MQTT网关用于接收MQTT客户端的订阅请求,并向所述调度器发送调用请求,所述订阅请求携带客户端ID信息以及是否清空会话的指示;
所述调度器用于查找所述订阅请求中携带的清空会话的指示;
在所述调度器未查找到清空会话的指示的情况下,所述调度器用于查找缓存区中的反映所述订阅消息中携带的客户端ID与第一服务端的映射关系的信息;
在查找到反映所述订阅消息中携带的客户端ID与第一服务端的映射关系的信息的情况下,所述调度器用于获取所述第一服务端的地址信息,并将获取到的所述服务端地址信息发送至MQTT网关;
MQTT网关基于接收到的所述地址信息将所述订阅请求发送至所述第一服务端;
在查找到清空会话的指示的情况下,所述调度器用于清空缓存区中的与所述订阅消息中携带的客户端ID具有映射关系的缓存信息,并基于负载均衡算法为所述客户端ID分配第二服务端;其中,所述调度器提供有供服务端调用的清除客户端ID与服务端映射关系的解绑接口,所述解绑接口的参数为客户端ID;
在未查找到反映所述订阅消息中携带的客户端ID与第一服务端的映射关系的信息的情况下,基于负载均衡算法为所述客户端ID分配第三服务端。
8.根据权利要求7所述的会话处理系统,其特征在于,所述系统还包括负载均衡器,所述负载均衡器用于为所述客户端ID分配新的服务端地址信息。
9.根据权利要求7所述的会话处理系统,其特征在于,
所述调度器包括供MQTT网关调用的RPC接口、供多个服务端调用的用于清除客户端ID与服务端映射关系的解绑接口、供多个服务端调用的用于建立客户端ID与服务端映射关系的绑定接口以及供多个服务端调用的心跳RPC接口。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110315876.5A CN113242272B (zh) | 2021-03-24 | 2021-03-24 | 基于mqtt服务集群的会话处理方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110315876.5A CN113242272B (zh) | 2021-03-24 | 2021-03-24 | 基于mqtt服务集群的会话处理方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113242272A CN113242272A (zh) | 2021-08-10 |
CN113242272B true CN113242272B (zh) | 2022-12-20 |
Family
ID=77130410
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110315876.5A Active CN113242272B (zh) | 2021-03-24 | 2021-03-24 | 基于mqtt服务集群的会话处理方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113242272B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113452800B (zh) * | 2021-08-31 | 2021-11-30 | 深圳市信润富联数字科技有限公司 | 基于MQTT协议多Broker实现负载均衡的方法 |
CN114095502B (zh) * | 2021-10-08 | 2023-11-03 | 浙江吉利控股集团有限公司 | 一种业务处理方法、系统、装置及介质 |
CN114422570B (zh) * | 2021-12-31 | 2024-05-14 | 深圳市联软科技股份有限公司 | 一种跨平台的多模块通讯方法及系统 |
CN114090303B (zh) * | 2022-01-14 | 2022-05-03 | 杭州义益钛迪信息技术有限公司 | 软件模块调度方法、装置、电子设备、存储介质及产品 |
CN115914246A (zh) * | 2022-10-08 | 2023-04-04 | 广州市玄武无线科技股份有限公司 | 离线消息的点对点通信方法、系统、装置及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103607356A (zh) * | 2013-11-14 | 2014-02-26 | 北京奇虎科技有限公司 | 一种负载均衡方法、负载均衡器及系统 |
CN104639625A (zh) * | 2015-01-27 | 2015-05-20 | 华南理工大学 | 一种基于mqtt的数据集中器采集控制方法、装置及系统 |
CN110336736A (zh) * | 2019-05-27 | 2019-10-15 | 四川长虹电器股份有限公司 | 基于mqtt服务器集群实现共享订阅的方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7340744B2 (en) * | 2005-04-08 | 2008-03-04 | Cisco Technology, Inc. | System and method for optimizing sessions and network resources in a loadbalancing environment |
CN105472002B (zh) * | 2015-12-09 | 2018-11-02 | 国家电网公司 | 基于集群节点间即时拷贝的会话同步方法 |
US9838505B2 (en) * | 2015-12-11 | 2017-12-05 | Sap Se | Application based context pooling |
CN109688229A (zh) * | 2019-01-24 | 2019-04-26 | 江苏中云科技有限公司 | 一种负载均衡集群下会话保持系统 |
-
2021
- 2021-03-24 CN CN202110315876.5A patent/CN113242272B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103607356A (zh) * | 2013-11-14 | 2014-02-26 | 北京奇虎科技有限公司 | 一种负载均衡方法、负载均衡器及系统 |
CN104639625A (zh) * | 2015-01-27 | 2015-05-20 | 华南理工大学 | 一种基于mqtt的数据集中器采集控制方法、装置及系统 |
CN110336736A (zh) * | 2019-05-27 | 2019-10-15 | 四川长虹电器股份有限公司 | 基于mqtt服务器集群实现共享订阅的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113242272A (zh) | 2021-08-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113242272B (zh) | 基于mqtt服务集群的会话处理方法及系统 | |
US6990511B2 (en) | System and method for concentration and load-balancing of requests | |
US20070150602A1 (en) | Distributed and Replicated Sessions on Computing Grids | |
CN111835837B (zh) | 多端适配的消息推送方法及系统 | |
US20060069836A1 (en) | Communication system and method for upgrade of user terminal software and user terminal upgraded by the same | |
CN110557357A (zh) | 一种远程过程调用协议自适应方法、相关装置及服务器 | |
CN107528891B (zh) | 一种基于WebSocket的自动集群方法及其系统 | |
CN113596191A (zh) | 一种数据处理方法、网元设备以及可读存储介质 | |
AU2001276932A1 (en) | System and method for concentration and load-balancing of requests | |
CN111787079B (zh) | 基于通信群组的通信方法、装置、服务器、系统及介质 | |
CN113747373A (zh) | 消息处理系统、装置和方法 | |
CN115002016A (zh) | 报文处理系统、方法、设备和存储介质 | |
CN108958933B (zh) | 任务执行器的配置参数更新方法、装置及设备 | |
WO1999009490A1 (en) | Certified message delivery and queuing in multipoint publish/subscribe communications | |
US9912757B2 (en) | Correlation identity generation method for cloud environment | |
WO2022083385A1 (en) | Network nodes and methods therein for providing backup network function | |
CN113612735B (zh) | 安全存储系统 | |
CN114024968B (zh) | 一种基于中间设备的报文发送方法、装置和电子设备 | |
CN111641664B (zh) | 一种爬虫设备业务请求方法、装置、系统和存储介质 | |
US9244741B2 (en) | System and method for service mobility | |
CN115086425B (zh) | 消息传输方法、装置、程序产品、介质及电子设备 | |
CN111083213B (zh) | 一种通信方法及系统 | |
CN114449025B (zh) | 一种通信方法及系统 | |
CN113254203B (zh) | 服务降级处理方法及装置 | |
CN112689011B (zh) | 一种基于nfs协议的业务传输方法、装置、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |