參考資料


為了讓一個服務能用 RPI 呼叫另一個服務,它需要知道服務實例的網路位置。=> Service Discovery

使用 Service Discovery
實例 IP 可能會變,所以 Service client 需要一種方式來找到實例

SERVICE DISCOVERY 概觀
  • 核心元件是 service registry,它是一個記錄應用程式服務實例網路位置的資料庫
  • Service discovery 機制會在服務實例啟動和停止時更新 service registry。
  • 當 client 呼叫一個服務時,service discovery 機制會查詢 service registry 取得可用服務實例列表,然後將請求路由到其中一個。

套用應用層級的 SERVICE DISCOVERY PATTERNS
  1. 服務啟動時自行註冊(Self registration pattern,實例資訊可能包含 health check URL)
    (Pattern: Self registration 服務實例自行向 service registry 註冊。參見 http://microservices.io/patterns/self-registration.html。)
  2. Client 查詢服務並以快取機制和負載平衡策略(如 round-robin 或 random)發送請求
    (Pattern: Client-side discovery 服務 client 從 service registry 取得可用服務實例列表並在它們之間做負載平衡。參見 http://microservices.io/patterns/clientside-discovery.html。)

優缺點
優點:可以處理各種情境,包括傳統系統也能支援這種方式
缺點:使用某些工具如 JVM 或 Spring 支援的方案時,無法在非 JVM 環境中使用

通常使用部署基礎設施提供的 service discovery 機制會比較好,因為應用層實作有其限制。

套用平台提供的 SERVICE DISCOVERY PATTERNS
Docker 和 Kubernetes 等平台內建了 service registry 和 service discovery 機制。例如 DNS、VIP

優缺點
優點:不需要應用程式端的程式碼
缺點:需要部署在 Docker 或 Kubernetes 上