首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么hystrix或任何其他断路器用于微型服务?

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

Stack Overflow用户
提问于 2016-11-18 05:28:15
回答 2查看 2.2K关注 0票数 4

我正在开发带有弹簧引导和弹簧云的微服务。我了解了超高压和断路器的模式。我知道断路器是用来在我所依赖的下游微服务出现错误时用备用响应来响应的。我的问题是,如果我没有任何有意义的替代反应,为什么我需要一个断路器呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-18 05:29:34

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

我没有任何有意义的替代反应,为什么我需要一个断路器呢?

只有当服务器只提供一个REST端点(和一个HTTP谓词)时,这个问题才是相关的。但几乎总是如此,情况并非如此。即使是“微”服务也会有多个端点+多个http谓词的组合。您不希望一个端点挂在一个缓慢的上游服务上,并且在线程不断等待并最终删除整个应用程序之后,将线程堆起来。

看看官方的文档

Hystrix是用来做什么的?-- Hystrix是设计用来做以下工作的:

  • 保护和控制通过第三方访问的依赖项(通常是通过网络)的延迟和失败。 客户库。
  • 停止复杂分布式系统中的级联故障。
  • 很快就会失败并迅速恢复。
  • 后退,并在可能的情况下优雅地降级。
  • 启用近乎实时的监控、报警和操作控制.

“后退并在可能的情况下优雅地降级”只是hystrix提供的功能之一。

票数 5
EN

Stack Overflow用户

发布于 2018-05-27 16:35:24

如果您重构您的单核应用程序以将其分解为多个微服务,Hystrix也可能是有用的。当将其投入生产时,您可能希望将旧的monolith代码保留一段时间作为备用响应。因此,如果微服务不可用,只会执行旧代码,因此基本上可以降低风险。如果一切正常,您可以从monolith中删除旧代码,并继续使用microservices。

通过扩展HystrixCommand类,可以很容易地做到这一点。

代码语言:javascript
复制
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
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40669943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档