如何使用Sentinel的Slot插槽实现限流熔断,看完这篇文章会有新的收获

news2024/12/22 19:46:57

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将详细介绍如何使用Sentinel的Slot插槽实现限流熔断,后续文章将详细介绍Sentinel的其他知识。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
小威在此先感谢各位大佬啦~~🤞🤞

在这里插入图片描述

🏠个人主页:小威要向诸佬学习呀
🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
目前状况🎉:24届毕业生,在一家满意的公司实习👏👏

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

在这里插入图片描述

以下正文开始

文章目录

  • Sentinel的插槽介绍
  • Slot接口中的方法介绍
  • Slot接口源码及注释
  • Sentinel插槽小结

在这里插入图片描述

Sentinel的插槽介绍

Sentinel是一个开源的分布式系统高可用保护组件,在流量控制、熔断降级等方面有着非常优秀的表现。其中,Sentinel中的“插槽”(slot)机制是实现各种限流、熔断等功能的重要基础。

Sentinel中的“插槽”即为代码执行过程中收集调用链路上的一些关键事件,并根据这些事件判断当前调用是否需要进行限流、熔断等操作。通过集成各类框架的关键节点和自定义规则的方式来实现,并随着每个API的访问请求而执行,对于任意紧邻且处于整个 API 调用处上运行的 Intercept、Filter 等多个业务逻辑模块,提供了统一的使用方法,也减轻了对接入业务的侵入性。

在Sentinel中,一个插槽可以被理解为对某个流量入口的处理逻辑抽象,它是实现流量控制的基本单位。每个插槽都有自己的统计信息和状态,如当前的请求数、成功数、失败数、超时数等。通过这些统计信息,Sentinel可以实时地感知应用的流量状况,并根据预设的规则自适应地调整流量控制策略。

Sentinel中提供了默认的插槽实现,但也支持用户自定义插槽,从而实现更复杂的流量控制。用户可以通过实现Slot接口来定义自己的插槽实现,并将其注册到Sentinel的全局插槽管理器中。全局插槽管理器负责将所有插槽按照优先级排序,并在每次请求进入Sentinel时依次执行各个插槽中的控制逻辑,直到某个插槽返回不通过的结果,或者所有插槽均通过了验证。

Slot接口中的方法介绍

Slot接口是Sentinel插槽的核心,它定义了以下几个方法:

  • entry(Context context, T resourceWrapper, Object[] args): 插槽核心方法,用于根据上下文判断是否允许请求通过当前插槽。其中,context表示当前上下文,resourceWrapper表示当前资源的封装对象,args表示当前请求的参数列表。返回值为一个枚举类型的EntryResult,表示当前请求是允许通过、被阻塞还是需要等待。

  • getSlotName(): 获取当前插槽所属的分类,可以理解为插槽的类型或作用范围。

  • getMetrics(T resourceWrapper, Context context): 获取当前插槽和资源的实时统计信息。其中,resourceWrapper表示要统计的资源封装对象,context表示当前上下文(请求)。返回值为一个统计信息列表,每个统计信息包含了当前插槽和资源的一些关键指标,如请求数、成功数、失败数、超时数等。

  • resetResourceMetric(T resourceWrapper): 重置给定资源的相关统计信息。通常情况下,这个方法会被Sentinel内部的定时任务自动触发。

  • resetGlobalMetric(): 重置当前插槽的所有统计信息。

除了默认的Slot实现外,Sentinel还提供了一些内置的扩展插槽,如流量整形插槽(Traffic Shaping Slot)、系统保护插槽(System Protection Slot)等,可用于更细粒度的流量控制和系统保护。通过使用这些插槽,开发人员可以更加方便地实现高效、稳定的分布式应用系统。
在这里插入图片描述

Slot接口源码及注释

下面是Sentinel中Slot接口的源码,包括了该接口的部分方法和注释:

public interface Slot<T> {

    /**
     * Check whether current {@link Context} is allowed to pass this slot.
     *
     * @param context current context
     * @return allowed result (allowed: {@code true}, blocked: {@code false}, waiting: {@code null}).
     * @throws BlockException if the request is blocked, blocked reason will be carried by the thrown exception.
     */
    // 插槽核心方法,用于根据上下文判断是否允许请求通过当前插槽
    // allowed 表示通过,blocked 表示被阻塞,waiting 表示需要进入等待状态(对应排队等待的场景)
    // 如果被阻塞,则会抛出 BlockException 异常并带有相应的阻塞原因
    EntryResult entry(Context context, T resourceWrapper, Object[] args) throws Throwable;

    /**
     * Get the category of the slot.
     *
     * @return the category of the slot
     */
    // 插槽所属的分类,可以理解为插槽的类型或作用范围
    String getSlotName();

    /**
     * Get the real-time metrics of the current slot and resource.
     *
     * @param resourceWrapper specific resource
     * @param context         current context
     * @return the real-time metrics of the current slot and resource
     */
    // 获取当前插槽和资源的实时统计信息
    // resourceWrapper 表示要统计的资源封装对象,context 表示当前上下文(请求)
    List<Metric> getMetrics(T resourceWrapper, Context context);

