前言

一个IM产品,如果要支持亿级用户在线,集群是没法绕过的坎,三年前就在思考这个IM集群的事儿,也一直在等待某位大神能提供一颗开源银弹来解决这个问题,左等右等,没等到其它大神的答案,倒是等来了自己的灵光闪现,今年夏天自己耗时20天编码完成了心中的集群构想。

IM集群的难点

IM集群的难点主要由以下两个场景导致

  • 群发消息时,这个群的用户会分散在不同的IM服务器上
  • 给某用户发消息时,这个用户的PC、App端可能分布在不同的服务器上

以上两个问题,归根到底就是消息路由的问题,有一个简单暴力的做法是用topic来绕开路由算法的问题,但topic对服务器性能影响太大了,因为所有消息都要走一下消息中心服务器,消息中心服务器然后再分发到其它IM服务器

IM集群的两件事

集群的完整实现,归纳起来就两件事

  1. 为客户端选择IM服务器
  2. 客户发消息时,把消息路由到对应的IM服务器,再由IM服务器分发消息给指定的客户端

谭聊的集群架构和流程

1. 选择IM服务器

2. 消息路由

结束语

有的设计师能把复杂的事简单化,有的设计师能把简单的事复杂化,希望各位读者看完本篇文章后,能豁然开朗。当然啦,架构图虽然简洁明了,但内部算法还是相对复杂的,对socket编程、多线程、锁不熟练的同学,不建议将本架构图落地为代码(低调地提示:企业版t-io的集群版已经在框架层实现了集群)

tio - IM集群方案设计相关推荐

  1. redis指定配置文件启动_深入学习 Redis 集群搭建方案及实现原理

    " 在前面的文章中已经介绍了 本文将详细介绍集群,主要内容包括: 集群的作用 集群的搭建方法及设计方案 集群的基本原理 客户端访问集群的方法 实践须知(集群伸缩.故障转移.参数优化等) 集群 ...

  2. PostgreSQL高可用集群在360的落地实战

    本文主要从以下几个方面介绍PostgreSQL高可用集群在360的落地实战 为什么选择Patroni + Etcd + PostgreSQL高可用集群方案 PostgreSQL高可用集群在360的落地 ...

  3. RocketMq单机和集群搭建教程

    文章目录 1. rocketMQ单机版安装 2. rocketMQ集群方案 3. rocketMQ集群搭建 4. Dleger搭建rokcetMQ高可用集群 5. 启动rockerMQ控制台界面 6. ...

  4. Redis进阶-高可用:集群

     前言 前面几篇文章中,已经介绍了Redis的几种高可用技术:持久化.主从复制和哨兵,但这些方案仍有不足,其中最主要的问题是存储能力受单机限制,以及无法实现写操作的负载均衡. Redis集群解决了上述 ...

  5. 错过血亏!深入学习Redis集群搭建方案及实现原理

    我们知道 Redis 的这几种高可用技术:持久化.主从复制和哨兵,但这些方案仍有不足,其中最主要的问题是存储能力受单机限制,以及无法实现写操作的负载均衡. 11.16-17日,北京市东三环中路61号富 ...

  6. 【tio-websocket】4、tio-websocket-server实现自定义集群模式

    t-io 中已经实现了集群功能,基于 Redis 的发布订阅方式实现的集群.当然,我们也可以自定义集群方式,只要是可以实现发布订阅的组件,基本都可以,例如:rabbitmq,activemq等.本次咱 ...

  7. Redis(3)--哨兵模式,集群

    Redis的哨兵模式 什么是哨兵模式 Redis提供了哨兵的命令,哨兵是一个独立的进程,作为进程,它会独立运行.其原理是哨兵通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例. ...

  8. Proxmox VE 超融合集群实践真传

    第1章 老司机眼中的私有云... 3 1.1私有云的定义... 3 1.2私有云适用场景... 4 1.3私有云行业现状... 6 1.4私有云技术要求(针对Proxmox VE平台)... 7 第2 ...

  9. Hbase基础(特点、架构、应用场景、集群搭建、HA设计)这一篇就够了

    Hbase基础(特点.架构.应用场景.集群搭建.HA设计)这一篇就够了 1. Hbase特点 2. Hbase VS RDBMS 3. Hbase架构及版本选择 4. Hbase应用场景 5. Ntp ...

最新文章

  1. 第三篇——第二部分——第六文 监控SQL Server镜像
  2. python-opencv时间计算,视频物体追踪标记
  3. 分数化简_分数应用题七讲 (一) 图示法解分数应用题
  4. 透明(颜色)渐变背景(颜色透明背景),兼容IE8
  5. Linux根目录详解-转自鸟哥的私房菜
  6. 面试精讲之面试考点及大厂真题 - 分布式专栏 07 说一说什么是正向代理,反向代理
  7. python乐观锁代码实现_Django的乐观锁与悲观锁实现
  8. php调用mysql加密函数_PHP MySQL应用中使用XOR运算加密算法分享
  9. 2019年湖南-粤港澳大湾区投资贸易洽谈周4月举行
  10. ASP获得上个月、本月、下个月的第一天和最后一天的代码
  11. 切割钢板计算机软件,板材切割优化软件钢板开料套料软件 V1.0 官方版
  12. EE214 Lecture 14 Differential pair部分公式推导
  13. win10任务栏透明_几款软件让你的 Win10 与众不同(简洁篇)
  14. 霍尔编码器-STM32读取
  15. 数据结构链表(C语言实现)
  16. 荐书 | 抑郁症的自助手册,觉察自我的钥匙
  17. 单片机C语言GRB888和RGB565的互相转换
  18. 抄袭爆款:先饱带动后饱!
  19. java xtend_Java加上Xtend,满足你对C#语法的所有想象 | 学步园
  20. HDMI端口辐射(EMI)超标解决方案

热门文章

  1. 使用python 520表白吧
  2. 华威国王曼大爱丁堡计算机专业,爱丁堡、曼大、KCL和华威大学的金融专业,该选哪一个?...
  3. 计算机教研组活动目的,教研组活动方案
  4. Android lk启动流程
  5. 不用TTL线,OpenWrt刷回原厂或其他系统方法 841n测试通过
  6. 【springcloud alibaba】 一条龙服务实现微服务案例
  7. 打印出每个学生的总分和平均分,每门课的总分和平均分
  8. 在Twitch,YouTube和其他地方流式传输游戏的最佳方法
  9. 同济七版高等数学 上册 复习指导、公式推理简易过程、常用结论归纳
  10. DPDK — L3 Forwarding 与 IP 路由选择算法