今天尝试配置使用 Hystrix 插件,并体验它的功能。
配置插件
在 soul-bootstrap 的 pom.xml 文件中启用 Hystrix 的依赖。
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-plugin-hystrix</artifactId>
<version>${project.version}</version>
</dependency>
然后在 soul-admin 后台启用 Hystrix 插件。启动一个 soul-examples-http 服务。
之后在插件列表 hystrix 的配置页面添加一个选择器。
选择器作为对流量的第一次筛选,配置哪些请求要经过 Hystrix 插件。之后再添加一条规则。
对 /http/order/findById
这一个请求设置对流量的第二次筛选规则。其中跳闸最小请求数量设置为1,最大并发量设置为3,数值都比较小。都是为了一会儿压测时更块的出发熔断逻辑,能进入到Hystrix 插件的逻辑中。
压测
直接压测soul-examples-http服务
wrk -t 8 -c 32 -d 60s http://192.168.31.34:8192/order/findById\?id\=5
### 结果
Running 1m test @ http://192.168.31.34:8192/order/findById?id=5
8 threads and 32 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 8.19ms 30.67ms 512.56ms 96.25%
Req/Sec 1.43k 508.60 2.82k 72.67%
676131 requests in 1.00m, 71.57MB read
Requests/sec: 11249.44
Transfer/sec: 1.19MB
通过网关访问
wrk -t 8 -c 32 -d 60s http://192.168.31.34:8192/http/order/findById\?id\=5
### 结果
Running 1m test @ http://192.168.31.34:9195/http/order/findById?id=5
8 threads and 32 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 77.37ms 100.93ms 1.65s 91.56%
Req/Sec 74.12 37.96 212.00 68.18%
33841 requests in 1.00m, 6.04MB read
Socket errors: connect 0, read 0, write 0, timeout 3
Non-2xx or 3xx responses: 26792
Requests/sec: 562.95
Transfer/sec: 102.92KB
可以看到通过网关压测时,发送了33841个请求,只收到了26792个响应。而且RPS为562,相比直接访问后端服务的11249降低了不少。
另外在压测网关时,直接通过Postman访问,返回了两种类型的错误。
目测应该是没有配置正确,网关层报错了。需要继续找找原因。
总结
Hystrix 是 Netflix 开源的熔断中间件。今天初步配置了 soul 网关中怎么集成 Hystrix 插件来实现熔断、服务降级等功能。后续研究 Hystrix 插件在 soul 网关插件链中的执行逻辑以及 Hystrix 的部分源码。