spring-cloud-gateway使用-熔断
代码在:
https://gitee.com/sleepforests/spring-cloud-gateway-demo
熔断和限流是保护系统的2个方面。
限流可以简单的理解是对下游服务的保护,防止流量激增的情况下大量的请求将下游服务打垮。
熔断主要保护的是调用方服务,如某A服务调用B服务的rpc接口,突然B服务接口不稳定,表现为接口延迟或者失败率变大。这个时候如果对B服务调用不能快速失败,那么会导致A服务大量线程资源无法释放导致最终A服务不稳定,故障点由B服务传递到A服务,故障扩大。熔断就是在B服务出现故障的情况下,断开对B的调用,通过快速失败来保证A服务的稳定。
scg作为网关入口,必须考虑对自己的保护,所以必须考虑接入熔断组件。
目前熔断组件可以使用下面2个
sentinel
https://github.com/alibaba/Sentinel/wiki/%E7%BD%91%E5%85%B3%E9%99%90%E6%B5%81
hystrix https://github.com/Netflix/Hystrix
其中,scg对于hystrix是开箱即用的支持,配置如下:
spring:
cloud:
gateway:
routes:
- id: hystrix_route
uri: http://example.org
filters:
- Hystrix=myCommandName
具体用法可以查看scg官方文档。
这里主要是对于hystrix几点使用心得:
1、hystrix很香,建议在同步开发模式下大量的使用;这句话什么意思呢?其实反过来说就是,在scg(webflux)模式下建议不要大量使用。
2、同步模式下规划好线程池,对于调用的每个服务,都使用command模式封装好,设置好线程数、超时、fallback等等。这个是在实际项目大量使用过,当然当时业务的qps不高,没有过万的qps场景。
阿里开源的sentinel没有深入研究,也没有大量使用。但是阿里的文档有对比,写的很清楚,理论上是具有hystrix的优点且具不使用线程池模型,具有更好的性能。
https://github.com/alibaba/Sentinel/wiki/Sentinel-%E4%B8%8E-Hystrix-%E7%9A%84%E5%AF%B9%E6%AF%94
这次公司的业务场景qps比较高,http接口几十万的qps,所以得看看sentinel的一些使用,后面有具体的使用再整理发出来。