不得不说说微信钉钉后端亿级用户架构那些事

5)**未读数:**指用户还没读的消息数量。

6)**用户状态:**指用户当前是在线、离线还是挂起等状态。

7)**关系链:**是指用户与用户之间的关系,通常有单向的好友关系、双向的好友关系、关注关系等等(这里需要注意与会话的区别:用户只有在发起聊天时才产生会话,但关系并不需要聊天才能建立。对于关系链的存储,可以使用图数据库(Neo4j等等),可以很自然地表达现实世界中的关系,易于建模)。

8)**单聊:**一对一聊天。

9)**群聊:**多人聊天。

10)**客服:**在电商领域,通常需要对用户提供售前咨询、售后咨询等服务(这时,就需要引入客服来处理用户的咨询)。

11)**消息分流:**在电商领域,一个店铺通常会有多个客服,此时决定用户的咨询由哪个客服来处理就是消息分流(通常消息分流会根据一系列规则来确定消息会分流给哪个客服,例如客服是否在线(客服不在线的话需要重新分流给另一个客服)、该消息是售前咨询还是售后咨询、当前客服的繁忙程度等等)。

12)**信箱:**本文的信箱我们指一个Timeline、一个收发消息的队列。

涉及到功能的具体实现还有很多概念需要先了解下

读扩散 vs 写扩散

IM系统里经常会涉及到读扩散和写扩散这两个技术概念,我们来看看。

读扩散

不得不说说微信钉钉后端亿级用户架构那些事_第1张图片

**如上图所示:**A与每个聊天的人跟群都有一个信箱(有些地方会叫Timeline),A在查看聊天信息的时候需要读取所有有新消息的信箱。

**需要注意与Feeds系统的区别:**在Feeds系统中,每个人都有一个写信箱,写只需要往自己的写信箱里写一次就好了,读需要从所有关注的人的写信箱里读。但IM系统里的读扩散通常是每两个相关联的人就有一个信箱,或者每个群一个信箱。

读扩散的优点:

  • 1)写操作(发消息)很轻量,不管是单聊还是群聊,只

你可能感兴趣的:(程序员,微信,钉钉,架构)