簡體   English   中英

為什么要為微服務使用 hystrix 或任何其他斷路器?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM