Sentinel(熔断与限流)

Sentinel是一个强大的微服务流量控制组件,具备服务降级、熔断、限流等功能。本文详细介绍了Sentinel的安装、配置、使用方法,包括界面配置流控规则、降级策略、热点Key限流、系统自适应限流以及服务熔断。Sentinel还支持规则持久化到Nacos,确保服务高可用。此外,文章还展示了如何处理限流和熔断的异常情况,以及如何自定义处理逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

优势:
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熔断降级限流是一种用于保护应用程序的机制,它可以防止应用程序不断执行可能失败的操作,并快速拒绝可能导致错误的调用。熔断降级规则是熔断降级机制的核心属性之一。\[1\] 熔断降级规则的配置可以通过在应用程序中设置相关属性来实现。例如,在Spring Cloud中,可以通过配置`spring.cloud.sentinel.transport.dashboard`属性来指定Sentinel控制台的地址,以及通过`management.endpoints.web.exposure.include`属性来开放管理端点。\[2\] 熔断降级机制的作用是在感知到下游服务的资源出现不稳定状态时,暂时切断对下游服务的调用,而不是一直阻塞等待服务响应。这样可以防止级联失败导致的雪崩效应,并保证系统的可用性。在微服务架构下,熔断降级机制尤为重要,可以保护后端不会过载。\[3\] 熔断降级规则包含一些核心属性,可以根据具体需求进行配置。这些属性包括但不限于超时时间、异常比例、最小请求数等。当资源被熔断降级后,在降级时间窗口内,对该资源的调用会自动返回降级数据。当检测到该节点的服务调用响应正常后,熔断机制会恢复调用链路。\[3\] 总结来说,Sentinel熔断降级限流是一种保护应用程序的机制,通过设置熔断降级规则来防止应用程序执行可能失败的操作,并在下游服务资源不稳定时暂时切断对下游服务的调用。这样可以防止级联失败导致的雪崩效应,并保证系统的可用性。熔断降级规则包含一些核心属性,可以根据具体需求进行配置。\[1\]\[3\] #### 引用[.reference_title] - *1* *3* [sentinel 限流熔断神器详细介绍](https://blog.youkuaiyun.com/a745233700/article/details/122733366)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Sentinel服务流控、熔断和降级](https://blog.youkuaiyun.com/m0_49183244/article/details/124273538)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值