架构

spring-cloud-gateway使用-熔断

2019-07-18  本文已影响0人  sleepforests

代码在:
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的一些使用,后面有具体的使用再整理发出来。

上一篇下一篇

猜你喜欢

热点阅读