sentinel的资料整理

sentinel

简介

主要分为核心库和dashboard

核心库不依赖dashboard

使用步骤
  • 1.定义资源
  • 2.定义规则
  • 3.验证规则是否生效

定义资源的方式

  • 1.主流框架支持

    主流框架适配

  • 2.自定义方式支持

    	// 1.5.0 版本开始可以利用 try-with-resources 特性
    	// 资源名可使用任意有业务语义的字符串,比如方法名、接口名或其它可唯一标识的字符串。
    	try (Entry entry = SphU.entry("resourceName")) {
    	  // 被保护的业务逻辑
    	  // do something here...
    	} catch (BlockException ex) {
    	  // 资源访问阻止,被限流或被降级
    	  // 在此处进行相应的处理操作
    	}
    	
    
  • 3.返回布尔值方式定义资源

    
      // 资源名可使用任意有业务语义的字符串
      if (SphO.entry("自定义资源名")) {
        // 务必保证finally会被执行
        try {
          /**
          * 被保护的业务逻辑
          */
        } finally {
          SphO.exit();
        }
      } else {
        // 资源访问阻止,被限流或被降级
        // 进行相应的处理操作
      }
    
    
  • 4.注解方式定义

    
    	// 原本的业务方法.
    	@SentinelResource(blockHandler = "blockHandlerForGetUser")
    	public User getUserById(String id) {
    	    throw new RuntimeException("getUserById command failed");
    	}
    	
    	// blockHandler 函数,原方法调用被限流/降级/系统保护的时候调用
    	public User blockHandlerForGetUser(String id, BlockException ex) {
    	    return new User("admin");
    	}
    
    
  • 5.异步调用支持

    try {
    AsyncEntry entry = SphU.asyncEntry(resourceName);
    
    // 异步调用.
    doAsync(userId, result -> {
        try {
            // 在此处处理异步调用的结果.
        } finally {
            // 在回调结束后 exit.
            entry.exit();
        }
    });
    

} catch (BlockException ex) {
// Request blocked.
// Handle the exception (e.g. retry or fallback).
}

```

规则的种类

  • 1.流量控制规则 (FlowRule)
Field说明默认值
resource资源名,资源名是限流规则的作用对象
count限流阈值
grade限流阈值类型,QPS 或线程数模式QPS 模式
limitApp流控针对的调用来源 default,代表不区分调用来源
strategy判断的根据是资源自身,还是根据其它关联资源 (refResource),还是根据链路入口根据资源本身
controlBehavior流控效果(直接拒绝 / 排队等待 / 慢启动模式)直接拒绝

一个资源可以有多种流控类型

相关的重要类 FlowRuleManager FlowRule

  • 2.熔断降级规则(degradeRule)
Field说明默认值
resource资源名,即限流规则的作用对象
count阈值
grade降级模式,根据 RT 降级还是根据异常比例降级RT
timeWindow降级的时间,单位为 s

重要的类 DegradeRuleManager DegradeRule

  • 3.系统保护规则(systemRule)

重要的类 SystemRuleManager

  • 4.访问控制规则(AuthorityRule)

黑白名单功能

  • 5.热点规则(paramFlowRule)

热点数据的限流

持久化规则 定制

  • 动态配置系统
  • 结合rdbms nosql vcs

实现原理及概念

资源对应资源名 resourceName

每次资源调用会创建 entry对象,可以自动创建和手动创建

entry创建的同时会创建一系列的功能插槽(slot chain)

slot 包括

  • nodeSelectorSlot 收集资源路径,树形结构,机器有个root节点
  • clusterBuilderSlot 存储资源的统计信息及调用者信息,如资源RT,QPS, thread count,多维度限流
  • statisticSlot 记录不同维度的runtime指标监控信息,统计信息
  • FlowSlot 根据预设的信息及前边的统计状态,进行流量控制
  • AuthoritySlot 根据配置的黑白名单进行控制
  • DegradeSlot 统计信息及预设规则,来做熔断降级
  • SystemSlot 通过系统状态,控制总的入口流量

[外链图片转存失败(img-kFZDUV70-1566815712096)(https://github.com/alibaba/Sentinel/raw/master/doc/image/slots.gif)]

spi方式扩展slot
slot

流量控制

相关元素

  • resopuce 资源名
  • count 限流阈值
  • grade 限流阈值类型
  • limitApp 流控针对的调用来源
  • strategy 调用关系限流策略
  • controlBehavior 流控效果 直接拒绝 warm up(冷启动缓慢加热) 排队
集群流控

token client向token server发送获取token的请求,集群限流服务会返回客户端结果决定是否限流

server可用独立部署模式,或者嵌入应用模式

客户端需要实现

RequestEntityWriter

ResponseEntityDecoder

服务端需要实现

ResponseEntityWriter

RequestEntityDecoder

服务端请求处理接口: RequestProcessor

熔断降级

熔断降级的策略

平均响应时间 默认4900,超过阈值熔断

异常比例 比例超过阈值百分比,会熔断

异常数 一分钟内的异常数,超过阈值,熔断

手动编码或使用@SentinelResource注解

系统自适应限流

结合应用的load,总体平均RT,入口qps,线程数,让系统达到一个平衡,尽可能最大吞吐,保证系统稳定性

最终的目的是在系统不被拖垮的情况下,提高系统吞吐率,而不是load低于某个值阈值

tcp bbr算法

动态的修改限流方案

[外链图片转存失败(img-mKLzySaM-1566815712098)(https://user-images.githubusercontent.com/9434884/45406233-645e8380-b698-11e8-8199-0c917403238f.png)]

动态配置的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值