1. 功能期望
- 功能点case
- 不涉及的场景
- 谁会用
- 多少人用
- 怎么用
2. 估计
- 预估吞吐量
- 系统预期的延迟(对于读和写查询)
- 读写请求比例
- 流量估计
- 存储估计
- 内存估计
- 如果我们使用缓存,我们想在缓存中存储什么类型的数据
- 我们需要多少内存和多少机器来实现这个目标
- 有多少数据需要进行持久化存储到磁盘
3. 设计目标
- 延迟和吞吐量需求,低延迟还是高吞吐
- 一致性 还是 高可用 (弱一致/ 强一致/ 最终一致) (故障转移能力/ 同步复制)
4. 高级设计
- 明确各API的读写设计场景
- 数据库选型
- 基础算法
5. 深度设计
- 考虑以下组件,它们将如何融入其中,以及它将如何发挥作用
- DNS
- CDN
- Load Balancers
- Reverse Proxy
- Application layer scaling
- DB
- 关系型
Master-slave, Master-master, Federation, Sharding, Denormalization, SQL Tuning
- NoSQL
- Key-Value, Wide-Column, Graph, Document
- 关系型
- 缓存
- 客户端缓存、CDN缓存、数据库缓存、应用缓存、
缓存驱逐策略
- 异步方式
- 消息队列
- 任务队列
- 背压
- 通信方式,TCP/UDP/RPC/REST
- 高可用、一致性、可伸缩如何实现。
6. 证明
- 每层实际吞吐量
- 每层的延迟
- 每层的延迟原因
Q.E.D.