服務發現元件:Eureka
1、服務發現元件:Eureka
(1)Why Eureka?
Eureka來自生產環境
Spring Cloud對Eureka支援很好
(2) Eureka簡介
Eureka是Netflix開發的服務發現框架,本身是一個基於REST的服務,主要用於定位執行在AWS域中的中間層服務,以達到負載均衡和中間層服務故障轉移的目的。Spring Cloud將它整合在其子專案spring-cloud-netflix中,以實現Spring Cloud的服務發現功能。
Eureka 專案相當活躍,程式碼更新相當頻繁,目前最新的版本是1.5.5。Eureka 2.0的版本也正在緊鑼密鼓地開發中,2.0將會帶來更好的擴充套件性,並且使用細粒度的訂閱模型取代了基於拉取的模型,但是由於還沒有Release,故而不作講解。
(3) Eureka 原理
Region和Zone的關係
上圖是來自Eureka官方的架構圖,大致描述了Eureka叢集的工作過程。由於圖比較複雜,可能比較難看懂,這邊用通俗易懂的語言翻譯一下:
- Application Service 就相當於本書中的服務提供者(使用者微服務),Application Client就相當於本書中的服務消費者(電影微服務);
- Make Remote Call,可以簡單理解為呼叫RESTful的介面;
- us-east-1c、us-east-1d等是zone,它們都屬於us-east-1這個region;
由圖可知,Eureka包含兩個元件:Eureka Server 和 Eureka Client。
Eureka Server提供服務註冊服務,各個節點啟動後,會在Eureka Server中進行註冊,這樣Eureka Server中的服務登錄檔中將會儲存所有可用服務節點的資訊,服務節點的資訊可以在介面中直觀的看到。
Eureka Client是一個Java客戶端,用於簡化與Eureka Server的互動,客戶端同時也具備一個內建的、使用輪詢(round-robin)負載演算法的負載均衡器。
在應用啟動後,將會向Eureka Server傳送心跳(預設週期為30秒)。如果Eureka Server在多個心跳週期內沒有接收到某個節點的心跳,Eureka Server將會從服務登錄檔中把這個服務節點移除(預設90秒)。
Eureka Server之間將會通過複製的方式完成資料的同步。(詳見Eureka高可用章節)
Eureka還提供了客戶端快取的機制,即使所有的Eureka Server都掛掉,客戶端依然可以利用快取中的資訊消費其他服務的API。
綜上,Eureka通過心跳檢測、健康檢查、客戶端快取等機制,確保了系統的高可用性、靈活性和可伸縮性。
(4) 實現一個Eureka Server
(5)實現一個Eureka Client