跳至主要内容

Microservices

What?​

微服務(Microservices)是一種軟體架構風格,它將應用程式拆分成多個獨立且可部署的小型服務,每個服務專注於完成特定的功能。這些服務透過輕量級的通訊協議(例如 RESTful 或 Message Queue)相互交互,並通常以獨立的方式進行部署和運行。

舉例來說,假設我們在開發一個電商平台,傳統的單體架構可能會將所有功能(例如用戶管理、商品展示、訂單處理)集中在一個應用中。而使用微服務架構時,我們可以將「用戶管理」、「商品展示」和「訂單處理」分別拆分成三個獨立的服務,使得每個功能模組更具彈性且便於維護。


Who?​

微服務適合以下類型的人與情境:

  • 技術工作者:如後端工程師、DevOps 工程師,需要負責設計、部署及維護分散式系統。
  • 企業或團隊:特別是那些需要快速迭代產品或希望提升開發與部署效率的公司。
  • 受影響的人:包括使用系統的最終使用者(End Users),他們可能因微服務架構提升了系統穩定性和性能而受益。

舉例來說,大型科技公司如 Netflix 就是微服務架構的一大擁護者。他們通過拆分原有的大型應用,讓每個業務模組能夠更快地更新與擴展。


When?​

以下幾種情況特別適合採用微服務:

  1. 系統需求快速變化:產品需要頻繁更新或快速迭代,例如新功能上線。
  2. 流量波動大:某些模組需要動態擴展,例如高峰期流量集中於「購物車」功能。
  3. 大型團隊合作:不同團隊負責不同模組,減少因為單體架構產生的開發衝突。
  4. 技術多樣性需求:需要在不同模組中採用最佳技術,如某些部分使用 Go,而其他部分使用 Python。

Where?​

微服務通常出現在以下範疇:

  1. 後端架構:作為後端基礎設施的一部分,用以處理各類業務邏輯。
  2. 雲端環境:像 Kubernetes 和 Docker 等工具可以幫助微服務更方便地進行容器化與編排。
  3. API Gateway:作為前端與後端之間溝通的重要橋樑,用於路由請求到正確的微服務。
  4. 資料庫層級:每個微服務可能擁有自己的資料庫,以保證數據隔離性。

Why?​

採用微服務主要是為了解決以下問題:

  1. 可維護性低下:傳統單體架構隨著功能數量增加而變得難以維護,每次修改都可能影響整個系統。
  2. 非彈性部署流程:任何小改動都需要重新部署整套應用,導致耗時且風險高。
  3. 擴展困難:難以針對某些特定模組進行垂直或水平擴展,例如只想增加「搜尋」功能的效能卻無法做到。
  4. 技術堆疊受限:單體架構通常被迫限制在一套技術上,而不容易引入新的技術方案。

透過引入微服務,可以讓系統具備高彈性、高可靠性,以及更佳的故障隔離能力。例如,如果「推薦系統」出現問題,只需修復該服務,不影響其他模組正常運作。


How?​

🛠️ 建立階段​

建立微服務可以遵循以下步驟:

  1. 分析業務需求並識別核心模組,如 User Service、Order Service 等等。
  2. 為每個模組建立獨立代碼庫,以確保版本控制清晰且不混雜其他模塊代碼。
  3. 使用 Docker 容器化各 microservice,使其能夠在任意環境中運行一致。
  4. 配置 API Gateway,實現通訊路由及認證機制等核心功能。
  5. 部署至 Kubernetes 或其他雲平台進行編排管理。

範例流程:

Step 1: 識別業務 -> Step 2: 分割代碼 -> Step 3: 容器化 -> Step 4: 設置 API Gateway -> Step 5: 部署到 Kubernetes

🔍 查詢階段​

查詢階段主要涉及如何有效地調用各 microservice 並進行錯誤處理:

  1. 前端向 API Gateway 發送 HTTP 請求,例如查詢訂單狀態 /api/order/{id}。
  2. API Gateway 根據 URL 路由請求至對應 microservice(例如 Order Service)。
  3. 如果查詢成功,返回結果;若出現錯誤,例如 Order Service 無法連接資料庫,則返回標準化錯誤信息(如 HTTP Status Code 500)。

範例程式邏輯:

Request -> API Gateway Routing -> Microservice 查詢 -> 成功返回結果 OR 錯誤處理

補充說明​

📌 範例比較​

架構類型優點缺點
單體架構 (Monolithic)開發初期簡單易懂隨著規模增長難以維護
微服務 (Microservices)高可擴展性、故障隔離能力強初期設計複雜,需要更多基礎建設

🧠 延伸/常見誤解​

常見誤解:​

  • 誤解:「所有項目都適合切換到 Microservices」
    • 澄清:Microservices 更適合複雜、大規模系統,但對小型應用而言可能過度設計且成本過高。

延伸應用:​

  • 可結合 Serverless 架構,如 AWS Lambda 處理短期內突發的大量請求,以降低運營成本並提高效能。