poi设置列宽自适应_Sentinel 系统自适应限流原理剖析与实战指导

1、Sentinel 系统自适应概述


从官方了解到 Sentienl 系统自适应限流是一个全局的概念,对应用入口流量统一进行统一控制,结合应用的机器负载、CPU 使用率,总体平均响应时间、入口 QPS 和并发线程数等几个维度的监控指标从而决定是否调用进行限流操作。为了有一个直观的感受,我们可以从官方的运维平台看看其系统自适应限流的操作界面:

e105df11625b2bd6a078f91703265421.png

RT、线程数、入口QPS这三个指标是可以通过采集调用信息进行统计计算的,那系统LOAD、CPU使用率是如何获取的呢?大家可以带着这个问题进入本文的学习中来。

在详细分析系统自适应实现原理之前我们先来思考一下 Sentinel 引入该机制的目的。

官方文档针对这个问题有过仔细阐述,我们先来看看官方文档对其阐述。

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

  • 保证系统不被拖垮
  • 在系统稳定的前提下保证系统的吞吐量。

目前我们接触的限流的防护思路都是设定一个指标(阔值),例如系统的负载 load 超过某个阔值后就阻止或减少流量的继续进入,当系统负载降低到某一水平后则恢复流量的进入。通常都是被动的,其实际效果取决于阔值设置是否合理,但往往设置合理不是一件容易的事情。

那 Sentinel 提供的系统自适应是可以将设定的规则作为一个保护因子,而允许通过的流量由处理请求的能力来决定,即根据请求的响应时间、当前系统正在处理的请求速率来决定。

那 Sentinel 是如何实现的呢?接下来用源码的手段来揭晓其实现原理。

2、系统自适应限流原理


Sentinel 执行系统限流的核心入口类为 SystemSlot,该类实现简单,如下图所示:

addcdd01f684fe6ba2b787d306c159a6.png

SystemRuleManager#checkSystem

从这里可以看出实现的关键在于SystemRuleManager,这里是直接调用 checkSystem 进行是否触发其限流,那我们接下来重点跟踪一下该方法的实现。

2.1 自适应限流检测流程

系统自适应限流检测具体由 SystemRuleManager 的 checkSystem 方法实现,接下来详细剖析其实现细节。

d428252379e475d1a2d6e20ca4b6e62a.png

Step1:验证相关资源,主要包含三层验证:

  • 如果资源名称为空,则直接跳过,这个是容错机制。如果系统自适应开关为打开,直接放行,该开关初始化时为 false,在加载到一条系统自适应配置规则时该状态会设置为 true,具体在 loadSystemConf 中。如果资源的类型不是入口流量(EntryType.IN),则直接放行。
455fb980f2dc031cd5cc56db0b1dc9a4.png

Step2:从QPS为维度验证是否需要被限流,其实现关键点如下:

  • 当前的qps,如果 ENTRY_NODE 为空则返回0,否则返回该统计节点的成功 qps,那 ENTRY_NODE 统计节点是“何许人也”,原来是 Sentinel 特定定义了一个资源,其名称为total_inbound_traffic,用来采集所有入口调用的信息,当资源进入类型为 ENTRY_TYPE_IN 时,会自动采集信息,其具体统计信息在 StatisticSlot 的 entry 方法中被调用,其截图如下:
  • 如果当前调用的 QPS 大于设定的QPS,即触发限流,那这个 qps 又是在什么时候被设置的呢?也是在加载系统限流规则时被设置,如果一个应用同一个限流点(LOAD、QPS)设置了多条规则,最小值生效。
6f6b2b54d00995032bef504c42dfb3f7.png

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

7e4f98461db4e2b9e56a270756e99dd9.png

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

7f6771f7cf46f4629d8233e500e886b8.png

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

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

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

4e99b3320b82ef17884be5203c966977.png

SystemRuleManager#checkSystem


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

  • maxSuccessQps 的计算取当前采样窗口的最大值乘以1s内滑动窗口的个数,这里其实并不是十分准确。
  • minRt 最小响应时间取自当前采样窗口中的最小响应时间。故得出了上述计算公式,除以1000是因为 minRt 的时间单位是毫秒,统一为秒。从这里可以看出根据系统负载做限流,最终的判断依据是线程数量。

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

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

246cfccde199a9a7a1d7ecb7eec1f177.png

SystemStatusListener#run

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

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

3、实践思考


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

d93bc64cfd3a31a113ab2b0e88aef95d.png

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

作者:丁威

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335157.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

路径和目录的区别

路径: 终点是目标文件,才叫路径,举例:/Users/liaowenxiong/Downloads/SoftWare for Mac/liaowenxiong.txt 这里的终点就是txt文件,这叫路径,路径是可以直接找到目标文件的。 目录: 终点是文件夹…

Hibernate架构概述

下图提供了Hibernate体系结构的高级视图: 最小的架构 “最小”架构使应用程序管理其自己的JDBC连接,并将这些连接提供给Hibernate; 此外,应用程序自行管理交易。 这种方法使用了最少的Hibernate API子集。 综合架构 Hibernate B…

一个服务器多个网站收录效果,8个优化小技巧快速提高网站收录

网站做好了,我们肯定是想要有更多的免费流量进入到我们的网站,那么我们就必须要了解如何快速提升网站收录。下面小编就来给大家分享一下SEO优化中快速提高网站收录的8个优化小技巧,希望对大家有所帮助。1、网站权重评级网站的权重是对于收录影…

铺铜过孔不要十字_谈谈商周青铜器上圈足的镂孔现象

