当前位置:网站首页>IM即时通讯开发万人群聊消息投递方案
IM即时通讯开发万人群聊消息投递方案
2022-07-01 15:50:00 【wecloud1314】
传统意义上的IM群聊,通常都是像微信这样的500人群,或者QQ的2000人群(QQ有3000人群,但那是单独收费的,也就意味着它并非无门槛标配,能用上的人并不多)。

自从国外某号称“世界上最安全的IM”搞出万人群聊之后,万人群迅速被国内的使用者们接受。伴随着移动互联网的发展,即时通讯服务被广泛应用于各个行业(以经不再局限于传统IM社交应用领域),随着业务快速发展,传统百人、千人上限的群聊已经无法满足很多业务场景需求,所以万人甚至十万人的超大群也算是相伴而生、顺应潮流。
IM群聊一直是IM应用中比较有难度的热点技术之一,通常意义的群聊,无非就是500人群、1000人群、2000人群这样,技术实现上比单聊要复杂不少。然而对于万人群聊(甚至十万人群聊)来说,相比百人、千人群聊,技术实现上那几乎是另一个技术维度的事情,难度要高很多。
超大群面临的技术挑战
与百人群、千人群相比,万人、甚至十万人超大群,大幅提升了群的触达人数,对于很多业务场景来说,好处不言而喻。
然而单群成员如此之大,给 IM 系统的流量冲击非常巨大,技术难度可想而之。我们先来分析一下超大群的技术挑战。
以一个万人群的模型为例:
1)如果群中有人发了消息,那么这条消息需要按照 1:9999 的比例进行分发投递,如果我们按照常规消息的处理流程,那么消息处理服务压力巨大;
2)消息量大的情况下,服务端向客户端直推消息的处理速度将会成为系统瓶颈,而一旦用户的消息下发队列造成了挤压,会影响到正常的消息分发,也会导致服务缓存使用量激增;
3)在微服务架构中,服务以及存储(DB,缓存)之间的 QPS 和网络流量也会急剧增高;
4)以群为单位的消息缓存,内存和存储开销较大(消息体的存储被放大了万倍)。
基于这些技术挑战,要想真正达成超大群的技术目标,势必要做特定的技术优化来应对。
一般群聊的消息投递模型
先来看看普通群聊的消息投递模型。
当用户在普通群里发了一条消息后,投递路径是:
1)消息先到群组服务;
2)然后通过群组服务缓存的群关系,锁定这条消息最终需要分发的目标用户;
3)再根据一定的策略分发到消息服务上;
4)消息服务再根据用户的在线状态和消息状态来判断这条消息是直推、通知拉取还是转 Push,最终投递给目标用户。
普通群聊的消息投递,正像您期待的那样,基本上大家的实现手段都大差不差。然而对于万人群来说,这显然还不够。
万人群聊消息投递优化手段1:控速
针对万人群的消息投递,我们的一个主要手段就是控速。
首先:我们会根据服务器的核数来建立多个群消息分发队列,这些队列我们设置了不同的休眠时间以及不同的消费线程数。
通俗来讲,可以将队列这样划分为快、中、慢等队列。
其次:我们根据群成员数量的大小来将所有群映射到相应的队列中。
规则是:
1)小群映射到快队列中;
2)大群映射到相应的慢队列中。
然后:小群由于人数少,对服务的影响很小,所以服务利用快队列快速的将群消息分发出去,而大群群消息则利用慢队列的相对高延时来起到控速的作用。即时通讯聊天软件app开发可以加蔚可云的v:weikeyun24咨询

