如何进行实战和剖析Sentinel 系统自适应限流

技术如何进行实战和剖析Sentinel 系统自适应限流这篇文章将为大家详细讲解有关如何进行实战和剖析Sentinel 系统自适应限流,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定

本文将详细讲解如何进行实战,并分析Sentinel系统自适应限流。文章内容质量很高,我就分享给大家作为参考。希望大家看完这篇文章后对相关知识有一定的了解。

10月10日至1010日,从官方获悉,Sentienl NL系统自适应限流是一个全局概念,统一控制应用入口流量,结合应用机负载、CPU利用率、整体平均响应时间、入口QPS、并发线程数等几个维度的监控指标,决定是否调用限流操作。为了有直观的感受,我们可以从官方运维平台查看其系统自适应限流的操作界面:

如何进行实战和剖析Sentinel  系统自适应限流

通过收集调用信息,可以统计计算RT、线程数和入口QPS。如何获得系统负载和CPU利用率?你可以把这个问题纳入本文的研究范围。在详细分析系统自适应实现的原理之前,我们先来思考一下Sentinel引入这个机制的目的。

这个问题在官方文件中有详细阐述。我们先来看看官方文件中对它的阐述。

引入系统自适应限流的主要目的如下:

确保系统不会被拖垮。

在系统稳定的前提下,保证系统的吞吐量。

目前我们接触到的所有限流保护思路都是设置一个指标(宽值),比如系统负载超过某个宽值,就会阻止或者减少流量的持续进入,当系统负载降低到某个级别,就会恢复流量的进入。它们通常是被动的,其实际效果取决于宽值的设置是否合理,但合理设置往往并不容易。

Sentinel提供的系统适配可以将设置的规则作为保护因子,允许的流量由处理请求的能力决定,即根据请求的响应时间和当前系统正在处理的请求速率决定。

哨兵是如何实现的?接下来,通过源代码揭示了实现原理。

00-1010哨兵执行系统限流的核心入口类为SystemSlot,易于实现,如下图所示:

如何进行实战和剖析Sentinel  系统自适应限流

SystemRuleManager#checkSystem从这里可以看出,实现的关键在于SystemRuleManager,这里我们直接调用checkSystem来决定是否触发其电流限制。然后我们将重点跟踪这个方法的实现。

1、Sentinel 系统自适应概述

系统自适应限流检测采用SystemRuleManager的checkSystem方法实现,然后详细分析了实现细节。

如何进行实战和剖析Sentinel  系统自适应限流

第一步:验证相关资源,主要包括三级验证:如果资源名称为空,直接跳过,这是一种容错机制。

如果系统自适应开关打开并直接释放,则该开关在初始化时将为假,当加载到系统自适应配置规则中时,状态将设置为真,该规则在loadSystemConf中指定。

如果资源的类型不是EntryType。IN,会直接发布。

如何进行实战和剖析Sentinel  系统自适应限流

第二步:从QPS维度验证是否需要限流,重点如下:

对于当前qps,如果ENTRY_NODE为空,则返回0;否则,它将返回统计节点的成功qp。那么ENTRY_NODE统计节点就是“是谁”。最初,Sentinel专门定义了一个名为total_inbound_traffic,的资源,用于收集条目调用的所有信息。当资源的入口类型为ENTRY_TYPE_IN时,会自动采集信息,其具体统计信息在ST。

atisticSlot 的 entry 方法中被调用,其截图如下:

