Eureka是什么?
Eureka是Netflix開發的服務發現框架,本身是一個基於REST的服務,主要用於定位運行在AWS域中的中間層服務,以達到負載均衡和中間層服務故障轉移的目的。SpringCloud將它集成在其子項目spring-cloud-netflix中,以實現SpringCloud的服務發現功能。
Eureka包含兩個組件:Eureka Server和Eureka Client。
Eureka Server提供服務注冊服務,各個節點啟動后,會在Eureka Server中進行注冊,這樣EurekaServer中的服務注冊表中將會存儲所有可用服務節點的信息,服務節點的信息可以在界面中直觀的看到。
Eureka Client是一個java客戶端,用於簡化與Eureka Server的交互,客戶端同時也就是一個內置的、使用輪詢(round-robin)負載算法的負載均衡器。
(注:什么是AWS域??? https://aws.amazon.com/cn/about-aws/
)
Eureka原理

(注:Eureka Server之間通過復制的方式完成數據的同步)
上圖是來自eureka的官方架構圖,這是基於集群配置的eureka:
- 處於不同節點的eureka通過Replicate進行數據同步
- Application Service為服務提供者
- Application Client為服務消費者
- Make Remote Call完成一次服務調用
服務啟動后向Eureka注冊,Eureka Server會將注冊信息向其他Eureka Server進行同步,當服務消費者要調用服務提供者,則向服務注冊中心獲取服務提供者地址,然后會將服務提供者地址緩存在本地,下次再調用時,則直接從本地緩存中取,完成一次調用。
當服務注冊中心Eureka Server檢測到服務提供者因為宕機、網絡原因不可用時,則在服務注冊中心將服務置為DOWN
狀態,並把當前服務提供者狀態向訂閱者發布,訂閱過的服務消費者更新本地緩存。
服務提供者在啟動后,周期性(默認30秒)向Eureka Server發送心跳,以證明當前服務是可用狀態。Eureka Server在一定的時間(默認90秒)未收到客戶端的心跳,則認為服務宕機,注銷該實例。
Eureka心跳機制
在應用啟動后,節點們將會向Eureka Server發送心跳,默認周期為30秒,如果Eureka Server在多個心跳周期內沒有接收到某個節點的心跳,Eureka Server將會從服務注冊表中把這個服務節點移除(默認90秒)。
重點: GitHub地址:
https://github.com/Netflix/eureka