Spring Cloud Alibaba 系列之 Sentinel 流量控制

1.1 简介

1.1.1 概述

  流量控制(flow control),其原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。FlowSlot 会根据预设的规则,结合前面 NodeSelectorSlot、ClusterBuilderSlot、StatisticSlot 统计出来的实时信息进行流量控制。
  限流的直接表现是在执行 Entry nodeA = SphU.entry(resourceName) 的时候抛出 FlowException 异常。FlowException 是 BlockException 的子类,可以捕捉 BlockException 来自定义被限流之后的处理逻辑。同一个资源可以创建多条限流规则。FlowSlot 会对该资源的所有限流规则依次遍历,直到有规则触发限流或者所有规则遍历完毕。一条限流规则主要由下面几个因素组成:

名称描述
resource资源名,即限流规则的作用对象
count限流阈值
grade限流阈值类型(QPS 或并发线程数)
limitApp流控针对的调用来源,若为 default 则不区分调用来源
strategy调用关系限流策略
controlBehavior流量控制效果(直接拒绝、Warm Up、匀速排队)

1.1.2 控制台操作

在这里插入图片描述
在这里插入图片描述





1.2 流量控制

1.2.1 流控方式

☞ QPS 流量控制

  当 QPS 超过某个阈值的时候,则采取措施进行流量控制。流量控制的效果包括以下几种:快速失败、Warm Up、匀速排队。对应 FlowRule 中的 controlBehavior 字段。

☞ 并发线程数控制

  并发数控制用于保护业务线程池不被慢调用耗尽。例如,当应用所依赖的下游应用由于某种原因导致服务不稳定、响应延迟增加,对于调用者来说,意味着吞吐量下降和更多的线程数占用,极端情况下甚至导致线程池耗尽。Sentinel 并发控制不负责创建和管理线程池,而是简单统计当前请求上下文的线程数目(正在执行的调用数目),如果超出阈值,新的请求会被立即拒绝,效果类似于信号量隔离。

1.2.2 流控规则(QPS)

☞ 直接

⑴ 快速失败

  快速失败方式是默认的流量控制方式,当 QPS 超过阈值后,新的请求就会被立即拒绝,拒绝方式为抛出FlowException。这种方式适用于对系统处理能力确切已知的情况下,比如通过压测确定了系统的准确水位时。☞ 官方文档
在这里插入图片描述
在这里插入图片描述
  我们请求在每秒一次的时候,可以正常返回,当我们每秒请求超过 1 次高于设定的 QPS 时,直接失败返回 Blocked by Sentinel (flow limiting)。这个是默认的处理逻辑,我们可以修改处理逻辑。
在这里插入图片描述

⑵ Warm Up

  Warm Up 方式,即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过"冷启动",让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮。通常冷启动的过程系统允许通过的 QPS 曲线如下图所示:

在这里插入图片描述
默认 coldFactor(冷却因子) 为 3,即请求 QPS 从 threshold / 3 开始,经预热时长逐渐升至设定的 QPS 阈值。☞ 官方文档

⑶ 排队等待

  排队等待方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法。这种方式适合用于请求以突刺状来到,这个时候我们不希望一下子把所有的请求都通过,这样可能会把系统压垮;同时我们也期待系统以稳定的速度,逐步处理这些请求,以起到“削峰填谷”的效果,而不是拒绝所有请求。排队等待模式暂时不支持 QPS > 1000 的场景。☞ 官方文档

在这里插入图片描述

☞ 关联

  当两个资源之间具有资源争抢或者依赖关系的时候,这两个资源便具有了关联。比如对数据库同一个字段的读操作和写操作存在争抢,读的速度过高会影响写得速度,写的速度过高会影响读的速度。如果放任读写操作争抢资源,则争抢本身带来的开销会降低整体的吞吐量。可使用关联限流来避免具有关联关系的资源之间过度的争抢。如图所示我们可以通过以下方式配置关联模式,当 /testA 请求的 QPS 超过阈值时限流 /find 请求。
在这里插入图片描述


☞ 链路

  下图中记录了资源之间的调用链路,A 与 B 都会调用 C,我们在 Sentinel 流控链路模式中设置 C 资源的入口资源为 A,当达到阈值时限制 A,没有设置的 B 不受限制。类似于商家有两个供货商,一个是他小舅子,一个不熟,商家每天可以卖 1000 份货,两个供货商自由送货,当不熟的那个供货商送货过于频繁,而自身消耗有限,会影响小舅子的收益,就限制不熟的供货商供货。

在这里插入图片描述



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值