优势:
1.单独一个组件,可以独立出来;
2.直接界面化的细粒度统一配置;
应用场景:秒杀,消息巅峰填谷,集群流量控制,实时熔断下游不可用应用;
下载安装:
下载地址:https://github.com/alibaba/Sentinel/releases
下载完成 java -jar命令即可
前提:java8环境ok,8080端口不能被占用
界面访问:http://localhost:8080
账户密码:均为sentinel
能解决的问题:
服务雪崩
服务降级
服务熔断
服务限流
Module
pom:nacos-diacovery
<dependency>
<groupId>com.alibabacloud<groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel<artifactId>
<dependency>
<dependency>
<groupId>com.alibaba.csp<groupId>
<artifactId>spring-datasource-nacos<artifactId>
<dependency>
<dependency>
<groupId>org.springframework.cloud<groupId>
<artifactId>spring-cloud-starter-alibaba-openfeign<artifactId>
<dependency>
yml:
server:
port:8401
spring:
application:
name:cloudalibaba-sentinel-service
cloud:
nacos:
discovery:
server-addr:localhost:8348#nacos注册中心地址
sentinel:
transport:
dashboard:localhost:8080#配置Sentinel dashboard地址
#默认8719,加入
port:8719
management:
endpoint:
web:
exposure:
include: '*'
sentinel采用懒加载模式:访问一次即可
界面配置流控规则:
@1资源名限制也就是路径
@Qps限流
流控模式:
直接:qpi达到限流条件,直接限流
关联:当关联的资源达到阈值时,就限流自己
链路:只记录指定链路上的流量
流量效果:
快速失败,抛异常
warm Up:阈值
排队等待:匀速排队
Sentinel降级简介
Sentinel界面有 包含RT,异常比例异常数三种策略;
RT(妙级):平均响应时间 超出阈值 且 在时间窗口内通过的请求>=5,两个条件同时满足后触发降级窗口期后关闭断路器
RT最大4800(更大的需要通过-Dcsp.sentinel.statistic.max=xxxx才能生效)
异常比例 (秒级):QPS>=5且异常比例超过阈值,触发降级,时间窗口期结束后结束后关闭降级
异常数 (分钟级):异常数超过阈值时,触发降级,时间窗口期结束后,关闭降级;
Sentinel热点Key限流
仅支持QPS模式
界面配置 :
java代码:
@GetMapping("/testHotKey")
@**SentinelResource**(value = "testHotKey",blockHandler = "**deal_testHotKey**")
public String testHotKey(@RequestParam(value = "p1",required = false)String p1,@RequestParam(value = "p2",required = false)String p2)
{
return"aaa"
}
public String **deal_testHotKey** (String p1,String p2,BlockException ex)
{
return "bbbb"
}
参数例外项限流:当p1=5时最大200 其他的超过5就限流
系统自适应限流
界面点击系统规则------>新增
系统最外层限流
@SentinelResource
客户自定义限流处理
1.创建CustomerBlockHandler类用于处理限流逻辑
public class CustomerBlockHandler
{
public static CommonResult handleException(BlockException exception)
{
return new CommonResult(555,"客户自定义,global handlerException---1")
}
public static CommonResult handleException2(BlockException exception)
{
return new CommonResult(555,"客户自定义,global handlerException---2")
}
}
Controller层
@GetMapping("/rateLimit/customerBlockHandler")
@SentinelResource(value = "customerBlockHandler",
blockHandlerClass = CustomerBlockHandler.class
blockHandler = "handlerException2")
public CommonResult customerBlockHandler()
{
return new CommonResult(200,"按客户自定义")
}
服务熔断功能
sentinel 整合了ribbon+openFeign+fallback
@SentinelResource(value = “fallback”,
fallback = “handlerFallback”)
public CommonResult handlerFallback()
{
return new CommonResult(5555,“兜底异常”)
}
若blockHandler和fallback都进行了配置。则被限流而抛出BlockException时只会进入blockHandler逻辑处理
服务熔断exceptionsToIgnore 异常忽略属性
@SentinelResource(value = “fallback”,
exceptionsToIgnore = {IllegalArgumentException.class}
#假如报该异常,不再有fallback方法兜底,没有降级效果
fallback = “handlerFallback”)
Sentinel 持久化配置
怎么玩:
将限流配置规则持久化进Nacos保存,只要刷新8401某个rest地址,sentinel控制台的流控规则就能看到,只要Nacos里面的配置不删除,针对8401上的sentinel上的流控规则持续有效;
pom:
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId> sentinel-datasource-nacos<artifactId>
<dependency>
yml:
server:
port:8401
spring:
application:
name:cloudalibaba-sentinel-service
cloud:
nacos:
discovery:
server-addr:localhost:8848
sentinel:
transport:
dashbord:localhost:8080
port:8719
datasource:
dsl:
nacos:
server-addr:localhost:8848
dataId:cloudalibaba-sentinel-service
groupId:DEFAULT_GROUP
data-type:json
rule-type:flow
management:
endpoints:
web:
exposure:
include:'*'
feign:
sentinel:
enabled:true
nacos进行配置(多次调用)
配置列表:
DataId: cloudalibaba-sentinel-service
groupId: DEFAULT_GROUP
配置格式:JSON
[
{
"resource" : "/rateLimit/byUrl",#资源名称
"limitApp":"default",#来源应用
"grade":1,#阈值类型,0表示线程数,1表示QPS
"count":1,单机阈值
"strategy":0,流控模式,0表示直接,1表示关联,2表示链路
"controlBehavior":0,流控效果,0表示快速失败,1表示warmUp,2表示排队等待
"clusterMode":false,是否集群
}
]
Sentinel是一个强大的微服务流量控制组件,具备服务降级、熔断、限流等功能。本文详细介绍了Sentinel的安装、配置、使用方法,包括界面配置流控规则、降级策略、热点Key限流、系统自适应限流以及服务熔断。Sentinel还支持规则持久化到Nacos,确保服务高可用。此外,文章还展示了如何处理限流和熔断的异常情况,以及如何自定义处理逻辑。
527

被折叠的 条评论
为什么被折叠?



