分散式系統元件

一句話定義

分散式系統元件是大型系統設計反覆使用的基礎積木,例如負載均衡、快取、CDN、資料複製、分片、消息佇列、限流、唯一 ID、監控告警與重試機制;真正的設計工作是按需求與失效模式組合它們。

核心要點

基礎元件地圖

元件解決的問題常見取捨
Load Balancer多台服務承接入口流量健康檢查、黏性 session、單點與配置複雜度
Database Replication提高讀吞吐與可用性複製延遲、failover、讀到舊資料
Cache降低讀延遲與資料庫壓力失效策略、穿透、雪崩、一致性
CDN靜態內容與媒體就近分發cache purge、區域成本、內容更新延遲
Stateless Web TierWeb / app server 可水平擴展狀態搬到外部存儲後的延遲與依賴
Message Queue非同步、削峰、解耦重試、順序、重複消費、backpressure
Sharding單一資料庫容量不足分片 key、熱點、跨 shard join / transaction
Rate Limiter保護系統免於濫用或尖峰精準度、分散式計數、一致性、使用者體驗
Consistent Hashing節點增減時降低資料搬移虛擬節點、熱點、再平衡
Unique ID Generator分散式環境產生全域 ID時間排序、碰撞、時鐘回撥、可讀性
Metrics / Logs / Alerts系統可觀測與故障定位指標設計、告警噪音、取樣與成本

元件本身不是答案

同一個元件在不同場景的理由不同:

  • 佇列在圖片處理中用來非同步工作,在通知系統中用來削峰與 retry,在爬蟲中用來管理 URL frontier。
  • 快取在 news feed 中可能是讀延遲優化,在影片系統中可能是熱內容分發,在支付系統中則必須小心一致性。
  • 限流可以保護公開 API、防止暴力攻擊,也可以避免內部 worker 把下游服務打爆。
  • 一致性哈希可以用於快取節點,也可以用於爬蟲下載器與鍵值存儲的資料分佈。

因此系統設計要先說清需求與 failure mode,再選元件。

從產品案例看元件組合

2026-05-14-搞定系統設計面試 的案例可以視為元件重組練習:

案例主要元件
URL 縮短器API、唯一 ID / hash、資料庫、快取、封底估算
網路爬蟲URL frontier、去重、HTML downloader、parser、robots / politeness、佇列、儲存
通知系統fanout、queue、第三方推送服務、template、retry、分析事件
News feedfeed publishing、fanout on write/read、cache、rank / merge、資料存儲
聊天系統長連線、消息存儲、online presence、push notification、同步狀態
影片分享object storage、CDN、transcoding worker、metadata、封面 / chunk
雲盤metadata DB、block storage、sync client、conflict handling、notification
支付系統ledger、idempotency、retry、第三方 PSP、對帳、資料一致性
指標監控metrics ingestion、time-series DB、aggregation、alerting、dashboard

元件的引入時機

把元件引入太早會增加成本;引入太晚會形成事故。判斷順序通常是:

  1. 封底估算 確認瓶頸是否真實。
  2. 先選最小可行架構。
  3. 對最先爆的路徑加元件。
  4. 加元件後同步增加監控、測試與操作手冊。
  5. 定期回看是否有過度設計或不再必要的複雜度。

與其他概念的關係

  • 系統設計 — 本頁是系統設計的元件庫。
  • 可擴展性 — 多數元件都是處理流量、資料量或可用性擴展。
  • 系統設計面試 — 面試案例常考元件取捨,而不是元件名詞背誦。
  • 網頁爬蟲 — 分散式爬蟲是本頁的案例之一;原爬蟲頁偏資料抽取與反偵測,本頁補架構面。
  • 技術SEO — robots.txt、sitemap 與 crawler friendliness 是爬蟲 / 搜尋系統的公開協議面。
  • Code-Review / GitHub工作流 — 元件選型最後仍要落進 codebase;review 與版本控制是讓架構變更可控的工程治理層。

相關來源

備註

未來若某個元件累積 2+ 專門來源或成為高頻查詢點,再拆成獨立概念頁。近期優先候選:限流器、一致性哈希、消息佇列、分散式唯一 ID、可觀測性 / 指標監控。