Eureka使用及集羣部署

概述:Eureka是SpringCloud全家桶中一個主要組件,用於服務的註冊與發現,近期公司打算重構微服務架構,對Eureka集羣部署作了一番研究。spring

Eureka 是 Netflix 開源的服務註冊發現組件,服務端經過 REST 協議暴露服務,提供應用服務的註冊和發現的功能。網絡

全部的Eureka服務都被稱爲實例(instance)。Eureka包含Eureka Server和Eureka Client架構

EurekaClient又分爲服務提供者(Service Provider)和服務消費者(Service Consumer),每一個client均可視爲一個instance(實例) Service Provider :服務提供者,向 Eureka-Server 註冊自身服務、續約(發送心跳)、下線等操做 Service Consumer:服務消費者,它從Eureka-Server獲取服務列表,分爲全量獲取和增量獲取。ide

Eureka Server接收到心跳時,會更新對應的服務實例的信息,若是實例信息發生變化,則將實例加入最近變動實例隊列中。服務消費者會建立一個timer定時更新服務實例,第一次全量拉取服務實例,以後就是增量拉取,也就是從變動隊列拉取變動實例信息。微服務

Eureka Server集羣部署

在生產環境中,因爲外界或網絡因素,單節點Server可能並不適用,支持集羣部署體現出了Eureka的高可用性。url

多個Eureka Server相互註冊,組成一個集羣,經過eureka.client.service-url.defaultZone配置,把每一個eureka-server視爲一個服務提供者註冊到其餘server上。spa

這裏須要注意的是,若是咱們須要經過ip互相註冊,則eureka.client.instance.hostname主機名不要配,由於默認是以主機名方式註冊,同時須要設置eureka.instance.prefer-ip-address=true,默認false。 若是咱們須要經過主機名互相註冊,則須要使用hostname。(示例使用的域名方式註冊)

Eureka配置

  • eureka.instance.*: Eureka實例配置,Eureka不管是作Server,Client都須要的公共配置項。對應的配置類爲org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean。.net

  • eureka.server.*: Eureka Server配置的選項,即便用eureka作註冊中心時才須要配置這個選項。對應的配置類爲org.springframework.cloud.netflix.eureka.EurekaServerConfigBean。3d

  • eureka.client.*: Eureka Client配置的選項,即服務須要向註冊中心註冊或使用註冊中心中的服務時才須要配置這些選項。對應的配置類爲org.springframework.cloud.netflix.eureka.server.EurekaClientConfigBeancode

    Eureka Client

    Eureka Client分爲服務提供者與服務消費者兩個角色,client端註冊Eureka須要把集羣地址配在eureka.client.service-url.defaultZone上,其實也能夠配置某一個Eureka Server上,由於Eureka Server的服務同步機制。

Eureka Server服務同步

每一個Eureka服務發生變化時,各個服務之間定時同步,中間過程當中每一個服務可能不一致,最終會保證服務的一致性。
複製代碼

爲保證集羣中全部Eureka Server節點的狀態同步,全部如下操做都會同步到集羣的全部服務上:服務註冊(Registers),服務更新(Renewals),服務取消(Cancels),服務超時(Expirations)和服務狀態變動(Status Changes)。 具體是com.netflix.eureka.registry.PeerAwareInstanceRegistryImpl

服務註冊:註冊以後複製到其餘全部節點

, 服務更新:

從源碼能夠看到更新操做實際上是執行了一遍replicateToPeers方法執行心跳動做,也就是從新向server發送心跳,續約。

服務取消:

從源碼能夠看到服務取消就是調用replicateToPeers方法執行取消動做。 服務超時:

從源碼能夠看到服務取消就是調用replicateToPeers方法執行更新服務狀態動做。

Eureka Server保護機制:

Eureka Server自我保護機制是指當因爲網絡等各方面緣由致使Eureka Server每分鐘應收到的心跳數小於實際收到的心跳數,會觸發Eureka Server的保護機制,全部服務都不會移除下線。
複製代碼

在這裏須要解釋一下應收到的心跳數如何計算:

在Eureka監控界面有Renews threshold和Renews(last min),Renews threshold指eureka server指望收到的心跳數,根據eureka的配置, LeaseRenewalIntervalInSeconds :eureka客戶端發送心跳的頻率,默認30s LeaseExpirationDurationInSeconds:eureka server多久接收不到心跳清除instance實例,默認90s RenewalPercentThreshold:eureka server 閾值因子,默認是 0.85 ,若是閾值比最小值大,則自我保護模式開啓

假若有3個實例註冊在eureka server上,那麼正常狀況下Renews(last min)即每分鐘接收到的心跳數就是6,指望接收到的心跳數就是
6*0.85=5.1,那麼指望接收到的心跳數就是5(若是不爲整數,就是去尾法),當最近1分鐘接收到的心跳數小於指望心跳數,就會開啓保護機制。
複製代碼
相關文章
相關標籤/搜索