前置条件
依赖
<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 和并发线程数等几个维度的监控指标,通过自适应的流控策略,让系统的入口流量和系统的负载达到一个平衡,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。
LOAD: 当系统load1(1分钟平均负载)超过阈值,且并发线程数超过系统容量时触发,建议设置为系统CPU核心数 * 2.5;仅对Linux/Unix系统有效。其中的load1,可以在Linux系统上通过命令 uptime 查看:
其中的系统容量,含义如下所示:
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地址
-
授权页面配置
白名单模式 ,只允许127.0.0.1访问(localhost无法访问)
-
测试
改为localhost
-
总结
- 要想授权规则生效必须在代码中增加请求源解析
- 根据请求源解析配置的不同会有不同的效果,简单的就是过滤ip地址