Eureka 註冊中心原理、學習
比擬場景:餐廳吃飯
1、先向收銀員(註冊中心)要個號牌(IP地址)。
2、飯菜到場就根據你號牌(IP地址)將飯菜端到你面前。
3、在整個就餐過程中,你隨時可以與收銀員進行互相溝通(監聽客戶端心跳)。
4、最後你吃完跑路了號牌回收(剔除服務器)。
原理: 與比擬場景序號對應理解。
1、服務提供方啓動後將註冊到 註冊中心,提供IP, 名字,什麼服務等信息,
2、服務調用方作爲客戶端註冊到註冊中心後,拉取註冊中心的服務列表,在通過負載均衡調用對應的服務提供方。
3、註冊中心可以建立集羣,生成多臺eureka,註冊中心爲了監測各個服務的心跳,將在每30S 向所註冊的服務發起請求判斷
4、服務是否掛掉,如果掛掉90S後將會將服務從註冊中心剔除。
一個服務可以監測多臺服務實例,從而可實現均衡負載。
總結:
Eureka特點
1、servlet 應用 Jersey 框架實現自身的 RESTful HTTP接口
2、服務的註冊通過 HTTP 協議實現 通過 JDK自帶的 Timer 實現定時任務:心跳、定時清理過期服務、節點同步
3、使用Google的guava包實現內存緩存
Eureka客戶端(服務器提供者)
1、服務啓動時,向註冊中心註冊服務,同時從一個服務註冊服務中查詢所有可用服務實例的庫,並緩存到本地;2、用來簡化與服務器的交互、作爲輪詢負載均衡器,並提供故障切換支持;
3、內置使用輪詢負載均衡算法;
4、默認發送心跳的週期是30s;
5、當一個服務器不可用,需要3個心跳才能讓服務器和客戶端的元數據相同。
eureka.instance.leaseRenewalIntervalInSeconds
eureka.instance.leaseExpirationDurationInSeconds
Eureka服務端:
即服務註冊中心;爲服務實例註冊管理和查詢可用實例提供了REST API;
配置步驟: 注意 以下的客戶端說的是作爲註冊到註冊中心的微服務,他相對於註冊中心就是客戶端,註冊中心就是服務端
一、加依賴 以下指POM文件
註冊中心:
<!--註冊中心:-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
服務提供者(客戶端)
<!--客戶端:-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
二、加註解 以下在啓動器上加註解
註冊中心 : @EnableEurekaServer
服務提供客戶端方:@EnableDiscoveryClient 此註解支持多種服務中心,如eureka,zk,等等,所以一般使用這個。
@EnableEurekaClient 只支持eureka所以用上一種
三、加配置 以下指application.yml配置文件
註冊中心工程:
#註冊中心:
server:
port: 10086
spring:
application:
name: eureka-server
eureka:
client:
register-with-eureka: false # 是否註冊自己的信息到EurekaServer,默認是true
fetch-registry: false # 是否拉取其它服務的信息,默認是true
service-url:
defaultZone: http://127.0.0.1:10086/eureka,http://127.0.0.1:10087/eureka
#註冊到當前地址中,實現eureka 集羣后面描述
instance:
lease-renewal-interval-in-seconds: 30 #每30S給其他服務發次請求,監測心跳
lease-expiration-duration-in-seconds: 90 #如果其他服務沒心跳,90S後剔除該服務
服務提供者:
#客戶端:
server:
port: 8081
spring:
application:
name: user-server
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka
registry-fetch-interval-seconds: 50 #客戶端拉取註冊中心的服務列表
關於Eureka 高可用的配置及講解:
爲了使eureka高可用,掛掉後依然可以使用所以將配置多臺eureka註冊中心實現集羣。
實現原理:如果需配置3臺註冊中心,那麼應該是A註冊到B、C ,B註冊到C、A C註冊到A,B
這樣互相註冊即可實現集羣配置。也就是上圖配置的多臺地址
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka,http://127.0.0.1:10087/eureka
registry-fetch-interval-seconds: 50 #客戶端拉取註冊中心的服務列表
關於Eureka 的自我保護機制與剔除服務機制:
剔除服務機制:當服務提供方(客戶端)註冊到Eureka後,每30S將會向Eureka發起一次請求表示自己有心跳
服務器正常,當90S都沒有發請求時候Eureka會認爲服務器宕機了,則會在60S後統一清除所有宕機的服務器。
自我保護機制:當服務沒有按每30S按時發請求時,Eureka將會統計15分鐘內心跳的請求成功概率,如果低於85%
則可能服務提供方有延遲問題或者網絡故障,這樣會將服務提供方保護起來不會剔除。
eureka:
server:
enable-self-preservation: false # 關閉自我保護模式(缺省爲打開)
eviction-interval-timer-in-ms: 1000 # 掃描失效服務的間隔時間(缺省爲60*1000ms)
https://files.cnblogs.com/files/lanSeGeDiao/springCloud-demo.zip
以上是springCloud的DEMO例子 請自行復制路徑到瀏覽器