概述: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定時更新服務實例,第一次全量拉取服務實例,以後就是增量拉取,也就是從變動隊列拉取變動實例信息。
微服務
在生產環境中,因爲外界或網絡因素,單節點Server可能並不適用,支持集羣部署體現出了Eureka的高可用性。url
多個Eureka Server相互註冊,組成一個集羣,經過eureka.client.service-url.defaultZone配置,把每一個eureka-server視爲一個服務提供者註冊到其餘server上。spa
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分爲服務提供者與服務消費者兩個角色,client端註冊Eureka須要把集羣地址配在eureka.client.service-url.defaultZone上,其實也能夠配置某一個Eureka Server上,由於Eureka Server的服務同步機制。
每一個Eureka服務發生變化時,各個服務之間定時同步,中間過程當中每一個服務可能不一致,最終會保證服務的一致性。
複製代碼
爲保證集羣中全部Eureka Server節點的狀態同步,全部如下操做都會同步到集羣的全部服務上:服務註冊(Registers),服務更新(Renewals),服務取消(Cancels),服務超時(Expirations)和服務狀態變動(Status Changes)。 具體是com.netflix.eureka.registry.PeerAwareInstanceRegistryImpl
服務註冊:註冊以後複製到其餘全部節點
服務取消:
Eureka Server自我保護機制是指當因爲網絡等各方面緣由致使Eureka Server每分鐘應收到的心跳數小於實際收到的心跳數,會觸發Eureka Server的保護機制,全部服務都不會移除下線。
複製代碼
在這裏須要解釋一下應收到的心跳數如何計算:
假若有3個實例註冊在eureka server上,那麼正常狀況下Renews(last min)即每分鐘接收到的心跳數就是6,指望接收到的心跳數就是
6*0.85=5.1,那麼指望接收到的心跳數就是5(若是不爲整數,就是去尾法),當最近1分鐘接收到的心跳數小於指望心跳數,就會開啓保護機制。
複製代碼