CN108282396A - 一种im集群中的多级消息广播方法及系统 - Google Patents

一种im集群中的多级消息广播方法及系统 Download PDF

Info

Publication number
CN108282396A
CN108282396A CN201810147967.0A CN201810147967A CN108282396A CN 108282396 A CN108282396 A CN 108282396A CN 201810147967 A CN201810147967 A CN 201810147967A CN 108282396 A CN108282396 A CN 108282396A
Authority
CN
China
Prior art keywords
user
nodes
message
room number
roomid1
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.)
Granted
Application number
CN201810147967.0A
Other languages
English (en)
Other versions
CN108282396B (zh
Inventor
陈鸣
陈一鸣
贺周州
田魁
殷伟雄
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hunan Happly Sunshine Interactive Entertainment Media Co Ltd
Original Assignee
Hunan Happly Sunshine Interactive Entertainment Media Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hunan Happly Sunshine Interactive Entertainment Media Co Ltd filed Critical Hunan Happly Sunshine Interactive Entertainment Media Co Ltd
Priority to CN201810147967.0A priority Critical patent/CN108282396B/zh
Publication of CN108282396A publication Critical patent/CN108282396A/zh
Application granted granted Critical
Publication of CN108282396B publication Critical patent/CN108282396B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/04Real-time or near real-time messaging, e.g. instant messaging [IM]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/02Details
    • H04L12/16Arrangements for providing special services to substations
    • H04L12/18Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
    • H04L12/185Arrangements for providing special services to substations for broadcast or conference, e.g. multicast with management of multicast group membership
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/52User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail for supporting social networking services
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/562Brokering proxy services

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computing Systems (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本发明公开了一种IM集群中的多级消息广播方法及系统,用户连接IM节点并上报房间号;消息中间件MQ给IM节点发送房间号为上述房间号的消息;IM节点收到消息后,查找该房间号下面的所有用户列表,再依次通过socket套接字把消息发送给所述用户。本发明无需查找全局用户表,只需要查找单个IM节点上面的用户列表,因此彻底解决了分发延迟的问题;节点间无任何关联,所以集群扩容非常简单;本发明采用二级分发方式,轻易即可达到千万级集群规模。

Description

一种IM集群中的多级消息广播方法及系统
技术领域
本发明涉及IM 消息分发领域,特别是一种IM集群中的多级消息广播方法及系统。
背景技术
Emqttd 是国内用Erlang/OTP 实现 mqtt 协议进行消息分发的分布式框架。该框架在用户规模达到千万并且集群机器多的时候,会带来集群之间用户表数据同步的问题。在进行大批量的消息转发的时候,分发的节点需要对该房间所有的用户进行遍历、再进行转发、延迟高、效率比较低。
云巴是基于MQTT协议实现的实时通信系统,采用Erlang/OTP的架构设计。在云巴,消息的发布过程为,首先在接收到任务请求后,会发布任务计算UID列表分片,对总任务进行分片处理。之后将分片任务分发给任务池,执行各个分片任务。最后,发布任务汇聚请求。其缺点是虽然优化了房间内用户遍历的问题,但是同样需要对uid位于哪个集群进行计算。
用 go 实现连接服务器,采用kafka开源库进行集群中的消息分发,但是未提及分发算法。
综合上述分析可知,现有技术中存在以下问题需要解决:
1) 分发延迟问题。传统的im 在广播消息的时候,需要对房间内的所有用户进行遍历。然后给房间内的用户发送消息。房间内人数多的时候--例如1000万,传统方案会带来消息分发的延迟。
2) 全局表维护问题。对于集群来说,需要单独的服务维护一个全局的用户列表。用户登录时会导致全局的用户列表会有变动,同时也会限制登陆的速度。
3) 不易扩容问题。对类似于 emqttd 这样的软件结构来说,每个节点都需要复制一份全局的用户结构表。
发明内容
本发明所要解决的技术问题是,针对现有技术不足,提供一种IM集群中的多级消息广播方法及系统,降低消息分发延迟,简化集群扩容,扩大集群规模。
为解决上述技术问题,本发明所采用的技术方案是:一种IM集群中的多级消息广播方法,包括以下步骤:
1)用户Uid1连接IM1节点并上报房间号RoomId1,用户Uid2连接IM1节点并上报房间号RoomId2,用户Uid3连接IM1节点并上报房间号RoomId1,用户Uid4连接IM2节点并上报房间号RoomId1;
2)消息中间件MQ同时给IM1节点和IM2节点发送房间号为RoomId1的msg1消息,消息内容简写为{ RoomId1, msg1 };
3)IM1节点收到消息{RoomId1,msg1}后,查找RoomId1下面的所有用户列表,再依次通过socket套接字把消息msg1发送给用户 Uid1 和用户 Uid3;IM2节点收到消息{RoomId1,msg1}后,查找RoomId1房间下的用户列表,IM2节点通过socket套接字把msg1消息下发给用户Uid4。
步骤1)中,各用户连接相应节点并上报房间号的具体操作过程包括:用户Uid连接IM节点,并订阅自己所在的房间号RoomId,被连接的 IM 节点判断维护的用户列表RoomUidList中是否存在RoomId的键key;如果有,把该用户Uid加入到RoomId结构对应的set数据结构中;如果没有,用户列表RoomUidList创建一个新的键值对,其中键key为RoomId,值value为空的set数据结构,并且把Uid加入到RoomId 指向的set数据结构中;其中用户Uid是指用户Uid1,Uid2,Uid3和用户Uid4;IM节点是指IM1节点和IM2节点。步骤3)之后,还执行如下操作:用户Uid1,Uid2,Uid3退出IM1节点,用户Uid4退出IM2节点。本发明中,用户退出相应节点的具体实现过程为:用户Uid找到该用户Uid对应的RoomId并从 RoomId中删除这个用户Uid。由于进入房间不需要在全局表上增加数据,而是在单个IM节点维护的数据表上增加数据,所以本发明的加入和退出操作相对现有的全局表方案速度更快。
相应地,本发明还提供了一种IM集群中的多级消息广播系统,其包括:
用户Uid1,用于连接IM1节点并上报房间号RoomId1;
用户Uid2,用于连接IM1节点并上报房间号RoomId2;
用户Uid3,用于连接IM1节点并上报房间号RoomId1;
用户Uid4,用于连接IM2节点并上报房间号RoomId1;
消息中间件MQ,用于同时给IM1节点和IM2节点发送房间号为RoomId1的msg1消息,消息内容简写为{ RoomId1, msg1 };
消息收发单元,用于在IM1节点收到消息{RoomId1,msg1}后,查找RoomId1下面的所有用户列表,再依次通过socket套接字把消息msg1发送给用户 Uid1 和用户 Uid3;IM2节点收到消息{RoomId1,msg1}后,查找RoomId1房间下的用户列表,IM2节点通过socket套接字把msg1消息下发给用户Uid4。
还包括:
退出单元,用于在消息收发单元操作完成后,使用户Uid1,Uid2,Uid3退出IM1节点,用户Uid4退出IM2节点。
与现有技术相比,本发明所具有的有益效果为:本发明无需查找全局用户表,只需要查找单个IM节点上面的用户列表,因此彻底解决了分发延迟的问题;节点间无任何关联,所以集群扩容非常简单;本发明采用二级分发方式,轻易即可达到千万级集群规模。
附图说明
图1为本发明IM节点中RoomMap数据结构;
图2为本发明IM节点中RoomUidList数据结构;
图3为本发明用户登录流程图;
图4为本发明用户退出流程图;
图5为本发明消息分发流程图。
具体实施方式
1) IM节点中RoomMap数据结构详细说明
对照图1。每个IM节点维护一张 Uid 与 RoomId 对应的map映射表,命名为RoomMap,后面以RoomMap表示。这个结构用于存储该用户位于哪个房间,RoomMap为多对一的关系,多个Uid可以映射到同一个RoomId。
2) IM节点中RoomUidList数据结构详细说明
对照图2。RoomUidList 为map 数据结构,key 为 RoomId,也就是房间号,value 为set,set中的数据为Uid。该结构用于存储房间内有哪些用户,假设Uid1、Uid2、Uid3 属于房间号RoomId1,Uid4、Uid5属于RoomId2,Uid6属于RoomId3。那么其数据结构就如图2所示。
3) 用户加入房间算法步骤描述
用户Uid连接IM节点:并且订阅自己所在的房间号RoomId。被连接的 IM 判断维护的RoomUidList中是否存在RoomId的key。如果有,把该用户Uid加入到RoomId结构对应的map中。如果没有,RoomUidList创建一个新的key RoomId,value为空的map,并且把Uid加入到RoomId 指向的map中。
uid1加入到RoomId1步骤演示如下(参照图 3):
步骤1:增加映射关系 uid1 -> RoomId1;
步骤2:找到 RoomId1下的Uid列表,将Uid1添加到RoomId1所指set。如果不存在RoomId1,创建新的 RoomId1 和 RoomId1所对应set,并且把 Uid1 加入到 set。
4) 用户退出房间算法步骤描述
用户Uid退出IM节点:找到Uid对应的RoomId并从 RoomId 中删除这个 Uid。
步骤演示如下:(参照图 4)
步骤1:通过 Uid1 找到对应的RoomId1并且找到RoomId1对应set,删除 Uid1。
如果删除后set为空,删除 RoomId1和set对应关系,并删除该set。
步骤2:通过Uid1找到 RoomId,移除映射关系uid1 -> RoomId1。
5) 消息分发算法步骤描述
业务服务器对IM集群进行房间RoomId的消息广播:消息中间件 MQ 对所有连接上的IM 节点进行第一层消息广播,所有的 IM 节点都能收到一份同样的消息拷贝。由于 IM节点和消息中间件 MQ 位于同一个内网网段,并且基于直播弹幕这种特殊场景——发布的弹幕总数少,广播的用户量多。所以给所有 IM节点分发的这一份消息的消耗非常小,基本上对系统没有影响。
具体步骤如下:(参照图5)
步骤1:Uid1 连接 IM1上报房间号RoomId1,Uid2连接IM1上报房间号RoomId2,Uid3连接IM1,上报房间号RoomId1,Uid4连接IM2上报房间号RoomId1;
步骤2:消息中间件MQ同时下发消息{RoomId1,msg1}给IM1和IM2;
步骤3:IM1收到{RoomId1,msg1}之后,查找RoomId1下面的所有用户列表。找到用户列表[Uid1,Uid3] ,通过套接字socket依次将消息msg1发送给Uid1和Uid3。IM2收到msg1,查找RoomId1下的列表,得到uid4,通过套接字socket将消息msg1发送给Uid4。
6) 总结
IM只存储连接到他本身这个节点上的用户与房间关系列表。所以消息分发的速度基本上就是当前节点上所有用户的分发速度。假如有1000万用户在线,有1000个节点,那么平均每个节点只要分发1万个用户。相较于传统的im,比要按顺序扫描这 1000 万个用户要快得多。从而降低了消息分发延迟。
节点间没有任何依赖,其中一个节点崩溃了,将只会影响到连接到该节点的用户,并不会干扰到其他的节点。同时也意味着,扩容的时候直接复制一样的镜像就行。以此为基础,能够轻松构建自动扩容系统。由于上层有一个MQ构成二级分发系统。对MQ来说只需要达到1000的分发能力,就能分发给1000个IM节点,一个节点连接 10000 个用户,就能达到千万的规模。通过对Redis(key-value存储系统)组件的pub/sub功能进行压测,1秒钟分发3个包,能够轻松分发给1000个连接。

