從零到百萬用戶的架構演進

★★★★Draft

FromSystem Design Interview

📚 From the Books

從零到百萬用戶的架構演進ConceptFundamentals

沒有系統一開始就長成千萬用戶的樣子——它是一步步演進出來的。這頁把單機到百萬用戶的路線串成一條敘事:每個瓶頸引出下一個元件,各元件的細節見對應概念頁。

🧠 Core Ideas

TIP

演進順序:單機 → 分離 Web/DB → 加 Load Balancer(Web 層冗餘)→ DB 複製(讀寫分離)→ Cache → CDN(靜態內容)→ 無狀態 Web 層 → 多資料中心 → Message Queue(解耦)→ 日誌/指標/自動化 → DB 分片。每一步都在解上一步暴露的瓶頸。

⚖️ 演進的關鍵轉折

單機 → 分離 Web/DB → 選型
  • 起點所有東西(Web、DB、Cache)擠一台。使用者經 DNS 拿 IP → HTTP 打 Web 伺服器。
  • 成長後把 Web 層與資料層拆開,各自獨立擴展。
  • DB 選型:RDBMS(table/row、可 join、40 年成熟)vs NoSQL(key-value / graph / column / document,通常不支援 join)。NoSQL 適合:極低延遲、非結構化、只需序列化、海量資料。詳見 SQL vs NoSQL
垂直 vs 水平 → Load Balancer
  • 垂直擴展簡單但有硬上限、無 failover;水平擴展適合大規模。
  • Load Balancer 把流量分到一組 Web 伺服器,客戶端只看到 LB 的公開 IP,後端走私有 IP 互通。一台掛了流量全導向健康的那台 → 解決「無 failover」。
DB 複製 → Cache → CDN
  • 主從複製:master 負責寫、slave 負責讀(讀 >> 寫,故一 master 多 slave)。好處:效能、可靠、高可用。master 掛了要把 slave 升 master(資料未必最新,需修復)。詳見 複製
  • Cache:讀多寫少的資料放記憶體。注意過期策略、一致性、SPOF(多台多區)、淘汰策略(LRU 最常用)。
  • CDN:靜態內容(圖片/影片/CSS/JS)就近遞送,靠 TTL 控制快取;注意成本、失效(URL 版本號 ?v=2)、故障時回源。
無狀態 Web 層 → 多資料中心
  • 把 session 等狀態移出 Web 層存到共用儲存 → 無狀態,任何請求可打任何伺服器,才能 auto-scaling。有狀態架構要 sticky session,擴展與故障處理都更難。
  • 多資料中心:geoDNS 把使用者導向最近 DC;某 DC 故障流量全導向健康 DC。挑戰是跨 DC 資料同步、測試與部署一致性。
Message Queue → 監控 → DB 分片
  • Message Queue:生產者/消費者解耦,各自獨立擴展(佇列變長就加 worker)。是構建可擴展、可靠系統的首選。
  • 日誌/指標/自動化:主機層、彙整層、業務層(DAU/留存/營收)指標+CI/CD。
  • DB 分片:選好 sharding key(分布要均勻)。挑戰:resharding(用一致性雜湊)、名人熱點、跨 shard join(常靠反正規化)。

🔑 Takeaways

✍️ My Notes

No notes yet — jot your takeaways or Q&A here.

📖 Further Reading