1. 程式人生 > >【趕快收藏】Hystrix實戰,優雅提升系統的魯棒性

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

背景

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

Hystrix簡介

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

Hystrix功能

1、對依賴的服務(HTTP呼叫、SOA服務)進行保護, 並且把控住由於依賴服務所帶來的的延遲和失敗。

2、防止在一個複雜的分散式系統裡出現級聯失效(cascading failures)。

3、快速失敗(Fail fast),並且快速恢復依賴服務。

4、優雅的降級。

5、實時的監控和報警。

健康狀態系統

請求被阻塞系統

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

艙壁隔離模式(Bulkheads)

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

服務雪崩

 

隔離架構

降級-觸發fallback

1、run()/construct方法丟擲非HystrixBadRequestException異常

2、run()/construct()執行超時

3、熔斷器啟動

4、執行緒池/訊號量拒絕

隔離策略

執行緒池隔離:會帶來執行緒開銷

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/205