Claims (10)

1.一种IM集群中的多级消息广播方法,其特征在于,包括以下步骤:
1)用户连接IM节点并上报房间号;
2)消息中间件MQ给IM节点发送房间号为步骤1)中房间号的消息;
3)IM节点收到消息后,查找该房间号下面的所有用户列表,再依次通过socket套接字把消息发送给所述用户。
2.根据权利要求1所述的IM集群中的多级消息广播方法,其特征在于,所述用户数量为4个,所述IM节点数量为2个;执行步骤1)时,第一用户Uid1连接IM1节点并上报房间号RoomId1,第二用户Uid2连接IM1节点并上报房间号RoomId2,第三用户Uid3连接IM1节点并上报房间号RoomId1,第四用户Uid4连接IM2节点并上报房间号RoomId1。
3.根据权利要求2所述的IM集群中的多级消息广播方法,其特征在于,执行步骤2)时,所述消息中间件MQ同时给IM1节点和IM2节点发送房间号为RoomId1的msg1消息,消息内容简写为{ RoomId1, msg1 }。
4.根据权利要求3所述的IM集群中的多级消息广播方法,其特征在于,执行步骤3)时,IM1节点收到消息{RoomId1,msg1}后,查找RoomId1下面的所有用户列表,再依次通过socket套接字把消息msg1发送给第一用户 Uid1 和第二用户 Uid3;IM2节点收到消息{RoomId1,msg1}后,查找RoomId1房间下的用户列表,IM2节点通过socket套接字把msg1消息下发给第四用户Uid4。
5.根据权利要求1所述的IM集群中的多级消息广播方法,其特征在于,步骤1)中,用户连接IM节点并上报房间号的具体操作过程包括:用户Uid连接IM节点,并订阅自己所在的房间号RoomId,被连接的 IM 节点判断维护的用户列表RoomUidList中是否存在RoomId的键key;如果有,把该用户Uid加入到RoomId结构对应的set数据结构中;如果没有,用户列表RoomUidList创建一个新的键值对,其中键key为 RoomId,值value为空的set数据结构,并且把Uid加入到RoomId 指向的set数据结构中。
6.根据权利要求1所述的IM集群中的多级消息广播方法,其特征在于,步骤3)之后,还执行如下操作:用户退出IM节点。
7.根据权利要求6所述的IM集群中的多级消息广播方法,其特征在于,用户退出IM节点的具体实现过程为:用户Uid找到该用户Uid对应的RoomId并从 RoomId 中删除这个用户Uid。
8.一种IM集群中的多级消息广播系统,其特征在于,包括:
用户,用于连接IM节点并上报房间号;
消息中间件MQ,用于给IM节点发送房间号为上述房间号的消息;
消息收发单元,用于在IM节点收到消息后,查找所述房间号下面的所有用户列表,再依次通过socket套接字把消息发送给用户 Uid。
9.根据权利要求8所述的IM集群中的多级消息广播系统,其特征在于,还包括:
退出单元,用于在消息收发单元操作完成后,使用户退出IM节点。
10.根据权利要求8所述的IM集群中的多级消息广播系统,其特征在于,所述用户包括第一用户Uid1,第二Uid2,第三Uid3和第四用户Uid4;所述IM节点包括IM1节点和IM2节点:第一用户Uid1,用于连接IM1节点并上报房间号RoomId1;
第二用户Uid2,用于连接IM1节点并上报房间号RoomId2;
第三用户Uid3,用于连接IM1节点并上报房间号RoomId1;
第四用户Uid4,用于连接IM2节点并上报房间号RoomId1。
CN201810147967.0A 2018-02-13 2018-02-13 一种im集群中的多级消息广播方法及系统 Active CN108282396B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810147967.0A CN108282396B (zh) 2018-02-13 2018-02-13 一种im集群中的多级消息广播方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810147967.0A CN108282396B (zh) 2018-02-13 2018-02-13 一种im集群中的多级消息广播方法及系统

