流量控制与熔断利器:Sentinel介绍

这是《百图解码支付系统设计与实现》专栏系列文章中的第(19)篇,也是流量控制系列的第(6)篇。点击上方关注,深入了解支付系统的方方面面。

本篇聊聊流量控制与熔断利器Sentinel,背后的原理,适用的场景及存在的不足。不涉及具体的配置,具体配置请参考官方文档。

1. 前言

在流量控制系列文章中的前五篇,分别介绍了固定时间窗口算法、滑动时间窗口算法、漏桶原理、令牌桶、消息中间件如何应用到分布式环境下流量与并发控制。

我们做个简单回顾:

固定窗口:算法简单,对突然流量响应不够灵活。超过流量的会直接拒绝,通常用于限流。

滑动窗口: 算法简单,对突然流量响应比固定窗口灵活。超过流量的会直接拒绝,通常用于限流。

漏桶算法:在固定窗口的基础之上,使用队列缓冲流量。提供了稳定的流量输出,适用于对流量平滑性有严格要求的场景。

令牌桶算法:在滑动窗口的基础之上,使用队列缓冲流量。提供了稳定的流量输出,且能应对突发流量。

分布式消息中间件:在支付场景的削峰填谷用得比较多,且对精度没有那么苛刻的场景。

今天介绍另一个流量控制和熔断机制利器:Sentinel。

需要说明的是,这里只是做简单介绍,更具体的使用,建议参考官方文档。

2. Sentinel简单介绍

图片来自网络。

Sentinel 是由阿里巴巴开源的一个轻量级的、高性能的流量控制、熔断降级的 Java 库。主要用于在分布式系统中保护服务的稳定性和可靠性,通过实现流量控制、熔断降级、系统负载保护等功能,来防止应用级别的故障和服务级别的雪崩效应。

主要特点

  1. 丰富的流量控制策略:Sentinel 提供了多种流量控制策略,如 QPS、线程数、响应时间等。
  2. 熔断降级机制:当资源的运行指标超过阈值时,Sentinel 可以自动进行熔断降级处理,防止系统过载。
  3. 系统负载保护:能够根据系统的负载情况,如 CPU 使用率、平均负载等,来自动调整流量入口。
  4. 实时监控和开放的指标:提供实时监控和丰富的指标数据,方便用户进行实时的流量监控和调整。
  5. 多维度规则授权:支持多种维度的规则配置,如调用关系、调用来源、API 级别等。
  6. 高可用性和可扩展性:Sentinel 的设计考虑了高可用性,易于扩展,支持与其他组件和服务的集成。
  7. 轻量级和高性能:其对系统的性能影响很小,非常适合高并发的场景。

3. 流量控制

Sentinel 的流量控制基于资源的定义、流量控制规则的设定以及运行时的流量控制处理。在 Sentinel 中,流量控制主要是通过对服务调用或资源访问的限制来实现的。

1. 资源的定义

在 Sentinel 中,资源通常是指需要被保护的服务调用点或关键代码段。例如,一个 HTTP 接口、一个内部定义的服务调用或一个数据库查询等都可以被定义为资源。

2. 流量控制规则

Sentinel 允许对每个资源设置流量控制规则。这些规则可以基于多种不同的标准,例如:

  • QPS(每秒查询次数):限制资源每秒可以处理的请求数。
  • 并发线程数:限制资源同时处理的最大并发请求数。
  • 响应时间:当资源的响应时间超过设定阈值时,可以触发流量控制措施。

3. 流量控制处理

一旦流量达到设定的阈值,Sentinel 会根据配置的流量控制效果来处理额外的流量。主要包括:

  • 直接拒绝(Fast Fail):立即拒绝访问请求,通常用于防止系统过载。
  • 预热(Warm Up):通过逐渐增加流量的方式来预热服务,适用于系统刚启动时。
  • 排队等待(Rate Limiter):使请求排队并逐个处理,保证系统稳定。排队还可以设定超时时间。

4.流量计算与排队

Sentinel 内部也是使用滑动时间窗口算法来计算资源的实时流量。有兴趣的同学可以自己去翻一下源代码。

排队通常使用先进先出(FIFO)的队列实现。

4. 熔断保护与自动恢复

熔断是一种保护系统的策略,当检测到某个微服务不稳定或者响应时间过长时,Sentinel会自动切断对该服务的请求,防止系统雪崩。Sentinel的熔断策略是基于RT(响应时间)、异常比例和异常数等不同的指标来实现的。一旦触发熔断规则,Sentinel会暂时阻断请求,直到服务恢复正常。

1. 熔断策略

Sentinel 提供多种熔断策略,典型的包括:

  • 慢调用比例:如果资源的响应时间超过阈值的调用比例超过设定值,则触发熔断。
  • 异常比例:如果资源的异常调用比例超过设定值,则触发熔断。
  • 异常数:如果在一个统计窗口内,资源的异常数超过设定值,则触发熔断。

