【趕快收藏】Hystrix實戰,優雅提高系統的魯棒性

背景

最近接手了一個系統,其功能都是查詢。查詢分了兩種方式,一種是公司集團提供的查詢能力,支持全國各個省份的查詢,可是業務高峯期時服務響應比較慢;另一種是各省的分公司都分別提供了對應的查詢能力,可是服務質量相對較差,業務高峯期服務超時較多,並且分公司系統升級時也會影響服務質量。爲了提高服務查詢的成功率,能夠將兩種查詢方式結合起來。比較完備方案就是優先使用各省分公司提供的服務,當分公司的服務質量降低後降級到公司集團對應的服務。很早就聽過Hystrix,用在現用系統服務質量提高的改造上,再適合不過了。html

Hystrix簡介

Hystrix是Netflix開源的一款容錯系統, 能幫助開發者碼出具有強大的容錯能力和魯棒性的程序!git

Hystrix功能

一、對依賴的服務(HTTP調用、SOA服務)進行保護, 而且把控住因爲依賴服務所帶來的的延遲和失敗。github

二、防止在一個複雜的分佈式系統裏出現級聯失效(cascading failures)。web

三、快速失敗(Fail fast),而且快速恢復依賴服務。segmentfault

四、優雅的降級。緩存

五、實時的監控和報警。服務器

健康狀態系統

請求被阻塞系統

 任何的RPC均可能會面臨三種狀況:成功、失敗、超時。若是一次用戶請求所依賴外部服務(A,H,I,P)有任何一個不可用,就有可能致使整個用戶請求被阻塞。考慮到應用容器的線程數目基本都是固定的,當在高併發的狀況下,某一外部依賴的服務超時阻塞,就有可能使得整個主線程池被佔滿 線程池被佔滿就會致使整個服務不可用,而依賴該服務的其餘服務,就又可能會重複產生上述問題。所以整個系統就像雪崩同樣逐漸的擴散、坍塌、崩潰了!架構

艙壁隔離模式(Bulkheads)

貨船爲了進行防止漏水和火災的擴散, 將船的底部劃分紅一個個的艙室, 這樣一個艙室進水不會致使整艘船沉沒。併發

服務雪崩

 

隔離架構

降級-觸發fallback

一、run()/construct方法拋出非HystrixBadRequestException異常app

二、run()/construct()運行超時

三、熔斷器啓動

四、線程池/信號量拒絕

隔離策略

線程池隔離:會帶來線程開銷

Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("ThreadPoolTestGroup")) .andCommandKey(HystrixCommandKey.Factory.asKey(「testCommandKey"))
        //與其餘命名的線程池自然隔離
      .andThreadPoolKey(HystrixThreadPoolKey.Factory.asKey("ThreadPoolTest"))

信號量隔離:服務的併發數大於信號量閾值時將進入fallback 採用資源計數法,TryableSemaphore

.andCommandPropertiesDefaults(  // 配置信號量隔離
 HystrixCommandProperties.Setter() .withExecutionIsolationStrategy(ExecutionIsolationStrategy.SEMAPHORE) .withExecutionIsolationSemaphoreMaxConcurrentRequests(3) // fallback(降級)調用最大的併發數
    .withFallbackIsolationSemaphoreMaxConcurrentRequests(10))

熔斷器

熔斷至關於家裏電壓過大電路的跳閘功能, 跳閘能夠保護咱們的電器, 在代碼中類比就是將調用的服務直接給屏蔽了, 再也不調用調用遠程服務器的服務 舉個栗子,配置熔斷策略爲 當請求錯誤比例在5s內>50%時, 該服務將進入熔斷狀態。

熔斷器默認工做時間,默認:5秒, 熔斷器中斷請求5秒後會進入半打開狀態, 放部分流量過去重試。

熔斷器的開關能保證服務調用者在 調用異常服務時, 快速返回結果, fail fast or fallback static,避免大量的同步等待 而且熔斷器能在一段時間後 繼續偵測請求執行結果, 提供恢復服務調用的可能。

 

請求結果cache

將一個請求結果緩存起來, 下一個具備相同key的請求 將直接從緩存中取出結果,減小請求開銷。

 Hystrix設計點

  • 資源隔離
  • 熔斷器模式
  • 命令模式
  • 觀察者模式
  • RxJava

 

自助服務系統查詢改造方案

命令調用模式,省端直鏈接口;降級調用模式,集團電商接口。

自助服務整合Hystrix後系統請求流程圖。

參考連接

http://www.jianshu.com/p/b9af028efebb

https://github.com/Netflix/Hystrix/wiki

https://github.com/Netflix/Hystrix/wiki/How-To-Use

https://segmentfault.com/a/1190000005988895

http://kriszhang.com/hystrix_defend_your_webapp

https://blog.51cto.com/snowtiger/2057092

原文出處:https://www.cnblogs.com/hujunzheng/p/11570189.html

相關文章
相關標籤/搜索