SpringCloud-服務治理實現原理
Spring Cloud 學習 – 服務治理實現原理
需要JAVA Spring Cloud大型企業分散式微服務雲構建的B2B2C電子商務平臺原始碼:壹零叄八柒柒肆六二六
如圖為eureka的結構圖,其中包括三個部分,服務註冊中心(Eureka Server),服務提供者(Eureka Client),服務消費者(Eureka Client)
Eureka Server -1 和Eureka Server -2 組成了高可用叢集,任何一個client註冊其中的一個Server,都會根據配置的時間同步到另一個Server.
服務註冊中心(Eureka Server)
作為一個註冊中心,每個微服務(Client)在啟動後將會把自己的主機,埠號,通訊協議等資訊傳送給註冊中心進行註冊,註冊中心會儲存微服務的ip地址、埠等資訊。
服務消費者可以從服務發現元件查詢服務提供者的網路地址,並使用該地址呼叫服務提供.者的介面.
各位服務與服務元件使用統一的心跳機制,如果服務發現元件長時間無法與某微服務例項通訊,就會被登出。
微服務網路地址發生變更時,會重新註冊到服務發現元件,避免人工修改提供者的網路地址。
服務發現元件核心功能:
服務登錄檔:記錄微服務資訊的服務的名稱、ip、埠等,服務登錄檔查詢API和管理API。
服務註冊與服務發現:服務註冊是微服務啟動時,件自己的資訊註冊到服務發現元件上的過程。服務發現是指查詢可用微服務列表及其網路地址的機制。
服務檢查:服務發現元件使用過一定機制定時檢測已註冊的服務。
服務同步:當多個註冊中心Server組成叢集的時候,如果其中一個註冊中心註冊了一個Client,那麼這個Client就會自動同步到其他叢集中的Server.
服務提供者(Eureka Client)
啟動的時候通過REST請求將自己註冊到Eureka Server 上,同時帶上自身服務的元資料資訊。通過eureka:
instance:metadata-map: 進行設定。其他的消費者就可以從Server獲取。eureka: client: register-with-eureka引數控制自己是否能夠被註冊預設為true.
在註冊完成後,服務提供者會維護一個心跳(傳送通訊包)來持續告訴Server是否存活,如果超過一定時間沒有心跳,那麼就會被Server判斷該Cliebt失效,將其狀態設定為“DOWN”,並將其從服務列表中去除。
服務消費者(Eureka Client)
啟動服務消費者後,定期傳送REST請求去獲取服務列表。
獲取到服務列表後,通過服務名可以獲得具體提供服務的例項名和該例項的元資料資訊。
消費者可以通過Ribbon或者Feign來使用服務提供者。
服務提供者和服務消費者從配置上沒有區別,只是可能需要配置metadata元資料資訊來提供給消費者。兩者只有行為上的區別,一個提供服務(低層的業務),一個消費服務(高層的業務,通過http請求去請求呼叫提供者中的相關方法)。
Regin和Zone
region:可以簡單理解為地理上的分割槽,比如亞洲地區,或者華北地區,再或者北京等等,沒有具體大小的限制。根據專案具體的情況,可以自行合理劃分region。
zone:可以簡單理解為region內的具體機房,比如說region劃分為北京,然後北京有兩個機房,就可以在此region之下劃分出zone1,zone2兩個zone
一個region中可以有多個zone,每個服務需要註冊到一個zone中,所以每個client對應一個regin和一個zone.在進行服務呼叫的時候,優先訪問同一個zone中的服務提供方,若訪問不到,再訪問其他zone.不過這個可以引數控制,eureka.client.prefer-same-zone-eureka控制,預設為true,也就是優先找同一個zone中的。
@EnableDiscoveryClient和@EnableEurekaClient區別
SpringCLoud中的“Discovery Service”有多種實現,比如:eureka, consul, zookeeper。
1 @EnableDiscoveryClient註解是基於spring-cloud-commons依賴,並且在classpath中實現;
2 @EnableEurekaClient註解是基於spring-cloud-netflix依賴,只能為eureka作用;