Eureka 註冊中心原理、學習

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例子 請自行復制路徑到瀏覽器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章