springcloud線上發佈超時方案之feign優化(ribbon飢餓加載)

springcloud線上發佈超時系列文章:
springcloud線上發佈超時方案之feign優化(ribbon飢餓加載)
springcloud線上發佈超時方案之grpc優化
springcloud線上發佈超時方案之終極殺招:預熱(測試用例)

在高併發情況下發布應用時,經常會發現監控中有很多超時報錯或者斷路器打開,下圖中可以看到監控情況,測試時也會偶現第一次feign調用出錯,第二次就會恢復正常。
在這裏插入圖片描述

問題分析

大家都知道,這裏feign底層是集成的ribbon,這裏ribbon也會有http連接池,這裏的連接池是長連接,定時初始化一批並銷燬舊連接,這裏還包括一些上下文需要初始化,但是在容器初始化好時,ribbon底層的client是未初始化的,當第一次調用時,有一個初始化過程會導致超時,一般情況下會說需要調整超時時間,但是在電商高併發情況下,這裏肯定時不現實的,響應請求都需要ms級別。

解決方案

ribbon飢餓加載

這裏可以通過配置ribbon飢餓加載來減少出錯次數,如下:

ribbon:
  # 飢餓加載
  eager-load:
    # 是否開啓飢餓加載
    enabled: true
    # 飢餓加載的服務
    clients: demo-goods,demo-product

這裏爲什麼說不能完全解決呢?因爲在發佈時流量切換的瞬間,流量太大,並不是僅僅ribbon需要初始化,hystrix、web容器線程池等都需要初始化或者擴容,這裏也需要耗時,所以這裏的飢餓加載僅僅只是做到了發佈時減少錯誤數。

zuul飢餓加載

網關作爲對外請求的入口,zuul內部使用Ribbon調用其他服務,Spring Cloud默認在第一次調用時懶加載Ribbon客戶端。zuul同樣需要維護一個相對的子應用環境的上下文,所以也需要啓動時飢餓加載。

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