    /**
     * Reset the corresponding statistics metrics for the resource. Typically it will be triggered automatically by Sentinel
     * internal schedule task.
     *
     * @param resourceWrapper specific resource
     */
    // 重置给定资源的相关统计信息
    // 通常情况下,这个方法会被 Sentinel 内部的定时任务自动触发
    void resetResourceMetric(T resourceWrapper);

    /**
     * Reset all the statistics metrics for this slot.
     */
    // 重置当前插槽的所有统计信息
    void resetGlobalMetric();
}

Sentinel插槽小结

Sentinel的插槽(Slot)是实现流量控制和系统保护的基本单位,它可以根据请求上下文判断是否允许请求通过当前插槽,并且支持自定义插槽以实现更复杂的流量控制逻辑。

插槽由Slot接口定义,其中包含了核心方法entry、获取信息方法getMetrics等,还有一些其他辅助方法。在执行入口控制时,全局插槽管理器会按照优先级依次调用各个插槽,直到所有插槽均通过验证或有插槽返回不通过结果。同时,每个插槽都有自己的统计信息和状态,Sentinel可以利用这些信息实时感知应用的流量状况,并根据预设的规则自适应地调整流量控制策略

除了默认的插槽实现外,Sentinel还提供了许多内置的插槽扩展,如流量整形插槽(Traffic Shaping Slot)、系统保护插槽(System Protection Slot)等,可用于更细粒度的流量控制和系统保护。这些插槽可以帮助开发人员更加方便地实现高效、稳定的分布式应用系统。

好了,本篇文章就先分享到这里了,后续将会继续介绍sentinel详细的其他方面的知识,感谢大佬认真读完支持咯~
在这里插入图片描述

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论😁
希望能和诸佬们一起努力,今后我们顶峰相见🍻
再次感谢各位小伙伴儿们的支持🤞

在这里插入图片描述

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

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

相关文章

对于2023年参加国家计算机软考系统分析师的感想

文章目录 前言系分简介系分知识点今年的题型综合知识(上午选择题)案例分析&#xff08;下午简答分析题&#xff09;论文&#xff08;下午小作文&#xff09; 写在最后 前言 23年3月27日参加了国家计算机软考系统分析师&#xff0c;考完后很多的题库网站就有小道估分了。当然&a…

一些零零碎碎的记录

Questions1. 用户访问多网址服务器同一个IP是怎么回事 Q:用户访问服务器的同一个IP不同网址&#xff0c;服务器是如何区分的A: 在 HTTP 协议中&#xff0c;客户端通过发送请求报文来向服务器请求资源。每个 HTTP 请求都包含一个 HTTP 头部&#xff0c;其中包括了一些关键信息&…

力扣sql中等篇练习(三十)

力扣sql中等篇练习(三十) 1 即时食物配送||| 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # Write your MySQL query statement below SELECT order_date,ROUND(100*count(IF(order_datecustomer_pref_delivery_date,customer_id,null))/count(*)…

studio one6免费版下载及配置要求 附精调效果包

提到编曲软件&#xff0c;就不得不说这款水果编曲软件。它对新手和老手都比较友好&#xff0c;是一款较为经典的编曲软件。 这款软件提供了强大而全面的音符、音效编辑器&#xff0c;可以在其中插入各种乐器声音&#xff0c;如果内置乐器无法满足编曲需求&#xff0c;还可以外…

ABAQUS计算随机振动设置及输出

ABAQUS计算随机振动设置及输出 1.分析步设置 随机振动主要包括两个分析步&#xff1a;频率和随机振动 1.1 频率设置 频率这里需要注意的是最高频率最好是扫频范围的2-2.5倍 比如随机频率区间是[0-2000hz],最高频率应该大于4000Hz&#xff0c;才能保证精度 1.2 随机响应设…

数据结构【栈】有哪些应用场景?

✨Blog&#xff1a;&#x1f970;不会敲代码的小张:)&#x1f970; &#x1f251;推荐专栏&#xff1a;C语言&#x1f92a;、Cpp&#x1f636;‍&#x1f32b;️、数据结构初阶&#x1f480; &#x1f4bd;座右铭&#xff1a;“記住&#xff0c;每一天都是一個新的開始&#x1…

如何在前端应用中合并多个 Excel 工作簿

本文由葡萄城技术团队于博客园原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前言 | 问题背景 ​ SpreadJS是纯前端的电子表格控件&#xff0c;可以轻松加载 Excel 工作簿中的数据…

Hack The Box - 关卡Dancing

SMB(全称是Server Message Block)是一个协议名&#xff0c;可用于在计算机间共享文件、打印机、串口等&#xff0c;电脑上的网上邻居就是靠它实现的。 SMB 是一种客户机/服务器、请求/响应协议。通过 SMB 协议&#xff0c;客户端应用程序可以在各种网络环境下读、写服务器上的…

干货|7种提高客户推荐率的方法,让你的客户成为你的推广大使!

