我对Hystrix主题和弹性服务的概念真的很陌生,我正在经历一些课程,这个问题进入我的脑海。
在Hystrix中,我需要为优雅降级定义回退方法,然后在电路断开时调用此方法。但我可以设想用try
和catch
包装代码,并在catch
子句中出现特殊异常(例如超时)时调用回退方法。当被叫服务启动时,将调用普通代码。
当然,有了Hystrix,我可以另外监控这个,但它给了我什么呢?我很确定我不了解整个概念。
答案 0 :(得分:5)
正如你所说,它可以简单地包裹在try-catch
块下,然后为什么选择Hystrix或其他库?
我的经历:
test proven
图书馆。skip original intended calls and fallback
的能力。请注意,如果将其包装在try-catch下,则仍会尝试连接并发送命令,该命令最终会因为依赖性降低而超时。在呼叫之前了解此信息将允许在某个时间跳过呼叫(根据配置)并且您可以保存这些资源Sliding Time Window
以及Metrics and Dashboarding
提供了开箱即用的功能,可以帮助您查看系统和相关连接BulkHead
Thread Pools
答案 1 :(得分:2)
我想你说我们可以实现整个电路制动逻辑?你是对的。但为什么更好地使用已被证明为Hystrix的东西呢?我会说:
我认为现在在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仪表板上看到“电路已打开/关闭”:
Chris Richardson在pattern - circuit breaker
也很好地解释了这一点