☕ NEW! 完成新手任務即可參加抽獎!LINE 星巴克禮券等你拿,名額有限!        🎉 推廣活動:邀請好友註冊 DevLearn,累積推薦抽 LINE 星巴克禮券! 活動詳情 →        🔥 活動期間 2026/4/1 - 5/31 |已有 0 人參加       
concept-arch 進階

微服務 vs 單體:怎麼選?

單體架構(Monolith)

一個應用程式 = 所有功能
┌──────────────────────┐
│  使用者模組           │
│  訂單模組             │
│  商品模組             │
│  支付模組             │
│  通知模組             │
│  ── 共用一個 DB ──    │
└──────────────────────┘
優點:
✅ 開發簡單、部署簡單(一個專案、一個部署)
✅ 本地函式呼叫,效能好
✅ 資料一致性容易(同一個 DB、同一個 Transaction)
✅ 除錯容易(一個 process)

缺點:
❌ 整個應用一起部署(改一行程式碼要部署全部)
❌ 一個模組出錯影響全部
❌ 團隊越大越難協作(合併衝突)
❌ 技術選擇被鎖定(整個用同一個框架)

微服務架構

每個功能是獨立的服務
┌─────────┐ ┌─────────┐ ┌─────────┐
│ 使用者   │ │ 訂單     │ │ 商品     │
│ Service  │ │ Service  │ │ Service  │
│ [DB1]    │ │ [DB2]    │ │ [DB3]    │
└─────────┘ └─────────┘ └─────────┘
     ↕ HTTP/gRPC/Message Queue ↕

優點:
✅ 獨立部署、獨立擴展
✅ 一個服務掛了不影響其他
✅ 團隊可以用不同技術
✅ 適合大團隊分工

缺點:
❌ 分散式系統的複雜性(網路延遲、服務發現、負載平衡)
❌ 跨服務的 Transaction 很難(Saga Pattern)
❌ 除錯困難(分散式追蹤、Log 聚合)
❌ 運維成本高(每個服務要監控、部署、擴展)

什麼時候該用微服務?

你的情況 建議
1-5 人團隊 單體
< 10 萬使用者 單體
新創 MVP 單體(先驗證商業模式)
10+ 人團隊 可以考慮微服務
需要獨立擴展某個功能 微服務
不同團隊負責不同功能 微服務

Martin Fowler:「幾乎所有成功的微服務架構,都是從單體架構演進過來的。」


中間路線:模組化單體

// 單體應用內部,按模組拆分
/Modules
  /Users      ← 使用者模組(有自己的 Service、Repository)
  /Orders     ← 訂單模組
  /Products   ← 商品模組
/Shared       ← 共用的東西

// 模組之間透過介面通訊,不直接存取對方的 DB Table
// 未來真的需要拆微服務時,每個模組獨立出去就好

你的 DevLearn 就是單體架構,而且這是對的。一個人開發的學習平台,微服務只會增加複雜度。

💡 大家的想法 · 0

載入中...
💬 即時聊天室 🟢 0 人在線
😀 😎 🤓 💻 🎮 🎸 🔥
➕ 新問題
📋 我的工單
💬 LINE 社群
🔒
需要註冊才能使用此功能
註冊帳號即可解鎖測驗、遊戲、簽到、筆記下載等所有功能,完全免費!
免費註冊