大家都知道“客户推荐”是一种非常有效的业务推广方式。通过口碑传播&#xff0c;可以吸引更多的潜在客户&#xff0c;建立长期稳定的合作关系。 可以说&#xff0c;这种开发客户的方法:耗时少&#xff0c;成功率高&#xff0c;成本低&#xff0c;客户更好&#xff0c;堪称世界…

山西电力市场日前价格预测【2023-05-30】

日前价格预测 预测明日&#xff08;2023-05-30&#xff09;山西电力市场全天平均日前电价为350.71元/MWh。其中&#xff0c;最高日前价格为424.56元/MWh&#xff0c;预计出现在19: 30。最低日前电价为239.37元/MWh&#xff0c;预计出现在13: 00。 以上预测仅供学习参考&#xf…

律师使用ChatGPT 进行法律文献检索提交了错误信息;李开复表示,威力强大的大模型将彻底变革人工智能

&#x1f680; 一名律师使用ChatGPT 进行法律文献检索提交了错误信息 近日&#xff0c;一名律师在法庭案件中使用聊天机器人 ChatGPT 进行法律文献检索&#xff0c;结果提交了错误信息&#xff0c; 揭示了人工智能在法律领域的潜在风险&#xff0c;包括误传错误信息。 该事件…

数据分析师的基本职责(合集)

算法工程师的职责表述 算法工程师的职责表述1 职责 1、维护、扩展的大数据处理分析平台; 2、负责将先进的工业大数据分析技术转化为标准化的分析工具与模块; 3、规范并优化算法&#xff0c;提高可靠性; 4、帮助建立标准化的数据分析路线图&#xff0c;能够提取、转换并加强数据…

音视频技术开发周刊 | 295

每周一期&#xff0c;纵览音视频技术领域的干货。 新闻投稿&#xff1a;contributelivevideostack.com。 微软炸通Windows与ChatGPT全家桶&#xff01;人手一个Copilot&#xff0c;AI宇宙降临 三位OpenAI掌舵人亲自撰文&#xff1a;我们应该如何治理超级智能&#xff1f; OpenA…

《Opencv3编程入门》学习笔记—第一章

《Opencv3编程入门》学习笔记 记录一下在学习《Opencv3编程入门》这本书时遇到的问题或重要的知识点。 第一章 邂逅opencv 参考推荐软件版本&#xff1a;visual studio2010 opencv2.4.9 visual studio安装教程: https://blog.csdn.net/qq_45768871/article/details/1081788…

LeetCode链表题(中等)剖析

文章目录 &#x1f490;文章导读&#x1f490;1.合并零之间的结点解题思路 &#x1f490;2.链表中最大孪生和解题思路 &#x1f490;3.链表的随机节点解题思路 &#x1f490;4.复杂链表的复制解题思路 &#x1f490;5.两辆交换两表中的节点解题思路 &#x1f490;文章导读 &…

【深圳触觉智能技术分享】RK3568 RK809电量计电池调试

本文基于IDO-SBC3568主板介绍说明PMIC RK809电量计的调试方法。 IDO-SBC3568-V1是一款基于RK3568的工控主板&#xff0c;采用22nm先进工艺制程&#xff0c;四核A55 CPU&#xff0c;主频高达2.0GHz&#xff0c;支持高达8GB高速LPDDR4&#xff0c;1T算力NPU &#xff0c;4K H.26…

如何在Allegro软件中快速复制走线和过孔?

在PCB设计过程中&#xff0c;快速而准确复制走线和过孔是提高设计效率和减少重复工作的关键所在&#xff0c;因此很多工程师会选择使用Allegro来复制走线和过孔&#xff0c;因为Allegro是一款功能强大且灵活的PCB设计软件&#xff0c;提供了多种工具和功能&#xff0c;自然包括…

springboot+java汽车配件销售业绩管理系统 J2EE平台技术

汽车配件销售类企业近年来得到长足发展,在市场份额不断扩大同时,如何更好地管理企业现有销售项目资源成为摆在该类企业面前的重要课题之一。本次打算开发的springboot汽车配件销售业绩管理系统的开发过程引用 J2EE平台技术,该平台中所包含的JDBC、JNDI等组件,规定访问数据库的形…

swagger页面 doc.html出不来,swagger-ui/index.html能出来

swagger页面 doc.html出不来&#xff0c;swagger-ui/index.html能出来。前前后后折腾了很久&#xff0c;jar包冲突&#xff0c;jar包版本&#xff0c;添加路径啥的都弄了&#xff0c;就是出不来。 后来全局搜索“doc.html”页面发现能出来的项目能搜到这个页面&#xff1a; 定…

大数据测试基础概念和工具

下方查看历史精选文章 重磅发布 - 自动化框架基础指南pdfv1.1大数据测试过程、策略及挑战 测试框架原理&#xff0c;构建成功的基石 在自动化测试工作之前&#xff0c;你应该知道的10条建议 在自动化测试中&#xff0c;重要的不是工具 大数据已经成为当今的热门话题&#xff0c…