Eureka服務下線后快速感知配置


  現在由於eureka服務越來越多,發現服務提供者在停掉很久之后,服務調用者很長時間並沒有感知到變化,依舊還在持續調用下線的服務,導致長時間后才能返回錯誤,因此需要調整eureka服務和客戶端的配置,以便實現服務下線后快速感知。

  需要調整服務注冊中心、服務提供者和服務消費者三個配置。

服務注冊中心EurekaServer

先上要更改的配置:

eureka:
  server:  #配置屬性,但由於 Eureka 自我保護模式以及心跳周期長的原因,經常會遇到 Eureka Server 不剔除已關停的節點的問題
    enable-self-preservation: false # 設為false,關閉自我保護
    eviction-interval-timer-in-ms: 5000 # 清理間隔(單位毫秒,默認是60*1000)啟用主動失效,並且每次主動失效檢測間隔為3s

1.先要關閉自我保護 enable-self-preservation: false

2.eviction-interval-timer-in-ms 啟用主動失效,並且每次主動失效檢測間隔為5s

  Eureka Server會定時(間隔值是eureka.server.eviction-interval-timer-in-ms,默認值為0,默認情況不刪除實例)進行檢查,如果發現實例在在一定時間(此值由客戶端設置的eureka.instance.lease-expiration-duration-in-seconds定義,默認值為90s)內沒有收到心跳,則會注銷此實例。

  有些文檔指出還需要設置下面的兩個參數(上下兩種寫法),但都測試后暫時沒發現什么強關聯性,這里暫時先不設置。

Eureka服務提供方、Eureka服務調用方修改如下配置:

eureka:
  instance:
    prefer-ip-address: true
 lease-renewal-interval-in-seconds: 4
    lease-expiration-duration-in-seconds: 12
  client:
    serviceUrl:
      defaultZone: http://localhost:1025/eureka
 fetch-registry: true registry-fetch-interval-seconds: 8

  客戶端通過eureka.instance.lease-renewal-interval-in-seconds 每隔這個時間會主動心跳一次,默認值為30s,更新自己的狀態。Eureka Server收到心跳后,會通知集群里的其它Eureka Server更新此實例的狀態。

  lease-expiration-duration-in-seconds 設置服務過期時間配置,超過這個時間沒有接收到心跳EurekaServer就會將這個實例剔除,一般是lease-renewal-interval-in-seconds的3倍。

  Eureka Server會定時(間隔值是eureka.server.eviction-interval-timer-in-ms,默認值為0,默認情況不刪除實例)進行檢查,如果發現實例在在一定時間(此值由eureka.instance.lease-expiration-duration-in-seconds定義,默認值為90s)內沒有收到心跳,則會注銷此實例。
經過測試設置4s上報一次心跳,12s內無跳就讓注冊中心剔除服務比較合理,上報時間若為2s,1000個服務會造成對注冊中心請求的壓力,且2s有可能網絡抖動,整個時長6s無響應就判為下線會造成並發壓力。

  消費端為了能快速響應服務請求會從Eureka Server拉取服務地址清單后緩存到本地(后面會增量獲取),fetch-registry要設置為true,定期的更新客戶端的服務清單時間 registry-fetch-interval-seconds: 8,這是消費端的設置。

測試總結

  • 只設置服務端Eureka Server的配置是無效的,還需要設置客戶端來配合。
  • 調用方訪問一個在注冊中心不存在服務ID響應是非常快的,但如果訪問一個ID還存在,但對應ip服務已經掛了的服務就是404,長時間無響應。
  • 服務提供者進程意外退出或服務完全卡住(是整個服務無法響應)情況是一樣的,都是在指定服務的lease-expiration-duration-in-seconds時間內無心跳就會從注冊中心剔除。
  • 注冊中心把服務剔除后,調用方還需要時間刷新到本地緩存。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM