首頁>技術>

Eureka 是Spring Cloud Netflix 微服務套件中的一部分,它基於Netflix Eureka做了二次開發,主要負責完成微服務架構中的服務治理功能。

Eureka 基礎架構三個核心要素

1:服務註冊中心

2:服務提供者

3:服務消費者

服務治理主要分為:

1:服務註冊:

在服務治理框架中,通常都會構建一個服務註冊中心,每個服務提供者需要向註冊中心,登記自己的註冊資訊。比如IP,埠號,版本號,服務名,通訊協議等等附加資訊告知註冊中心,註冊中心會根據服務名,進行分類服務清單。例如下圖:

eureka維護分類服務清單,是透過一個雙層Map, 第一層Map的key就是服務名,例如上圖的HELLO-SERVICE,第二層的Key就是具體的例項資訊,例如上圖的DLBOOH........:hello-service:8081

2:服務發現

由於在服務治理框架下運作程式,服務間的呼叫不在是透過指定具體的例項地址來實現,服務間的呼叫透過服務名來呼叫,例如:http://hello-service:8081/hello。所以當服務呼叫方 想要呼叫服務提供方的介面時,服務呼叫方是不知道服務提供方的具體例項地址的, 因此呼叫方需要向註冊中心Eureka諮詢服務,並獲取所有服務的例項清單。例如:現有服務B想要呼叫服務A,服務B就需要向註冊中心發起請求獲取服務A的例項清單,註冊中心返回服務A的例項清單,然後服務B會從清單中以某種策略輪詢訪問清單中的的例項,實現負載均衡的效果 訪問方式可以透過 Ribbon。

實際生產專案中,不會在每一次請求中都獲取服務列表清單,這樣做效率低下。實際場景中快取和服務剔除等機制也會有一些不同的實現方式

3:服務同步

當Eureka實現高可用後,服務提供者可分別註冊到叢集中的不同服務註冊中心上,也就是說 它們的資訊分別被不同的註冊中心維護,此時由於服務中心互相註冊為服務(高可用),當服務提供者傳送註冊請求到一個服務註冊中心時,它會將該請求轉發同步給叢集中的其他註冊中心,從而實現服務註冊中心的服務同步。透過服務同步,兩個服務提供者的服務資訊就可以透過這兩臺服務註冊中心中的任意一臺獲取到

4:服務續約

在註冊完服務之後,服務提供者會維護一個心跳用來持續告訴Eureka“我還活著”,以防止Eureka的剔除服務將該服務從列表清單中排除出去,我們稱該操作為服務續約

關於服務續約有兩個重要的屬性,

##用於定義服務續約任務的呼叫間隔時間,預設為30秒

eureka.instance.lease-renewal-interval-in-seconds=30

##引數用於定義服務失效的時間,預設為90秒

eureka.instance.lease-expiration-duration-in-seconds=90

5:獲取服務

當服務消費者程式啟動時,它會發送一個Rest請求給註冊中心,來獲取上面註冊的服務清單,為了效能考慮,Eureka會維護一份只讀的服務清單來返回給客戶端,同時該快取清單會每隔30秒更新一次。

獲取服務是服務消費者的基礎,所以必須確保eureka.client.fetch-registry=true 預設為true,若希望修改快取清單的更新時間,可以透過eureka.client.registry-fetch-interval-seconds=30 進行修改,預設30秒,引數單位秒

6:服務呼叫

獲取服務清單後,透過服務名可以獲取例項的名和例項的元資料(ip,port等等)利用Ribbon實現輪詢方式呼叫服務提供方。

7: 服務下線

當服務下線後,正常情況下 我們是不希望,服務消費方繼續呼叫已經下線的服務的,所以再服務提供方正常關閉時,會觸發一個服務下線的REST請求,告訴Eureka “我要下線了”。Eureka收到請求後,會將此服務設定為(DOWN),並將此訊息廣播到出去,更新快取清單。

8:服務中心的失效剔除

當服務非正常關閉時,比如機器Down了,斷電,記憶體溢位,網路故障等等。這時候是不會觸發服務下線的REST的請求,為了將這些已經無法提供的服務剔除,Eureka Server會在啟動時,建立一個定時任務,預設每隔60秒將清單中超時沒有續約的剔除。

22
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 看了這麼多原始碼,介面和抽象類到底該怎麼用?