SpringCloud Hystrix 服务降级(摘)

什么是Hystrix?

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

 

Hystrix是干什么用的?

    1 保护和控制调用第三方客户端库的依赖(通常是通过网络)的延迟和失败。

    2 防止复杂分布式系统中的级联故障。

    3 快速失败和快速恢复。

    4 回退(配置回退方法)并尽可能优雅降级。

    5 启用近实时监视、警报和操作控制。

下面讲述一个级联故障的例子。

    可以看到 App Container服务调用了很多的第三方服务,当服务都可用的情况下没什么问题。

但是当一个依赖的I第三方服务网络调用延时或者服务挂掉的情况下会导致调用方用户线程阻塞。

    在高流量的情况下,单个后端依赖项(dependency I)的潜在影响可能会导致所有服务器(调用方)上的所有资源在几秒钟内饱和。

    应用程序中通过网络或进入客户端库可能导致网络请求的每一点都是潜在故障的根源。比故障更糟糕的是,这些应用程序还会导致服务之间的延迟增加,导致更多的级联故障。

那么豪猪(hystrix)是如何做的呢?

    1 将对外部系统(或“依赖项”)的所有调用包装在HystrixCommand或HystrixObservableCommand对象中,该对象通常在单独的线程中执行(这是命令模式的一个示例)。

     2  超时调用的时间长于您定义的阈值。有一个默认值,但是对于大多数依赖项,您可以通过“属性”自定义设置这些超时,以便它们比每个依赖项的99.5%的性能略高。

     3  为每个依赖项维护一个小的线程池(或信号量);如果它已经满了,针对该依赖项的请求将立即被拒绝,而不是排队。

     4  记录成功、失败(客户端抛出的异常)、超时和线程拒绝。

     5  如果服务的错误百分比超过阈值,可以自动或者手动的断开断路器,以在一段时间内停止对特定服务的所有请求。

     6  在请求失败、被拒绝、超时或短路时执行回退逻辑。

     7 几乎实时地监视度量和配置更改。

 

    当您使用Hystrix包装每个底层依赖项时,上面图中所示的体系结构将发生变化,将变成下面的图。每个依赖项都是相互隔离的,当延迟发生时,分配给被调用方的资源项(线程池)的资源将会饱和,将会触发断路器并调用预先设定的回调函数,使得不影响调用方,并在当被调用方恢复后会关闭短路器。

 

下面看看Hystrix的实现逻辑

    

流程如下:

 1  构造一个HystrixCommand或HystrixObservableCommand对象

 2  执行命令

 3 是否缓存了响应

 4 电路打开了吗

5 线程池/队列/信号量是否已满

6 执行HystrixObservableCommand.construct()或HystrixCommand.run()

7 计算电路健康

8 执行回退函数

9 返回成功响应

Circuit Breaker(断路器)逻辑:

 

电路开闭的条件如下:

1 假设电路的请求音量满足域值 HystrixCommandProperties.circuitBreakerRequestVolumeThreshold()

2 假设误差百分比超过阈值误差百分比 

      HystrixCommandProperties.circuitBreakerErrorThresholdPercentage()

3 断路器从闭合过渡到打开

4. 当它是开着的,它短路了所有对断路器的要求。

5.过了一段时间(HystrixCommandProperties.circuitBreakerSleepWindowInMilliseconds())

短路器处于半开状态,此时允许1个请求通过执行,当请求执行成功,则短路器从打开到闭合,若此时请求还是失败,则继续阻断所有请求。

参考:https://github.com/Netflix/Hystrix/wiki/How-it-Works#flow1



作者:pipiwen
链接:https://www.jianshu.com/p/bb176d5503a7
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud Hystrix是一个开源的熔断器框架,它能够帮助开发者有效地处理服务依赖中的延迟和故障。熔断器的主要目的是在出现故障时提供一种优雅的降级机制,以避免整个系统的崩溃。 熔断和降级是Hystrix中两个重要的概念。 熔断(Circuit Breaker)指的是在服务出现故障或错误率过高时,自动地切换到指定的备用服务或返回事先定义好的错误结果,起到保护系统免受故障传播的影响的作用。当服务不可用或响应时间过长时,熔断器会打开,拒绝后续请求的访问,并尝试通过执行降级逻辑来快速响应客户端。一旦后续请求不再出现故障,熔断器将会进入半开状态,允许少量的请求通过以检测服务是否恢复正常。 降级(Degradation)指的是在系统资源不足或者高访问量时,服务降级会关闭一些不重要的功能,以保证系统核心功能的可用性和稳定性。降级可以通过阻止非必要的调用、减少资源的消耗以及返回默认值或缓存结果来实现。降级需要提前定义好一些备用的逻辑,一旦系统资源紧张,就可以立即启用降级逻辑来保障系统的可用性。 总而言之,熔断和降级都是为了保护系统免受故障的影响。熔断主要是针对服务故障和错误率过高的情况,通过切换到备用服务或返回错误结果来保护系统。降级主要是在系统资源紧张或高访问量的情况下,关闭一些不重要的功能来保证核心功能的可用性和稳定性。两者都是通过提前定义备用逻辑来保障系统的正常运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值