Publications (2)

Publication Number Publication Date
CN108282396A true CN108282396A (zh) 2018-07-13
CN108282396B CN108282396B (zh) 2022-02-22

Family

ID=62808515

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810147967.0A Active CN108282396B (zh) 2018-02-13 2018-02-13 一种im集群中的多级消息广播方法及系统

Country Status (1)

Country Link
CN (1) CN108282396B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109068183A (zh) * 2018-08-08 2018-12-21 湖南快乐阳光互动娱乐传媒有限公司 一种直播弹幕分发方法及装置
CN110650202A (zh) * 2019-09-26 2020-01-03 支付宝(杭州)信息技术有限公司 通信交互方法、装置及电子设备
CN110881041A (zh) * 2019-11-28 2020-03-13 杭州涂鸦信息技术有限公司 一种连接方法、mqtt客户端和mqtt服务端
CN111478781A (zh) * 2019-01-24 2020-07-31 北京京东尚科信息技术有限公司 一种消息广播的方法和装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101849236A (zh) * 2007-07-23 2010-09-29 香港中文大学 利用基因组测序诊断胎儿染色体非整倍性
CN101895406A (zh) * 2010-06-23 2010-11-24 中兴通讯股份有限公司 一种移动流媒体的直播服务提供方法及系统
CN105391563A (zh) * 2015-11-26 2016-03-09 广州酷狗计算机科技有限公司 信息通知方法及装置
CN105871996A (zh) * 2015-12-15 2016-08-17 乐视致新电子科技(天津)有限公司 消息推送系统和方法
CN106534216A (zh) * 2016-12-30 2017-03-22 上海幻电信息科技有限公司 一种服务器部署结构
CN107438098A (zh) * 2017-07-17 2017-12-05 网宿科技股份有限公司 一种动态内容分发方法及其系统

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101849236A (zh) * 2007-07-23 2010-09-29 香港中文大学 利用基因组测序诊断胎儿染色体非整倍性
CN101895406A (zh) * 2010-06-23 2010-11-24 中兴通讯股份有限公司 一种移动流媒体的直播服务提供方法及系统
CN105391563A (zh) * 2015-11-26 2016-03-09 广州酷狗计算机科技有限公司 信息通知方法及装置
CN105871996A (zh) * 2015-12-15 2016-08-17 乐视致新电子科技(天津)有限公司 消息推送系统和方法
CN106534216A (zh) * 2016-12-30 2017-03-22 上海幻电信息科技有限公司 一种服务器部署结构
CN107438098A (zh) * 2017-07-17 2017-12-05 网宿科技股份有限公司 一种动态内容分发方法及其系统

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109068183A (zh) * 2018-08-08 2018-12-21 湖南快乐阳光互动娱乐传媒有限公司 一种直播弹幕分发方法及装置
CN111478781A (zh) * 2019-01-24 2020-07-31 北京京东尚科信息技术有限公司 一种消息广播的方法和装置
CN111478781B (zh) * 2019-01-24 2022-11-08 北京京东尚科信息技术有限公司 一种消息广播的方法和装置
CN110650202A (zh) * 2019-09-26 2020-01-03 支付宝(杭州)信息技术有限公司 通信交互方法、装置及电子设备
CN110881041A (zh) * 2019-11-28 2020-03-13 杭州涂鸦信息技术有限公司 一种连接方法、mqtt客户端和mqtt服务端

