群聊系统的架构设计

今天我们很高兴请到了Shijie Zhong来为我们讲解《群聊系统的架构设计》,相关总结如下:

Slides

  1. Shijie使用的Slides

Q&A

感谢张程帮忙做的笔记。

读扩散和写扩散该如何选择?

  1. 总得来说没有绝对的适合方案,在不同场景下随着时间的推移,这两者很可能会渐变成最终比较一致或类似的方案,具体看下面的扩展阅读。
  2. 【扩展】IM群聊消息究竟是存1份(即扩散读)还是存多份(即扩散写)?:这篇文章很详细地介绍了方案是如何一步一步进行演化的,整体思路和Shijie讲的比较类似。
  3. 【扩展】如何设计一个亿级消息量的 IM 系统:这篇文章详细介绍了读写扩散,以及业界几个知名的IM使用的是什么方案。
  4. 【扩展】从0到1:微信后台系统的演进之路:很详细介绍了微信整个系统架构的最初演变过程。

MessageID是如何实现的?

  1. 分布式ID的实现本身就是一个很有趣的话题,我们可以从下面扩展阅读中详细聊各家方案的具体实现
  2. 【扩展】IM消息ID技术专题(一):微信的海量IM聊天消息序列号生成实践(算法原理篇): 重点介绍了微信内部的实现,介绍了不连续递增带来的好处。
  3. 【扩展】IM消息ID技术专题(四):深度解密美团的分布式ID生成算法:详细介绍了美团中使用的ID的实现原理。
  4. 【扩展】IM消息ID技术专题(三):解密融云IM产品的聊天消息ID生成策略:这个实现其实对时间的依赖还是比较大的。
  5. 【扩展】滴滴开源的Tinyid如何每天生成亿级别的ID?:这个其实是基于上面美团算法的一个开源的改进。

用户的状态检查是如何实现的?

  1. 一般来说可以通过心跳机制来探测用户的状态。
  2. 【扩展】在线状态管理:腾讯关于用户状态的定义,应该算是实际产品中的用户状态定义。
  3. 【扩展】IM单聊和群聊中的在线状态同步应该用“推”还是“拉”?:关于用户状态获取的pull和push机制进行了讨论。
  4. 【扩展】正确理解IM长连接的心跳及重连机制,并动手实现(有完整IM源码):很详细的实现了各种心跳机制,源码值得参考。
  5. 【扩展】即时通讯 IM 开发指南 2:心跳指令详解: 网易云信关于心跳机制的一些思考。
  6. 【扩展】心跳包机制设计详解:同样有详细源码可供参考。

IM的实时消息是如何处理的?

  1. 有各种各样的技术可以实现,包括long polling,web sockets,SSE等等。
  2. 【扩展】The Challenges of Building a Reliable Real-Time Event-Driven Ecosystem:详细讨论了实时API的实现方法。
  3. 【扩展】WebSockets vs Long Polling:如题所示,WebSockets和long polling的比较。
  4. 【扩展】WebSockets vs Server-Sent Events:WebSocket和SSE的比较。
  5. 【扩展】探探的IM长连接技术实践:技术选型、架构设计、性能优化:详细介绍了探探在这一领域的思考和实践。
  6. 【扩展】有关(IM)即时通讯的基本概念:涉及到的几种技术的基础介绍。

是否可以在IM中使用Message Queue相关技术?

  1. 答案是肯定的,我们可以参考扩展阅读来充分了解业界是如何具体使用的。
  2. 【扩展】IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列:非常详细介绍了消息队列是如何使用,并且各种消息队列的选型比较。
  3. 【扩展】IM系统的MQ消息中间件选型:Kafka还是RabbitMQ?:Kafka和RabbitMQ的比较。
  4. 【扩展】多维度对比5款主流分布式MQ消息队列,妈妈再也不担心我的技术选型了: 单纯对MQ技术的比较。
  5. 【扩展】详细说说对MQ消息队列的理解以及主流MQ的优缺点:一个面试准备者的思考。
  6. 【扩展】东哥的Kafka介绍专题(带货,哈哈)。

再次感谢大家的参与,也希望大家有好的资源能联系我更新这篇文章。谢谢大家。

下周话题安排和往期话题回顾敬请参见《系统设计开荒小分队话题讨论简介

You may also like...

Leave a Reply

Your email address will not be published. Required fields are marked *