tio - IM集群方案设计
前言
一个IM产品,如果要支持亿级用户在线,集群是没法绕过的坎,三年前就在思考这个IM集群的事儿,也一直在等待某位大神能提供一颗开源银弹来解决这个问题,左等右等,没等到其它大神的答案,倒是等来了自己的灵光闪现,今年夏天自己耗时20天编码完成了心中的集群构想。
IM集群的难点
IM集群的难点主要由以下两个场景导致
- 群发消息时,这个群的用户会分散在不同的IM服务器上
- 给某用户发消息时,这个用户的PC、App端可能分布在不同的服务器上
以上两个问题,归根到底就是消息路由的问题,有一个简单暴力的做法是用topic来绕开路由算法的问题,但topic对服务器性能影响太大了,因为所有消息都要走一下消息中心服务器,消息中心服务器然后再分发到其它IM服务器
IM集群的两件事
集群的完整实现,归纳起来就两件事
- 为客户端选择IM服务器
- 客户发消息时,把消息路由到对应的IM服务器,再由IM服务器分发消息给指定的客户端
谭聊的集群架构和流程
1. 选择IM服务器
2. 消息路由
结束语
有的设计师能把复杂的事简单化,有的设计师能把简单的事复杂化,希望各位读者看完本篇文章后,能豁然开朗。当然啦,架构图虽然简洁明了,但内部算法还是相对复杂的,对socket编程、多线程、锁不熟练的同学,不建议将本架构图落地为代码(低调地提示:企业版t-io的集群版已经在框架层实现了集群)
tio - IM集群方案设计相关推荐
- redis指定配置文件启动_深入学习 Redis 集群搭建方案及实现原理
" 在前面的文章中已经介绍了 本文将详细介绍集群,主要内容包括: 集群的作用 集群的搭建方法及设计方案 集群的基本原理 客户端访问集群的方法 实践须知(集群伸缩.故障转移.参数优化等) 集群 ...
- PostgreSQL高可用集群在360的落地实战
本文主要从以下几个方面介绍PostgreSQL高可用集群在360的落地实战 为什么选择Patroni + Etcd + PostgreSQL高可用集群方案 PostgreSQL高可用集群在360的落地 ...
- RocketMq单机和集群搭建教程
文章目录 1. rocketMQ单机版安装 2. rocketMQ集群方案 3. rocketMQ集群搭建 4. Dleger搭建rokcetMQ高可用集群 5. 启动rockerMQ控制台界面 6. ...
- Redis进阶-高可用:集群
前言 前面几篇文章中,已经介绍了Redis的几种高可用技术:持久化.主从复制和哨兵,但这些方案仍有不足,其中最主要的问题是存储能力受单机限制,以及无法实现写操作的负载均衡. Redis集群解决了上述 ...
- 错过血亏!深入学习Redis集群搭建方案及实现原理
我们知道 Redis 的这几种高可用技术:持久化.主从复制和哨兵,但这些方案仍有不足,其中最主要的问题是存储能力受单机限制,以及无法实现写操作的负载均衡. 11.16-17日,北京市东三环中路61号富 ...
- 【tio-websocket】4、tio-websocket-server实现自定义集群模式
t-io 中已经实现了集群功能,基于 Redis 的发布订阅方式实现的集群.当然,我们也可以自定义集群方式,只要是可以实现发布订阅的组件,基本都可以,例如:rabbitmq,activemq等.本次咱 ...
- Redis(3)--哨兵模式,集群
Redis的哨兵模式 什么是哨兵模式 Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行.其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例. ...
- Proxmox VE 超融合集群实践真传
第1章 老司机眼中的私有云... 3 1.1私有云的定义... 3 1.2私有云适用场景... 4 1.3私有云行业现状... 6 1.4私有云技术要求(针对Proxmox VE平台)... 7 第2 ...
- Hbase基础(特点、架构、应用场景、集群搭建、HA设计)这一篇就够了
Hbase基础(特点.架构.应用场景.集群搭建.HA设计)这一篇就够了 1. Hbase特点 2. Hbase VS RDBMS 3. Hbase架构及版本选择 4. Hbase应用场景 5. Ntp ...
最新文章
- 第三篇——第二部分——第六文 监控SQL Server镜像
- python-opencv时间计算,视频物体追踪标记
- 分数化简_分数应用题七讲 (一) 图示法解分数应用题
- 透明(颜色)渐变背景(颜色透明背景),兼容IE8
- Linux根目录详解-转自鸟哥的私房菜
- 面试精讲之面试考点及大厂真题 - 分布式专栏 07 说一说什么是正向代理,反向代理
- python乐观锁代码实现_Django的乐观锁与悲观锁实现
- php调用mysql加密函数_PHP MySQL应用中使用XOR运算加密算法分享
- 2019年湖南-粤港澳大湾区投资贸易洽谈周4月举行
- ASP获得上个月、本月、下个月的第一天和最后一天的代码
- 切割钢板计算机软件,板材切割优化软件钢板开料套料软件 V1.0 官方版
- EE214 Lecture 14 Differential pair部分公式推导
- win10任务栏透明_几款软件让你的 Win10 与众不同(简洁篇)
- 霍尔编码器-STM32读取
- 数据结构链表(C语言实现)
- 荐书 | 抑郁症的自助手册,觉察自我的钥匙
- 单片机C语言GRB888和RGB565的互相转换
- 抄袭爆款:先饱带动后饱!
- java xtend_Java加上Xtend,满足你对C#语法的所有想象 | 学步园
- HDMI端口辐射(EMI)超标解决方案
热门文章
- 使用python 520表白吧
- 华威国王曼大爱丁堡计算机专业,爱丁堡、曼大、KCL和华威大学的金融专业,该选哪一个?...
- 计算机教研组活动目的,教研组活动方案
- Android lk启动流程
- 不用TTL线,OpenWrt刷回原厂或其他系统方法 841n测试通过
- 【springcloud alibaba】 一条龙服务实现微服务案例
- 打印出每个学生的总分和平均分,每门课的总分和平均分
- 在Twitch,YouTube和其他地方流式传输游戏的最佳方法
- 同济七版高等数学 上册 复习指导、公式推理简易过程、常用结论归纳
- DPDK — L3 Forwarding 与 IP 路由选择算法