本文档提供了 Twitter 时间线和搜索系统架构的技术概述。它解释了实现一个支持推文发布、时间线查看和搜索功能的类似 Twitter 服务所需的核心组件、数据流、存储机制和扩展考虑。有关社交图谱实现细节,请参阅社交图谱。
Twitter 时间线和搜索系统处理数百万用户发布推文、查看时间线和搜索内容。该系统旨在高效处理高读写量,同时保持用户交互的低延迟。
来源:solutions/system_design/twitter/README.md96-97
| 指标 | 值 |
|---|---|
| 活跃用户 | 1亿 |
| 每日推文数 | 5亿 |
| 每月推文数 | 150亿 |
| 平均扇出 | 每条推文10次投递 |
| 每日扇出投递数 | 50亿 |
| 每月读取请求数 | 2500亿 |
| 每月搜索数 | 100亿 |
来源:solutions/system_design/twitter/README.md37-62
| 组件 | 大小 |
|---|---|
| tweet_id | 8 字节 |
| user_id | 32字节 |
| 文本 | 140字节 |
| 媒体 | ~10 KB(平均) |
| 总计 | ~10 KB |
来源:solutions/system_design/twitter/README.md66-90
当用户发布推文时,系统会
来源:solutions/system_design/twitter/README.md102-121
主时间线检索过程
来源:solutions/system_design/twitter/README.md157-164
用户时间线(个人时间线)与主时间线不同,因为它
来源:solutions/system_design/twitter/README.md192-197
搜索过程
来源:solutions/system_design/twitter/README.md199-220
系统使用类似 Redis 的内存缓存,具有原生列表结构
tweet n+2 tweet n+1 tweet n
| 8 bytes 8 bytes 1 byte | 8 bytes 8 bytes 1 byte | 8 bytes 8 bytes 1 byte |
| tweet_id user_id meta | tweet_id user_id meta | tweet_id user_id meta |
这种格式可以高效地存储和检索时间线数据。
来源:solutions/system_design/twitter/README.md126-132
POST /api/v1/tweet
请求
响应
来源:solutions/system_design/twitter/README.md136-152
GET /api/v1/home_timeline?user_id=123
响应
来源:solutions/system_design/twitter/README.md166-188
GET /api/v1/search?query=hello+world
返回与主时间线类似的响应,但包含与搜索查询匹配的推文。
来源:solutions/system_design/twitter/README.md216-220
来源:solutions/system_design/twitter/README.md226-227
扇出服务:拥有数百万关注者的用户可能造成扇出瓶颈
内存缓存优化:
数据库扩展:
来源:solutions/system_design/twitter/README.md251-277
来源:solutions/system_design/twitter/README.md257-277
Twitter 时间线和搜索系统展示了分布式系统设计的关键原则
通过理解这些组件及其相互作用,工程师可以构建类似的高效可扩展的社交媒体平台。