如何进行系统设计

背景

Github上有一个项目叫做“system-design-primer”,是本人比较感兴趣的话题,所以下载下来看了看,此处选择一个章节作转载,也是笔记记录。

项目地址

https://github.com/donnemartin/system-design-primer
据说改项目是限时免费的,其实资源也算不上新,更多的是资源收集和整合,经典的设计图还是值得一看的。

MD文件读取

项目的描述文件中由很多经典的系统设计的框架图,如果想在本地打开,可以安装MarkdownPad和awesomium_v1.6.6_sdk_win.exe才能在本地打开MD文件,后者是为了解决前者在win10下的一个bug。

安装这两个软件就可以在win10下查看改项目的MD文件了。

如何设计一个系统节选

你可以使用下面的步骤来指引讨论。为了巩固这个过程,请使用下面的步骤完成系统设计的面试题和解答这个章节。

第一步:描述使用场景,约束和假设

把所有需要的东西聚集在一起,审视问题。不停的提问,以至于我们可以明确使用场景和约束。讨论假设。

  • 谁会使用它?
  • 他们会怎样使用它?
  • 有多少用户?
  • 系统的作用是什么?
  • 系统的输入输出分别是什么?
  • 我们希望处理多少数据?
  • 我们希望的读写比率?

第二步:创造一个高层级的设计

使用所有重要的组件来描绘出一个高层级的设计

  • 画出主要的组件和连接
  • 证明你的想法

第三步:设计核心组件

对每一个核心组件进行详细深入的分析。举例来说,如果你被问到设计一个 url 缩写服务,开始讨论:

  • 生成并储存一个完整 url 的 hash
    MD5 和 Base62
    Hash 碰撞
    SQL 还是 NoSQL
    数据库模型
  • 将一个 hashed url 翻译成完整的 url
    数据库查找
  • API 和面向对象设计

第四步:度量设计

确认和处理瓶颈以及一些限制。
举例来说就是你需要下面的这些来完成拓展性的议题吗?

  • 负载均衡
  • 水平拓展
  • 缓存
  • 数据库分片

论述可能的解决办法和代价。每件事情需要取舍。
可以使用可拓展系统的设计原则来处理瓶颈。

预估计算量

你或许会被要求通过手算进行一些估算。
涉及到的附录涉及到的是下面的这些资源:

  • 使用预估计算量
  • 2 的次方表
  • 每个程序员都应该知道的延迟数

猜你喜欢

转载自blog.csdn.net/wojiushiwo945you/article/details/81559758