三分鐘教你學System Design
阿新 • • 發佈:2019-01-27
系統設計問題有很多,比如:
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