我正在使用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
}
}