三分钟教你学System Design

系统设计问题有很多,比如:

1 设计一个短域名系统

2 设计一个搜索引擎

3 设计一个在线象棋游戏

4 设计一个社交平台,实现follow notification。


在面对这些系统设计问题时,不要怕,让我们一步一步的搞定它。


第一步:澄清问题,Clarify and  Scope it.

我们首先要做的就是弄清楚问题,包括限制条件,各个接口的TPS有多大,数据量有多大,和系统要满足哪些需求,具体的use cases。


第二步:开始最抽象的设计,最顶层的设计,High Level Design

先画出各个最主要的Components以及它们之间的connection,可以用数据流图,时序图等。


第三步:理解瓶颈在哪里。

当你做出了High Level Design之后,我们需要知道这种设计的瓶颈在哪里。


第四步:Scale Your Design

常用的四种可扩展性的方法:

1 保证逻辑层的服务器是无状态的,这样可以很容易的扩展。

2 数据层,进行分区(partition)和复制(replication)。

3 缓存, 两种模式,一种是写的时候同时更新数据库和缓存,读的时候直接读缓存,如果没有才去数据库查。另一种是读写都直接到缓存,然后有异步的更新到最终的数据库上。

4 异步,两种模式,一种是precompute,比如Sable DB, CMS等,可以用此方法,定期更新content到静态文件上,读的时候直接从这个静态文件读取。另一种是先发其一个动作,还没有完成就返回,等到工作完成的时候再通知回来,如RabbitMQ。


其实系统设计的过程就是折衷的过程。

原文:http://blog.csdn.net/hongchangfirst/article/details/45916127

作者:hongchangfirst

hongchangfirst的主页:http://blog.csdn.net/hongchangfirst





你可能感兴趣的:(系统设计(System,Design))