1. Sentinel限流降级: 一个接口一个方法流量大限制流量,有些接口流量通过了有的没有通过所以就出现了降级操作
2. Sentinel熔断降级:A调用B B自身原因响应不稳定等,A觉得不稳定所以就断开就像保险丝一样
3. Sentinel+ nacos组合:不能持久化配置限流规则和熔断规则
一. 常见的限流算法
1. 静态窗口限流
2. 动态窗口限流:
例如:当前是第2.5秒,静态统计第2秒到现在的请求数,动态:统计第1.5秒到现在的请求数
3. 漏桶限流
4. 令牌桶限流
5.令牌大闸
二. Sentinel官网地址
官网地址: introduction | Sentinel (sentinelguard.io)
下载地址我已经打包了: Sentinel-1.8.6资源-CSDN文库
三. Sentinel 介绍
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
四. Sentinel 使用
导入依赖
<!-- 限流熔断 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
接下来看官方文档,首先你需要定义资源
启动类添加以下方法,定义资源注意这个规则的资源名要与这上面的注解的名字需要一样才能匹配到是哪个方法定义了资源。,启动类的main方法之后调用资源的方法initFlowRules()
private static void initFlowRules(){
// 创建一个FlowRule对象的列表。
List<FlowRule> rules = new ArrayList<>();
// 创建一个新的FlowRule对象。
FlowRule rule = new FlowRule();
// 设置这个规则的资源名。
rule.setResource("doConfirm");
// 设置这个规则的grade为QPS。
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
// 设置这个规则的限制QPS为20。
rule.setCount(1);
// 将这个规则添加到列表中。
rules.add(rule);
// 将这些规则加载到FlowRuleManager中。
FlowRuleManager.loadRules(rules);
}
@SentinelResource(value = "doConfirm") 在指定方法上面加上这个注解
就是被限流之后就调用下面的方法
启动项目打印日志log输出,已定义限流规则
开始压测上一节讲的jmeter
有些接口可以访问到数据有些请求访问不到被拦截到外面出现异常问题, 解决这个问题也很简单
在配置异常信息配置对应的信息就好了
某个接口对数据库的操作更多就可以使用Sentinel
五. Sentinel 控制台
Sentinel-1.8.6资源-CSDN文库已经打包了可以直接下载就可以使用
java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard.jar
访问8080端口这个可以改,启动界面在下面账号密码都是sentinel
这样可以看到限流监控平台
在模块的配置文件中配置以下
# sentinel???https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel
spring.cloud.sentinel.transport.port=8719
spring.cloud.sentinel.transport.dashboard=localhost:8080
spring.cloud.sentinel.web-context-unify=false
将business模块中有流量就会显示控制台
配置限流规则
这样就不用写代码来指定规则,控台不保存规则一旦应用重启之前设置的规则就全没了,存在应用内存里面,针对接口来定义限流规则