[Day 1] 前言 - 關於本系列

erichung0404
2024-08-01 19:10:18

前言

系統設計是一個非常龐大的主題, 由於是從高層角度開始, 設計時對於各種領域都需要有一定的了解才能夠設計出好的系統
且系統設計也是 "基於選擇" 的設計, 沒有最好的系統架構, 只有 "最符合使用情境" 的架構

儘管如此, 我們也希望能夠在 "犧牲最少" 的前提下 "最大化" 我們系統的需求
因此, 我們需要認識每個 "元件" (此處也可指 "服務") 在系統當中擔任的角色, 才知道哪些元件是必要的, 哪些是可以替換的

每個元件可以是個抽象的概念 (ex. Message Queue), 相同的元件但不同的實作有各自的強項, 比如 Relational Database, Column-based Database, Document Database, Time-series Database 等等

除了了解整體的系統架構外, 也需要對元件有一定的認識, 才能設計出 "最符合需求" 的系統!

Credit

本系列的動機源自以下兩本好書, 有興趣的人也可以買來看看~

"System Design Interview - An Insider's Guide" - Alex Xu

"System Design Interview - An Insider's Guide: Volume 2" - Alex Xu, Sahn Lam

書中提出了在面試系統設計關時, 可以透過以下 4 個步驟提出設計與面試官討論

Understand the Problem and Establish Design Scope

Propose High-level Design and Get Buy-in

Design Deep Dive

Wrap Up

儘管本系列不討論面試的部分, 書中提出的 4 個步驟仍然非常具有參考價值

誰適合看這系列

任何對系統設計有興趣的人

此系列有什麼

本系列會基於 Credit 提到的 4 個步驟為框架, 補充覺得書中探討不夠的部分
且由於筆者 Volume 2 也才讀到第 9 章, 所以會搭配書中的案例分析撰寫本系列
預計會有以下幾個案例 (希望唸得完XD)

S3-like Object Storage

Real-time Gaming Leaderboard

Payment System

Digital Wallet

Stock Exchange

並且由於書中引用大量第三方工具如 Kafka, Debezium, Google S2 等與特定領域知識如 Data Engineering, Maps, Storage 等和大量參考文件, 本系列在時間許可的情況下也會一併介紹

此系列沒有什麼

此系列 不會

介紹與挑選程式語言或框架

實作討論的案例

示範文章中提及的工具如 Kafka, Redis, MongoDB 等如何操作

最後, 希望讀者在讀完本系列後也能夠有自己的一套系統設計 SOP~