當前位置:
首頁 > 科技 > Hystrix已經停止開發,官方推薦替代項目Resilience4j簡介

Hystrix已經停止開發,官方推薦替代項目Resilience4j簡介

Hystrix已經停止開發,官方推薦替代項目Resilience4j簡介

譯者註:Hystrix官方已經停止開發了,Hystrix官方推薦使用新一代熔斷器作為Resilience4j。作為新一代的熔斷器,Resilience4j有很多優勢,比如依賴少,模塊化程度較好等優勢。本文是關於resilience4j的初學者指南。

resilience4j是受Hystrix啟發而做的熔斷器,通過管理遠程調用的容錯處理來幫助實現一個健壯的系統。resilience4j提供了更好用的API,並且提供了很多其他功能比如Rate Limiter(限流器),Bulkhead(艙壁隔離)。

設置Maven

添加依賴如下:

Hystrix已經停止開發,官方推薦替代項目Resilience4j簡介

這裡僅僅添加了熔斷器模塊,其他模塊可以點擊這裡[1]。

熔斷器

使用這部分功能,需要引入上文所述的依賴。熔斷器模式可以幫助我們在遠程服務出故障時防止故障級聯。

在多次請求失敗後,我們就認為服務不可用/超載,並且對之後的請求進行短路處理,這樣我們就能節約系統資源。

我們看看resilience4j如何做到這一點。

首先需要定義使用的設置,我們先使用默認設置:

Hystrix已經停止開發,官方推薦替代項目Resilience4j簡介

當然你也可以自定義一些參數:

Hystrix已經停止開發,官方推薦替代項目Resilience4j簡介

這裡我們設置ratethreshold為20%,最小5次重試。

然後我們創建一個熔斷器對象,並調用遠程服務:

Hystrix已經停止開發,官方推薦替代項目Resilience4j簡介

通過junit進行測試,我們會調用服務10次,可以驗證服務至少調用5次,如果有20%的失敗的情況下,會停止調用。

Hystrix已經停止開發,官方推薦替代項目Resilience4j簡介

熔斷器狀態及設置

熔斷器有三種可能狀態:

  • 關閉— 服務正常,不需要進行短路

  • 打開— 遠程服務宕機,所有請求都短路

  • 半開— 進入打開狀態一段時間後,熔斷器允許檢查遠程服務是否恢復

可以做以下設置:

  • 熔斷器進入打開狀態的閾值

  • 等待時間,即熔斷器進入打開狀態到半開狀態需要等待的時間

  • 熔斷器半開或者閉合時,ring buffer的大小

  • 處理自定義事件的監聽器

  • 自定義謂詞,用於評估異常是否應算作故障,從而提高故障率

限流器

這裡需要引入resilience4j-ratelimiter[2]依賴。可以允許限制對某些服務的訪問。

Hystrix已經停止開發,官方推薦替代項目Resilience4j簡介

所有對decorateFunction的調用都符合rate limiter.

我們可以配置參數如下:

  • limit刷新周期

  • 刷新周期的許可權限制

  • 默認等待許可權持續時間

艙壁隔離

這裡需要引入resilience4j-bulkhead[3]依賴。可以限制對特定服務的並發調用數。

讓我們看一個使用Bulkhead API配置並發調用的示例:

Hystrix已經停止開發,官方推薦替代項目Resilience4j簡介

為了測試,我們可以調用一個mock服務的方法。這種情況下,我們就不允許其他調用:

Hystrix已經停止開發,官方推薦替代項目Resilience4j簡介

我們可以做如下設置:

  • 允許的最大並行數

  • 線程等待的最大時間

重試

需要引入resilience4j-retry[4]庫。可以在調用失敗後自動重試:

Hystrix已經停止開發,官方推薦替代項目Resilience4j簡介

現在我們模擬遠程調用失敗,並確認自動重試:

Hystrix已經停止開發,官方推薦替代項目Resilience4j簡介

我們可以做如下設置:

  • 最大嘗試數

  • 重試前等待時間

  • 自定義函數,用於修改故障後的等待間隔。

  • 自定義謂詞,用於評估異常是否應重試

緩存

cache模塊需要引入resilience4j-cache[5]依賴。初始化代碼與眾不同:

Hystrix已經停止開發,官方推薦替代項目Resilience4j簡介

這裡的緩存是通過使用的JSR-107 Cache實現完成的,Resilience4j提供了使用緩存的方法。

請注意,沒有用於裝飾功能的API(如Cache.decorateFunction(Function)),API僅支持Supplier和Callable類型。

限時器

該模塊需要引入resilience4j-timelimiter[6]依賴。可以使用TimeLimiter限制調用遠程服務所花費的時間。

我們設置超時時間為1毫秒的TimeLimiter:

Hystrix已經停止開發,官方推薦替代項目Resilience4j簡介

使用Future.get驗證是否如預期超時:

Hystrix已經停止開發,官方推薦替代項目Resilience4j簡介

可以和熔斷器組合使用:

Hystrix已經停止開發,官方推薦替代項目Resilience4j簡介

附加模塊

Resilience4j還提供了許多附加模塊,可以簡化與流行框架和庫的集成。

一些比較知名的集成是:

  • Spring Boot - resilience4j-spring-boot模塊

  • Ratpack - resilience4j-ratpack模塊

  • Retrofit - resilience4j-Retrofit模塊

  • Vertx - resilience4j-vertx模塊

  • Dropwizard - resilience4j-metrics模塊

  • Prometheus - resilience4j-prometheus模塊

結論

在本文中,我們了解了Resilience4j庫的不同方面,並學習了如何使用它來解決伺服器間通信中的各種容錯問題。源代碼和更多示例可以在這裡[5]找到。

文中鏈接:

[1]https://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22io.github.resilience4j%22

[2]https://search.maven.org/classic/#search%7Cga%7C1%7Ca%3A%22resilience4j-ratelimiter%22

[3]https://search.maven.org/classic/#search%7Cga%7C1%7Cresilience4j-bulkhead

[4]https://search.maven.org/classic/#search%7Cga%7C1%7Cresilience4j-retry

[5]https://search.maven.org/classic/#search%7Cga%7C1%7Cresilience4j-cache

[6]https://search.maven.org/classic/#search%7Cga%7C1%7Cresilience4j-timelimiter

[7]https://github.com/eugenp/tutorials/tree/master/libraries

原文地址:

https://www.baeldung.com/resilience4j

本文作者baeldung,由方圓翻譯。轉載本文請註明出處,歡迎更多小夥伴加入翻譯及投稿文章的行列,詳情請戳公眾號菜單「聯繫我們」。

參考閱讀:

技術原創及架構實踐文章,歡迎通過公眾號菜單「聯繫我們」進行投稿。轉載請註明來自高可用架構「ArchNotes」微信公眾號及包含以下二維碼。

高可用架構

改變互聯網的構建方式

長按二維碼 關注「高可用架構」公眾號

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 高可用架構 的精彩文章:

面對突發流量激增Coinbase如何擴展其交易平台
全面走向插件化和介面化的 Kubernetes

TAG:高可用架構 |