系统设计 system design 基础知识

up::网络基础设施 Network Infrastructure-系统设计 System Design

  • 选择正确的架构 = 选择正确的战斗 + 管理权衡
  • 第一步:描述使用场景,约束和假设

    • 把所有需要的东西聚集在一起,审视问题。不停的提问,以至于我们可以明确使用场景和约束。讨论假设。
      • 谁会使用它?
      • 他们会怎样使用它?
      • 有多少用户?
      • 系统的作用是什么?
      • 系统的输入输出分别是什么?
      • 我们希望处理多少数据?
      • 我们希望每秒钟处理多少请求?
      • 我们希望的读写比率?
  • 第二步:创造一个高层级的设计

    • 使用所有重要的组件来描绘出一个高层级的设计。
      • 画出主要的组件和连接
      • 证明你的想法
  • 第三步:设计核心组件

    • 对每一个核心组件进行详细深入的分析。举例来说,如果你被问到设计一个 url 缩写服务,开始讨论:
    • 生成并储存一个完整 url 的 hash
      • MD5 和 Base62
      • Hash 碰撞
      • SQL 还是 NoSQL
      • 数据库模型
    • 将一个 hashed url 翻译成完整的 url
      • 数据库查找
    • API 和面向对象设计
  • 第四步:扩展设计

    • 确认和处理瓶颈以及一些限制。举例来说就是你需要下面的这些来完成扩展性的议题吗?
      • 负载均衡
      • 水平扩展
      • 缓存
      • 数据库分片
    • 论述可能的解决办法和代价。每件事情需要取舍。可以使用可扩展系统的设计原则来处理瓶颈。
  • 第五步:预估计算量

  • 相关资源和延伸阅读

  • 来源

    • https://github.com/donnemartin/system-design-primer/blob/master/README-zh-Hans.md

Notes mentioning this note