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