微信直播聊天室架构演进.docx
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《微信直播聊天室架构演进.docx》由会员分享,可在线阅读,更多相关《微信直播聊天室架构演进.docx(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、微信直播聊天室架构演进聊天室概述随着直播以及类直播场景在微信内的增长业务对临时消息通道的需求日益增长聊天室组件应运而生。聊天室组件是一个基于房间的临时消息信道主要提供消息收发、在线状态统计等功能。1500w在线的挑战视频号直播上线后在产品上提出了直播后台需要有单房间支撑1500w在线的技术才能。接到这个工程的时候自然而然就让人联想到了一个非常有趣的命题能不能做到把13亿人拉个群本文将深化浅出地介绍聊天室组件在演进经过的考虑对这个命题做进一步对探究尝试提出更接近命题答案的方案。聊天室1.0架构聊天室1.0诞生于2017年度主要效劳于微信电竞直播间核心是实现高性能、高实时、高可扩展的消息收发架构。
2、消息框架选型读扩散微信群聊天室介入人数500数万关系链有无成员流动低高离线消息关注不关注微信群消息使用写扩散的机制而聊天室跟微信群有着宏大的差异。且同一时间只能关注一个聊天室决定了聊天室应该使用读扩散的机制。longpolling机制为了让用户需要实时同步到新消息我们采用的是longpolling形式。很多人会疑惑为什么不用websocket原因有3个1.websocket主要考虑推形式而推形式那么有可能丢做到不丢还是有需要拉形式来兜底2.推形式下需要精准维护每个时刻的在线列表难度很大。3.longpolling本质是一个短连客户端实现更简单。无状态cache的设计很明显单纯的读扩散会造成宏大
3、读盘的压力。按照国际惯例这里理所应当地增加了一个cache也就是上面架构图中的recvsvr。普通的cache都是有状态的、可穿透的对经常会出现突发流量的聊天室不是十分友好。而通过异步线程任务恰好可以解决这两个点。实时通知发送消息时在写入列表后向recvsvr集群发送通知异步拉取recvsvr机器收到通知后触发异步线程拉取兜底轮询当recvsvr机器上接收到某个聊天室的恳求时触发该聊天室的轮询保证1s内至少访问一次消息列表防止通知失效导致无法更cache同时做到机器启动时数据的自动恢复。无锁读取通过读写表别离以及原子切换做到消息的无锁读取sect化部署群数量增多时扩sect可以把群分摊到新的s
4、ect上。无状态消息cache的设计不仅极大地进步了系统的性能而且帮助聊天室建立了一个高扩展性消息收发架构。痛点尽管做到了高性能的消息收发1.0版本却并不能实现单房间1500w同时在线的目的。通过对整个架构以及逻辑进一步的分析我们发现4个阻碍我们前进的痛点1大直播间里消息信道不保证所有消息都下发连麦成功信令丧失会使得连麦功能不可用大礼物打赏动画信令丧失会带来客诉2一个房间的在线列表是由recvsvr把最近有收取该房间的消息的user聚合到同一台statsvr得到的有单点瓶颈单机失败会导致局部房间在线数跳变、在线列表以及打赏排行榜不可用等3没有提供历史在线人数统计功能4裸的longpolling
5、机制在消息一直有更新的情况下无法控制恳求量。聊天室2.0架构从上面分析的痛点我们得出了聊天室2.0需要解决的问题1解决丢重要信令问题保证热点访问下功能的可靠性。2解决在线统计的单点瓶颈保证热点访问下在线统计模块的可扩展性。3实现一个高效准确的历史在线统计保证大数据量下统计的高性能以及准确性。4灵敏把控流量进一步提升隔离以及容灾才能保证热点访问下系统的可用性。优先级消息列表丢信令的本质原因recvsvr只保存最近2000条消息大直播间里有些消息客户端还没来的及收就被cache淘汰了。在聊天室1.0版本我们已经证实了写扩散不可行因此这里也不可能通过写扩散解决。另外一个比拟直观的方案是将重要的系统信
6、令写到另外一个列表里面recvsvr同时读取两个消息表。带来的消耗是recvsvr对kv层增加将近一倍的访问量。于是我们考虑有没有更优的方案。回到1.0版本的一个方案细节我们可以看到大局部情况下当新消息到来的时候recvsvr它都是能及时感悟到的因此recvsvr一次拉取到的消息条数并不会很多因此这一步骤上不会丢消息。所以我们是可以把消息表这个操作收归到recvsvr里面的打优先级标记仍然只写一张消息表给重要的信令打上优先级标记节省RPC消耗cache内分表recvsvr拉到消息后分开普通消息列表以及重要消息列表最小化改动优先收取收取时分normalseq以及importantseq先收重要消
7、息表再收取普通消息表。优先下发通过一个简单的优化我们以最小的改造代价提供到了一条可靠的重要消息信道做到了连麦以及大礼物动画的零丧失。分布式在线统计1写分享内存主从互备参考微信设备在线模块我们可以有这个一个方案分sect一个直播间选一个sect按roomid选一台机作为master读写该机器的分享内存master把这个roomid的数据同步到sect内其它机器master挂了的情况可以选其它机器进展读写。优点解决了换机跳变问题。缺点主备同步方案复杂读写master大直播间下仍然有单机热点问题。结论用分布式存储作为数据的中心节点。2写tablekv用tablekv的一个表来存在线列表每行记录用户i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 直播 聊天室 架构 演进
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内