如何进行实战和剖析Sentinel 系统自适应限流
   
  • 如果当前调用的 QPS 大于设定的QPS,即触发限流,那这个 qps 又是在什么时候被设置的呢?也是在加载系统限流规则时被设置,如果一个应用同一个限流点(LOAD、QPS)设置了多条规则,最小值生效。

  • 如何进行实战和剖析Sentinel 系统自适应限流

    Step3:关于线程数、响应时间限流模式与QPS类似,就不再重复介绍。

    如何进行实战和剖析Sentinel 系统自适应限流
     

     

    Step4:如果当前系统的负载超过了设定的阔值的处理逻辑,这里就是自适应的核心所在,并不是超过负载就限流,而是需要根据当前系统的请求处理能力进行综合判断,具体逻辑在 checkBbr 方法中实现。关于如何获得系统负载与 checkBbr 方法稍后会详细介绍。

    如何进行实战和剖析Sentinel 系统自适应限流
     

     

    Step5:如果当前CPU的负载超过了设置的阔值,触发限流,那在JAVA中是如何获取CPU的使用率的呢?稍后详细介绍。

     

    2.2 根据系统负载自适应算法详解

    正如上面的第4步骤,根据系统 Load 的会采用 TCP BBR 算法来评估是否限流,具体实现代码如下:

    如何进行实战和剖析Sentinel 系统自适应限流
     
    SystemRuleManager#checkSystem
     

    在 Sentinel 中估算系统的容量是以 1s 为度量长度,用该秒内通过的最大 qps 与 最小响应时间的乘积来表示,具体的计算细节:

    • maxSuccessQps 的计算取当前采样窗口的最大值乘以1s内滑动窗口的个数,这里其实并不是十分准确。

    • minRt 最小响应时间取自当前采样窗口中的最小响应时间。
      故得出了上述计算公式,除以1000是因为 minRt 的时间单位是毫秒,统一为秒。从这里可以看出根据系统负载做限流,最终的判断依据是线程数量。

     

    2.3 JAVA如何获得操作系统负载情况

    在 Sentinel 中获取操作系统负载情况的类:SystemStatusListener,每秒采集一次。

    如何进行实战和剖析Sentinel 系统自适应限流
     
    SystemStatusListener#run
     

    原来可以通过JDK中的 com.sun.management.OperatingSystemMXBean 获取操作系统相关的信息。
     

     

    温馨提示:上述只对 Linux/Unix 操作系统有效,对 windows 无效。

     

    3、实践思考


    经过上面的分析,Sentinel 中的系统自适应其实指的是按照应用所在机器的操作系统负载,再结合应用本身的请求处理能力进行的自适应,操作系统的负载情况可以通过 top 命令输出,其示例如下:

    如何进行实战和剖析Sentinel 系统自适应限流
     

     

    尽管 Sentienl 的系统规则配置类型分为 LOAD、CPU、RT、线程数、入口QPS等维度进行限流,但自适应主要是针对 LOAD 这种情况的。
     
    Sentinel 系统级别的限流规则并不是针对某一个资源,而是针对应用所有定义EntryType.IN的资源,在使用时尤其需要注意,特别是如果一个机器上部署了多个应用,可能会造成应用本身负载不高,但所在的机器由于其他应用程序导致资源负载偏高,从而触发限流。

    关于如何进行实战和剖析Sentinel 系统自适应限流就分享到这里了,希望

    内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/39947.html

    (0)

    相关推荐

    • Eos离线密钥生成的PHP代码怎么写

      技术Eos离线密钥生成的PHP代码怎么写Eos离线密钥生成的PHP代码怎么写,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。虽然EOS的密钥算法类似于比特

      攻略 2021年10月23日
    • 洗衣机品牌排行,十大品牌洗衣机排名,有哪些

      技术洗衣机品牌排行,十大品牌洗衣机排名,有哪些世界洗衣机十大品牌排行榜,小编给你们分享一下好东西: 小天鹅 (中国名牌,中国驰名商标,国家免检,洗衣机十大品牌) 海尔Haier (世界品牌,中国名牌,洗衣机十大品牌,山东

      生活 2021年10月31日
    • Java坑爹的功能有哪些

      技术Java坑爹的功能有哪些本篇内容介绍了“Java坑爹的功能有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、s

      攻略 2021年11月2日
    • 图文详解两种算法:深度优先遍历,DFS)和广度优先遍历,BFS)

      技术图文详解两种算法:深度优先遍历,DFS)和广度优先遍历,BFS) 图文详解两种算法:深度优先遍历(DFS)和广度优先遍历(BFS)前言深度优先遍历(Depth First Search, 简称 DF

      礼包 2021年12月24日
    • orz什么意思,最近流行的ORZ是什么意思

      技术orz什么意思,最近流行的ORZ是什么意思“囧”又称“失意体前屈”,最初的使用灵感源自日本的网络象形文字(或心情图示)“orz”,2004年之后逐渐在内地orz什么意思、香港与台湾等地流行,在网络文化中,“囧”的内小

      生活 2021年10月24日
    • Java并发之同步器设计的方法是什么

      技术Java并发之同步器设计的方法是什么本篇内容介绍了“Java并发之同步器设计的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅

      攻略 2021年11月1日