2. 统计窗口

  • 滑动窗口:Sentinel 通常使用滑动窗口来统计资源的性能指标(如响应时间、调用异常等)。
  • 时间间隔:Sentinel 允许配置统计窗口的时间间隔,以便根据应用的实际需求调整熔断的灵敏度。

3. 熔断状态与自动化恢复

Sentinel 的熔断机制有三种状态:

  • 关闭:正常状态,请求正常处理。
  • 打开:熔断状态,所有对资源的请求都会被立即拒绝。
  • 半开:一段时间后,Sentinel 会自动将熔断器置为半开状态,允许部分请求通过以检测资源的健康状态。如果这些请求成功,则关闭熔断器;如果失败,则再次打开熔断器。

5. 支付系统应用场景

Sentinel广泛应用于微服务架构中,可以应对突发流量、分布式服务之间的依赖保护、系统负载过高等情况。在电商、支付、金融等行业随处可见。

我们主要用在各子域之间的限流。每年大促,就会梳理业务请求量,算出流量分布图,根据流量分布图,设置每个子应用各接口的限流值。

6. 无法适用的场景

Sentinel的限流有两种模式:1)总量除以机器数,然后做单机限流。2)拿出一台机器做集群结点,然后做集群限流。

但无论哪种模式都无法解决跨服务单元的限流。比如部署了两个机房,两个机房合用限流到1TPS,Sentinel是无法做到的。这个时候就需要用到我们前面几篇文章中讲到的自己实现的限流方案,比如漏桶,令牌桶等。

7. 结束语

在当前微服务架构的盛行的时代,Sentinel作为一个高效的流量控制与熔断工具,为确保系统的稳定性和可用性提供了强有力的支持。通过使用Sentinel,我们可以大大提高在线支付系统等复杂应用的稳定性和用户体验。

但另一方面,我们也需要知道不同的工具有不同的应用场景,Sentinel解决的是限流和熔断,消息中间件解决削峰填谷和应用间解耦,自己手撸一个漏桶或令牌桶解决极低TPS这种特殊场景。

8.精选

专栏地址百图解码支付系统设计与实现
《百图解码支付系统设计与实现》专栏介绍
《百图解码支付系统设计与实现》专栏大纲及文章链接汇总(进度更新于2023.1.15)
领域相关(部分)
支付行业黑话:支付系统必知术语一网打尽
跟着图走,学支付:在线支付系统设计的图解教程
图解收单平台:打造商户收款的高效之道
图解结算平台:准确高效给商户结款
图解收银台:支付系统承上启下的关键应用
图解支付引擎:资产流动的枢纽
图解渠道网关:不只是对接渠道的接口(一)

技术专题(部分)
交易流水号的艺术:掌握支付系统的业务ID生成指南
揭密支付安全:为什么你的交易无法被篡改
金融密语:揭秘支付系统的加解密艺术
支付系统日志设计完全指南:构建高效监控和问题排查体系的关键基石
避免重复扣款:分布式支付系统的幂等性原理与实践
支付系统的心脏:简洁而精妙的状态机设计与核心代码实现
精确掌控并发:固定时间窗口算法在分布式环境下并发流量控制的设计与实现
精确掌控并发:滑动时间窗口算法在分布式环境下并发流量控制的设计与实现

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分享行政检察院法律监督模型的构建价值和运用范式

数字检察是检察工作现代化的重要依托。在数字化时代背景下,行政检察监督办案要深入推进检察大数据战略,推动办案模式从“个案为主、数量驱动”向“类案为主、数据赋能”转变,通过数据分析、数据碰撞、数据挖掘发现治理漏洞或者监督线索&#…

项目上线存在的缓存问题以及存在的debugger和console.log等问题

