惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

aimingoo的专栏
aimingoo的专栏
V
V2EX
G
Google Developers Blog
F
Full Disclosure
Martin Fowler
Martin Fowler
宝玉的分享
宝玉的分享
H
Hacker News: Front Page
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
NISL@THU
NISL@THU
G
GRAHAM CLULEY
V
Vulnerabilities – Threatpost
Hacker News - Newest:
Hacker News - Newest: "LLM"
A
About on SuperTechFans
The Cloudflare Blog
C
Cisco Blogs
D
DataBreaches.Net
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Vercel News
Vercel News
P
Privacy International News Feed
Microsoft Security Blog
Microsoft Security Blog
Help Net Security
Help Net Security
Recorded Future
Recorded Future
PCI Perspectives
PCI Perspectives
S
Schneier on Security
AI
AI
N
News | PayPal Newsroom
雷峰网
雷峰网
C
Cyber Attacks, Cyber Crime and Cyber Security
P
Proofpoint News Feed
The Last Watchdog
The Last Watchdog
L
LINUX DO - 最新话题
Hugging Face - Blog
Hugging Face - Blog
Apple Machine Learning Research
Apple Machine Learning Research
Schneier on Security
Schneier on Security
S
Securelist
云风的 BLOG
云风的 BLOG
Stack Overflow Blog
Stack Overflow Blog
博客园_首页
AWS News Blog
AWS News Blog
TaoSecurity Blog
TaoSecurity Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Recent Commits to openclaw:main
Recent Commits to openclaw:main
博客园 - 三生石上(FineUI控件)
C
CXSECURITY Database RSS Feed - CXSecurity.com
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Cloudbric
Cloudbric
C
Cybersecurity and Infrastructure Security Agency CISA
Project Zero
Project Zero
C
Check Point Blog
S
Security Affairs

博客园 - 飞翔在天

AI 辅助开发 - 整体 反应式编程 【转载】技术方案设计的方法论及案例分享—如何体现技术深度 云原生 性能调优 团队管理 技术管理 【生产案例】日登录用户、月登录用户统计、聚合统计 【生产案例】点赞数、排行榜、未读消息数(含B站方案) 【JVM】类加载器&双亲委派 【架构】单元化架构 【配置项读取】 如何写好代码 【缓存】基本理论 Lambda架构和Kappa架构 【生产案例】 【Spring】整体 【JVM】 【Spring-WebFlux】响应式 AI ServiceComb
【架构-案例】聊天系统
飞翔在天 · 2025-02-28 · via 博客园 - 飞翔在天

参考:

https://my.oschina.net/vivotech/blog/17778514   百万级群聊的设计实践

微博的设计 

关键设计:

通信方案选型:即时通信常见的通信技术有短轮询、长轮询、Server-Sent Events (SSE)、Websocket。Websocket 适用于实时双向通信的场景,实时性好,且服务端、前端都有比较成熟的三方包

消息存储:群聊消息的保存方式,主流有 2 种方式:读扩散、写扩散

读扩散
就是所有群成员共用一个群信箱,当一个群产生一条消息时,只需要写入这个群的信箱即可,所有群成员从这一个信箱里读取群消息。
优点:写入逻辑简单,存储成本低,写入效率高。

缺点:读取逻辑相对复杂,要通过消息表与其他业务表数据聚合;消息定制化处理复杂,需要额外的业务表;可能还有 IO 热点问题。很常见的场景,展示用户对消息的已读未读状态,这个时候公共群信箱就无法满足要求,必须增加消息已读未读表来记录相关状态。还有用户对某条消息的删除状态,用户可以选择删除一条消息,但是其他人仍然可以看到它,此时也不适合在公共群信箱里拓展,也需要用到另一张关系表,总而言之针对消息做用户特定功能时就会比写扩散复杂。

写扩散
每个群成员拥有独立的信箱,每产生一条消息,需要写入所有群成员信箱,群成员各自从自己的信箱内读取群消息。

优点是读取逻辑简单,适合消息定制化处理,不存在 IO 热点问题。

缺点是写入效率低,且随着群成员数增加,效率降低;存储成本大。
所以当单群成员在万级以上时,用写扩散就明显不太合适了,写入效率太低,而且可能存在很多无效写入,不活跃的群成员也必须得有信箱,存储成本是非常大的,因此采用读扩散是比较合适的。
据了解,微信是采用写扩散模式,微信群设定是 500 人上限,写扩散的缺点影响就比较小。  

消息有序性:单用户保持有序、推拉结合、

消息可靠性:TCP传输、增加ACK机制,最终一致性设计

未读数统计: