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

这篇具有很好参考价值的文章主要介绍了流量控制与熔断利器:Sentinel介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

1. 前言

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

我们做个简单回顾:

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

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

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

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

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

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

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

2. Sentinel简单介绍

流量控制与熔断利器:Sentinel介绍,百图解码支付系统设计与实现,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介绍,百图解码支付系统设计与实现,sentinel,流量控制,雪崩,分布式,限流

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

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

4.流量计算与排队

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

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

4. 熔断保护与自动恢复

流量控制与熔断利器:Sentinel介绍,百图解码支付系统设计与实现,sentinel,流量控制,雪崩,分布式,限流

熔断是一种保护系统的策略,当检测到某个微服务不稳定或者响应时间过长时,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生成指南
揭密支付安全:为什么你的交易无法被篡改
金融密语:揭秘支付系统的加解密艺术
支付系统日志设计完全指南:构建高效监控和问题排查体系的关键基石
避免重复扣款:分布式支付系统的幂等性原理与实践
支付系统的心脏:简洁而精妙的状态机设计与核心代码实现
精确掌控并发:固定时间窗口算法在分布式环境下并发流量控制的设计与实现
精确掌控并发:滑动时间窗口算法在分布式环境下并发流量控制的设计与实现文章来源地址https://www.toymoban.com/news/detail-812940.html

到了这里,关于流量控制与熔断利器:Sentinel介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring Cloud实战 |分布式系统的流量控制、熔断降级组件Sentinel如何使用

    专栏集锦,大佬们可以收藏以备不时之需 Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏:https://blog.csdn.net/superdangbo/category_9271502.html tensorflow专栏:https://blog.csdn.net/superdangbo/category_869

    2024年02月04日
    浏览(50)
  • 我为什么要写《百图解码支付系统设计与实现》专栏(附专栏大纲)

    致谢 @月朦胧 提出的“状态机领域模型同时被两个线程操作怎么避免状态幂等问题” @赵晓军528 @康文彬 指出了状态机文章中有关键代码缺失 @用户4725518259032 指出了需要缺失hashCode()的问题。 很多其他网友也给了很多有益反馈,无法一一感谢。 本周更新 分布式流控系列文章。

    2024年01月16日
    浏览(35)
  • sentinel介绍-分布式微服务流量控制

    https://sentinelguard.io/ 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开

    2024年02月16日
    浏览(30)
  • 如何使用Sentinel做流量控制?此文将附代码详细介绍Sentinel几种限流模式

    前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将详细介绍Sentinel的两种限流模式,由于篇幅原因,后续文章将详细介绍Sentinel的其他三种。 如果文章有什么需要改进的地方还请大佬不吝赐教 👏👏。 小威在此先感谢各位大佬啦~~🤞🤞 🏠个人主页

    2024年02月05日
    浏览(22)
  • SpringMvc集成开源流量监控、限流、熔断降级、负载保护组件Sentinel

    前言:作者查阅了Sentinel官网、51CTO、CSDN、码农家园、博客园等很多技术文章都没有很准确的springmvc集成Sentinel的示例,因此整理了本文,主要介绍SpringMvc集成Sentinel 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的

    2024年02月05日
    浏览(48)
  • 【Spring Cloud】Sentinel流量限流和熔断降级的讲解

    🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《Spring Cloud》。🎯🎯 👉点击这里,就可以查看我的主页啦!👇👇 Java方文山的个人主页 🎁如果感觉还不错的话请给我点赞吧!🎁🎁 💖期待你的加入,一起

    2024年01月23日
    浏览(32)
  • Sentinel 流量控制框架

    1. Sentinel 是什么? Sentinel是由阿里中间件团队开源的,面向分布式服务架构的轻量级高可用流量控制组件。 2. 主要优势和特性 轻量级,核心库无多余依赖,性能损耗小。 方便接入,开源生态广泛。 丰富的流量控制场景。 易用的控制台,提供实时监控、机器发现、规则管理

    2024年02月09日
    浏览(72)
  • 【微服务】Sentinel(流量控制)

    1.Sentinel是什么 2.Sentinel主要特性 3.Sentinel核心功能 1.流量控制 2.熔断降级 3.消息削峰填谷 4.Sentinel两个组成部分 1.需求分析 2.下载 3.运行 1.进入cmd 2.输入java -jar sentinel-dashboard-1.8.0.jar 3.查看默认端口8080 4.访问 1.账号和密码都是sentinel 2.登录成功 3.退出就在cmd输入ctrl + c 5.切换端

    2024年04月14日
    浏览(25)
  • 利用Sentinel解决雪崩问题(一)流量控制

    1、解决雪崩问题的常见方式有四种: 超时处理:设定超时时间,请求超过一定时间没有响应就返回错误信息,不会无休止等待; 舱壁模式:限定每个业务能使用的线程数,避免耗尽整个tomcat的资源,因此也叫线程隔离; 熔断降级:由断路器统计业务执行的异常比例,如果超出阈值则

    2024年04月23日
    浏览(43)
  • 【RuoYi-Cloud-Plus】学习笔记 08 - Sentinel(三)流量控制知识整理

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

    2024年02月12日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包