我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Sentinel的工作流程是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Sentinel的工作流程是什么

本篇内容主要讲解“Sentinel的工作流程是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Sentinel的工作流程是什么”吧!

Sentinel统计QPS使用的是时间窗口+Bucket,并且通过循环复用Bucket以减少对内存的占用,在统计QPS时,更是利用当前时间戳定位Bucket,使用LongAdder统计时间窗口内的请求成功数、失败数、总耗时优化了并发锁,通过定时任务递增时间戳避免每次都使用System获取当前时间。可以看到Sentinel在性能方面所做出的努力,Sentinel尽最大可能降低自身对应用的影响。

Sentinel会为每个资源(接口)创建一个保存一分钟内时间窗口为1秒的Bucket数组以及一个保存一秒钟内以500ms为时间窗口的Bucket数组,将这两个数组包装为一个Node,以统计该接口的请求数据。每个Bucket记录一个时间窗口内的请求总数、失败总数、总耗时(通过总耗时可计算平均耗时)、被限流或者被熔断的请求总数。

Sentinel的工作流程是什么

因此,Sentinel消耗的内存至少是资源总数乘以每个资源对应的Node占用的内存大小,每个Node占用的内存大小即为一个大小为2的Bucket数组和一个大小为60的Bucket数组所占用的内存。

Sentinel工作流程源码分析

Sentinel通过复用Bucket降低对内存的消耗,使用LongAdder降低并发统计数据对性能的消耗,除这些之外,Sentinel通过责任链模式实现统计、限流、熔断降级等功能,实现局部无锁化。

Sentinel的基本使用:

Sentinel的工作流程是什么

Sentinel实现统计、限流、熔断降级等功能由一个个ProcessorSlot完成,例如,统计资源当前时间窗口的请求总数、失败总数等由StatisticSlot完成,判断当前请求是否需要限流由FlowSlot完成,判断当前请求是否需要熔断降级由DegradeSlot完成。

Sentinel的工作流程是什么

这些ProcessorSlot按照严格的顺序包装成一个链表,比如StatisticSlot在FlowSlot之前,FlowSlot在DegradeSlot之前。

Sentinel的工作流程是什么

ProcessorSlot的entry方法在接收到客户端请求时或者客户端向服务端发送请求之前被调用,exit方法则是在服务端处理完请求(包括异常完成)时或者客户端发送请求完成时被调用。每个ProcessorSlot通过fireEntry方法或者fireExit方法向下传递信号。

看过Netty源码的朋友应该对这种设计模式的使用并不陌生,Netty也是通过责任链模式将处理请求的Handler包装为链表,实现局部串行处理请求。但Sentinel的ProcessorSlot与Netty的Handler有些区别,ProcessorSlot的exit方法并不像Netty那样是从后往前传递的。

我们熟悉的Shiro也是通过责任链实现(过滤器),所以Sentinel实现限流、熔断并不难理解。在不考虑集群限流的情况下。当SphU的entry方法被调用时,至少会经过StatisticSlot、FlowSlot、DegradeSlot这三个ProcessorSlot,其时序图如下。

Sentinel的工作流程是什么

当StatisticSlot的entry方法被调用时,由StatisticSlot根据资源获取资源的Node,根据当前时间戳从Node获取当前时间窗口的Bucket,然后将Bucket的请求总数自增1。StatisticSlot在entry方法中捕获异常,如果下游的ProcessorSlot抛出异常为BlockException或BlockException的子类,则将Bucket的限流总数自增1,否则将Bucket的异常总数自增1。

当FlowSlot的entry方法被调用时,检查为当前资源配置的限流规则是否满足限流条件,如果满足条件则抛出BlockException异常,表示当前请求被限流。由于Sentinel支持集群限流,所以限流的实现上比较复杂,我们暂不讨论。如果是单节点的限流,则实现上与熔断降级的实现差不多,本篇只介绍熔断降级的实现。

当DegradeSlot的entry方法被调用时,检查为当前资源配置的熔断降级规则是否满足条件,如果满足条件则抛出DegradeException异常,表示当前请求被熔断。

