Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与正常异常处理相比,Hystrix有哪些好处?_Java_Spring_Microservices_Spring Cloud_Hystrix - Fatal编程技术网

Java 与正常异常处理相比,Hystrix有哪些好处?

Java 与正常异常处理相比,Hystrix有哪些好处?,java,spring,microservices,spring-cloud,hystrix,Java,Spring,Microservices,Spring Cloud,Hystrix,我对Hystrix的主题和弹性服务的概念非常陌生,我正在学习一些课程,这个问题出现在我的脑海中 在Hystrix中,我需要定义一个优雅降级的回退方法,当电路断开时调用该方法。但我可以想象只使用try和catch包装代码,当出现特定异常时(例如超时),调用catch子句中的回退方法。当调用的服务启动时,将调用正常代码 当然,有了Hystrix,我可以额外监控这一点,但它还能给我什么呢?。我很确定我不理解整个概念。我想你是说我们可以实现整个电路制动逻辑?你是对的。但是为什么更好地使用已经被证明是Hy

我对Hystrix的主题和弹性服务的概念非常陌生,我正在学习一些课程,这个问题出现在我的脑海中

在Hystrix中,我需要定义一个优雅降级的回退方法,当电路断开时调用该方法。但我可以想象只使用
try
catch
包装代码,当出现特定异常时(例如超时),调用
catch
子句中的回退方法。当调用的服务启动时,将调用正常代码


当然,有了Hystrix,我可以额外监控这一点,但它还能给我什么呢?。我很确定我不理解整个概念。

我想你是说我们可以实现整个电路制动逻辑?你是对的。但是为什么更好地使用已经被证明是Hystrix的东西呢?我想说:

  • 电路断路逻辑已经防弹
  • 开箱即用的指标,例如
  • 定义一个模式来处理互连服务的级联故障。也就是说,如果一个服务失败,您已经考虑了如何在自己的服务上继续提供请求
  • 它帮助开发人员在编写针对外部依赖项的代码时改变思维方式——为失败而设计——简单地让他们思考如果失败了该怎么办?开发人员通常不会这样做。你认为它会起作用
    我认为现在在希斯特里克斯下有了魔法的定义。这是一个开发人员通常不关心的简单问题

    主要区别在于,Hystrix在检测到错误时会打开电路(类似于电路),直到一段时间后才会调用下游服务。这种行为可以防止级联中出现大量错误。它类似于一个智能交通灯,它会变红,不让你通过,因为它知道你会在稍后发生事故。经过一段可配置的时间后,电路再次闭合。 您可以在Hystrix仪表板上看到“电路打开/关闭”:


    Chris Richardson在

    中也很好地解释了这一点。癔病是用来阻止级联故障的,我将给你一个例子来解释我的意思: 让我们假设您有3个组件:1)前端、2)后端A和3)后端B。
    前端与后端A对话,后端A要求后端B进行某种查找。 前端每秒接收50k个请求,这意味着50k个请求将发送到后端A,另50k个请求将发送到后端B。如果后端B变得不正常,则表示后端B到后端A之间有50k个套接字处于打开状态,后端A和前端之间有另一个50k个套接字处于打开状态。最终将发生的是,事务中涉及的所有服务器都将开始挂起,因为所有套接字都处于打开状态。套接字将以每秒50k的速度填满,超时时间为20秒,即每台服务器之间有100万个打开的套接字!后端B超时的结果将意味着对后端A的请求将超时,这将意味着对前端的请求也将超时。
    Histerix(或电路中断的概念)几乎引入了一种交换机,在这种交换机中,当服务器变得不正常时,它将有某种方式来处理错误,例如停止所有未来的请求,并立即给出预定义的响应,从而导致套接字立即关闭,并且不会发生级联故障。这将提高恢复能力和更好的容错能力。

    正如您所说,它可以简单地包装在
    try catch
    块下,那么为什么选择Hystrix或其他库呢? 我的经历:

    • 已通过
      测试验证
    • 能够
      跳过最初的预定呼叫和回退
      。请注意,如果将其包装在try-catch下,仍将有连接和发送命令的尝试,由于依赖关系降级,该尝试最终将超时。在调用之前了解此信息将使您能够跳过调用一段时间(根据配置),您可以节省这些资源
    • 还使用滑动时间窗口提供断路
    • 指标和仪表板
      开箱即用,可帮助您查看系统和相关连接
    • 通过使用不同的
      线程池实现
    • 降低维护成本
    • 健康检查能力。它提供了一个健康检查类,该类使用健康监视API插件

    你是对的,但我仍然可以通过正常的异常处理实现类似的效果。在catch子句中,我只是调用一些备份方法,而不是调用后端B服务器。所以错误不会层叠。也许关键在于你在回答中使用的“立即”一词。每次服务器A请求服务器B时,我都需要等待一段时间才能获得某种超时异常。希斯特里克斯之前就知道了,并立即做出反应。我认为第4点可能非常准确。当然,它们似乎都是有效的。我也很喜欢@Moe这个答案,它指向性能方面。简短而清晰地总结了以前的答案+其他一些信息可能重复@Nicolau我不知道你是否注意到了,但我问我的问题比你提出的问题早了一年,我用这种方式标记它,因为,在我看来,其他人可以更清楚地找到这些答案。在社区里想想,把问题联系起来只会丰富他们答案中的知识。