api-gateway实践(13)新服务网关 - 断路保护/熔断机制

时间:2022-11-28 19:58:12

 

参考链接:SpringCloud的Hystrix(五) Hystrix机制

新需求列表

1、在线测试

api-gateway实践(13)新服务网关 - 断路保护/熔断机制

 

        根据定义,生成输入界面,

        点击测试,

        验证参数,发起调用,返回执行结果

2、熔断保护

api-gateway实践(13)新服务网关 - 断路保护/熔断机制
api-gateway实践(13)新服务网关 - 断路保护/熔断机制

 



api-gateway实践(13)新服务网关 - 断路保护/熔断机制api-gateway实践(13)新服务网关 - 断路保护/熔断机制

 

api-gateway实践(13)新服务网关 - 断路保护/熔断机制

两个实现类:

  NoOpCircuitBreakerImpl,什么也不做的断路器实现

  HystrixCircuitBreakerImpl,实现类:

HystrixCircuitBreakerImpl

  1. HystrixCommandProperties properties
  2. HystrixCommandMetrics metrics
  3. AtomicBoolean circuitOpen
  4. AtomicLong circuitOpenedOrLastTestedTime:断路器打开或是上一次测试时间戳

HystrixCircuitBreakerImpl的方法

  isOpen 判断断路器的打开/关闭状态

           如果打开,直接返回true,表示断路器处于打开状态。否则,从度量指标metrics中获取healthcounts统计对象进一步判断(该对象记录了一个滚动时间窗内的请求信息快照,默认时间窗为10秒)

                  如果请求总数qps在预设的阈值范围内就返回false,表示断路器处于未打开状态,默认值20

                  如果错误百分比在阈值范围内就返回false,表示断路器处于未打开状态,默认值50

                  如果上述两个条件都不满足,就将断路器设置为打开状态(熔断/短路)。同时,如果从关闭状态切换到打开状态的话,就将时间记录到circuitOpenedOrLastTestedTime中。

       allowRequest 判断请求是否被允许

           判断是否强行打开,是则 return false 

           判断是否强行关闭,是则 isOpen & return true

           !isOpen()||allowSingleTest()::断开时的时间戳+配置中的circuitBreakerSleepWindowInMillseconds 是否 小于当前时间,如果是的话,就将当前时间更新到记录断路器打开的时间circuitBreakerOpenedOrLastTestedTime中,并允许该请求。

                  即设置了断路器打开后的休眠时间(默认为5秒),休眠时间达到之后,将再次允许请求尝试访问,此时断路器处于“”半开“”,

                           若此时请求继续失败,则断路器又进入打开状态,并等待下一个休眠窗口过去之后再尝试。

                           若请求成功, 则将断路器重新置于关闭状态。

                           所以,allowSingleTest()和isOpen()配合,实现了断路器的打开和关闭状态的切换。

       markSuccess 用来关闭断路器  在“半开”状态时使用。若调用命令成功,通过调用它将打开的断路器关闭,并重置度量指标对象。

命令执行的四个结果:成功、失败、超时、拒绝,用来更新计时器

3、性能测试

4、调用计量