[英]why hystrix or any other circuit breaker for a microservice?
我正在使用 spring boot 和 spring cloud 開發微服務。 我開始了解 hystrix 和斷路器模式。 我知道斷路器用於響應備用響應,以防我依賴於獲取數據的下游微服務出錯。 我的問題是,如果我沒有任何有意義的替代響應可以提供,我為什么還需要斷路器?
簡短回答:主要是為了在復雜的分布式系統中停止級聯故障。
我沒有任何有意義的替代響應可以提供,為什么我根本需要斷路器?
僅當您的服務器僅提供單個 REST 端點(和單個 HTTP 動詞)時,此問題才相關。 但幾乎總是,情況並非如此。 即使是“微”服務也會有多個端點 + 多個 http 動詞的組合。 您不希望一個端點掛在緩慢的上游服務上,並在線程不斷等待並最終關閉整個應用程序之后堆積線程。
看一下官方文檔
Hystrix 有什么用? --- Hystrix 旨在執行以下操作:
- 通過第三方訪問的依賴項(通常通過網絡)提供延遲和故障的保護和控制
客戶端庫。- 停止復雜分布式系統中的級聯故障。
- 快速失敗並快速恢復。
- 在可能的情況下回退並優雅地降級。
- 實現近乎實時的監控、警報和操作控制。
“在可能的情況下回退和優雅降級”只是 hystrix 提供的功能之一。
如果您重構整體應用程序以將其拆分為多個微服務,Hystrix 也可能很有用。 將其投入生產時,您可能希望將舊的單體代碼保留一段時間作為替代響應。 因此,如果微服務不可用,則只會執行舊代碼,因此基本上可以降低風險。 如果一切正常,您可以從單體應用中刪除舊代碼並繼續使用微服務。
通過擴展 HystrixCommand 類,這可以很容易地完成。
public class MicroserviceCommand extends HystrixCommand<String>
{
@Override
protected String run()
{
//return response from your new microservice
}
@Override
protected String getFallback()
{
//microservice is not available,
//so execute old code which was not removed from application yet
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.