下载uglifyjs-webpack-plugin插件 在vue.config文件中进行配置 publicPath: process.env.NODE_ENV production ? ./ : /,outputDir: n-sim-ipc-manage-build,productionSourceMap: false,configureWebpack: config > {//打包文件增加hashconfig.output.filename js/[nam…

大模型日报-20240120

这里写目录标题 视觉Mamba来了:速度提升2.8倍,内存能省87%一键实景转动画,清华系初创公司全球首发4D骨骼动画框架,还能生成个性化角色如何利用革命性的蛋白质结构工具来发现药物?AlphaFold 发现了数千种可能的致幻剂扎…

IPFoxy运营干货|谷歌广告Google Ads建立广告需要注意什么?

编辑投放谷歌广告需要多少个步骤和什么准备工作,本文将来讲述,主要分5个内容:一、投放前竞对研究;二、投放前广告账户设置;三、建立广告系列;四、建立广告组;五、广告长期策略。接下来我们来开始…

Python 面向对象绘图(Matplotlib篇-16)

Python 面向对象绘图(Matplotlib篇-16)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

链表存数相加算法(leetcode第2题)

题目描述: 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这…

无偿分享一个很有用的看源码小技巧

怎么在 idea 里面查看 git 提交记录呢?这个界面是藏在哪里的呢,我的 idea 里面怎么没有呢? 好的,是我疏忽了,我先入为主的认为这个大家应该都知道是怎么来的。 但是确实是有一些同学是不太清楚的,那我这篇…

大数据导论(2)---大数据与云计算、物联网、人工智能

文章目录 1. 云计算1.1 云计算概念1.2 云计算的服务模式和类型1.3 云计算的数据中心与应用 2. 物联网2.1 物联网的概念和关键技术2.2 物联网的应用和产业2.3 大数据与云计算、物联网的关系 1. 云计算 1.1 云计算概念 1. 首先从商业角度给云计算下一个定义:通过网络…

C#调用C++ dll异常排查

基本情况 最近在做的一款程序,长时间运行总会出现莫名的问题。有时是自动关闭,有时程序报错,有时调用的dll异常…… 提出假设——dll内存泄漏 由于开始与C组合作时,使用其提供的dll出现过数据读写时异常(内存操作异常…

Leetcoder Day9|栈与队列part01

语言:Java/C 目录 理论基础 C 栈 队列 Java 栈 队列 ​编辑 232.用栈实现队列 225. 用队列实现栈 Queue Deque 今日心得 理论基础 又是考研时数据结构里接触到的老朋友,栈是先进后出,队列是先进先出。 C 现在刷题除了思路还…

CHAPTER 11: 《DESIGN A NEWS FEED SYSTEM》 第 11 章:《设计新闻系统》

在本章中,您将被要求设计一个新闻提要系统。什幺是新闻系统?根据Facebook 页面,“News feed 是中间不断更新的故事列表。您的主页。动态消息包括状态更新、照片、视频、链接、应用活动记录和喜欢您在 Facebook 上关注的人、页面和群组“[1]。…

linux C语言socket函数send

在Linux中,使用C语言进行网络编程时,send函数是用于发送数据到已连接的套接字的重要函数之一。它通常用于TCP连接,但也可以用于UDP(尽管对于UDP,通常更推荐使用sendto,因为它允许你指定目标地址和端口&…

插入排序(一)——直接插入排序与希尔排序

目录 一.前言 二.排序的概念及其运用 1.1排序的概念 1.2 常用排序算法 三.常用排序算法的实现 3.1 插入排序 3.1.1 基本思想 3.1.2 直接插入排序 3.1.3 希尔排序(缩小增量排序) 四.全部代码 sort.c sort.h test.c 五.结语 一.前言 本文我们…

SpringBoot 3.1.7 集成Mybatis

一、介绍 Mybatis的中文官网并没找到与SpringBoot最新的集成的教程,有的都是老式的配置方法,所以记录一下怎么我是怎么集成SpringBoot 3.1.7 集成Mybatis 的方法 有条件的可以打开源网站 https://github.com/mybatis/spring-boot-starter 没有条件的我…

虚拟机下载docker

一,Docker简介 百科说:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制&#xff…

GetShell的姿势

0x00 什么是WebShell 渗透测试工作的一个阶段性目标就是获取目标服务器的操作控制权限,于是WebShell便应运而生。Webshell中的WEB就是web服务,shell就是管理攻击者与操作系统之间的交互。Webshell被称为攻击者通过Web服务器端口对Web服务器有一定的操作权…

nodejs前端项目的CI/CD实现(二)jenkins的容器化部署

一、背景 docker安装jenkins,可能你会反问,这太简单了,有什么好讲的。 我最近就接手了一个打包项目,它是一个nodejs的前端项目,jenkins已在容器里部署且运行OK。 但是,前端组很追求新技术,不…

【STM32】STM32学习笔记-I2C通信外设(34)

00. 目录 文章目录 00. 目录01. I2C简介02. I2C外设简介03. I2C框图04. I2C基本结构05. 主机发送06. 主机接收07. 软件/硬件波形对比08. 预留09. 附录 01. I2C简介 I2C(Inter-Integrated Circuit)总线是一种由NXP(原PHILIPS)公司开发的两线式…

Web3艺术市场:NFT与数字创作的结合

在数字时代,随着区块链技术的崛起,一种新型数字资产,非同质化代币(NFT),正逐渐改变传统艺术市场的格局。这种数字化的艺术品售卖方式成为了Web3艺术市场的代表,推动着数字创作与艺术市场的结合。…

深度学习—常见的卷积操作和卷积神经网络

各种常见的卷积操作 0、三种模式及输出矩阵尺寸计算 W输入矩阵宽,w是卷积核的大小,p是padding的数值,stride是滑动步幅 Full 补k-1圈 :w0 ( | W | - w 2p )/ stride 1 Same 补若干圈:w0 …