为什么hystrix或任何其他断路器用于微服务



我正在使用spring boot和spring cloud开发微服务。我开始了解了子宫内膜炎和断路器模式。我知道断路器是用于在下游微服务出现错误时响应备用响应的,我依赖这些微服务来获取数据。我的问题是,如果我没有任何有意义的替代方案可以提供,我为什么需要断路器呢?

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

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

只有当你的服务器只提供一个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
    }
}

最新更新