乐趣区

关于im:融云分析聊天室海量消息分发之消息丢弃策略

1 背景

随着直播、聊天室等 APP 的宽泛遍及利用,聊天室性能越来越被器重。比方往年十分火、下载量飙升的『直播带货』类 APP,在其直播中的用户聊天、弹幕、礼物、点赞、禁言、零碎告诉等场景都基于聊天室实现;如果将聊天室中产生的海量音讯全量散发至客户端,那么客户端可能会呈现卡顿,且此类刷屏音讯人眼无奈查看也会影响用户体验,因而聊天室音讯散发的抛弃策略应运而生。

2 海量音讯散发的挑战

咱们以一个百万人观看的直播聊天室模型进行举例:

1、在直播中会有一波一波的音讯顶峰,比方直播中的“刷屏”音讯,即大量用户在同一时段发送的海量音讯,个别状况下此类“刷屏”音讯的音讯内容基本相同。如果将所有音讯全副展现在客户端,则客户端很可能呈现卡顿、音讯提早等问题,重大影响用户体验。

2、海量音讯的状况下,如果服务端每条音讯都长期存储将导致服务缓存使用量激增,使得内存、存储成为性能瓶颈。

3、在另外一些场景下,比方聊天室的房间管理员进行操作后的告诉音讯或者零碎告诉,个别状况下这类音讯是较为重要的,须要优先保障它的达到率。

基于这些挑战,咱们的服务须要做一个基于业务场景的优化来应答。

3 聊天室架构模型

融云聊天室服务通过多年迭代更新,目前已十分稳固。以下简要介绍融云的聊天室架构,架构示意图如下:

图 3 -1

简要阐明:

聊天室服务 - 缓存聊天室的根本信息,包含用户列表,禁言封禁关系,白名单用户等

音讯服务 - 缓存本节点须要解决的用户关系信息、音讯队列信息等

* 聊天室用户关系同步

成员被动退出退出时:聊天室服务同步至 ==> 音讯服务

散发音讯发现用户已离线时:音讯服务同步至 ==> 聊天室服务

* 发送音讯

聊天室服务通过必要校验通过后将音讯播送至音讯服务

聊天室服务不缓存音讯内容

Zk- 各服务实例均注册到 Zk,数据用于服务间流转时的落点计算

聊天室服务: 依照聊天室 ID 落点

音讯服务: 依照用户 ID 落点

Redis- 次要作为二级缓存,以及服务更新(重启)时内存数据的备份

4 聊天室音讯散发解决方案

聊天室服务的音讯散发、拉取计划:

图 4 -1

散发(图 4 -1):

用户 A 在聊天室中发送一条音讯,首先由聊天室服务解决

聊天室服务将音讯同步到各音讯服务节点

音讯服务向本节点缓存的所有成员下发告诉拉取

如图『音讯服务 -1』将向用户 B 下发告诉

另外,在散发过程中,具备告诉合并机制;上述步骤 3 具体流程为:

将所有成员退出到待告诉队列中(如已存在则更新告诉音讯工夫)

下发线程,轮训获取待告诉队列

向队列中用户下发告诉拉取

通过次流程可保障下发线程一轮只会向同一用户发送一个告诉拉取,即多个音讯会合并为一个告诉拉取,无效晋升了服务端性能且升高了客户端与服务端的网络耗费。

图 4 -2

拉取(图 4 -2):

用户 B 收到告诉后将向服务端发送拉取音讯申请

该申请将由『音讯服务 -1』节点解决

『音讯服务 -1』将依据客户端传递的最初一条音讯工夫戳,从音讯队列中返回音讯列表,参考图 4-3 示意

用户 B 获取到新的音讯

图 4 -3

5 聊天室音讯散发之音讯抛弃策略

图 5 -1

5.1 上行限速管制(抛弃)策略:

针对上行的限速管制,默认 200 条 / 秒,依据业务须要可调整。达到限速后发送的音讯将在聊天室服务抛弃,不再向各音讯服务节点同步。

5.2 上行限速管制(抛弃)策略:

针对上行的限速管制,即对音讯环形队列(图 4.3 所形容拉取音讯过程)长度的管制,达到最大值后最“老”的音讯将被淘汰抛弃。

每次下发告诉拉取后服务端将该用户标记为拉取中,用户理论拉取音讯后移除该标记。拉取中标记作用:例如产生新音讯时用户具备拉取中标记,如果距设置标记工夫在 2 秒内则不会下发告诉(升高客户端压力,抛弃告诉未抛弃音讯),超过 2 秒则持续下发告诉(间断屡次告诉未拉取则触发用户踢出策略,不在此赘述)。因而音讯是否被抛弃取决于客户端拉取速度(受客户端性能、网络影响),客户端及时拉取音讯则没有被抛弃的音讯。

通过以上两个策略保障了客户端不会因为海量音讯呈现卡顿、提早等问题;避免出现音讯刷屏,肉眼无奈查看的状况;同时升高了服务端存储压力,不会因为海量音讯呈现内存瓶颈从而影响服务。

5.3 重要音讯防抛弃策略:

如前文所述,在聊天室场景下对某些音讯应具备较高优先级,不应抛弃;例如聊天室的房间管理员进行操作后的告诉音讯或者零碎告诉,针对此场景,咱们设置了音讯白名单、音讯优先级的概念,保障不抛弃。如图 5-1 所示,音讯环形队列能够为多个,与一般聊天室音讯离开则保障了重要音讯不抛弃。

6 结束语

随着挪动互联网的倒退,聊天室的业务模型和压力也在不停地扩大变动,后续可能还会遇到更多的挑战,咱们的服务会与时俱进、跟进更优的计划策略进行应答。

最新流动举荐:

退出移动版