我是Hystrix主题和弹性服务概念的新手,我正在经历一些课程,这个问题进入我的脑海。
在Hystrix中,我需要为优雅降级定义回退方法,然后在电路断开时调用此方法。但我可以设想用try
和catch
包装代码,并在catch
子句中出现特殊异常(例如超时)调用回退方法。当被叫服务启动时,将调用普通代码。
当然,有了Hystrix,我可以另外监控这个,但它给了我什么呢?我很确定我不理解整个概念。
如你所说,它可以简单地包裹在try-catch
块下然后为什么选择Hystrix或其他一些库?我经历的:
test proven
图书馆。skip original intended calls and fallback
。请注意,如果将其包装在try-catch下,则仍会尝试连接并发送命令,该命令最终会因为依赖性降低而超时。在呼叫之前了解此信息将允许在某个时间跳过呼叫(根据配置),您可以保存这些资源Sliding Time Window
提供断路Metrics and Dashboarding
提供开箱即用,可以帮助您窥视您的系统和依赖连接BulkHead
实现Thread Pools
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(或电路中断的想法)几乎引入了一个开关,当服务器变得不健康时,它将有某种方式来处理错误,例如停止所有未来的请求并立即给出预定义的响应,从而导致插座直接关闭,没有发生级联故障。这导致弹性增强和容错性更好。
我想你是说我们可以实现整个电路制动逻辑?你是对的。但为什么更好地使用已被证明为Hystrix的东西呢?我会说:
我认为在hystrix下现在有了神奇的定义。这是一个简单的问题,开发人员通常不关心它。
主要区别在于Hystrix在检测到错误时打开电路(它类似于电路),并且在经过一段时间后才调用下游服务。此行为可防止级联中出现大量错误。它类似于智能红绿灯,变成红色,不会让你通过,因为它知道你稍后会发生事故。在可配置的时间之后,电路再次关闭。您可以在Hystrix仪表板上看到“Circuit打开/关闭”:
克里斯理查森在pattern - circuit breaker也很好地解释了这一点