Sentinel之系统规则和授权规则

384 阅读2分钟
前置条件

依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

配置yml

server:
  port: 10001
spring:
  application:
    name: cloud-consumer-feign
  cloud:
    nacos:
      discovery:
        namespace: public
        server-addr: localhost:8848
    //[0]    
    sentinel:
      transport:
        dashboard: localhost:8080
        port: 8719
  • [0]处 为配置sentinel,dashboard时sentinel后台管理页面地址,port为sentinel api 端口
系统规则

Sentinel 系统自适应限流从整体维度对应用入口流量进行控制,结合应用的 Load、CPU 使用率、总体平均 RT、入口 QPS 和并发线程数等几个维度的监控指标,通过自适应的流控策略,让系统的入口流量和系统的负载达到一个平衡,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。

image-20220826164406564

LOAD: 当系统load1(1分钟平均负载)超过阈值,且并发线程数超过系统容量时触发,建议设置为系统CPU核心数 * 2.5;仅对Linux/Unix系统有效。其中的load1,可以在Linux系统上通过命令 uptime 查看:

image-20220826164416130

其中的系统容量,含义如下所示:

image-20220826164422726

RT: 所有入口流量的平均RT达到阈值触发

线程数: 所有入口流量的并发线程数达到阈值触发

入口QPS: 所有入口流量的QPS达到阈值触发

CPU使用率: 当cpu使用率达到阈值就很被限流

对于系统规则,使用的比较少也比较简单。并且也存在一定问题,具体参考sentinel系统规则,因此也就不做演示了。

授权规则

很多时候,我们需要根据调用来源来判断该次请求是否允许放行,这时候可以使用 Sentinel 的来源访问控制(黑白名单控制)的功能。来源访问控制根据资源的请求来源(origin)限制资源是否通过,若配置白名单则只有请求来源位于白名单内时才可通过;若配置黑名单则请求来源位于黑名单时不通过,其余的请求通过。

  • 配置请求源解析

    @Configuration
    public class SentinelConfig implements RequestOriginParser {
    ​
        @Override
        public String parseOrigin(HttpServletRequest httpServletRequest) {
            return httpServletRequest.getRemoteAddr();
        }
    }
    

    这里我配置的是过滤ip地址

  • 授权页面配置

    image-20220826164433559

    白名单模式 ,只允许127.0.0.1访问(localhost无法访问)

  • 测试

    image-20220826164442109

    改为localhost

    image-20220826164450841

  • 总结

    • 要想授权规则生效必须在代码中增加请求源解析
    • 根据请求源解析配置的不同会有不同的效果,简单的就是过滤ip地址