Hystrix

  1. 什么是Hystrix?
  2. Hystrix的用途是什么?
  3. Hystrix 解决了什么问题?
  4. Hystrix背后的设计原则是什么?
  5. Hystrix如何实现其目标?

什么是Hystrix?

在分布式环境中,许多服务依赖项中的一些将不可避免地失败。Hystrix 是一个库,通过添加延迟容错和容错逻辑,帮助您控制这些分布式服务之间的交互。Hystrix 通过隔离服务之间的访问点、阻止服务之间的级联故障以及提供回退选项来实现此目的,所有这些都可以提高系统的整体弹性。

海斯特里克斯的历史

Hystrix是从Netflix API团队于2011年开始的弹性工程工作演变而来的。2012年,Hystrix继续发展和成熟,Netflix内部的许多团队都采用了它。如今,Netflix 每天通过 Hystrix 执行数百亿个线程隔离和数千亿个信号量隔离调用。这导致正常运行时间和弹性的显着改善。

以下链接提供了有关Hystrix及其尝试解决的挑战的更多背景信息:

Hystrix的用途是什么?

Hystrix 旨在执行以下操作:

  • 保护并控制通过第三方客户端库访问(通常通过网络)的依赖项的延迟和故障。
  • 阻止复杂分布式系统中的级联故障。
  • 快速失败并快速恢复。
  • 尽可能回退并优雅降级。
  • 实现近乎实时的监控、警报和操作控制。

Hystrix 解决了什么问题?

复杂分布式架构中的应用程序具有数十个依赖项,每个依赖项在某些时候都不可避免地会失败。如果主机应用程序未与这些外部故障隔离,则它可能会随这些故障一起被关闭。

例如,对于依赖于 30 个服务的应用程序,其中每个服务的正常运行时间为 99.99%,以下是您可以期待的:

99.9930= 99.7% 正常运行时间
10 亿个请求的 0.3% = 3,000,000 次故障
2 小时以上的停机时间/月,即使所有依赖项都具有出色的正常运行时间。

现实情况通常更糟。

即使所有依赖项都表现良好,如果不设计整个系统的弹性,即使 0.01% 的停机时间对数十个服务中的每一个服务的总体影响也相当于每月数小时的停机时间。


当一切正常时,请求流可能如下所示:

当许多后端系统之一变得潜伏时,它可以阻止整个用户请求:

 

对于高流量,单个后端依赖项变得潜伏可能会导致所有服务器上的所有资源在几秒钟内饱和。

应用程序中通过网络或客户端库延伸并可能导致网络请求的每个点都是潜在故障的根源。比故障更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,从而备份队列、线程和其他系统资源,从而导致整个系统中出现更多的级联故障。

 

当通过第三方客户端执行网络访问时,这些问题会加剧 - 这是一个"黑匣子",其中实现细节被隐藏并且可以随时更改,并且每个客户端库的网络或资源配置都不同,并且通常难以监视和更改。

更糟糕的是可传递依赖项,这些依赖项执行可能代价高昂或容易出错的网络调用,而应用程序未显式调用。

网络连接失败或降级。服务和服务器出现故障或变慢。新的库或服务部署会更改行为或性能特征。客户端库存在错误。

所有这些都代表了需要隔离和管理的故障和延迟,以便单个失败的依赖项无法关闭整个应用程序或系统。

## Hystrix背后的设计原则是什么?

Hystrix的工作原理是:

  • 防止任何单个依赖项耗尽所有容器(如 Tomcat)用户线程。
  • 快速卸下负载和故障,而不是排队。
  • 在可行的情况下提供回退,以保护用户免受故障的影响。
  • 使用隔离技术(如隔板、泳道和断路器模式)来限制任何一个依赖项的影响。
  • 通过近乎实时的指标、监控和警报优化发现时间
  • 通过配置更改的低延迟传播和对 Hystrix 大多数方面的动态属性更改的支持来优化恢复时间,从而使您能够以低延迟反馈循环进行实时操作修改。
  • 防止整个依赖项客户端执行(而不仅仅是网络流量)中的故障。

Hystrix如何实现其目标?

Hystrix通过以下方式做到这一点:

  • 将对外部系统(或"依赖项")的所有调用包装在通常在单独的线程中执行的或对象中(这是命令模式的一个示例)。HystrixCommandHystrixObservableCommand
  • 超时调用花费的时间超过您定义的阈值。有一个默认值,但对于大多数依赖项,您可以通过"属性"自定义设置这些超时,以便它们略高于测量的 99.5千每个依赖项的百分位性能。
  • 为每个依赖项维护一个小型线程池(或信号量);如果它已满,则发往该依赖项的请求将立即被拒绝,而不是排队。
  • 衡量成功、失败(客户端引发的异常)、超时和线程拒绝。
  • 跳闸断路器以在一段时间内停止对特定服务的所有请求,如果服务的错误百分比超过阈值,则手动或自动停止。
  • 在请求失败、被拒绝、超时或短路时执行回退逻辑。
  • 近乎实时地监控指标和配置更改。

当您使用 Hystrix 包装每个底层依赖项时,上图中所示的体系结构将更改为类似于下图。每个依赖项彼此隔离,限制在发生延迟时它可以饱和的资源中,并包含在回退逻辑中,该逻辑决定在依赖项中发生任何类型的故障时要做出的响应:

详细了解其工作原理使用方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值