springcloud 10 SENTIEL

简介

服务降级,雪崩,熔断,限流

分为两个部分

  1. 核心库java客户端,不依赖任何库,能运行于所有java运行时环境,对dubbo和springcloud也有很好地支持。
  2. 控制器dashboard基于springboot,打包后直接运行。

演示工程 8401

  1. yml:
spring:
application:
  name: cloudalibaba-sentinel-service
cloud:
  nacos:
    discovery:
      server-addr: localhost:8848
  sentinel:
    transport:
      dashboard: localhost:8080
      port: 8719  #默认8719,假如被占用了会自动从8719开始依次+1扫描。直至找到未被占用的端口
management:
endpoints:
  web:
    exposure:
      include: '*'
  1. 主启动加**@EnableDiscoveryClient**

*注意,sentinel默认懒加载,只有访问过一次才会被监控

流控

流控规则:

  1. 快速失败:配置,若1s内1次就ok,超过就报错

  2. 关联:a关联b,b超过限制,a报错

  3. 链路:多个请求调用了同一个微服务

流控效果:

  1. 快速失败:直接报错

  2. 预热:默认coldFactor为3,即请求QPS从threshold/3开始,经预热时长逐渐升至设定的QPS阈值。

  3. 排队等待:匀速排队,阈值必须设置为QPS。

降级规则—前提1s内持续进入5个请求

  1. RT平均响应时间,对应时刻的平均响应时间都超过阈值,则在接下来的时间窗内,服务会被熔断,抛出DergradeException,默认最大RT上限是4900ms。

  2. 异常比例:每秒异常总数占通过量的比值超过阈值,进入降级状态。

  3. 异常数:近一分钟内的异常数目超过阈值,时间窗口一定要大于等于60s。

热点key限流

  1. 统计传入参数中的热点参数,并根据配置的限流阈值与模式,对且仅对包含热点参数的资源调用进行限流。BlockException exception
@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) {    
  //int age = 10/0;    
  return "------testHotKey";  
}  

  1. 参数例外项

希望热点参数在某个特殊值时限流参数和平时不一样,进行配置。

系统规则—应用于系统维度

  1. Load自适应:仅可用于Unix-like机器,用系统的load1作为启发指标

  2. CPU usage:CPU使用率

  3. 平均RT

  4. 并发线程数

  5. 入口QPS

@SentinelResource

自定义限流处理逻辑BlockingException!!!一定注意处理函数参数必须一致!

@GetMapping("/rateLimit/customerBlockHandler")  
@SentinelResource(value  = "customerBlockHandler",      
                  blockHandlerClass =  CustomerBlockHandler.class,      		blockHandler =  "handlerException2")  
public  CommonResult customerBlockHandler()  {    
  return new CommonResult(200,"按客戶自定义",new Payment(2020L,"serial003"));  
}  

Sentinel三大核心API

SphU定义资源,Tracer定义统计,ContextUtil定义上下文。

feign整合

  1. yml
server:
port: 84
spring:
application:
  name: nacos-order-consumer
cloud:
  nacos:
    discovery:
      server-addr: localhost:8848
  sentinel:
    transport:
      dashboard: localhost:8080
      port: 8719
service-url:
nacos-user-service: http://nacos-payment-provider
#对Feign的支持
feign:
sentinel:
  enabled: true

持久化

  1. yml添加Nacos数据源配置
spring:
   cloud:
    sentinel:
    datasource:
     ds1:
      nacos:
        server-addr: localhost:8848
        dataid: ${spring.application.name}
        groupid: DEFAULT_GROUP
        data-type: json
       		rule-type: flow
  1. 在nacos服务器添加

[ { “resource”: “/retaLimit/byUrl”, “limitApp”: “default”, “grade”: 1, “count”: 1, “strategy”: 0, “controlBehavior”: 0, “clusterMode”: false } ]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值