前言
Soul 网关上用以下四种插件实现了限流和熔断
- rateLimiter 插件
- Hystrix 插件
- Sentinel 插件
- resilience4j 插件
本文主要讲述 Hystrix 插件的配置。
1. 概念
断路保护就是形象的说就是家中电路上保险丝,当负载过大时,它就会跳闸,从而保护家中的线路和其他电器不会烧毁。
它的核心思想:
- 在断路器对象中封装受保护的⽅法调⽤
- 该对象监控调⽤和断路情况
- 调⽤失败触发阈值后,后续调⽤直接由断路器返回错误,不再执⾏实际调⽤
2. 配置
2.1 启动 admin 后台,启动 bootstrap, 启动 examples 中的 http 服务器。
2.1 开启 Hystrix 插件,配置好选择器, 配置好 rules。
配置选择器和规则时:名称是全局唯一的。如果配置了和其他插件一样的名称的话,会报错误。
2.2 这里采用 ab 压力测试,
ab -n 1000 -t 10 -c 200 "http://localhost:9195/http/test/findByUserId?userId=1"
测试结果
...
Concurrency Level: 200
Time taken for tests: 10.000 seconds
Complete requests: 10520
Failed requests: 10372
(Connect: 0, Receive: 0, Length: 10372, Exceptions: 0)
Non-2xx responses: 10372
Total transferred: 1961296 bytes
HTML transferred: 1013332 bytes
Requests per second: 1051.98 [#/sec] (mean)
Time per request: 190.117 [ms] (mean)
Time per request: 0.951 [ms] (mean, across all concurrent requests)
Transfer rate: 191.53 [Kbytes/sec] received
然后观察 bootstrap 端的命令行会有以下日志
hystrix execute have circuitBreaker is Open! groupKey:0,commandKey:0
说明这时候 hystrix 已经开始生效了
坑点:之前采用的 Postman 的 Runner 机制跑的,但是这个是依次执行的,并不能很好的做压测。具体可以参考 postman接口测试和压力测试 这上面的回复。
总结:
- 了解熔断的机制才能更好的完成配置。
- 接下来会分析,Soul 是怎么利用 Hystrix 插件的