(3) 网关流控
Sentinel 支持对 Spring Cloud Gateway、Zuul 等主流的 API Gateway 进行限流

文章插图
网关流控针对 API网关的场景定制的限流规则,可以针对不同 route 或自定义的 API 分组进行限流,支持针对请求中的路径、参数、Header、来源 IP 等进行定制化的限流
(4) 熔断降级
【扛住阿里双十一高并发流量,Sentinel是怎么做到的?】如果调用链路中的某个资源不稳定,最终会导致请求发生堆积,通过熔断降级能在调用链路中某个资源出现不稳定状态时(包括调用超时、异常比例升高、异常数升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误
当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出 DegradeException),经过时间窗口之后,退出熔断,并在下一次资源出现不稳定状态再次自动熔断
(5) 热点参数限流
热点即经常访问的数据,热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流例如以下场景:
- 用户ID为参数,限制用户对接口的范围QPS
- 商品ID为参数,限制商品下单接口频率

文章插图
(6) 系统自适应限流
为了解决传统方案:基于操作系统负载(load1,linux下用uptime查看)做进行自适应限流,带来的存在延时、系统性能恢复慢的问题,Sentinel采用新的思路:根据系统能够处理的请求,和允许进来的请求,来做平衡,而不是根据一个间接的指标(系统 load)来做限流
目标在于:在系统不被拖垮的情况下,尽可能提高系统的吞吐率,而不是 负载 一定要到低于某个阈值
系统保护规则是从应用级别的入口流量进行控制,从单台机器的总体 Load、RT、入口 QPS 和线程数四个维度监控应用数据,当实际运行达到限定阈值进行限流保护,支持的阈值类型:
- Load:当系统 load1 超过阈值,且系统当前的并发线程数超过系统容量时才会触发系统保护 。系统容量由系统时间运行监测到的的 maxQps * minRt (最小响应时间)计算得出
- RT:当单台机器上所有入口流量的平均 RT(响应时间)
- 线程数:当单台机器上所有入口流量的并发线程数
- 入口 QPS:当单台机器上所有入口流量的 QPS
Sentinel黑白名单根据资源的请求来源(origin)限制资源是否通过,若配置白名单则只有请求来源位于白名单内时才可通过;若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过
快速入门1 安装控制台
从github release页面(https://github.com/alibaba/Sentinel/releases)下载最新控制台jar包
命令行启动控制台:
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar2 应用接入Sentinel
Sentinel适配了常见主流框架,包括Dubbo、Spring Boot、Spring WebFlux、gRPC、Zuul、Spring Cloud Gateway、RocketMQ、Web Servlet,对于需要限流的资源,支持用原生Java的try-catch 接入或者使用注解
下面以常见的Spring Boot注解的方式作为示例:引入sentinel适配Spring Cloud的依赖:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> <version>2.1.0.RELEASE</version></dependency>Application.yml指定控制台地址:
spring: cloud: sentinel: transport: dashboard: IP:端口号定义需要限流的资源:
@RestControllerpublic class TestController { @GetMapping(value = https://www.isolves.com/it/cxkf/jiagou/2019-10-15/"/hello") // 定义需要限流的资源名称为hello @SentinelResource("hello") public String hello() { return "Hello Sentinel"; }}请求一次上面的http hello接口后,触发Sentinel客户端初始化,才能在控制台看到接口
添加流控规则:

文章插图
频繁请求接口,可以看到部分请求被拒绝:

文章插图
注意:上面的配置方式是没有做持久化的,生产环境不建议使用
3 规则配置
Sentinel 提供 动态规则数据源 支持来动态地管理、读取配置的规则 。Sentinel 提供的 ReadableDataSource 和 WritableDataSource 接口简单易用,非常方便使用 。
推荐阅读
- 梦见找拖鞋找不到一双配对的 梦见找拖鞋穿是什么意思
- 路由器300M 450M 1200M双频是啥意思?这样挑选让你网络极速顺畅
- 双门冰箱选购技巧
- 三星双开门冰箱质量怎么样
- 西门子双开门冰箱怎么样
- 双开门冰箱如何选购
- 闪亮茗天曝双MV 大茶今泡出爱的味道
- 麦当劳红豆双皮奶风味麦旋风好吃吗,麦当劳红豆双皮奶冰淇淋多少
- 阿里资深架构师:同样是数据中台,为什么差距那么大?
- 玩转双系统安装,这10个知识盲区要扫除
