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


一、服務治理參與者

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

很多時候,客戶端既是服務提供者又是服務消費者,-》@EnableDiscoveryClient。

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

 

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

Application-Service --(注冊、續約、下線)--》Eureka-Server

Application-Service --(獲取registry)--》Eureka-Server

 

Application-Client --(獲取registry)----》Eureka - Server

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

 

Eureka-Server1 --(復制) --》 Eureka-Server2 --(復制) --》 Eureka-Server3 --(復制) --》  Eureka-ServerN

三、流程描述

1、服務提供者

1.1、服務注冊

服務提供者 啟動時發送rest請求注冊自己到EurekaServer,注冊自己的一些元數據。

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

服務提供者:

eureka.client.register-with-eureka=true,默認值為true。否則將不會啟動注冊操作。

EurekaServer:

1.2、服務同步 - regist

服務注冊中心之間因為互相注冊為服務。所以,當服務提供者發送注冊請求到一個服務注冊中心時,它會將請求轉發給集群中相連的其他注冊中心,從而實現注冊中心之間的服務同步。

1.3、服務續約 - renew

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

2、服務消費者

2.1、獲取服務

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

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

2.2、服務調用

服務消費者獲得服務清單后,通過服務名可以獲得具體提供服務的實例名和實例元數據信息,可以根據需要決定調用哪個實例。

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

2.3、服務下線

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

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

3、服務注冊中心

3.1、失效剔除

服務實例非正常下線,如:內存溢出、網絡斷開等原因導致服務實例無法正常工作時,服務注冊中心無法按期收到“服務下線“消息請求。

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

3.2、自我保護

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

三、其他概念

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

一個region 對應多個 zone

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM