zoukankan      html  css  js  c++  java
  • Sentinel的流量控制

    Sentinel的流量控制

    1.概述

    流量控制(flow control),其原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。

    限流的直接表现是在执行 Entry nodeA = SphU.entry(resourceName) 的时候抛出 FlowException 异常。FlowExceptionBlockException 的子类,您可以捕捉 BlockException 来自定义被限流之后的处理逻辑。

    同一个资源可以创建多条限流规则。FlowSlot 会对该资源的所有限流规则依次遍历,直到有规则触发限流或者所有规则遍历完毕。

    一条限流规则主要由下面几个因素组成,我们可以组合这些元素来实现不同的限流效果:

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

    2.流控规则

    2.1资源名

    其实就是我们请求的资源路径

    2.2针对来源

    这个是此流控规则对应那些微服务进行流控管理,一般填写调用方的微服务名称,多个用","分割

    2.3阈值类型

    一般有2中类型,QPS(每秒的最大请求数2)和线程数(并发线程数)

    2.4单机阈值

    单机状态下的最大限制值

    2.5是否集群

    根据实际情况选择

    2.6流控模式

    • 直接

      一般是对自己本身资源的限制。

    • 关联

    当两个资源之间具有资源争抢或者依赖关系的时候,这两个资源便具有了关联。比如对数据库同一个字段的读操作和写操作存在争抢,读的速度过高会影响写得速度,写的速度过高会影响读的速度。如果放任读写操作争抢资源,则争抢本身带来的开销会降低整体的吞吐量。可使用关联限流来避免具有关联关系的资源之间过度的争抢 。举例俩说,当关联资源被大量请求时,这个方法findAll则会无法访问,资源被限制。

    • 链路

    NodeSelectorSlot 中记录了资源之间的调用链路,这些资源通过调用关系,相互之间构成一棵调用树。这棵树的根节点是一个名字为 machine-root 的虚拟节点,调用链的入口都是这个虚节点的子节点 。

    2.7流控效果

    • 快速失败

      快速失败(RuleConstant.CONTROL_BEHAVIOR_DEFAULT)方式是默认的流量控制方式,当QPS超过任意规则的阈值后,新的请求就会被立即拒绝,拒绝方式为抛出FlowException。这种方式适用于对系统处理能力确切已知的情况下,比如通过压测确定了系统的准确水位时

    • Warm Up

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

    • 排队等待

      匀速排队(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法 。

      这种方式主要用于处理间隔性突发的流量,例如消息队列。想象一下这样的场景,在某一秒有大量的请求到来,而接下来的几秒则处于空闲状态,我们希望系统能够在接下来的空闲期间逐渐处理这些请求,而不是在第一秒直接拒绝多余的请求 。

      注意:匀速排队模式暂时不支持 QPS > 1000 的场景.

      在demo中不断测试体会一下上述情况。

  • 相关阅读:
    【转】对象持久化与数据序列化的联系?
    【转】Linux安装方法一(U盘引导)
    bash中的"-n"、"-z" 以及“[]” 、“[[]]”判断
    mysql获取行号
    IP白名单
    复合赋值位运算符“&=、| =”
    Java匿名内部类访问外部
    mysql的orde by 按照指定状态顺序排序
    Spring声明式事务
    定时任务总结
  • 原文地址:https://www.cnblogs.com/bky-wangxin/p/13382602.html
Copyright © 2011-2022 走看看