热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

简易版的微信聊天存储方式

1、写在前面作者在本文研究websocket已经数月,分享一个亿级消息量、分布式IM系统这个技术前提下,分析和总结读写扩散的知识。本文将做到通俗易懂&#

1、写在前面


作者在本文研究websocket已经数月,分享一个亿级消息量、分布式IM系统这个技术前提下,分析和总结读写扩散的知识。本文将做到通俗易懂,不涉及任何代码讲解。


2、读扩散 vs 写扩散

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

2.1 读扩散

如上图所示:A与每个聊天的人跟群都有一个信箱
(有些博文会叫Timeline,见
《现代IM系统中聊天消息的同步和存储方案探讨》),A在查看聊天信息的时候
需要读取所有有新消息的信箱。
读扩散的优点:可以看到,一个聊天记录需要一个信箱存放
1)写操作(发消息)很轻量,不管是单聊还是群聊,只需要往相应的
信箱写一次就好了;
2)每一个信箱天然就是两个人的聊天记录,可以方便查看聊天记录跟
进行聊天记录的搜索。
读扩散的缺点:读操作(读消息)很重,在复杂业务下,一条读扩散消息源需要
复杂的逻辑才能扩散成目标消息。

2.2 写扩散

接下来看看写扩散。

如上图所示:在写扩散中,每个人都只从自己的信箱里读取消息,我们从中需要维护用户的信箱即可。

但写(发消息)的时候,对于单聊跟群聊处理如下:
1)单聊:往自己的信箱跟对方的信箱都写一份消息,同时,如果需要
查看两个人的聊天历史记录的话还需要再写一份(当然,如果从个人信箱
也能回溯出两个人的所有聊天记录,但这样效率会很低);
2)群聊:需要往所有的群成员的信箱都写一份消息,同时,如果需要
查看群的聊天历史记录的话还需要再写一份。可以看出,写扩散对于群聊
来说大大地放大了写操作。
写扩散优点:
1)读操作很轻量;
2)可以很方便地做消息的多终端同步。
写扩散缺点:写操作很重,尤其是对于群聊来说(因为如果群成员很多的话,1
条消息源要扩散写成成员数­1”条目标消息,这是很恐怖的)

注:本文有参考于诸葛老师

 



推荐阅读
author-avatar
mobiledu2502891023
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有