Go 語言系列(十七):微服務架構
這是 Go 語言從零到 Web 應用系列的第十七篇。前面我們學了 REST API 和 gRPC 這兩種通訊方式,現在來學如何用微服務架構組織大型系統。 單體 vs 微服務 單體架構(Monolith) 所有功能在一個程式中: ┌─────────────────────────┐ │ 單體應用 │ │ ┌─────┐ ┌─────┐ ┌───┐ │ │ │用戶 │ │訂單 │ │商品│ │ │ └──┬──┘ └──┬──┘ └─┬─┘ │ │ └───────┼──────┘ │ │ ┌──┴──┐ │ │ │ DB │ │ │ └─────┘ │ └─────────────────────────┘ 微服務架構 每個功能是獨立的服務: ┌──────┐ ┌──────┐ ┌──────┐ │用戶 │ │訂單 │ │商品 │ │服務 │ │服務 │ │服務 │ └──┬───┘ └──┬───┘ └──┬───┘ │ │ │ ┌──┴──┐ ┌──┴──┐ ┌──┴──┐ │Users│ │Orders│ │Products│ │ DB │ │ DB │ │ DB │ └─────┘ └─────┘ └──────┘ 對比 面向 單體 微服務 開發速度(初期) 快 慢(基礎設施多) 部署 整包部署 獨立部署 擴展 整體擴展 按需擴展個別服務 技術選型 統一 每個服務可用不同技術 團隊組織 單一團隊 各服務獨立團隊 複雜度 程式碼內部 分散式系統 故障影響 全域 局部(做好隔離時) 什麼時候該拆微服務? 不要一開始就用微服務。 先用單體,當出現以下訊號時再考慮拆分: ...