SpringCloud的服務註冊中心(三) - 進一步瞭解 Eureka

1、服務治理參與者

  • 服務註冊中心: eureka-server
  • 服務提供者:HELLO-SERVICE
  • 服務消費者 :HELLO-CONSUMER

不少時候,客戶端既是服務提供者又是服務消費者,-》@EnableDiscoveryClient。緩存

服務提供者和服務消費者都是Eureka的客戶端,是大部分通訊行爲的主動發起者。服務器

 

2、各參與者之間的交互模式

Application-Service --(註冊、續約、下線)--》Eureka-Server網絡

Application-Service --(獲取registry)--》Eureka-Server負載均衡

 

Application-Client --(獲取registry)----》Eureka - Server微服務

Application-Client --(本地負載均衡下的遠程調用)----》Application - Servicerest

 

Eureka-Server1 --(複製) --》 Eureka-Server2 --(複製) --》 Eureka-Server3 --(複製) --》  Eureka-ServerNserver

3、流程描述

一、服務提供者

1.一、服務註冊

服務提供者 啓動時發送rest請求註冊本身到EurekaServer,註冊本身的一些元數據。blog

EurekaServer接收註冊內容,放到雙層map,第一層的key是服務名,第二層的key是具體服務實例名。事件

服務提供者:內存

eureka.client.register-with-eureka=true,默認值爲true。不然將不會啓動註冊操做。

EurekaServer:

1.二、服務同步 - regist

服務註冊中心之間由於互相註冊爲服務。因此,當服務提供者發送註冊請求到一個服務註冊中心時,它會將請求轉發給集羣中相連的其餘註冊中心,從而實現註冊中心之間的服務同步。

1.三、服務續約 - renew

註冊完服務以後,服務提供者會維持一個心跳用來告訴EurekaServer:我還在,防止EurekaServer的剔除任務將該服務實例從服務列表中排除出去!

二、服務消費者

2.一、獲取服務

啓動服務消費者時,服務消費者會發送一個請求給 服務註冊中心,來獲取上面註冊的服務清單。

服務註冊中心會每隔30秒更新一次服務緩存清單。

2.二、服務調用

服務消費者得到服務清單後,經過服務名能夠得到具體提供服務的實例名和實例元數據信息,能夠根據須要決定調用哪一個實例。

ribbon中默認採用輪詢方式進行調用,從而實現客戶端的負載均衡。

2.三、服務下線

服務實例關閉,會觸發一個服務下線的rest請求給EurekaServer,告訴服務器,我要下線了!

服務端收到下線請求,將該服務實例狀態設置爲下線,並傳播該下線事件。

三、服務註冊中心

3.一、失效剔除

服務實例非正常下線,如:內存溢出、網絡斷開等緣由致使服務實例沒法正常工做時,服務註冊中心沒法定期收到「服務下線「消息請求。

EurekaServer會有一個定時任務,默認每隔一段時間(60秒)從當前清單中剔除沒有續約(默認90秒)的服務實例。

3.二、自我保護

EurekaServer統計心跳失敗比例,若是15分鐘內低於85%,則觸發自我保護機制:保存當前實例信息,讓這些實例不會過時。

3、其餘概念

針對區域性故障的容錯集羣

一個region 對應多個 zone

微服務應用中使用ribbon調用服務時,會優先訪問同客戶端處於一個zone的服務實例,只有當同一個zone中沒有可用的服務實例時纔會訪問其餘zone中的實例。

相關文章
相關標籤/搜索