与正常的异常处理相比,Hystrix的优势是什么?

时间:2017-09-18 15:45:14

标签: java spring microservices spring-cloud hystrix

我对Hystrix主题和弹性服务的概念真的很陌生,我正在经历一些课程,这个问题进入我的脑海。

在Hystrix中,我需要为优雅降级定义回退方法,然后在电路断开时调用此方法。但我可以设想用trycatch包装代码,并在catch子句中出现特殊异常(例如超时)时调用回退方法。当被叫服务启动时,将调用普通代码。

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

4 个答案:

答案 0 :(得分:5)

正如你所说,它可以简单地包裹在try-catch块下,然后为什么选择Hystrix或其他库? 我的经历:

  • 已经test proven图书馆。
  • skip original intended calls and fallback的能力。请注意,如果将其包装在try-catch下,则仍会尝试连接并发送命令,该命令最终会因为依赖性降低而超时。在呼叫之前了解此信息将允许在某个时间跳过呼叫(根据配置)并且您可以保存这些资源
  • 使用Sliding Time Window以及
  • 提供断路功能
  • Metrics and Dashboarding提供了开箱即用的功能,可以帮助您查看系统和相关连接
  • 使用不同的BulkHead
  • 实现Thread Pools
  • 降低维护成本
  • 健康检查能力。它提供了一个运行健康监控API的健康检查类

答案 1 :(得分:2)

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

  1. 断路逻辑已经是防弹。
  2. 开箱即用的指标,例如if the first parameter is after the second
  3. 定义一种模式,用于处理互连服务的级联故障。这意味着,如果一项服务出现故障,您已经有了如何做以继续为您自己的服务提供服务请求。
  4. 它可以帮助开发人员在编写针对外部依赖项 -design for failure - 的代码时改变其思维方式,通过让他们思考如果失败了会有什么简单的想法?通常情况下,开发人员不会这样做。你认为它会起作用。
  5. 我认为现在在hystrix下有魔术定义。这是一个简单的问题,开发人员通常不会这样做。

答案 2 :(得分:2)

Hysterix用于阻止级联故障,我举一个例子来解释我的意思: 让我们假装你有3个组件:1)前端,2)后端A和3)后端B.
与后端A和后端A的前端对话要求后端B进行某种查找。 前端每秒接收50k请求,这意味着50k请求将发送到后端A,另外50k请求发送到后端B.如果后端B变得不健康,那就是50k插槽,你在后端B和后端A之间保持打开,另一个后端A和前端之间打开50k插座。最终会发生什么是交易中涉及的所有服务器都将开始挂起,因为所有套接字都保持打开状态。套接字填充速度非常快,每秒50k,超时20秒,每个服务器之间有100万个开放套接字!后端B超时的结果将意味着对后端A的请求将超时,这意味着对前端的请求也将超时。 Hysterix(或电路中断的想法)几乎引入了一个开关,当服务器变得不健康时,它将有某种方式来处理错误,例如停止所有未来的请求并立即给出预定义的响应,从而导致插座直接关闭,没有发生级联故障。这样可以提高弹性和更好的容错能力。

答案 3 :(得分:1)

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

enter image description here

Chris Richardson在pattern - circuit breaker

也很好地解释了这一点