1. 程式人生 > >Spring Cloud(一)註冊中心Eureka

Spring Cloud(一)註冊中心Eureka

Eureka

Spring Cloud 封裝了 Netflix 公司開發的 Eureka 模組來實現服務註冊和發現。Eureka 採用了 C-S 的設計架構。Eureka Server 作為服務註冊功能的伺服器,它是服務註冊中心。而系統中的其他微服務,使用 Eureka 的客戶端連線到 Eureka Server,並維持心跳連線。這樣系統的維護人員就可以通過 Eureka Server 來監控系統中各個微服務是否正常執行。Spring Cloud 的一些其他模組(比如Zuul)就可以通過 Eureka Server 來發現系統中的其他微服務,並執行相關的邏輯。

Eureka由兩個元件組成:Eureka伺服器和Eureka客戶端。Eureka伺服器用作服務註冊伺服器。Eureka客戶端是一個java客戶端,用來簡化與伺服器的互動、作為輪詢負載均衡器,並提供服務的故障切換支援。Netflix在其生產環境中使用的是另外的客戶端,它提供基於流量、資源利用率以及出錯狀態的加權負載均衡。

建立

新增依賴

    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-eureka-server</artifactId>
    </dependency>

啟動類新增Eureka Sever 註解

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {

	public static void main(String[] args) {
		SpringApplication.run(EurekaApplication.class, args);
	}
}

配置檔案

#服務埠
server.port=8088
#服務名
spring.application.name=cloud-eureka


#eureka

#表示eureka server至上一次收到client的心跳之後,等待下一次心跳的超時時間,在這個時間內若沒收到下一次心跳,則將移除該instance。預設為90秒
eureka.instance.lease-expiration-duration-in-seconds=90

#eureka server清理無效節點的時間間隔,預設60000毫秒,即60秒
eureka.server.eviction-interval-timer-in-ms=60000

#設為false,關閉Eureka Server的自我保護
eureka.server.enable-self-preservation=false

#是否將自身註冊,eureka是服務端,不需要被註冊呼叫
eureka.client.register-with-eureka=false

#表示是否從Eureka Server獲取註冊資訊,預設為true。
eureka.client.fetch-registry=false

#指定服務註冊中心的位置
eureka.client.service-url.defaultZone=http://localhost:8000/eureka/

Eureka的自我保護

如果在Eureka Server的首頁看到以下這段提示,則說明Eureka已經進入了保護模式。

eureka.server.enable-self-preservation=true

是否開啟自我保護模式,預設為true。

預設情況下,如果Eureka Server在一定時間內沒有接收到某個微服務例項的心跳,Eureka Server將會登出該例項(預設90秒)。但是當網路分割槽故障發生時,微服務與Eureka Server之間無法正常通訊,以上行為可能變得非常危險了——因為微服務本身其實是健康的,此時本不應該登出這個微服務。

Eureka通過“自我保護模式”來解決這個問題——當Eureka Server節點在短時間內丟失過多客戶端時(可能發生了網路分割槽故障),那麼這個節點就會進入自我保護模式。一旦進入該模式,Eureka Server就會保護服務登錄檔中的資訊,不再刪除服務登錄檔中的資料(也就是不會登出任何微服務)。當網路故障恢復後,該Eureka Server節點會自動退出自我保護模式。

綜上,自我保護模式是一種應對網路異常的安全保護措施。它的架構哲學是寧可同時保留所有微服務(健康的微服務和不健康的微服務都會保留),也不盲目登出任何健康的微服務。使用自我保護模式,可以讓Eureka叢集更加的健壯、穩定。

eureka.server.eviction-interval-timer-in-ms=60000

eureka server清理無效節點的時間間隔,預設60000毫秒,即60秒

Eureka原始碼解析