Section 1:微服務不是萬靈丹
微服務架構在過去幾年被過度神話化。許多團隊在沒有充分評估的情況下採用微服務, 結果反而增加了不必要的複雜度與運維負擔。在決定是否拆分之前,先理解真實的代價。
「不要過早拆分微服務。Netflix 和 Amazon 都是先有巨大的 Monolith,再逐漸拆分。 如果你的團隊人數少於 10 人,Monolith 幾乎必然是更好的選擇。 微服務的複雜度需要有足夠的工程能力和組織規模才能消化。」
何時值得考慮拆分?
部署頻率差異大
某些功能每天部署、某些功能每月部署,部署耦合造成風險
擴展需求不同
搜尋服務需要 100 個節點,用戶服務只需要 5 個
團隊規模 > 30 人
超過 30 人的團隊需要獨立工作,避免互相等待與衝突
技術棧需求不同
ML 推薦服務用 Python、主 API 用 Node.js、批次處理用 Java
Section 2:拆分邊界 — Domain-Driven Design(DDD)
「好的微服務邊界來自業務領域,而不是技術層面。 按照資料庫 table 拆或按照技術層(Controller / Service / Repository)拆,都是錯誤的做法。」
DDD 的核心概念是 Bounded Context(限界上下文)—— 每個業務領域有自己的「語言」和「模型」,服務邊界應該和業務邊界對齊。 以電商系統為例,每個 Bounded Context 就對應到一個微服務。
三個核心拆分原則
高內聚,低耦合
同一個服務內的功能應該「經常一起改變」。如果改訂單邏輯每次都要改庫存,那它們應該在同一個服務。
單一職責(Single Responsibility)
每個服務只負責一個業務領域。一個服務不應該同時處理「下訂單」和「發送通知」。
服務間只透過 API 通訊
服務之間絕對不能共用資料庫。共用 DB 是最常見的微服務反模式(Anti-pattern),會導致隱性耦合。
Section 3:Strangler Fig Pattern — 安全遷移到微服務
「不要嘗試重寫整個系統(Big Bang Rewrite)——根據歷史統計,這類專案的失敗率極高。 應該用 Strangler Fig Pattern:像榕樹氣根一樣,慢慢包覆舊系統,逐漸取而代之。」
Strangler Fig 取名自一種熱帶植物:它的氣根會慢慢包覆宿主樹,最終完全取代宿主。 這個模式讓你可以在生產環境持續運行的同時,漸進式地遷移系統。
遷移時的資料庫策略
資料庫遷移是最難的部分。建議採用「雙寫(Dual Write)」策略過渡:
Section 4:服務間通訊模式
微服務之間的通訊方式決定了系統的可靠性和耦合度。選擇錯誤的通訊模式是許多微服務架構失敗的根本原因。
同步通訊(REST / gRPC)
非同步通訊(Kafka / RabbitMQ)
Saga Pattern — 分散式事務的解法
微服務最棘手的問題是「跨服務的事務」。Saga Pattern 用一連串的本地事務取代分散式 ACID 事務, 每一步失敗都執行「補償交易(Compensating Transaction)」來回滾。
Section 5:Service Mesh — 管理微服務的基礎設施層
當你有 50 個微服務時,每個服務都要自己實作重試、Circuit Breaker、mTLS 加密、日誌追蹤, 這是不可行的。Service Mesh 把這些「橫切關注點(Cross-cutting Concerns)」 抽離到基礎設施層,讓每個服務可以專注在業務邏輯上。
Istio Traffic Management:Canary 部署
Service Mesh 最強大的功能之一是細粒度的流量控制, 可以基於 Header、百分比、用戶身份等條件將流量導向不同版本,實現安全的 Canary 部署。
Authorization Policy:服務間的存取控制
Section 6:微服務的 Observability(可觀測性)
在微服務架構中,一個用戶請求可能穿越 10 個服務。當出現問題時, 如果沒有完善的 Observability,排查故障的難度會呈指數級上升。 業界普遍認可的標準是「三根柱子(Three Pillars of Observability)」。
Logs
日誌
何時發生了什麼事
ELK Stack / LokiMetrics
指標
系統健康狀況的數字
Prometheus + GrafanaTraces
追蹤
請求如何在服務間流動
Jaeger / Zipkin1. Logs — Correlation ID 串聯跨服務日誌
結構化日誌(JSON 格式)+ Correlation ID 是追蹤問題的基礎。 每個請求在入口處產生一個唯一 ID,並在所有服務間傳遞。
2. Metrics — 關鍵指標監控
3. Traces — OpenTelemetry 分散式追蹤
實務建議:從 Logs 開始,逐步建立
不要一開始就想把三個 Pillar 全部建齊。建議順序: Logs(1 天)→ Metrics + Grafana Dashboard(1 週)→ Traces(1 個月)。 Logs 是最快見效的,Traces 架設成本最高但排查複雜問題時最不可或缺。