钉钉IM系统的挑战与实践
万人群
历史消息回溯
高可用
万⼈群的规模
一万人参与的贝多芬第九号交响曲大合唱
为什么要做万⼈群
Ӥփӥᬡ
۸ୌᦡ
ي᪁ړՁ
מ௳Ӥփӥᬡ᭲᪠᭗
قާᗭฎմӱ۸ୌᦡጱԆᴣࣈ
ӻՈኞၚ̵ي᪁Իၞ
万⼈群的技术挑战
稳定
大群大量发消息,系统压力山大
体验
选人组件还能再慢点吗?发红包根本选不到人
2016
2018
2017
成本
成本
很多客户都想有个大群,能不能不要限制大群数量?
⼤群限流
热点大群限流
系统容量足够时,尽量允许大群发消息
消息属性
可见性
全员可见:所有人都可以看到消息
部分可见:部分人可见,其他人看不到消息
多态性
普通:每个人的消息状态完全相同
多态:每个人的消息状态不完全相同
发送者视角
接收者视角
写扩散模型
以用户维度建立消息收件箱
问题:万人群扩散量太大!
消息收件箱
用户id
会话id
消息id
状态
uid1
cid1
msgid1
status1
uid2
cid1
msgid1
status2
uid3
cid1
msgid1
status1
…
uid10000
cid1
msgid1
status1
读写扩散混合模型
95%以上是普通全员可见消息
相同的状态记录,合并至会话消息表
个性化状态仍然写入消息收件箱,读取时做合并
会话消息表
会话id
消息id
status
cid1
msgid1
sta
原创力文档

文档评论(0)