Microservice Patterns - 3.2.4 Microservice 架構中的行程間通訊 - 使用 Service Discovery
參考資料
為了讓一個服務能用 RPI 呼叫另一個服務,它需要知道服務實例的網路位置。=> Service Discovery
使用 Service Discovery
實例 IP 可能會變,所以 Service client 需要一種方式來找到實例

SERVICE DISCOVERY 概觀
- 核心元件是 service registry,它是一個記錄應用程式服務實例網路位置的資料庫
- Service discovery 機制會在服務實例啟動和停止時更新 service registry。
- 當 client 呼叫一個服務時,service discovery 機制會查詢 service registry 取得可用服務實例列表,然後將請求路由到其中一個。
套用應用層級的 SERVICE DISCOVERY PATTERNS
- 服務啟動時自行註冊(Self registration pattern,實例資訊可能包含 health check URL)(Pattern: Self registration 服務實例自行向 service registry 註冊。參見 http://microservices.io/patterns/self-registration.html。)
- 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 上

- 3rd party registration pattern:由第三方(稱為 registrar,通常是部署平台的一部分)來處理註冊。(參見 http://microservices.io/patterns/3rd-party-registration.html。)
- Server-side discovery pattern:Client 向一個 DNS 名稱發送請求,解析到一個 request router,由它查詢 service registry 並做請求的負載平衡。(參見 http://microservices.io/patterns/server-side-discovery.html。)