1. 程式人生 > >三分鐘教你學System Design

三分鐘教你學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。

其實系統設計的過程就是折衷的過程。

作者:hongchangfirst