Hystrix进阶攻略之熔断器原理及测试

一、基本原理

之前的入门文章里面已经详细介绍过,这里就不再赘述,不懂的可以参考之前的文章:

今天,我们是以实战代码的形式模拟一些异常,演练这些原理

二、实战演练

我们来演示什么场景呢?

  • 演示熔断器三种状态的转换(close——half-open——open)
  • 演示熔断器下的降级策略

1、构建熔断器策略

  • withMetricsRollingStatisticalWindowBuckets

注意:这里设置的窗口大小一定要 >= withCircuitBreakerRequestVolumeThreshold,否则断路器始终open不了。默认滑动窗口大小:10

  • withMetricsRollingStatisticalWindowInMilliseconds

默认滑动窗口时间窗:10s。

  • withCircuitBreakerRequestVolumeThreshold

滑动窗口时间窗内,经过短路器的流量超过了一定的阈值,才执行短路。默认是20次

  • withCircuitBreakerErrorThresholdPercentage

滑动窗口时间窗内,断路器统计到的异常调用的占比超过了一定的阈值,才执行短路,默认是50%。

  • withCircuitBreakerSleepWindowInMilliseconds

open到half-open状态(试探服务)的时间。默认值:5000ms

本次我们采用的熔断器策略为:我们以该策略来模拟场景验证

.withMetricsRollingStatisticalWindowBuckets(2)

.withMetricsRollingStatisticalWindowInMilliseconds(6000)

.withCircuitBreakerRequestVolumeThreshold(2)

.withCircuitBreakerErrorThresholdPercentage(40)

.withCircuitBreakerSleepWindowInMilliseconds(6000))

简而言之:无非就掌握三种状态的转换(open——half——open)

  • open:在滑动窗口内(2个窗),滑动窗口时间窗内(6s),经过断路器的流量 >= 2,且错误比例>40%
  • open ~ half-open:再经过6s的时间
  • half-open ~ close:成功访问一次

2、异常模拟

if(adId.equals(-1L)) {

// 如果调用失败了,报错了,那么就会去调用fallback降级机制

throw new Exception();

}

即:AdId=-1的请求为异常请求

3、单元测试类

依赖系统启动:spring-boot-hystrix-ad

项目名:spring-boot-hystrix-circuit-breaker

实验实录:

Hystrix进阶攻略之熔断器原理及测试

1)open close状态

Hystrix进阶攻略之熔断器原理及测试

2)异常统计信息

Hystrix进阶攻略之熔断器原理及测试

2)open状态

Hystrix进阶攻略之熔断器原理及测试

3)open ~ half-open and half-open ~ close

Hystrix进阶攻略之熔断器原理及测试

4、结合hystrix-dashboard测试熔断器原理

启动我们的Tomcat,打开我们的监控仪表盘:http://localhost:8080/hystrix-dashboard/

基本配置:http://localhost:8022/hystrix.stream

从界面上观察熔断器的状态转换:

Hystrix进阶攻略之熔断器原理及测试

从界面上,我们可以观察如下几点变化:

  • Circuit:Closed ~ Open(界面上是看不到half-open)
  • Success:10
  • Failure:3
  • Reject:3
  • Success:3


分享到:


相關文章: