1. 功能期望

  1. 功能点case
  2. 不涉及的场景
  3. 谁会用
  4. 多少人用
  5. 怎么用

2. 估计

  1. 预估吞吐量
  2. 系统预期的延迟(对于读和写查询)
  3. 读写请求比例
  4. 流量估计
  5. 存储估计
  6. 内存估计
  • 如果我们使用缓存,我们想在缓存中存储什么类型的数据
  • 我们需要多少内存和多少机器来实现这个目标
  • 有多少数据需要进行持久化存储到磁盘

3. 设计目标

  • 延迟和吞吐量需求,低延迟还是高吞吐
  • 一致性 还是 高可用 (弱一致/ 强一致/ 最终一致) (故障转移能力/ 同步复制)

4. 高级设计

  1. 明确各API的读写设计场景
  2. 数据库选型
  3. 基础算法

5. 深度设计

  1. 考虑以下组件,它们将如何融入其中,以及它将如何发挥作用
  • 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
  1. 高可用、一致性、可伸缩如何实现。

6. 证明

  1. 每层实际吞吐量
  2. 每层的延迟
  3. 每层的延迟原因

Q.E.D.


Talk is cheap, show me the code.