万人群聊消息投递优化手段2:合并
在本文第3节中提到的万人群聊所面临的技术挑战,最主要的挑战其实就是消息进行扩散分发投递后,消息被克隆出N条,消息流量瞬间被放大。
举个例子:当一条群消息发送到 IM 服务器后,需要从群组服务投递给消息服务,如果每一个群成员都投递一次,并且投递的群消息内容是一致的话,那肯定会造成相应的资源浪费和服务压力。
那么针对这种情况,我们的解决方案就是进行消息合并投递。
原理就是:服务落点计算中我们使用的是一致性哈希,群成员落点相对固定,所以落点一致的群成员我们可以合并成一次请求进行投递,这样就大幅提高了投递效率同时减少了服务的压力。
十万、百万级的超大群处理方案
在实际群聊业务中,还有一种业务场景是超大规模群,这种群的群人数达到了数十万甚至上百万。
这种群如果按照上述的投投递方案,势必仍会造成消息节点的巨大压力。
比如我们有一个十万人的群,消息节点五台,消息服务处理消息的上限是一秒钟 4000 条,那每台消息节点大约会分到 2 万条群消息,这已大大超出了消息节点的处理能力。
所以为了避免上述问题,我们会将群成员上线超过3000的群识别为万人群、超级群,这种级别的群可以根据服务器数量和服务器配置相应做调整针对这种超级群会用特殊的队列来处理群消息的投递。
这个特殊的队列1秒钟往后端消息服务投递的消息数是消息服务处理上限的一半(留相应的能力处理其他消息),如果单台消息服务处理的 QPS 上限是 4000,那群组服务一秒往单台消息服务最多投递 2000 条。
边栏推荐
- u本位合约和币本位合约有区别,u本位合约会爆仓吗
- laravel的模型删除后动作
- [video memory optimization] deep learning video memory optimization method
- Sales management system of lightweight enterprises based on PHP
- 硬件开发笔记(九): 硬件开发基本流程,制作一个USB转RS232的模块(八):创建asm1117-3.3V封装库并关联原理图元器件
- Pocket network supports moonbeam and Moonriver RPC layers
- 基于PHP的轻量企业销售管理系统
- Day 3 of rhcsa study
- Crypto Daily:孙宇晨在MC12上倡议用数字化技术解决全球问题
- [300 + selected interview questions from big companies continued to share] big data operation and maintenance sharp knife interview question column (III)
猜你喜欢

MySQL advanced 4

2022 Moonriver global hacker song winning project list

华为发布HCSP-Solution-5G Security人才认证,助力5G安全人才生态建设
![[video memory optimization] deep learning video memory optimization method](/img/87/795429126aef284d55d2217f393ecb.png)
[video memory optimization] deep learning video memory optimization method

马来西亚《星报》:在WTO MC12 孙宇晨仍在坚持数字经济梦想

工厂高精度定位管理系统,数字化安全生产管理

2023 spring recruitment Internship - personal interview process and face-to-face experience sharing

Programming examples of stm32f1 and stm32subeide - production melody of PWM driven buzzer

For the sustainable development of software testing, we must learn to knock code?

MySQL的零拷贝技术
随机推荐
ADS算力芯片的多模型架构研究
软件测试的可持续发展,必须要学会敲代码?
【LeetCode】43. 字符串相乘
ThinkPHP进阶
电脑照片尺寸如何调整成自己想要的
Factory high-precision positioning management system, digital safety production management
Tensorflow team: we haven't been abandoned
6.2 normalization 6.2.6 BC normal form (BCNF) 6.2.9 normalization summary
Redis秒杀demo
Task.Run(), Task.Factory.StartNew() 和 New Task() 的行为不一致分析
开机时小键盘灯不亮的解决方案
[target tracking] | template update time context information (updatenet) "learning the model update for Siamese trackers"
She is the "HR of others" | ones character
Huawei issued hcsp-solution-5g security talent certification to help build 5g security talent ecosystem
一次革命、两股力量、三大环节:《工业能效提升行动计划》背后的“减碳”路线图...
Task. Run(), Task. Factory. Analysis of behavior inconsistency between startnew() and new task()
There will be a gap bug when the search box and button are zoomed
TensorFlow团队:我们没被抛弃
ThinkPHP kernel work order system source code commercial open source version multi user + multi customer service + SMS + email notification
【IDM】IDM下载器安装