Sentinel限流熔断

服务限流的作用及实现

限流的主要目的是通过限制并发数访问或者限制同一个时间窗口允许处理的请求数量来保护系统。提供稳定可靠的服务。

计数器算法

在指定周期内累加访问次数,当访问次数达到设定的阈值,触发限流策略,当进行下一个周期时访问次数
清0

滑动窗口算法

在固定窗口中分割出多个小时间窗口,分别在每个小时间窗口中记录访问次数,然后根据时间将窗口往前滑动并删除 过期的小时间窗口。最终只需要统计滑动窗口范围内的所有小时间窗口总的技术即可。

令牌桶限流算法

令牌桶是网络流量整形和速率限制中最常使用的一种算法,对于每一个请求都要从桶里获取一个令牌,如果没有获得令牌,则需要触发限流策略

漏桶限流算法

漏桶限流算法的主要作用是控制数据注入网络的速度,平滑网络上的突发流量。漏桶算法取决于消费者的处理能力。

服务熔断 与降级

服务熔断用来解决当微服务某个链路上被依赖的服务不可用,出现的雪崩。服务熔断是指当某个服务无法正常为服务调用者提供服务时,比如请求超时、服务异常等,为了防止整个系统雪崩,暂时将故障的窗口隔离开来,短接与外部接口的联系。

服务降级有几个方案:

平均响应时间: 比如1s内进入了5个请求,对应时刻的平均响应时间超过阈值,那么接下来再一个固定的时间窗口内,对这个方法的访问都会自动熔断。

异常比例:当某个方法每秒调用所获得的异常总数比例超过设置的阈值,该资源会自动进行阈值,也就是在一个固定时间窗口中,对这个方法的调用都会自动返回

异常数量: 和异常比例类似,当某个方法在指定时间窗口内获得的异常数量超过阈值时灰出发熔断

分布式限流框架Sentinel

Sentinel是面向分布式的轻量级流量控制组件,主要以流量切入点为主,从限流、流量整形、服务降级、系统负载等多个维度来保护系统的稳定性。

Sentinel的特性

  • 丰富的应用场景:几乎覆盖所有的应用场景、秒杀、消息消峰填谷
  • 实时监控:Sentinel提供了实时监控功能。开发者可以在控制台看到接入应用的单台机器的秒级数据
  • 开原生态支持:开箱即用的与其他框架进行整合,如SpringCloud、Dubbo、gRpc的整合
  • SPI扩展点支持: Sentinel提供了SPI扩展点支持,开发者可以通过扩展点来定制化限流策略,动态数据源适配等需求

Sentinel 的组成分为2个部分

  • 核心库Java客户端:不依赖任何框架/库;能够运行所有Java运行时环境,同时对dubbo、SpringCloud等框架也有较好的支持
  • 控制台:基于SpringBoot开发,打包后直接运行,不用额外的tomcat等应用容器

Sentinel限流步骤分为如下流程:

  • 定义资源
  • 定义限流规则
  • 校验规则是否生效

Sentinel资源保护规则

Sentinel支持多种保护规则:流量控制规则、熔断降级规则、系统保护规则、来源访问控制规则、热点参数规则等

基于并发数和QPS的流量控制

Sentinel流量控制统计有两种类型,通过grade属性来设置

  • 并发线程数

  • QPS

    • 并发线程数:并发线程数限流用来保护业务县城不被耗尽,Sentinel并发线程数限流是统计当前上下文线程数量,如果超出阈值,新的请求机会被拒绝
    • QPS: 表示每秒的查询数,也就是一台服务器每秒能够响应的查询次数,当QPS达到限流的阈值时,就会触发限流规则。
  • QPS流量控制行为:

    • 直接拒绝
    • WARM UP
    • 匀速排队
    • 冷启动+匀速排队

调用关系流量策略

  • 根据调用方限流
  • 根据调用链路入口限流
  • 具有关系的资源流量控制
    • 调用方限流:所谓调用方限流,就是根据请求来源进行流量控制,可以设置如下3个值
      • default不区分调用者,任何调用者都会进行限流统计
      • {some_origin_name}:设置特定的调用者,只有来自这个调用者的请求才会进行流量统计和控制
      • other:表示针对除{some_origin_name}外的其他调用者进行流量统计
    • 根据调用链路入口限流
      • 对调用方法的入口进行限制、针对指定的调用入口才进行限流统计
    • 关联流量统计
      • 当两个资源存在依赖关系或者资源争抢时候,我们就说这两个资源存在关联,两个互相依赖的资源 其中一个可能影响另外一个的执行效率,所以针对此进行管控。

Sentinel实现服务熔断

Sentinel提供三种熔断策略

  • 平均响应时间:如果1s内持续进入五个请求,对于平均响应时间超过了阈值,那么在接下来,对这个方法调用都会自动熔断
  • 异常比例: 如果每秒自由桉树>=设定的阈值,则资源进入降级状态
  • 异常数: 当资源最近一分钟的异常数量超过 数据超过阈值之后,会触发熔断。如果timewindows小于60s,则结束熔断之后仍然可能再次进入熔断。

Sentinel热点限流

  • 针对频繁使用的参数进行限流、如IP等可以认为是个热点参数

Sentinel的工作原理

Sentinel的核心分为三部分:工作流程、数据结构和限流算法

调用链路是Sentinel的工作主流程,由各个Slot插槽组成,将不同的slot按照顺序穿在一起,从而将不同的功能、限流、降级、系统保护等组合在一起。每个Slot都有对应的职责。
  • NodeSelectorSlot:负责收集资源的调用路径,以树状结构存储调用栈,用于根据调用路径来进行限流降级
  • ClusterBuilderSlot:负责创建以资源名维度统计的clusterNode,以及创建每个ClusterNode下按调用来源origin划分的StaticNode。
  • LogSlot:在出现限流、熔断、系统保护时负责日志记录
  • AuthoritySlot: 权限控制,支持黑名单和白名单两种策略
  • FlowSlot: 根据限流规则和各个Node中的统计数据进行限流判断
  • DegradeSlot: 根据熔断规则和各个Node中的统计数据进行服务降级
  • StatisticSlot: 统计不同维度的请求数、通过数、限流数、线程数等runtime信息这些数据存储在DefaultNode、OriginNode和ClusterNode中

Sentinel限流主要逻辑:

校验全局上下文Context

通过lookProcessChain方法获取的一个ProcessorSlot链

执行chain.entry如果没有被限流、则返回entry对象
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容