主從架構 (Client-Server Architecture)

核心模型

幾乎所有系統設計面試的起點。Client 發起請求,Server 處理並回應。

┌──────────┐    Request    ┌──────────────────────────────┐
│  Client  │ ────────────► │  Server                      │
│          │ ◄──────────── │  ├── Web Server (Nginx)      │
└──────────┘    Response   │  ├── App Server (Node/Django) │
                           │  └── Database (PostgreSQL)   │
                           └──────────────────────────────┘
角色 核心職責 常見例子
Client 呈現 UI、收集輸入、發送請求、展示回應 瀏覽器、手機 App、桌面應用、微服務
Server 驗證授權、執行商業邏輯、讀寫 DB、回傳結果 Nginx, Django, PostgreSQL

為什麼重要?

  1. 職責分離:Client 負責展示,Server 負責邏輯和資料 → 各自獨立維護和更新
  2. 集中管理:邏輯和資料在 Server 端,安全可控,Client 無需知道內部細節
  3. 多 Client 支援:同一 Server 可同時服務網頁、App、第三方 API
  4. 擴展基礎:流量增大時只需擴展 Server,不用改動 Client → 見 02-Distributed-Systems/03-Scalability

Thin Client vs Thick Client

類型 邏輯位置 例子 優點 缺點
Thin Client Server 端 傳統 SSR 網頁 輕量、安全(邏輯不暴露) 每次互動需請求,體驗較慢
Thick Client Client 端 React SPA、手機 App 體驗流暢、減少 Server 負擔 前端複雜,邏輯部分暴露
面試預設

現代系統設計預設 Thick Client(SPA / 手機 App) + RESTful API
設計重點在 Server 架構,但 Client 類型影響 API 設計風格。


Client-Server vs Peer-to-Peer(P2P)

特性 Client-Server P2P
通訊方式 Client → Server 請求 節點間直接溝通
集中控制 有(Server 控制) 無(去中心化)
擴展方式 擴展 Server 加入更多 Peer
典型應用 幾乎所有 Web 應用 音視訊通話(WebRTC)、BitTorrent
面試陷阱

系統設計面試 99% 是 Client-Server
只有明確涉及音視訊通話才考慮 P2P(WebRTC)。→ 見 01-Networking/05-Realtime-Protocols


面試畫圖起手式

1. Client:使用者用什麼介面?(瀏覽器?App?)
       ↓
2. Server:處理請求的後端服務
       ↓
3. API:如何溝通?(REST?WebSocket?)
       ↓
4. Database:資料存哪?
       ↓
5. 擴展:流量大了 → Load Balancer → Cache → CDN
這是你畫的第一條線

Client-Server 是所有後續設計的框架,後續的 LB、Cache、DB Sharding 都是在這個基礎上展開的。