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

问题描述 投票:3回答:4

我是Hystrix主题和弹性服务概念的新手,我正在经历一些课程,这个问题进入我的脑海。

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

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

java spring microservices spring-cloud hystrix
4个回答
6
投票

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

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

3
投票

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(或电路中断的想法)几乎引入了一个开关,当服务器变得不健康时,它将有某种方式来处理错误,例如停止所有未来的请求并立即给出预定义的响应,从而导致插座直接关闭,没有发生级联故障。这导致弹性增强和容错性更好。


2
投票

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

  1. 断路逻辑已经防弹。
  2. 开箱即用的指标,例如这个dashboard
  3. 定义一种模式来处理互连服务的级联故障。这意味着,如果一项服务出现故障,您已经拥有了如何继续为您自己的服务提供服务请求。
  4. 它可以帮助开发人员在编写针对外部依赖项的代码时改变其思维方式 - 设计失败 - 通过让他们思考如果失败了会很简单?通常,开发人员不这样做。你认为它会起作用。

我认为在hystrix下现在有了神奇的定义。这是一个简单的问题,开发人员通常不关心它。


1
投票

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

enter image description here

克里斯理查森在pattern - circuit breaker也很好地解释了这一点

© www.soinside.com 2019 - 2024. All rights reserved.