Eureka【參數調優】


1、常見問題

  • 1、為什么服務下線了,Eureka Server接口返回的信息還會存在?
  • 2、為什么服務上線了,Eureka Client不能及時獲取到?
  • 3、為什么偶爾會有如下提示:
    EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RENOT. RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE

2、解決方法

  • 針對第一個問題,Eureka Server並不是強一致的,因此registry中會存留已過期的實例信息,有一下幾個原因:
    • 1、應用實例異常掛掉,沒能在掛掉之前告知Eureka Server要下線該服務實例信息。這種情況下就需要依賴Eureka Server的EvictionTask去剔除。
    • 2、應用實例下線時有告知Eureka Server下線,但是由於Eureka Server的REST API有response cache,因此需要等待緩存過期才能更新。
    • 3、Eureka Server由於開啟並引入了SELF PRESERVATION模式,導致registry的信息不會因為過期而被剔除掉,直到退出SELF PRESERVATION模式。
  • 針對第二個問題,可以調整EvictionTask的調度頻率,比如下面的配置,將調度間隔默認的60秒,調整為15秒:
    eureka.server.eviction-interval-timer-in-ms=5000
  • 針對response cache的問題,可以根據情況考慮關閉readOnlyCacheMap:

    eureka.server.use-read-only-response-cache=false
  • 或者調整readWriteCacheMap的過期時間:

    eureka.server.response-cache-auto-expiration-in-seconds=60
  • 針對SELF PRESERVATION的問題,在測試環境可以將enable-self-preservation設置為false:

    eureka.server.enable-self-preservation=false
  • 關閉的話,則會提示:

    RENEWALS ARE LESSER THAN THE THRESHOLD. THE SELF PRESERVATION MODE IS TURNED OFF. THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.

    或者:

    THE SELF PRESERVATION MODE IR TURED OFF.THIS MAY NOT PROTECT INSTANCE EXPIRY IN CASE OF NETWORK/OTHER PROBLEMS.
  • 針對新服務上線,Eureka Client獲取不及時的問題,在測試環境,可以適當提高Client端拉取Server注冊信息的頻率,例如下面將默認的30秒改為15秒:
    eureka.client.registry-fetch-interval-seconds=5
  • 針對SELF PRESERVATION問題,在實際生產過程中,經常會有網絡抖動等問題,造成服務實例與Eureka Server的心跳未能如期保持,但是服務實例本身是健康的,這個時候如果按照租約機制剔除的話,會造成誤判,如果大范圍誤判的話,可能會導致整個服務列表中的大部分注冊信息被剔除,從而導致沒有可用服務。Eureka為了解決這個問題引入可SELF PRESERVATION機制,當最近一分鍾接受到的續約的次數小於等於指定閥值的話,則關閉續約失效剔除,禁止定時任務剔除失效的實例,從而保護注冊信息,對於開發測試環境,開啟這個機制有時候反而會影響系統的持續集成,因此可以通過如下參數關閉該機制:
    eureka.server.enable-self-preservation=false

    在生產環境中,可以把renewalPercentThreshold及leaseRenewalIntervalInSeconds參數調小一點,進而提高SELF PRESERVATION機制的門檻,比如:

    eureka.instance.lease-renewal-interval-in-seconds=10
    eureka.server.renewal-percent-threshold=0.49

     

        

 


免責聲明!

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



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