背景
一項服務(wù)的客戶端需要使用客戶端發(fā)現(xiàn)或者服務(wù)器端發(fā)現(xiàn)機制,從而獲取給其發(fā)送請求的服務(wù)實例的位置。
問題
服務(wù)的客戶端(在客戶端發(fā)現(xiàn)機制中)或者服務(wù)路由(在服務(wù)端發(fā)現(xiàn)機制中)如何獲取可用服務(wù)實例的信息?
需求
方案
建立一套服務(wù)注冊表,即一個包括服務(wù)、服務(wù)的實例和其位置信息的數(shù)據(jù)庫。各服務(wù)實例需要在啟動時注冊至該服務(wù)注冊表,并在關(guān)閉時進行注銷。該服務(wù)的客戶端以及/或者路由器通過查詢此服務(wù)注冊表以找到可用的服務(wù)實例。
示例
服務(wù)注冊表的例子(或者經(jīng)常作為服務(wù)注冊表使用的技術(shù))包括:
Kubernetes、Marathon以及AWS ELB等系統(tǒng)中存在一套隱式的服務(wù)注冊表。
結(jié)果背景
服務(wù)注冊表模式的優(yōu)勢包括:
服務(wù)注冊表模式的弊端包括:
需要決定各服務(wù)實例如何注冊至該服務(wù)注冊表。有兩個選項:
服務(wù)注冊表的客戶端需要獲取服務(wù)注冊表實例的位置。另外,各服務(wù)注冊表實例也必須被部署在固定且已知的IP地址上。各客戶端則利用這些IP地址進行配置。
舉例來說,Netflix Eureka服務(wù)實例通常會根據(jù)彈性IP地址進行部署。其彈性IP地址可用資源池則利用屬性文件或者通過DNS進行配置。當一個Eureka實例開始啟動時,它會查詢配置,尋找可用的彈性IP地址。Eureka客戶端也需要通過該彈性IP地址池進行配置。
相關(guān)模式