在商代铜器和西周早期的铜器上,常常会看到带有圈足的器物,圈足有的会有一个孔洞,孔洞的形制有圆形的、十字形的、不规则圆形的等,如簋、觚、盘、豆、尊、罍、瓿、卣、觯、壶等,如下:最近,我们读…

解决eclipse中出现Resource is out of sync with the file system问题

在eclipse中搜索时,搜索完之后有时候会弹出错误对话框,错误摘录如下: Resource is out of sync with the file system… 分析: 有时候因为时间紧迫的原因,所以就没去管它,今天再次遇到它,实在看…

python 字体_python docx字体设置

首先引入依赖包from docx import Documentfrom docx.oxml.ns import qnfrom docx.shared import Pt,RGBColor如果不进行字体手动设置的话,生成的文字字体格式就会千奇百怪,如下图Doc Document()Doc.add_heading("刚来csdn,这就是博客么…

gwt格式_GWT的渐进式Web应用程序配方

gwt格式渐进或不渐进… 如果您已经设计或开发Web应用程序已有一段时间,那么您可能会遇到无数次“渐进式Web应用程序”一词,并且可能会在未来几年内使用。 您可能想知道PWA的确切定义是什么,如何识别PWA,以及如何构建PWA。 根据字典…

光学定位与追踪技术_如何为射线光学仿真创建复杂的透镜几何结构

“射线光学模块”扩展了 COMSOL Multiphysics 软件的建模功能,允许用户引入射线追踪仿真。有了该模块,在集成软件环境中对复杂光学系统的热性能、结构及其他方面进行高阶研究不再是一个难题。创建几何模型是仿真成功的第一步。本文以 Petzval 透镜为例,探…

琥珀ai_琥珀项目:Java的未来暴露

琥珀ai如果一切按计划进行(我们正在研究Jigsaw项目),那么Java 9将在不到100天的时间内启动。 您可以在此处加入倒计时以发布它。 它将包含一长串新功能和升级功能,其中一些我们迫不及待想要看到实际应用。 但是,有些功…

MySQL的存储过程和函数简单写法

什么是存储过程 简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法; ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的&#…

python对excel求和_Python 两个Excel文件对应位置求和并存储

最近~老板给我的工作一直都有对大量的Excel的操作比如两Excel对应位置求和,并存储。(两Excel表格的第一列和第一行是一毛一样的,不需要求和,原样保存!)本着能躺着就不坐着的原则,只想快点躺着,果断放弃了手…

zdal配置文件_Autofac的基本使用---4、使用Config配置

准备使用的表是Student,创建相关的IDAL、DAL、IBLL、BLL层。使用EF,创建一个Model层,存放edmx文件。创建一个Infrastructure层,基础设施项目,使用泛型类型。普通类型的使用1.APP.Config 配置信息此处有个需要注意的地方…

判断选择语句switch...case

switch(被检测量){ case 常量1: 语句1; break; case 常量2: 语句2; break; ... deault: 语句N; break; }被检测量的数据类型 基本数据类型:byte、short、int、char引用数据类型:String、enum 穿透 int num 2; switch(num){ case 1: System.out.print…

Java与Python:哪一个最适合您? [信息图]

通过从您的应用程序学习企业APM产品,发现更快,更有效的性能监控。 参加AppDynamics APM导览! 在软件开发中,很少有问题比选择编程语言更具分裂性或部落性。 软件开发人员经常以自己选择的工具来强烈地认同自己,将客观…

怎么把php查询到的值显示到下拉框中_RazorSQL for Mac(数据库工具查询)8.5.3

razorsql mac版更新日志变化 查询结果:如果有多个查询结果选项卡,则从查询结果选项卡中选择比较查询结果选项将填充比较工具中的两个查询 漏洞修补 不需要重新启动razorsql才能生效的首选项需要重新启动 自动更新程序不适用于Windows计算机 缺少HBase连接…

docker删除es数据_木杉入门Elasticsearch(4):安装ES

木杉入门本系列的目标是在本地搭建一个Elasticsearch的服务集群,通过在阿里云服务器搭建FRP通道对外提供服务,为小规模应用提供一种高性价比的解决思路。系列内容:木杉入门Elasticsearch(1):ESXI虚拟机安装CentOS木杉入门Elastics…

MySQL数据库常用命令_常用SQL语句及命令_MySQL常用语句

文章目录一、常用的 SQL 语句(一)查看当前登录用户(二)查看当前数据库(三)如何查看全部用户?(四)创建数据库(五)选择要操作的数据库(六…

spock_在扩展Spock时输出给定值

spockSpock是一个Java测试框架,由GradleWare的软件工程师Peter Niederwieser于2008年创建,它可以促进BDD的发展。 利用这个 例如 ,一个故事可以定义为: Story: Returns go to stockAs a store owner In order to keep track of …

将serversocket 写在按钮事件中连接不上_Java服务器的模型—TCP连接/流量优化

本文很长哦,但请给我一点时间。通常,我们的应用程序不需要并行处理成千上万的用户,也不需要在一秒钟内处理成千上万的消息。我们只需要应付数十或数百个并发连接的用户,就可以在内部应用程序或某些微服务应用程序中承受如此大的负…

ios 开发设置左滑退出_苹果铃声怎么设置自己的歌?教你用手机快速搞定!

苹果手机铃声怎么设置为自己喜欢的歌曲?由于iOS系统的封闭性,想要给苹果手机更换铃声不像在安卓手机一样那么方便,看到网上很多教程也是需要使用电脑才能完成铃声的设置,有没有不复杂的方法来直接帮我们更换手机铃声?别…