Microservices
What?
微服務(Microservices)是一種軟體架構風格,它將應用程式拆分成多個獨立且可部署的小型服務,每個服務專注於完成特定的功能。這些服務透過輕量級的通訊協議(例如 RESTful 或 Message Queue)相互交互,並通常以獨立的方式進行部署和運行。
舉例來說,假設我們在開發一個電商平台,傳統的單體架構可能會將所有功能(例如用戶管理、商品展示、訂單處理)集中在一個應用中。而使用微服務架構時,我們可以將「用戶管理」、「商品展示」和「訂單處理」分別拆分成三個獨立的服務,使得每個功能模組更具彈性且便於維護。
Who?
微服務適合以下類型的人與情境:
- 技術工作者:如後端工程師、DevOps 工程師,需要負責設計、部署及維護分散式系統。
- 企業或團隊:特別是那些需要快速迭代產品或希望提升開發與部署效率的公司。
- 受影響的人:包括使用系統的最終使用者(End Users),他們可能因微服務架構提升了系統穩定性和性能而受益。
舉例來說,大型科技公司如 Netflix 就是微服務架構的一大擁護者。他們通過拆分原有的大型應用,讓每個業務模組能夠更快地更新與擴展。
When?
以下幾種情況特別適合採用微服務:
- 系統需求快速變化:產品需要頻繁更新或快速迭代,例如新功能上線。
- 流量波動大:某些模組需要動態擴展,例如高峰期流量集中於「購物車」功能。
- 大型團隊合作:不同團隊負責不同模組,減少因為單體架構產生的開發衝突。
- 技術多樣性需求:需要在不同模組中採用最佳技術,如某些部分使用 Go,而其他部分使用 Python。
Where?
微服務通常出現在以下範疇:
- 後端架構:作為後端基礎設施的一部分,用以處理各類業務邏輯。
- 雲端環境:像 Kubernetes 和 Docker 等工具可以幫助微服務更方便地進行容器化與編排。
- API Gateway:作為前端與後端之間溝通的重要橋樑,用於路由請求到正確的微服務。
- 資料庫層級:每個微服務可能擁有自己的資料庫,以保證數據隔離性。
Why?
採用微服務主要是為了解決以下問題:
- 可維護性低下:傳統單體架構隨著功能數量增加而變得難以維護,每次修改都可能影響整個系統。
- 非彈性部署流程:任何小改動都需要重新部署整套應用,導致耗時且風險高。
- 擴展困難:難以針對某些特定模組進行垂直或水平擴展,例如只想增加「搜尋」功能的效能卻無法做到。
- 技術堆疊受限:單體架構通常被迫限制在一套技術上,而不容易引入新的技術方案。
透過引入微服務,可以讓系統具備高彈性、高可靠性,以及更佳的故障隔離能力。例如,如果「推薦系統」出現問題,只需修復該服務,不影響其他模組正常運作。
How?
🛠️ 建立階段
建立微服務可以遵循以下步驟:
- 分析業務需求並識別核心模組,如 User Service、Order Service 等等。
- 為每個模組建立獨立代碼庫,以確保版本控制清晰且不混雜其他模塊代碼。
- 使用 Docker 容器化各 microservice,使其能夠在任意環境中運行一致。
- 配置 API Gateway,實現通訊路由及認證機制等核心功能。
- 部署至 Kubernetes 或其他雲平台進行編排管理。
範例流程:
Step 1: 識別業務 -> Step 2: 分割代碼 -> Step 3: 容器化 -> Step 4: 設置 API Gateway -> Step 5: 部署到 Kubernetes
🔍 查詢階段
查詢階段主要涉及如何有效地調用各 microservice 並進行錯誤處理:
- 前端向 API Gateway 發送 HTTP 請求,例如查詢訂單狀態
/api/order/{id}。 - API Gateway 根據 URL 路由請求至對應 microservice(例如 Order Service)。
- 如果查詢成功,返回結果;若出現錯誤,例如 Order Service 無法連接資料庫,則返回標準化錯誤信息(如 HTTP Status Code 500)。
範例程式邏輯:
Request -> API Gateway Routing -> Microservice 查詢 -> 成功返回結果 OR 錯誤處理
補充說明
📌 範例比較
| 架構類型 | 優點 | 缺點 |
|---|---|---|
| 單體架構 (Monolithic) | 開發初期簡單易懂 | 隨著規模增長難以維護 |
| 微服務 (Microservices) | 高可擴展性、故障隔離能力強 | 初期設計複雜,需要更多基礎建設 |
🧠 延伸/常見誤解
常見誤解:
- 誤解:「所有項目都適合切換到 Microservices」
- 澄清:Microservices 更適合複雜、大規模系統,但對小型應用而言可能過度設計且成本過高。
延伸應用:
- 可結合 Serverless 架構,如 AWS Lambda 處理短期內突發的大量請求,以降低運營成本並提高效能。