一 sentinel实操实例
1.1 sentinel作用
sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障服务的稳定性。
1.2 blockhandler与fallback的区别
1.fallback:对jvm抛出的业务异常进行处理
2.blockhandler:对在sentinel管控端配置的服务流量策略(是否违规)起作用。
1.3 热点的定义
热点即经常访问的数据,很多时候我们希望统计某个热点数据中访问频次最高的top k 数据,并对其访问进行限制,比如:用户id为参数,针对一段时间内参数频繁访问的用户id进行限制。
热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。
二 热点资源限流案例
2.1 案例1:是否含有某参数
1.业务代码
2.配置规则
@SentinelResource 的value对应配置页面的 【资源名称】
页面中索引序号,对应着请求参数的索引
表达意思: 对第一个请求参数,滑动窗口内【1s内请求阈值超过2个】则触发热点限流规则,触发blockhandler处理
3.验证
a)含有第一个参数,不停刷新,则触发限流熔断异常
b)不含有第一个参数,不停刷新,则不会触发限流熔断异常,一直正常访问
2.2 案例2: 参数等于某个值进行额外限流
1.业务代码配置
2.sentinel配置
表达含义是,针对请求中的第一个参数的值不是5时,在滑动窗口【1秒内超过阈值2】触发热点限流,如果参数值是5,为参数例外项,滑动窗口【1秒内超过阈值20】才触发热限流。
3.验证
a)第一个参数不为666
b) 第一个参数为666.手工请求演示不出效果,暂时都是正常访问,实际1秒请求超过阈值20,则触发热点限流。
三 sentinel配置进行持久化
3.1 pom依赖添加
<!--SpringCloud ailibaba sentinel-datasource-nacos -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
3.2 nacos进行配置
配置案例
[{
"resource":"/testA",
"limitApp":"default",
"grade":1,
"count":2,
"strategy":0,
"controlBehavior":0,
"clusterMode":false
}]
3.nacos配置,设置namespace,dataid,groupid,见图
3.3 配置文件的配置
按照nacos定义的namespace,dataid,groupid进行配置
3.4 验证
1.进行访问:http://localhost:8888/testA
进行多次访问后,显示限流提示:
2.关闭sentinel,nacos后,再次访问,还是如此,说明持久化成功!
3.重启电脑,再次启动相应服务,查看sentinel,规则还在,如图:
四 sentinel进行黑白名单配置
4.1 黑白名单配置
4.1.1.创建handler
1.创建hanlder
@Component
public class MyRequestOriginParser implements RequestOriginParser
{
@Override
public String parseOrigin(HttpServletRequest request)
{
return request.getParameter("serverName");
}
}
4.1.2.controller
package com.jurf.ms.alibaba.sentinel.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @auther zzyy
* @create 2024-01-04 10:40
*/
@RestController
@Slf4j
public class EmpowerController //Empower授权规则,用来处理请求的来源
{
@GetMapping(value = "/empower")
public String requestSentinel4()
{
log.info("测试Sentinel授权规则empower");
return "Sentinel授权规则";
}
}
4.1.3 启动服务
1.nacos: startup.cmd -m standalone
2.sentinel
4.1.4 验证服务
配置黑白名单
2.进行访问