《数据密集型应用系统设计》读书笔记-ch1可靠、可扩展与可维护的应用系统
我们以Twitter为例,使用其2012年11月发布的数据。Twitter的两个典型业务操作是:
- 发布tweet消息: 用户可以快速推送新消息到所有的关注者,平均大约4.6k request/sec, 峰值约 12k requests/sec。
- 主页时间线(Home timeline)浏览: 平均300k request/sec 查看关注对象的最新消息。
Twitter扩展性的挑战在于巨大的扇出结构:每个用户会关注很多人,也会被很多人圄粉。此时大概有两种处理方案:
Twitter第一个版本使用方法一,但是主页时间线随负载增加表现出扩展性差,因此转而用方法二。由于发布tweet量比时间线浏览量小两个数量级,因此在发布时多做操作。
考虑平均75个关注者和每秒4.6k的tweet,则需要每秒4.6×75 =345k qps写入缓存。但有头部用户拥有>3000万粉丝,成为瓶颈。最后这些用户单独采用方案一。实践证明这种混合方法能提供持续的良好表现。