Sentinel服务限流及熔断的一些基本知识

Sentinel服务限流及熔断的一些基本知识

服务限流:通过限制并发访问数据或者限制一段时间内(时间窗口内)允许处理的请求数量来保护系统,不会出现崩溃(或者一些其他的业务关系)。表现的形式是:牺牲一部分用户的可用性来维持系统的稳定性

常用的限流算法
  1. 计算器算法:指定的周期内累加访问次数,当访问次数达到设置的阈值时,触发限流策略(返回一个默认的结果,或者拒绝服务),进入下一个周期,累加次数清除。
    可以用于短信服务(或者一些免费服务)的次数上进行限制,比如每个用户在同一分钟内只能触发一定数量的短信服务
    这种算法存在临界问题,再上一个周期(0:58)和下一个周期(1:02)期间每个周期都触发了100个请求,整体看就是4秒内有200请求,超过了设置阈值

  2. 滑动 窗口算法 (为了解决计算器算法带来的临界问题):一种流量控制技术,Tcp网络通信协议中就是采用这个算法解决网络拥堵的情况。在固定窗口(或者说周期内)中分割出多个小时间窗口,在每个时间窗口中记录访问的次数,滑动窗口(一定数量的小时间窗口)在小时间窗口上滑动并删除过期的小时间窗口,最后只统计落在滑动窗口上的所有小时间窗口的总访问次数,对访问的请求进行限制。
    像上个问题,可以将一分钟分成4个小时间窗口,滑动窗口大小为2,在滑动窗口内只能处理50个请求。Sentinel 内部就是使用滑动窗口算法来实现限流的。

  3. 令牌桶限流算法: 网络流量和速率限制常用的一种算法。对于每一个访问请求,都需要从令牌桶(以一定的速率生成令牌,桶的大小可以有一个上限)中获得一个令牌,如果没有获得请求就触发限流策略。令牌桶生成令牌的效率可以根据实际的需求来。只要生成令牌的效率是恒定的,短时间内突发大量的访问请求,对于新增的访问请求,系统能够正常处理。

    • 请求速度大于令牌生成速度,那么令牌会很快会被取完,后续再进来的访问请求会被限流
    • 请求速度等于令牌生成速度,处于平衡
    • 请求速度等于令牌生成速度,此时系统的并发数不高,访问请求正常处理
  4. 漏桶限流算法:控制访问请求注入的速度,平滑的处理网络上的突发请求。维护一个漏桶容器A(有大小),用于存储访问请求,容器以恒定的速度派发访问的请求,漏桶容器A 流出的访问请求的速度始终保持不变。

    • 请求速度大于漏桶容器A的派发速度:访问请求书超出当前系统处理的极限,将会触发限流策略
    • 请求速度小于等于漏桶容器A的派发速度,系统处理能力满足客户端需求,正常执行

漏桶算法和令牌桶算法的实现原理相差不大,区别漏桶算法无法处理短时间内的突发访问请求,漏桶限流算法是一种速度恒定的限流算法

服务熔断:背景—微服务架构中,由于业务拆分的问题,一般会出现请求链路较长的情况,用户发起一个访问请求,往往需要几个微服务才能够完成,在高并发的场景下,这种依赖的服务(请求调用链)对系统的稳定性影响很大,只要其中某个服务的环节出现网络延迟或者请求超时等意外状况而导致服务不可用,就会造成当前请求的阻塞,从而可能出现雪崩的效应。服务熔断就是用于解决这种情况的,一旦某个服务提供者无法正常提供服务的时候,为了防止雪崩效应的产生,就会将当前接口和外部隔离,触发熔断,后续一段时间内,调用者的请求都会直接失败返回,知道服务提供者恢复正常。服务熔断之后,可以提供一个默认的处理结果。
服务降级:服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心业务正常运作或高效运作。参考的指标:

1. 平均响应时间:比如1s内5个请求,对应时刻的平均响应时间超过阈值,则在接下来固定时间窗口内,对应的方法自动熔断
2. 异常比例:某个方法每秒调用所获得异常总数比例超过设定的阈值,该方法自动进入降级状态,在固定的时间窗口内对这个方法的调用会自动返回
3. 异常数量:与异常比例类似,某个方法在时间窗口内获得异常数超过阈值时触发

服务熔断和服务降级的区别:熔断由服务不可用引起,降级由业务实际情况和系统资源负载设置等关系引起,但最终的表现是类似的 框架中用DegradeRule 设置

QPS(Queries per second):每秒查询数
QPS 超过阈值触发流量控制行为,通过controlBehavior 设置,包含:

  1. 直接拒绝(RuleConstant.CONTROL_BEHAVIOR_DEFAULT):默认,请求流量超出默认,直接抛出FlowException
  2. Warm Up (RuleConstant.CONTROL_BEHAVIOR_WARM_UP):冷启动(预热):当流量突然增大,即从空闲突然到繁忙,可能瞬间将系统压垮,希望控制请求处理数量逐渐增大,并在预期时间内达到最大(个人感觉箱数令牌桶算法)
  3. 匀速排队(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMIT):严格控制请求的通过时间间隔,即请求以匀速通过限制被处理(漏桶限流)
  4. 冷启动(预热)+ 匀速排队RuleConstant.CONTROL_BEHAVIOR_WARM_UP_RATE_LIMIT)

具体的设置说明在代码注释中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值