📌 30 秒摘要(Layer 3)

用第一手故事講淘寶從一個買來的小網站,長成扛得住雙十一巨量流量的超大型系統的十年歷程。看它如何一路被業務逼著演進:從 LAMP 單體、到分庫分表、到自研中間件、到「去 IOE」(去掉昂貴的商用軟硬體改用開源+自研)。最大的啟示不是某項技術,而是架構是被業務規模「逼」出來的,該在痛點真的出現時才演進,而非一開始就過度設計。

🗺 心智圖(Canvas)

淘寶技術這十年

淘寶技術這十年

子柳(趙超)|架構是被業務規模逼出來的

🌱 演進而非一步到位 架構隨業務一起長出來

🎯 什麼情境該想到我

當你在猶豫「現在就該上分散式/微服務/複雜中間件嗎,還是先簡單做」時。

⚙️ 怎麼用

  1. 在痛點真的出現時才演進:DB 撐不住才分庫分表、單體真的擋路才拆服務。別為「想像中的未來規模」預先過度設計。
  2. 每次升級對準一個真實瓶頸:先量測、確認瓶頸,再針對它升級(呼應 工具-找出並管理約束點)。
  3. 保留演進空間,但不預先實作:介面/邊界留好(工具-限界上下文),讓未來好改,但現在保持簡單。
  4. 把共通難題沉澱成平台/中間件:等同類需求重複出現,再抽象共用,而非一開始就造框架。

📌 這一組三張卡:工具-服務架構的演進與拆分=「有哪些選項」|本卡=「什麼時候該動」|工具-服務邊界與演進式拆分=「切在哪」

★ 判準:等「觸發訊號」出現,不要等「預感」

演進動作★ 真正的觸發訊號❌ 不是訊號
加讀取副本讀取造成主庫 CPU/IO 飽和「聽說要讀寫分離」
加快取同樣的查詢重複率高 + DB 是瓶頸「先加快取比較快」
分庫分表★ 單表已數億列且索引失效、或單機容量/寫入到頂「資料會長很大」
拆服務★ 團隊互相擋住部署、資源需求差異極大「模組太多了」
上訊息佇列需要削峰 / 解耦 / 非同步化「架構圖有比較好看」
多地區部署有跨地區的使用者且延遲是問題、或有合規要求「以後要國際化」

★ 共同點:每一個「真正的訊號」都是可量測的。
說不出「現在的數字是多少、到多少才需要動」,就是還不該動。

★ 演進的正確節奏

① ★ 量測 → 找出「現在」真正的瓶頸(不是猜的)
② 針對「那一個」瓶頸做最小的改動
③ 再量測 → 確認瓶頸移動了
④ 回到 ①

★ 一次只解一個瓶頸。 同時改三件事 → 你不會知道哪一件有效(見 工具-用度量取代模糊判斷)。

Amdahl 的提醒:優化只佔 5% 時間的部分,最多只能快 5%。
→ 先量出「時間花在哪」,再決定優化什麼(見 工具-找出並管理約束點)。

★ 預留空間 vs 預先實作(這條線最難拿捏)

✅ 該做(便宜、可逆)❌ 不該做(昂貴、難逆)
★ 模組邊界劃清楚(見 工具-限界上下文)預先拆成微服務
★ 介面收窄(不暴露內部結構)預先做一層抽象以支援「未來可能的第二種實作」
★ ID 用可排序且不衝突的(UUIDv7/Snowflake,未來好分片)預先分庫分表
★ schema 保留擴充欄位、用可空欄位預先設計「通用的 EAV 表」
★ 把狀態集中(讓服務無狀態)預先引入服務網格
★ 遙測從第一天就有預先建平台團隊

★ 判準:這件事「現在做」和「以後做」的成本差多少?
差很多(例如 ID 格式、資料模型、邊界)→ 現在做。
差不多(例如加快取、加副本、拆服務)→ 以後做。

這也是為什麼「資料模型」值得多想,而「部署架構」不值得預先設計——
資料模型改起來痛,部署架構改起來相對容易。

★ 各階段的典型形態(參考,不是規範)

規模典型架構什麼會先爆
< 1 萬 DAU★ 單體 + 一個資料庫 + 託管服務通常什麼都不會爆。別過度設計
1–10 萬+ CDN + 快取 + 讀取副本資料庫讀取
10–100 萬+ 模組化單體或少數服務 + 佇列 + 物件儲存寫入、團隊協作
100 萬+服務化 + 分區 + 多地區一致性、運維複雜度

★ 多數系統永遠停在第一、二階段,而那是完全正常的。
「為了一百萬使用者設計」而實際只有一千個,是最常見也最昂貴的錯誤。

★ 反過來也要會:簡化

演進不只是「加東西」。 用不到的服務要合併回去、失效的快取層要拆掉、
過時的抽象要移除(見 工具-技術債功能凍結)。
★ 「架構只會變複雜」是一個可以打破的假設,但需要刻意安排時間。

🧪 我實際套用的紀錄

  • 2026-07-15:(待填)

⚠️ 注意 / 什麼時候不適用

  • ★ 「痛點出現才演進」不等於「等到爆了才動」。
    要在「趨勢明確」時就開始——磁碟用量每月漲 10%、p99 每週惡化 5%,
    這些是訊號,不要等到 100% 才反應。 關鍵是有量測、有趨勢,不是有預感。
  • ★ 有些東西無法演進,必須一開始就對:資料模型、ID 格式、租戶隔離方式、稽核紀錄。
    這些改起來要資料遷移 + 應用重寫——值得多花時間想。
  • 不要因為「面試都這樣答」而做。你的系統不是 Twitter。
  • 演進要有回滾路徑。加了快取結果一致性出問題 → 要能關掉(feature flag)。
  • ★ 團隊能力也是約束。三個人維運不了 Kubernetes + 服務網格 + 多地區部署——
    選擇你「養得起」的架構(見 合理地使用技術)。
  • 量測本身要先有。沒有遙測就沒有觸發訊號,只能憑感覺(見 工具-遙測與監控)。

🔗 相關工具

痛點驅動升級 每一次架構升級,都對應一個 真實出現的瓶頸:DB → 單機 → 成本 而非一開始就過度設計

🔧 去 IOE 擺脫昂貴的商用軟硬體

用開源+自研中間件 替換昂貴的商用資料庫/小型機 兼顧成本與可控

🧱 中間件的價值 把難題沉澱成平台

把共通的分散式難題沉澱成平台 分庫分表 × 快取 × 訊息 讓上層業務不必重造輪子

👥 人與組織

技術演進背後是 團隊成長與工程文化

💬「架構不是設計出來的,   是隨著業務一起長出來的。」

Link to original

🧰 這本書給我的工具

(具體技術對照 鳳凰架構、設計資料密集型應用、工具-資料分區)

✨ 關鍵重點(Layer 1–2)

  • 演進而非一步到位:每一次架構升級,都對應一個真實出現的瓶頸(DB、單機、成本)。
  • 去 IOE:用開源與自研中間件替換昂貴的商用資料庫/小型機,兼顧成本與可控。
  • 中間件的價值:把共通的分散式難題(分庫分表、快取、訊息)沉澱成平台,讓上層業務不重造。
  • 人與組織:技術演進背後是團隊成長與工程文化。

💬 金句原文(Layer 0)

  • 「架構不是設計出來的,是隨著業務一起長出來的。」

🔗 相關