融云超级群,打破了以往群组服务模式下群聊成员的数量上限魔咒,为行业提供了第一个真正支持无限用户在线交流和获取信息的社交产品大杀器。移步【融云全球互联网通信云】免费体验
无限用户分发因群成员数量多、业务需求量大面临消息分发量激增、消息状态多样等多种挑战。
为了保证超级群在超大规模用户分发上的极致性能,融云超级群从设计阶段便综合考虑了服务部署模型、消息投递方式以及资源隔离等核心难题的解决方案。
无限用户分发面临的技术挑战
1. 每个用户上行发送的每条消息,都需要实时分发给所有用户。即使目标用户不在线,也需要转成推送,触达这个用户。
无限用户可能过于抽象,我们以拥有 1000 万用户的一个群为例,一个用户发送的每条消息都会变成 1000 万的下行分发。在面对突发峰值,特别是群内有爆点消息或大规模成员被带起节奏的时候,数据的存储和网络的分发压力会急剧上升。
2. 超级群内成员可能面对海量信息。无论是客户端的性能或者用户的心力,都是有瓶颈的。
成员量庞大的超级群会产生不同于普通聊天室的独特需求:用户希望既可以在有需要的时候不遗漏信息,又能在无关的时候不要被打扰。
所以,哪些消息、哪些场景需要推送,会话和消息以什么频率和聚合的方式通知到客户端,需要有一个巨大的可定制空间。
也就是说,作为一个通信平台,在海量信息和实时聊天之间,需要把能力抽象,并赋予 APP 弹性调整的能力。
3. 由于超级群中的信息量太大,需要支持将群分割为不同的频道,类似传统的 topic 或 channel。即使相同的群和群成员,通过不同的频道,仍然能将会话、消息、未读数分门别类聚合。用户可以更关注自己感兴趣的部分,提升用户粘性。
4. 将信息和聊天结合的场景,一般都有多端的需求。不同的平台,比如 Android、iOS、Web 等,在海量消息的网络请求和存储方面都有不同的技术特点,甚至同平台不同厂商的推送通道特性也不同,这些都需要一一考虑。
当然,无限用户群,还需要为每个用户提供全球的优质网络接入,保证客户端和服务器之间消息不重不丢不乱序。
在这方面,融云平台每天承载亿级用户和千亿的消息分发,已经提供了坚实的基础,无须特别考虑。移步【融云全球互联网通信云】免费体验
融云超级群的设计架构和实施方案
服务分发分层架构
融云超级群从设计阶段便综合考虑了服务部署模型、消息投递方式以及资源隔离等核心问题。移步【融云全球互联网通信云】免费体验
有限的扩散模型:
主节点负责核心校验,扩散节点则负责数据读写,保证主节点高可用和扩散节点分组内高可用,确保强数据一致性
优良的资源隔离:
支持公有云、专有云,分级的资源隔离,精准的流控策略
动态的投递模型:
根据群类型选择消息投递模型,多级消息缓存结构,在线状态联动,多种消息定向投递策略
存储和分发
对于底层存储而言,群成员无上限和有上限区别很大,有上限我们可以根据上限进行设计。
比如,普通群的消息,通常可以选择写扩散,可以在实时投递中获得比较好的速度和并发性。结合半写扩散(引用分发)的机制,可以在时间和空间上做一定的平衡。
但是超级群的场景,为了降低读写压力,默认采用读扩散的方式进行优化。原则上 1 写 N 读,通过上下行节点分离和一致性 hash 的特点,可以对读和写分别进行特定优化。针对热点数据引入内存级消息环和二级 LRU 缓存,保证读写性能。
分发模式
面对海量消息,用户希望既可以在有需要的时候不遗漏信息,又能在无关的时候不要被打扰。
对这些业务形态进行分析和实现,落到分发模型上,可以分为两大类。
一类是消息驱动型,比如 Telegram,一个用户实时接收所有会话的消息,会话状态、未读数、通知提醒其实都是由消息驱动的。
另一类是会话驱动,比如 Discord,用户有选择性地接收某些会话的消息,关注度低的会话,仅需要接收会话状态、未读数、@ 信息等通知就可以。和第一类结合起来,还可以做到订阅式的会话驱动。
分发机制决定了群的管理节点、会话节点、消息分发节点都必须是单独的高可用逻辑单元。
消息投递方式
用户不在线的情况下,超级群仍然支持给用户进行推送。但是,考虑到用户体验,APP 可以设置按时间聚合,或者仅推送 @ 等关联度较高的消息,也可以让用户自行选择,设置全局、群组级别、频道级别的免打扰,减少对用户的打扰。
用户在线的情况下,IM 长连接一般有直接推送、通知拉取、聚合通知等方式。超级群的消息和会话,会动态地结合这几种方式。协议层支持 QoS 并保证每条消息都有唯一值,客户端可以通过增量时间戳的方式,进行同步和补偿。
用户离线再上线的情况下,客户端会首先增量同步超级群会话信息,并通过会话和消息的 merge 和消息断档机制,同时保证消息的快速获取和信息的完备性。
部分操作内化
普通群场景下,大部分的状态、未读数、正在输入等会话信息,默认交给客户端进行处理,以保证灵活性。
但在超级群场景下,由于海量的历史消息和多端的特点,这些信息的存储和获取,需要内化在超级群的通信模型中。
针对消息的变更,融云超级群也提供了一系列扩展和内化的能力,比如消息发送时、发送后的扩展信息,并支持消息的撤回、删除、修改、引用修改等操作。
而针对 APP 常用的通知或者控制信令的场景,融云也提供在线消息等方式,保证在线用户的触达并降低分发量。移步【融云全球互联网通信云】免费体验
流控和资源隔离
因为超级群的模型非常灵活且峰值很高,作为一个通信平台,融云会在超级群的上行节点,提供 APP、群组、信令级别的流控,保证平台的稳定性,且支持专有云的单独调整。
通过以上方式,融云超级群得以在无限用户场景中保证消息传输的可靠性,不会出现消息丢失、消息延迟、消息乱序等问题;消息高并发情况下,用户不论是离线还是在线,都能有序接收推送或消息,不会出现卡顿,无法拉取等问题。同时,通过内化部分操作的方式减轻了客户端的性能压力。
免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。