Sentinel熔断降级实现源码分析

Sentinel会为每个资源(ResourceWrapper)创建一个Node,用于统计请求数据(请求总数、异常总数、被限流或被熔断总数、总耗时),为限流和熔断降级功能提供支持。

Sentinel的工作流程是什么

ResourceWrapper的name为资源名称,也可以理解是接口url,但这样理解是不正确的。资源名称在我们配置限流规则或者熔断降级规则时也用到。

ResourceWrapper的entryType为流量类型,可取值为IN和OUT,IN表示流入类型,即服务端接收客户端请求;OUT为流出类型,即客户端向服务端发起请求。

ResourceWrapper的resourceType为资源类型,表示是Servlet还是RPC、API网关、数据库等。可见,Sentinel还支持对数据库的访问限流、熔断。

Sentinel提供的熔断降级功能,不仅可以在客户端使用,也可以在服务端使用,但一般会放在客户端,用于流量类型为OUT类型的资源的熔断降级,保证自身不受服务端的影响,不被服务端拖垮。

判断Sentinel的熔断降级功能是否支持在服务端执行,我们可通过阅读DegradeSlot的源码,查看是否限制了只有流量类型为EntryType.OUT时才生效。

Sentinel的工作流程是什么

当DegradeSlot的entry方法被调用时,由DegradeSlot调用DegradeRuleManager的checkDegrade方法检查当前请求是否满足某个熔断降级规则。

在学习如何使用Sentinel实现熔断降级时,我们是使用DegradeRuleManager加载我们配置的熔断降级规则的,所以DegradeSlot将check逻辑才交给DegradeRuleManager去完成。

Sentinel的工作流程是什么

DegradeRuleManager首先根据资源名称获取配置的熔断降级规则,因为我们可以对同一个资源配置多个熔断降级规则,所以返回的将是一个集合。然后遍历熔断降级规则,调用DegradeRule的passCheck方法将检查是否需要触发熔断的逻辑交给DegradeRule完成。如果对一个资源配置多个熔断降级规则,那么只要有一个熔断降级规则满足条件,就会触发熔断。

DegradeRule的passCheck方法源码如下。

Sentinel的工作流程是什么

从DegradeRule的passCheck方法的源码中,我们并未发现有任何地方限制熔断降级的触发只有流量类型为EntryType.OUT才生效,因此,熔断降级不仅可以用于客户端,也可以用于服务端。

熔断降级策略支持三种:

1、平均响应时间 (DEGRADE_GRADE_RT)

2、异常比例 (DEGRADE_GRADE_EXCEPTION_RATIO)

3、异常数 (DEGRADE_GRADE_EXCEPTION_COUNT)。

官方文档在介绍DEGRADE_GRADE_EXCEPTION_COUNT策略的地方加了使用注意说明:注意由于统计时间窗口是分钟级别的,若  timeWindow 小于 60s,则结束熔断状态后仍可能再进入熔断状态。

这句话并不难理解,从DegradeRule的passCheck方法源码就能找到答案,如下图所示。

Sentinel的工作流程是什么

到此,相信大家对“Sentinel的工作流程是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Sentinel的工作流程是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Sentinel源码分析,了解Sentinel的整个工作流程

Sentinel会为每个资源(接口)创建一个保存一分钟内时间窗口为1秒的Bucket数组以及一个保存一秒钟内以500ms为时间窗口的Bucket数组,将这两个数组包装为一个Node,以统计该接口的请求数据。

mvc的工作流程是什么

MVC(Model-View-Controller)是一种软件设计模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。MVC的工作流程如下:用户与视图进行交互,例如通过界面操作或输入数据
2023-10-26

springmvc的工作流程是什么

Spring MVC的工作流程如下:1. 客户端发送HTTP请求到DispatcherServlet。2. DispatcherServlet是前端控制器,它接收到请求后,根据配置文件找到对应的处理器映射器(HandlerMapping)。
2023-08-18

Git的工作流程是什么

本文小编为大家详细介绍“Git的工作流程是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Git的工作流程是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。Git 工作流程一般工作流程如下:克隆 Git 资
2023-06-17

