Hystrix的使用1-简介
以下文章照搬自Hystrix官网介绍
1.什么是Hystrix?
在分布式环境中,不可避免地会有许多服务依赖项中的某些失败。Hystrix是一个库,可通过添加等待时间容限和容错逻辑来帮助您控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点,停止服务之间的级联故障并提供后备选项来实现此目的,所有这些都可以提高系统的整体弹性。
2.Hystrix的作用是什么?
Hystrix旨在执行以下操作:
- 提供保护并控制通过第三方客户端库(通常是通过网络)访问的依赖项的延迟和失败。
- 停止复杂的分布式系统中的级联故障。
- 快速失败,迅速恢复。
- 回退并在可能的情况下正常降级。
- 启用近乎实时的监视,警报和操作控制。
3.Hystrix解决什么问题?
复杂的分布式体系结构中的应用程序具有数十个依赖项,每个依赖项都会不可避免地在某个时刻失败。如果主机应用程序未与这些外部故障隔离开来,则可能会被淘汰。
例如,对于依赖于30个服务的应用程序,其中每个服务的正常运行时间为99.99%,您可以期望:
99.9930 = 99.7% 正常运行时间
10亿个请求中就有0.3%的失败率,也就是300万的失败量。
即使每个微服务都按照期望工作,一个月也有2个小时以上的停机时间。
现实通常更糟。
即使所有依赖项都表现良好,如果不对整个系统进行弹性设计,即使 0.01% 的停机时间对每项服务都产生 0.01% 的停机时间,也相当于每月可能停机数小时。
4.请求示意
当一切正常时,请求流如下所示:
当其中一个服务宕机后,它会阻塞整个调用流程:
当流量变大,如果一个服务宕机,这可能导致所有服务器上的所有资源在几秒钟内变得饱和,从而导致整个系统出现更多级联故障。
当通过第三方客户端执行网络访问时,这些问题会更加严重。“第三方”是一个隐藏了实施细节的“黑匣子”,可以随时更改,并且每个客户端库的网络或资源配置都不同,通常难以监控和更改。
更糟糕的是,调用者不会明确知道调用的服务是否正常,从而导致调用阻塞。
导致服务阻塞的原因有:网络连接失败或降级、服务和服务器出现故障或变慢、新的库或服务部署会更改行为或性能特征、客户端库有错误。
所有这些都代表需要隔离和管理故障和延迟,以使单个故障服务不会导致整个系统宕机。
5.Hystrix的设计原则是什么?
Hystrix的工作原理:
- 防止调用某个故障服务耗尽所有容器(例如Tomcat)用户线程。
- 当服务出现故障时,快速返回用户可接受的信息,不会阻塞服务。
- 在可行的情况下提供备用,以保护用户免受故障的影响。
- 使用隔离技术(例如隔板,泳道和断路器模式)来限制任何一种依赖关系的影响。
- 通过近实时指标,监视和警报优化发现时间
- 通过在Hystrix的大多数方面中以低延迟传播配置更改来优化恢复时间,并支持动态属性更改,这使您可以通过低延迟反馈回路进行实时操作修改。
- 防止整个依赖性客户端执行失败,而不仅仅是网络流量失败。
6.Hystrix如何实现其目标?
Hystrix通过以下方式做到这一点:
- 将对外部系统(或“依赖关系”)的所有调用包装在HystrixCommand或HystrixObservableCommand对象中,使用单独的线程执行(命令模式)。
- 可以配置调用超时配置,来防止服务超时卡死。
- 为每个依赖项维护一个小的线程池(或信号灯);如果已满,发往该依赖项的请求将立即被拒绝。
- 检测服务调用的情况,如成功,失败(客户端抛出的异常),超时和线程拒绝。
- 如果某个服务的错误百分比超过阈值,则使熔断器跳闸,以在一段时间内手动或自动停止所有对特定服务的请求。
- 当请求失败,被拒绝,超时或短路时执行服务降级措施。
- 几乎实时监控指标和配置更改。 当您使用Hystrix封装需要调用的服务时,就会变成如下的结构。每个服务调用彼此隔离,在大流量时会执行服务限流,服务出现错误时会执行服务降级,如果调用失败次数过多就会执行服务熔断: