【问题标题】:why hystrix or any other circuit breaker for a microservice?为什么要为微服务使用 hystrix 或任何其他断路器?
【发布时间】:2017-04-01 21:11:57
【问题描述】:

我正在使用 Spring Boot 和 Spring Cloud 开发微服务。我开始了解 hystrix 和断路器模式。我知道断路器用于在下游微服务出现错误时以备用响应进行响应,我依赖这些微服务来获取数据。我的问题是,如果我没有提供任何有意义的替代响应,我为什么需要断路器?

【问题讨论】:

    标签: java spring spring-boot microservices hystrix


    【解决方案1】:

    简短回答:主要是为了在复杂的分布式系统中停止级联故障。

    我没有任何有意义的替代回复可以提供,为什么要提供 我需要一个断路器吗?

    仅当您的服务器仅提供一个 REST 端点(和一个 HTTP 动词)时,此问题才有意义。但几乎总是如此。即使是“微”服务也会有多个端点 + 多个 http 动词的组合。您不希望一个端点挂在缓慢的上游服务上,并在线程不断等待并最终导致整个应用程序崩溃后堆积线程。

    看看官方documentation

    Hystrix 有什么用? --- Hystrix 旨在执行以下操作:

    • 保护和控制通过第三方访问(通常通过网络)依赖项的延迟和故障
      客户端库。
    • 停止复杂分布式系统中的级联故障。
    • 快速失败并快速恢复。
    • 尽可能回退并优雅降级。
    • 实现近乎实时的监控、警报和操作控制。

    “尽可能回退并优雅降级”只是 hystrix 提供的功能之一。

    【讨论】:

      【解决方案2】:

      如果您重构单体应用程序以将其拆分为多个微服务,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
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-09
        • 2018-02-14
        • 2015-03-31
        • 1970-01-01
        • 1970-01-01
        • 2016-09-12
        • 1970-01-01
        • 2021-08-19
        相关资源
        最近更新 更多