系統設計的典型分層和涉及的知識點
作為系統設計學習的一部分,不久前在梳理面試中典型的系統設計問題,發現大部分都可謂有套路可尋。我把思路梳理了一下,簡單整理到下面這張圖表里面:
對于其中的內容,稍微補充幾句:
- 系統設計需要經驗的積累,但也確確實實有章可循。問的問題考察的類型很集中,比如同步、異步,消息push和pull,根據實際問題設計存儲的數據結構,對于scalability、availability的認識等等。最喜歡被問到的問題,我在 《系統設計典型問題的思考》 這里列了幾個。
- pull on demand 和 push on change 是消息系統里兩種極其典型的消息傳播方式,基本上設計推ter、weibo,xx聊天系統等等,都要涉及到這個問題。這二者各有優劣,需要結合具體問題分析。
- 復雜的系統的cache的設計和storage的設計一樣,往往需要考慮分層。比如說,存儲分成hot/warm/cold storage,讀寫性能和查詢的靈活性依次降低,但是成本也依次降低。cache的設計有時還需要引入centralized cache來幫助提高hit ratio。
- 服務端的設計最典型的就是分成三層(上圖右):presentation layer,比如website的頁面部分和service的request/response處理的部分;business logic layer,放置業務邏輯的地方;data access layer,也可以說infrastructure layer,數據訪問層,花頭最多,涉及的問題最多。
- DB partition 和 sharding 的問題又是一個非常常見的典型。
- 如果是性能問題,基本上都是圍繞著throughput和latency展開的。
- 一致性模型可以說是大數據系統問題的核心。比如說考慮到availability,對于有狀態的節點需要有backup,那么這幾個節點狀態 之間的同步就會成為問題,這就是consistency的問題;再比如說由于考慮到reliability,必然需要引入replication,而這時 多個數據備份的consistency就會成為問題。
- 讀寫模型的問題往往是和存儲數據結構的設計放在一起的,這樣的問題很容易從算法問題衍伸過來,我在這篇文章中總結過。
- 最后,我在《資源鏈接》的“零散資源”部分,列出了系統設計很多我認為有價值的參考材料。
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!