Djabgo的工作流程是什么

Django的工作流程如下:1. 客户端发送HTTP请求到Django应用的服务器。2. 服务器接收请求并根据URL映射找到相应的视图函数。3. 视图函数处理请求并返回一个HTTP响应。4. 服务器将响应发送回客户端。在这个过程中,Djan
2023-10-19

springboot的工作流程是什么

Spring Boot 的工作流程如下:创建 Spring Boot 项目:首先需要使用 Spring Initializr 创建一个 Spring Boot 项目。可以选择所需的依赖和项目配置,然后生成一个基本的 Spring Boot
springboot的工作流程是什么
2024-03-14

apache和php的工作流程是什么

Apache和PHP的工作流程如下:1. 客户端发送HTTP请求到Apache服务器。2. Apache服务器接收到请求后,根据请求的URL路径将请求发送给对应的PHP解释器。3. PHP解释器解析请求,并执行相应的PHP代码。4. PHP
2023-08-31

linux中udev的工作流程是什么

udev是Linux系统中的一个设备管理器,负责检测和处理设备的插拔事件。其工作流程如下:内核通知:当设备被插入或拔出时,内核会发送一个事件通知给udev守护进程。规则匹配:udev守护进程接收到内核的事件通知后,会根据预先定义的规则对事件
linux中udev的工作流程是什么
2024-03-05

HTTP协议的工作流程是什么

这篇“HTTP协议的工作流程是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“HTTP协议的工作流程是什么”文章吧。HTT
2023-06-27

python中Pexpect的工作流程是什么

这期内容当中小编将会给大家带来有关python中Pexpect的工作流程是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Pyth
2023-06-14

什么是工作流?

工作流是一种自动化流程,将任务组织成可重复序列,自动触发下一任务。它通过自动化、可重复性、定制化、可视化和触发器简化复杂流程,提高效率。工作流类型包括线性、并行、混合、循环和事件驱动。优点包括提高效率、减少错误、改善协作、缩短周转时间和降低成本。实施工作流涉及确定流程、设计、选择工具、配置和监控。
什么是工作流?
2024-04-02

ssl卸载工作流程是什么

SSL卸载是一种网络安全技术,其工作流程如下:1. 客户端发起SSL连接请求。2. 请求到达SSL负载均衡器。3. SSL负载均衡器解析请求,将其转发到后端服务器。4. 后端服务器接收到请求,并将其传递给SSL解密设备。5. SSL解密设备
2023-09-05

Java中ThreadPoolExecutor的工作流程究竟是怎样的?(Java中ThreadPoolExecutor的工作流程是什么)

在Java编程中,ThreadPoolExecutor是一个非常重要的线程池实现类,它对于高效管理和利用线程资源起着关键作用。本文将详细介绍Java中ThreadPoolExecutor的工作流程。ThreadPoolExecutor的主要目的是通过复用线程来提
Java中ThreadPoolExecutor的工作流程究竟是怎样的?(Java中ThreadPoolExecutor的工作流程是什么)
Java2024-12-22

Java JBPM 工作流究竟是什么?(java JBPM工作流是什么)

一、引言在Java开发领域,JBPM(JavaBusinessProcessManagement)工作流是一个备受关注的概念。它为企业级应用程序提供了强大的流程管理能力,能够帮助开发人员构建复杂的业务流程,并实现高效的业务流程自动化。
Java JBPM 工作流究竟是什么?(java JBPM工作流是什么)
Javajbpm2024-12-16

php laravel框架的工作流程是什么

PHP Laravel框架的工作流程如下:路由:请求到达服务器后,Laravel会根据路由配置文件(routes/web.php或routes/api.php)将请求路由到对应的控制器方法。控制器:控制器接收到请求后,会调用相应的业务逻辑处
2023-10-22

网站开发的工作流程是什么

这篇文章主要讲解了“网站开发的工作流程是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“网站开发的工作流程是什么”吧!第一步、进行需求分析当客户提出想做一个什么样网站的时候,我们就必须弄清
2023-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录