記 spring cloud gateway Hystrix 調優?

記 spring cloud gateway Hystrix 調優?

spring cloud gateway : 2.1.2

使用

根據官方配置,通過下面的方式就能添加 Hystrix
添加到 default-filters 所有的路由都可以使用到

spring.cloud.gateway.default-filters:
    - name: Hystrix
      args:
        name: globalcmd
        fallbackUri: forward:/errorFallback

分析


這裏有一個隱患,也就是所有,所有的 路由 都會共享一個 Hystrix 池(globalcmd)。
A服務出錯短路,導致B服務也訪問不了,這肯定不科學

希望服務之間能隔離,不要相互影響,也就是應該有獨立線程池( A_cmd,B_cmd,... 等)

通過查看源碼,也無法通過繼承重寫比較優雅的方式實現隔離(也就是每個服務獨立聲明cmd) 

如果願意手動配置服務的路由另說,但是這種方式放棄了註冊中心幫我們自動創建的路由,感覺不是很優雅,遂放棄。

解決


通過服務發現配置實現隔離
經過資料查找,發現服務的配置支持sple,可以達到我們的需求
配置如下:

spring.cloud.gateway.discovery.locator.filters:
	- name: Hystrix
	  args:
		name: serviceId+'_globalcmd'
		fallbackUri: "'forward:/errorFallback'"

請注意與 default-filters 的區別,default-filters 是所有的路由
這裏只是服務發現(註冊中心)的路由

        
結束語


這種方式 Hystrix 的配置都是統一配置了,如下:

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 6000
          semaphore:
            maxConcurrentRequests: 500

比如 A服務6秒超時,B服務3秒超時 等 更定製化的需求就沒法滿足(願意手動配就當我沒說)
目前我的做法是,通過調整部署架構達到,比如 A網關 6秒,B網關3秒 或者自定義 等
如果大家有更好的方法,請不吝指教,謝謝

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