系統設計入門指南
動機
現在你可以學習如何設計大規模系統,為系統設計面試做準備。本指南包含的是一個有組織的資源集合,旨在幫助你了解如何構建可擴展的系統。
學習設計大規模系統
學習如何設計可擴展系統將幫助你成為更優秀的工程師。系統設計是一個廣泛的話題,網絡上有大量的資源分散在各處。這份指南整理了所有你所需的學習資源,幫助你系統化地學習。
系統設計面試準備
除了編碼面試外,系統設計也是許多科技公司技術面試過程中的一個必要環節。你可以練習常見的系統設計面試問題,并將自己的結果與樣本解決方案進行比較,包括討論、代碼和圖表。
補充的面試準備主題包括:
- 學習指南
- 如何處理一個系統設計面試問題
- 系統設計面試問題及其解決方案
- 面向對象設計面試問題及其解決方案
Anki 卡片
提供的 Anki 卡片組 利用間隔重復的方式幫助你記住關鍵的系統設計概念。可以下載的卡片包括:
- 系統設計卡片
- 系統設計練習卡片
- 面向對象設計練習卡片
非常適合在外出時使用。
互動編碼挑戰資源
尋找幫助你為 編碼面試 做準備的資源?
你可以查看姐妹庫 互動編碼挑戰,該庫包含一個額外的 Anki 卡片組:
- 編碼卡片
系統設計主題索引
了解系統設計主題的良好開始是在多個主題間獲得簡明總結,包括它們的優缺點。每部分包含鏈接以獲取更深入的研究資料。
以下是一些建議的學習步驟:
步驟1:回顧可擴展性視頻講座
可以從 哈佛的可擴展性講座 開始。
覆蓋的主題:
- 垂直擴展
- 水平擴展
- 緩存
- 負載均衡
- 數據庫復制
- 數據庫分區
步驟2:回顧可擴展性文章
閱讀關于 可擴展性 的文章,了解更多。在該文章中你將學到:
- 克隆
- 數據庫
- 緩存
- 異步
針對性能 VS 可擴展性、延遲 VS 吞吐量、可用性 VS 一致性等高層次的權衡將被詳細討論。
性能與可擴展性
一個服務是 可擴展的,如果分配的資源能有效提升 性能。通常增加性能意味著可以處理更多的工作單位,但也可能意味著處理更大的工作單位,例如,當數據集增加時。
性能和可擴展性的區別
- 如果你有 性能 問題,系統對單一用戶依然速度緩慢。
- 如果你有 可擴展性 問題,系統對于單一用戶速度正常,但在負載過重時變得緩慢。
有關 可擴展性 的理解。
延遲與吞吐量
延遲 是執行一些操作的時間或產生結果的時間。
吞吐量 是單位時間內完成的行動或產生的結果的數量。
你通常應該瞄準 最大吞吐量 和 可接受的延遲。
詳細內容和內容
通過本文獻繼續理解延遲與吞吐量的關系。需要訪問的鏈接包括:
- 延遲與吞吐量的理解
可用性與一致性
CAP 定理
來源:CAP 定理重審
在一個分布式計算系統中,你只可以保證下面兩個特性中的任意兩個:
- 一致性:每個讀取操作接收到最近的寫入或產生錯誤。
- 可用性:每個請求都接收到響應,但不能保證最新版本的信息。
- 分區容忍性:系統在因網絡故障而導致的任意分區由于其子網仍然能繼續操作。
網絡并不可靠,因此你需要支持分區容忍性。在一致性和可用性之間需要進行軟硬件的權衡。
發布的不同一致性模式和可用性模式將進一步詳述。
同類項目
以下是一些與本項目類似的系統設計資源和工具:
- 系統設計速查表 - 提供快速轉向常見系統設計概念的資源。
- LeetCode - 針對系統設計問題的一整套練習題庫。
- Grokking the System Design Interview - 一門詳細的在線課程,幫助你準備系統設計面試。
通過上述資源和工具,能夠幫助您更好地理解和掌握系統設計的復雜性與實用性。