Also Published As

Publication number Publication date
CN108282396B (zh) 2022-02-22

Similar Documents

Publication Publication Date Title
US11949588B2 (en) Large-scale real-time multimedia communications
CN108282396A (zh) 一种im集群中的多级消息广播方法及系统
CN100490425C (zh) 组播网络部署方法及组播网络
Shen et al. Peer-to-peer media streaming: Insights and new developments
EP2204056B1 (en) Mobility service clustering using network service segments
CN106302616A (zh) 网络唤醒方法、远程服务器和网络交换设备
CN107317707B (zh) 一种基于点覆盖集的sdn网络拓扑管理方法
WO2011026430A1 (zh) 内容分发网络中数据同步的方法及系统
CN104427354B (zh) 一种直播媒体共享的方法、流媒体服务器及节点子系统
CN108600322B (zh) 基于铁路视频技术规范的综合视频监控云服务系统及方法
WO2018121201A1 (zh) 分布式集群服务结构及节点协同方法和装置、终端及介质
CN110516005A (zh) 一种分布式数据库快速同步系统及方法
Li et al. GBC3: A versatile cube-based server-centric network for data centers
CN111478793B (zh) 一种业务请求的处理方法、装置、终端设备和存储介质
CN106411750B (zh) 数据分发方法及系统
CN105721328B (zh) 一种vrrp负载均衡的方法、装置和路由器
CN102469409A (zh) 一种多媒体会议实现方法和装置
CN111064591B (zh) 数据汇聚方法、装置、设备、存储介质和系统
CN113163016A (zh) 网络长连接服务集群化部署系统及控制流程
KR101830760B1 (ko) 지역 분산된 콘텐츠 노드에서 다중 콘텐츠 분배를 위한 오버레이 멀티캐스트 시스템 및 그 방법
CN110460482B (zh) 流量获取方法、装置、服务器及介质
CN111737029A (zh) 一种服务端、数据推送方法、数据推送系统
CN102694833A (zh) 多播树建立方法及多播系统中的服务器和节点
Pu et al. Practical implementation of an OPC UA multi-server aggregation and management architecture for IIoT
CN201904870U (zh) Mcu负载均衡控制器及视频会议系统

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