拿到一个系统设计题,需要确定以下事项:
- 确定需求
- 确定用户量
- 计算出存储和网络资源
- 特殊 Feature 的设计
确定需求
Twitter 中的一些常见操作有:
- 发推文
- 查看自己 Timeline
- follow 用户
- like 、dislike
- 查看某个用户的 Timeline
确定用户量
这一步很重要,用户量决定了采用什么样的设计。假设 DAU 有一千万
计算出存储和网络资源
特殊 Feature 的设计
用户查看 Timeline 的时候,考虑用户量以及体验,我们添加缓存来加快用户的 Timeline 的访问。
混合模式
大V:Fan out on write(推)
针对大V用户,每发一条推文,我们就主动将这条推文,使用定时任务将它推到每个关注者Timeline 的缓存中。这样当用户获取 Timeline 时,可以快速的获取到。
普通:Fan in on wirite(拉)
针对普通用户,只要在获取 Timeline 时,merge 所有推文返回即可。
系统层面的优化
- 可靠性。分库分表,负载均衡,数据缓存