• Sentinel 流控规则


    Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。

    Springboot+Dubbo+Nacos 集成 Sentinel(入门)-CSDN博客

    1.流量控制介绍

    流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。Sentinel 作为一个调配器,可以根据需要把随机的请求调整成合适的形状,如下图所示:

    arch

     流量控制规则 (FlowRule)主要属性如下:

    Field说明默认值
    resource资源名,资源名是限流规则的作用对象
    count限流阈值
    grade限流阈值类型,QPS 或线程数模式QPS 模式
    limitApp针对调用来源default,代表不区分调用来源
    strategy调用关系限流策略:直接、链路、关联根据资源本身(直接)
    controlBehavior流控效果(直接拒绝 / 排队等待 / 慢启动模式),不支持按调用关系限流直接拒绝

    2.资源名称(resource

    资源名,即限流规则的作用对象(可以是代码中指定名称或者指定路由)。

    3.针对来源(limitApp

    限流规则中的 limitApp 字段用于根据调用方进行流量控制。该字段的值有以下三种选项,分别对应不同的场景:

    default:表示不区分调用者,来自任何调用者的请求都将进行限流统计。如果这个资源名的调用总和超过了这条规则定义的阈值,则触发限流。


    {some_origin_name}:表示针对特定的调用者,只有来自这个调用者的请求才会进行流量控制。例如 NodeA 配置了一条针对调用者caller1的规则,那么当且仅当来自 caller1 对 NodeA 的请求才会触发流量控制。


    other:表示针对除 {some_origin_name} 以外的其余调用方的流量进行流量控制。例如,资源NodeA配置了一条针对调用者 caller1 的限流规则,同时又配置了一条调用者为 other 的规则,那么任意来自非 caller1 对 NodeA 的调用,都不能超过 other 这条规则定义的阈值。

    同一个资源名可以配置多条规则,规则的生效顺序为:{some_origin_name} > other > default

    4.阀值类型(grade

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

    4.1 QPS【默认】

    QPS 即每秒查询率 ,当 QPS 超过某个阈值的时候,则采取措施进行流量控制。

    4.2 线程数

    Sentinel线程数限流不负责创建和管理线程池,而是简单统计当前请求上下文的线程个数,如果超出阈值,新的请求会被立即拒绝【即流控效果 快速失败(业界 线程池隔离、信号量隔离 虽然控制线程数量,但无法控制请求排队时间)。

    4.3 阀值(count)

    阀值即触发的qps数量与线程数量。

    4.4 实时统计

    1. curl http://localhost:8080/cnode?id=resourceName
    2. idx id thread pass blocked success total Rt 1m-pass 1m-block 1m-all exeption
    3. 2 abc647 0 46 0 46 46 1 2763 0 2763 0
    4. thread: 代表当前处理该资源的线程数;
    5. pass: 代表一秒内到来到的请求;
    6. blocked: 代表一秒内被流量控制的请求数量;
    7. success: 代表一秒内成功处理完的请求;
    8. total: 代表到一秒内到来的请求以及被阻止的请求总和;
    9. RT: 代表一秒内该资源的平均响应时间;
    10. 1m-pass: 则是一分钟内到来的请求;
    11. 1m-block: 则是一分钟内被阻止的请求;
    12. 1m-all: 则是一分钟内到来的请求和被阻止的请求的总和;
    13. exception: 则是一秒内业务本身异常的总和。

    5.流控模式(strategy)

    基于调用关系的流量控制,调用关系包括调用方、被调用方;方法又可能会调用其它方法,形成一个调用链路的层次关系。Sentinel 通过 NodeSelectorSlot 建立不同资源间的调用的关系,并且通过 ClusterNodeBuilderSlot 记录每个资源的实时统计信息。

    5.1 直接【默认】    

    接口达到限流条件时,直接限流。

    默认的流量控制方式,当QPS超过任意规则的阈值后,新的请求就会被立即拒绝,拒绝方式为抛出FlowException。

    5.2 关联   

    当关联的资源达到阈值时,就限流自己。

    当两个资源之间具有资源争抢或者依赖关系的时候,这两个资源便具有了关联。比如对数据库同一个字段的读操作和写操作存在争抢,读的速度过高会影响写得速度,写的速度过高会影响读的速度。如果放任读写操作争抢资源,则争抢本身带来的开销会降低整体的吞吐量。

    A调用B,一旦B达到阈值,则A被限流。

    5.3 链路

    只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就可以限流) 。

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

    1. machine-root
    2. / \
    3. / \
    4. Entrance1 Entrance2
    5. / \
    6. / \
    7. DefaultNode(nodeA) DefaultNode(nodeA)

    如上来自入口 Entrance1 和 Entrance2 的请求都调用到了资源 NodeA,Sentinel 允许只根据某个入口的统计信息对资源限流。 

    6.流控效果(controlBehavior)

    注意:QPS模式下可以配置,线程模式下直接采用快速失败效果。

    6.1 快速失败 【默认】

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

    6.2 Warm Up   

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

    6.3 排队等待

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

    Sentinel 规则持久化-CSDN博客

    持久化Json数据格式

    1. [
    2. {
    3. "resource": "/api/user/getName",
    4. "limitApp": "default",
    5. "grade": 1,
    6. "count": 1,
    7. "strategy": 0,
    8. "controlBehavior": 0,
    9. "clusterMode": false
    10. }
    11. ]
  • 相关阅读:
    【AI】生成模型变得简单:了解它们的工作原理和不同类型
    高效翻译工具GPT插件的使用教程
    【Proteus仿真】【Arduino单片机】数码管显示
    别问怎么下载,金蝶云星空SaaS BI系统不用下载
    利用Gitlab进行代码的协作开发
    代码随想录Day20 回溯算法 LeetCode77 组合问题
    Gartner发布中国科技报告:数据编织和大模型技术崭露头角
    excel内容通过apache poi读取后读出来为数字,转为日期类型
    【面试普通人VS高手系列】innoDB如何解决幻读
    【Axure高保真原型】可视化图表图标
  • 原文地址:https://blog.csdn.net/qq_34253002/article/details/134395892