天天看點

Spring Cloud-為什麼Eureka Client擷取服務執行個體這麼慢

  1. Eureka Client的注冊延遲

    Eureka Client啟動之後, 不是立即向Eureka Server注冊的, 而是有一個延遲的向服務端注冊的時間, 通過源碼, 可以發現預設的延遲時間是40s, 源碼在eureka-client-xx.jar的DufaultEurekaClientConfig類中, 代碼如下:

public int getInitialInstanceInfoReplicationIntervalSeconds() {
        return this.configInstance.getIntProperty(this.namespace + "appinfo.initial.replicate.time", 40).get();
 }      
  1. Eureka Server的響應緩存

    Eureka Server每隔30s更新一次響應緩存, 可通過配置eureka.server.response-cache-update-interval-ms來修改, 是以即便是剛剛注冊的服務執行個體, 也不會立即出現在注冊清單中

  2. Eureka Client的緩存

    Eureka Client保留注冊清單資訊的緩存, 該緩存每隔30s去更新(向Eureka Server請求)一次, 是以, Eureka Client重新整理本地緩存并發現其他服務執行個體的時間可能需要30s

  3. LoadBalancer的緩存

    Ribbon的負載平衡器從本地的Eureka Cient擷取服務注冊清單資訊, Ribbon本身還維護了緩存, 以避免每個請求都需要從Eureka Client擷取服務注冊清單資訊, 此緩存每隔30s重新整理一次(可由ribbon的相關配置修改), 是以可能需要至少30s的時間才能使用新注冊的執行個體

繼續閱讀