JVM上容錯庫的初步比較 - frankel
如果您正在實施微服務,那麼您很可能正在呼叫 HTTP 端點。使用 HTTP 呼叫,很多事情都可能出錯。經驗豐富的開發人員對此進行計劃並進行設計,而不僅僅是快樂的道路。一般來說,容錯包括以下特徵:
- 重試
- 暫停
- 斷路器
- 倒退
- 速率限制器以避免伺服器端 429 響應
- Bulkhead:速率限制器限制確定時間範圍內的呼叫數,而 Bulkhead 限制併發呼叫數
有幾個庫在 JVM 上實現了這些功能。在這篇文章中,我們將介紹 Microprofile Fault Tolerance、Failsafe和 Resilience4J。
Microprofile Fault Tolerance
Microprofile Fault Tolerance來自 Microprofile 傘形專案。它與其他兩個不同,因為它是一個規範,它依賴於執行時來提供其功能。例如,Open Liberty 就是這樣一種執行時。SmallRye 容錯是另一種。反過來,Quarkus 和 WildFly 等其他元件也嵌入了 SmallRye。
Microprofile為每個特徵定義註釋@Timeout: 、@Retry Policy、@Fallback、@Circuit Breaker和@Bulkhead。它還定義了@Asynchronous.
因為執行時讀取註解,所以應該仔細閱讀文件以瞭解如果設定了多個註解它們是如何互動的。
Resilience4J
Resilience4J 基於幾個核心概念:
- 每個容錯功能一個 JAR,以及用於特定整合的附加 JAR,例如Kotlin
- 靜態工廠
- 通過應用於函式的裝飾器模式進行函式組合
- 與 Java 的功能介面整合,例如, Runnable, Callable,Function等。
- 異常傳播:可以使用丟擲的功能介面,庫將在呼叫管道中傳播它
Failsafe
它的原則類似於 Resilience4J:靜態工廠、函式組合和異常傳播。
。Resilience4J 的 API 要求您首先提供“基礎”函式,然後將其嵌入到任何包裝函式中。但是這樣您酒不能在不同的基本功能之上重用管道,而FailsafeExecutorFailsafe 通過類允許它。
以下是建立管道的方法,即FailsafeExecutor. 請注意,沒有對基本呼叫的引用:
var pipeline = Failsafe.with( Fallback.of("fallback"), Timeout.ofDuration(Duration.of(2000, MILLIS)), RetryPolicy.ofDefault() ); |
Failsafe 還提供了一個流暢的 API。可以將上面的程式碼重寫為:
var pipeline = Failsafe.with(Fallback.of("fallback")) .compose(RetryPolicy.ofDefault()) .compose(Timeout.ofDuration(Duration.of(2000, MILLIS))); |
結論
所有三個庫都提供或多或少相同的功能。如果您不使用符合 CDI 標準的執行時,可以不用Microprofile Fault Tolerance。
Failsafe 和 Resilience4J 都基於函式組合並且非常相似。如果您需要獨立於基本呼叫定義函式管道,請首選 Failsafe。否則,選擇其中任何一個。
相關文章
- wxWidgets與其他工具庫的比較(上)薦
- 檔案內容比較
- awk比較檔案內容的差異
- 圖資料庫比較資料庫
- 主流資料庫比較資料庫
- python比較json/dictionary的庫PythonJSON
- 開源加密解密庫比較加密解密
- 比較兩個檔案,求出不同的內容,A-B
- 比較兩個資料庫的差異資料庫
- C語言的比較庫函式--qsortC語言函式
- MySQL大量資料入庫的效能比較MySql
- 關閉資料庫比較好的方法資料庫
- Python解惑:整數比較 is ==的比較Python
- 3 個 Python 模板庫比較Python
- 資料庫比較 PostgreSQL vs MongoDB資料庫SQLMongoDB
- 幾種常用資料庫比較資料庫
- 如何在 Ubuntu 上比較 PDF 檔案Ubuntu
- Integer的比較
- awk的一個比較不錯的總結網頁網頁
- 比較網上商品價格網站 - 盒子比價網網站
- 6個頂級Python NLP庫的比較!Python
- influxdb與傳統資料庫的比較UX資料庫
- MySQL 一種比較經濟的資料庫MySql資料庫
- C/S、B/S軟體技術上的比較
- js 深比較和淺比較JS
- [20170705]diff比較執行結果的內容.txt
- 轉享:NoSQL 圖資料庫比較SQL資料庫
- 比較SQL資料庫和HadoopSQL資料庫Hadoop
- Oracle資料庫遷移方案比較Oracle資料庫
- 使用錯誤的運算子進行字串比較缺陷漏洞字串
- java中又實用又基本又容易錯的比較Java
- 一個比較不錯的儲存過程分頁儲存過程
- 一個不錯的關於mysql和posgresql比較的帖子MySql
- Tweetolife:Twitter上的性別和時間比較分析
- 資料庫系列:MySQL引擎MyISAM和InnoDB的比較資料庫MySql
- 庫 vs 服務 vs 側車Sidecar的比較IDE
- 區塊鏈與分散式資料庫的比較區塊鏈分散式資料庫
- 常見資料庫SYBASE和SQL SERVER的比較資料庫SQLServer