soul网关系列(十七):其它插件简述

简单的说明下其它几个插件的作用和关键点,部分内容来源于其它文章

一、rateLimiter插件

  1. Soul 网关提供了限流插件,方便用户控制指定时间段内经过网关的请求数量
  2. Soul 使用 redis 做令牌桶算法
  3. Soul-plugin-ratelimiter 的文件目录结构:
└── src
    ├── main
    │   ├── java
    │   │   └── org
    │   │       └── dromara
    │   │           └── soul
    │   │               └── plugin
    │   │                   └── ratelimiter
    │   │                       ├── RateLimiterPlugin.java AbstractSoulPlugin 实现类,核心函数是 doExecute,
    │   │                       ├── config
    │   │                       │   └── RateLimiterConfig.java ratelimiter 相关配置项
    │   │                       ├── executor
    │   │                       │   └── RedisRateLimiter.java 基于 redis 的令牌桶算法实现,核心函数是 isAllowed
    │   │                       ├── handler
    │   │                       │   └── RateLimiterPluginDataHandler.java 从插件配置读取数据的handler
    │   │                       └── response
    │   │                           └── RateLimiterResponse.java ratelimiter response 类
    │   └── resources
    │       └── META-INF
    │           └── scripts
    │               ├── concurrent_request_rate_limiter.lua 并发 ratelimiter lua脚本
    │               └── request_rate_limiter.lua ratelimiter lua脚本
    └── test
  1. 启动 redis-server
  2. 然后在 admin 中配置 ratelimiter 插件,首先在插件管理中开启 ratelimiter,再配置 ratelimiter 的 selecter 和 rule
    在这里插入图片描述
  3. postman验证
    配置完成后使用postman模拟不间断的 200 次请求:
    在执行完 10 次后的 第11次,ratelimiter 阻断了我们的请求,因为令牌桶中的令牌已经被消耗光了(capacity 为 10),而填充速率(rate)为 5,意味着用户每秒最多请求 5次 后就被限流。
  • 令牌桶算法的分配流程
    在这里插入图片描述

二、hystrix插件

2.1 简介

  • hystrix插件是网关用来对流量进行熔断的核心实现。
  • 使用信号量的方式来处理请求
  • Hystrix 是高可用性保障的一个框架。Netflix的 API 团队从 2011 年开始做一些提升系统可用性和稳定性的工作,Hystrix 就是从那时候开始发展出来的。

2.2 设计原则

  • 对依赖服务调用时出现的调用延迟和调用失败进行控制和容错保护。
  • 在复杂的分布式系统中,阻止某一个依赖服务的故障在整个系统中蔓延。比如某一个服务故障了,导致其它服务也跟着故障。
  • 提供 fail-fast(快速失败)和快速恢复的支持。
  • 提供 fallback 优雅降级的支持。
  • 支持近实时的监控、报警以及运维操作。

2.3 参数说明

  • 跳闸最小请求数量 :最小的请求量,至少要达到这个量才会触发熔断
  • 错误百分比阀值 : 这段时间内,发生异常的百分比。
  • 最大并发量 : 最大的并发量
  • 跳闸休眠时间(ms) :熔断以后恢复的时间。
  • 分组Key: 一般设置为:contextPath
  • 命令Key: 一般设置为具体的 路径接口。

三、sentinel插件

3.1 简介

  • sentinel插件是网关用来对流量进行限流与熔断的可选选择之一。
  • sentinel为网关熔断限流提供能力。
  • sentinel Sentinel 是阿里巴巴开源的为微服务提供高可用的组件;Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
.
├── pom.xml
├── soul-plugin-sentinel.iml
└── src
    └── main
        └── java
            └── org
                └── dromara
                    └── soul
                        └── plugin
                            └── sentinel
                                ├── SentinelPlugin.java //Sentinel 插件实现,从配置中读取设置并做对应处理,再把请求传递到插件链中
                                ├── fallback
                                │   └── SentinelFallbackHandler.java //根据 Sentinel 抛出的异常分别做相应的处理
                                └── handler
                                    └── SentinelRuleHandle.java //配置 sentinel 规则

3.2 特征

  • 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
  • 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。
  • 广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
  • 完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

3.3 参数详解

  • 是否开启流控(1或0) :是否开启sentinel的流控。
  • 流控效果 : 流控效果(直接拒绝 / 排队等待 / 慢启动模式),不支持按调用关系限流。
  • 限流阈值类型 : 限流阈值类型,QPS 或线程数模式。
  • 是否开启熔断(1或0) :是否开启sentinel熔断。
  • 熔断类型: 熔断策略,支持秒级 RT/秒级异常比例/分钟级异常数。
  • 熔断阈值: 阈值。
  • 熔断窗口大小: 降级的时间,单位为 s。
  • 熔断URI: 熔断后的降级uri。

四、resilience4j插件

4.1 resilience4j概述

Resilience4j是一个轻量级容错框架,设计灵感来源于Netflix 的Hystrix框架,为函数式编程所设计。

Resilience4j 提供了一组高阶函数(装饰器),包括断路器,限流器,重试,隔离,可以对任何的函数式接口,lambda表达式,或方法的引用进行增强,并且这些装饰器可以进行叠加。这样做的好处是,你可以根据需要选择特定的装饰器进行组合

4.2 参数详解

  • timeoutDurationRate:等待获取令牌的超时时间,单位ms,默认值:5000。
  • limitRefreshPeriod:刷新令牌的时间间隔,单位ms,默认值:500。
  • limitForPeriod:每次刷新令牌的数量,默认值:50。
  • circuitEnable:是否开启熔断,0:关闭,1:开启,默认值:0。
  • timeoutDuration:熔断超时时间,单位ms,默认值:30000。
  • fallbackUri:降级处理的uri。
  • slidingWindowSize:滑动窗口大小,默认值:100。
  • slidingWindowType:滑动窗口类型,0:基于计数,1:基于时间,默认值:0。
  • minimumNumberOfCalls:开启熔断的最小请求数,超过这个请求数才开启熔断统计,默认值:100。
  • waitIntervalFunctionInOpenState:熔断器开启持续时间,单位ms,默认值:10。
  • permittedNumberOfCallsInHalfOpenState:半开状态下的环形缓冲区大小,必须达到此数量才会计算失败率,默认值:10。
  • failureRateThreshold:错误率百分比,达到这个阈值,熔断器才会开启,默认值50。
  • automaticTransitionFromOpenToHalfOpenEnabled:是否自动从open状态转换为half-open状态,,true:是,false:否,默认值:false。

4.2 hystrix、sentinel、resilience4j 功能差异

在这里插入图片描述

五、monitor插件

monitor插件是网关用来监控自身运行状态(JVM相关),请求的响应迟延,QPS、TPS等相关metrics。

六、rewrite插件

soul网关在对目标服务进行代理调用的时候,还容许用户使用 rewrite 插件来重写请求路径

七、参考链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值