本文原题为“一套高可用群聊消息系统实现”,由作者“于雨氏”授权即时通讯网整理和发布,内容有些许改动,作者博客地址:alexstocks.github.io。应作者要求,如需转载,请联系作者获得授权。
1.gif (25.31 KB, 下载次数: 2644)
下载附件 保存到相册
5 年前 上传
2.gif (58.36 KB, 下载次数: 2690)
1111.jpg (51.76 KB, 下载次数: 2699)
3.gif (73.82 KB, 下载次数: 2669)
如果某Router Partition ID满足condition(RoomID % RouterPartitionNumber == RouterPartitionID % RouterPartitionNumber),则把消息转发到此Partition; 这里之所以不采用直接hash方式(RouterPartitionID = RoomID % RouterPartitionNumber)获取Router Partition,是考虑到当Router进行2倍扩容的时候当所有新的Partition的所有Replica都启动完毕且数据一致时才会修改Registry路径/pubsub/router/partitionnum的值,按照规则的计算公式才能保证新Partition的各个Replica在启动过程中就可以得到Gateway Message,也即此时每个Gateway Message会被发送到两个Router Partition。 当Router扩容完毕,修改Registry路径/pubsub/router/partitionnum的值后,此时新集群进入稳定期,每个Gateway Message只会被发送固定的一个Partition,condition(RoomID % RouterPartitionNumber == RouterPartitionID % RouterPartitionNumber)等效于condition(RouterPartitionID = RoomID % RouterPartitionNumber)。 如果Router Partition内某replia满足condition(replicaPartitionID = RoomID % RouterPartitionReplicaNumber),则把消息转发到此replica。 replica向Registry注册的时候得到的ID称之为replicaID,Router Parition内所有replica按照replicaID递增排序组成replica数组RouterPartitionReplicaArray,replicaPartitionID即为replica在数组中的下标。
// 63 -------------------------- 48 47 -------------- 38 37 ------------ 0 // | 16bit Gateway Instance ID | 10bit Reserve | 38bit自增码 |
4.gif (76.54 KB, 下载次数: 2650)
aaa.gif (54.73 KB, 下载次数: 2728)
来源:即时通讯网 - 即时通讯开发者社区!
轻量级开源移动端即时通讯框架。
快速入门 / 性能 / 指南 / 提问
轻量级Web端即时通讯框架。
详细介绍 / 精编源码 / 手册教程
移动端实时音视频框架。
详细介绍 / 性能测试 / 安装体验
基于MobileIMSDK的移动IM系统。
详细介绍 / 产品截图 / 安装体验
一套产品级Web端IM系统。
详细介绍 / 产品截图 / 演示视频
引用此评论
引用:jueze 发表于 2018-10-23 16:54 好详细啊,向大佬致敬
引用:605682883 发表于 2018-10-24 18:51 。。。好复杂
引用:65725738 发表于 2018-11-03 10:53 好文章,写的很深呀! 有几个问题请教一下。 1:你说贵公司tcp的系统瘫痪换udp了。请问是为什么呢。tcp显 ...
引用:yuyu 发表于 2018-11-04 00:46 逐个回答你的问题。 1 关于到底用tcp还是udp,这个话题跟你们公司相关基础设施建设有关。
引用:coding_im 发表于 2018-12-07 18:56 请教几个问题。 1. 用户发的消息怎么进入系统,我看里面的client并不是指用户? 用户与gateway保持长连 ...
引用:一夕 发表于 2019-03-01 16:06 有一点不是很明白: 1.是不是写扩散点逻辑在最后的方案中是放在【Relay】中。 2.【Route】和【Relay】的 ...
引用:yuyu 发表于 2019-03-02 17:56 逐个回复你的问题。 1 写扩散点最后确实是在 Relay。 2 以系统最后一个版本为例,Router 是向系统的 Br ...
引用:登至必极 发表于 2020-04-27 21:48 看了一下文章,确实很有深度,但是搞不明白的一点是,消息从gateway发出,client如何获取到呢?这块没衔接 ...
引用:登至必极 发表于 2020-04-28 14:57 还有一个问题就是,服务的可用性怎么保证?也就是一旦某种类型的某个服务比如borker中的某个replica挂断, ...
精华主题数超过100个。
连续任职达2年以上的合格正式版主
为论区做出突出贡献的开发者、版主等。
经核实认证的即时通讯技术开发者、技术博主、开源工程作者、原创精华文章作者等。
在线时长累积7天(即7 * 8 = 56小时)。
持有金钱达到500。
本人属:狗
积极发起、参与各类话题的讨论等,主题、发帖内容较有价值。
在线时长累积30天(即30 * 8 = 240小时)。
Copyright © 2014-2024 即时通讯网 - 即时通讯开发者社区 / 版本 V4.4
苏州网际时代信息科技有限公司 (苏ICP备16005070号-1)
Processed in 0.156250 second(s), 43 queries , Gzip On.