勤勞的搬運工--SpringCloud--Eureka集羣

eureka 架構

基本原理

上圖是來自eureka的官方架構圖,這是基於集羣配置的eureka; 
- 處於不同節點的eureka通過Replicate進行數據同步 
- Application Service爲服務提供者 
- Application Client爲服務消費者 
- Make Remote Call完成一次服務調用

服務啓動後向Eureka註冊,Eureka Server會將註冊信息向其他Eureka Server進行同步,當服務消費者要調用服務提供者,則向服務註冊中心獲取服務提供者地址,然後會將服務提供者地址緩存在本地,下次再調用時,則直接從本地緩存中取,完成一次調用。

當服務註冊中心Eureka Server檢測到服務提供者因爲宕機、網絡原因不可用時,則在服務註冊中心將服務置爲DOWN狀態,並把當前服務提供者狀態向訂閱者發佈,訂閱過的服務消費者更新本地緩存。

服務提供者在啓動後,週期性(默認30秒)向Eureka Server發送心跳,以證明當前服務是可用狀態。Eureka Server在一定的時間(默認90秒)未收到客戶端的心跳,則認爲服務宕機,註銷該實例。

Eureka的自我保護機制

在默認配置中,Eureka Server在默認90s沒有得到客戶端的心跳,則註銷該實例,但是往往因爲微服務跨進程調用,網絡通信往往會面臨着各種問題,比如微服務狀態正常,但是因爲網絡分區故障時,Eureka Server註銷服務實例則會讓大部分微服務不可用,這很危險,因爲服務明明沒有問題。

爲了解決這個問題,Eureka 有自我保護機制,通過在Eureka Server配置如下參數,可啓動保護機制

eureka.server.enable-self-preservation=true
  • 1

它的原理是,當Eureka Server節點在短時間內丟失過多的客戶端時(可能發送了網絡故障),那麼這個節點將進入自我保護模式,不再註銷任何微服務,當網絡故障回覆後,該節點會自動退出自我保護模式。

自我保護模式的架構哲學是寧可放過一個,決不可錯殺一千

Eureka Server高可用集羣

理論上來講,因爲服務消費者本地緩存了服務提供者的地址,即使Eureka Server宕機,也不會影響服務之間的調用,但是一旦新服務上線,已經在緩存在本地的服務提供者不可用了,服務消費者也無法知道,所以保證Eureka Server的高可用還是很有必要的。

在分佈式系統中,任何的地方存在單點,整個體系就不是高可用的,Eureka 也一樣,在上面的架構圖中Eureka Server不是以單點存在的,而是以集羣的方式對外提供服務。

這節我們說說如何將Eureka Server進行集羣配置(在本地搭建一個僞集羣)。 
本地示例代碼:discovery-cluster 
- 配置系統的hosts(linux操作系統)

127.0.0.1  discovery1 discovery2
  • 1
  • 配置文件application.yml
spring:
  application:
    name: discovery-cluster
---
spring:
  profiles: discovery1
server:
  port: 8761
eureka:
  instance:
    hostname: discovery1
  client:
    service-url:
      default-zone: http://discovery2:8762/eureka

---
spring:
  profiles: discovery2
server:
  port: 8762
eureka:
  instance:
    hostname: discovery2
  client:
    service-url:
      default-zone: http://discovery1:8761/eureka
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

配置文件是通過兩個Eureka Server互相註冊,這裏有三段配置,第一段配置爲公共配置,配置了應用名稱,第二段爲名discovery1的配置,第三段爲discovery2的配置。在項目啓動可以通過 
--spring.profiles.active={配置名稱} 來啓動不同的配置。

  • 測試 

    1)在discovery-cluster目錄下,使用mvn package打包項目 
    2)使用下面命令啓動兩個Eureka Server節點 
    java -jar discovery-cluster-0.0.1-SNAPSHOT.jar --spring.profiles.active=discovery1 

    java -jar discovery-cluster-0.0.1-SNAPSHOT.jar --spring.profiles.active=discovery2 

    3)在瀏覽器上分別輸入http://discovery1:8761http://discovery2:8762查看註冊的服務。


啓動兩個Eureka Server.png
  • 客戶端修改 
    客戶端要把自己註冊到集羣中,只需在default-zone配置兩個地址即可
eureka:
   client:
      service-url:
          default-zone:http://discovery1:8761/eureka,http://discovery2:8762/eureka
  • 1
  • 2
  • 3
  • 4

非Java服務註冊到Eureak Server

作爲服務註冊中心,應該是語言無關的,使用其他語言的服務也可以通過調用Eureka Server的Rest API 註冊服務,這裏不詳細展開

原文出自 https://blog.csdn.net/jrn1012/article/details/77837671

總結:

    需要在客戶端配置文件中修改default-zone字段,有幾個Eureka註冊中心就需要default-zone加入幾個地址

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