首页 > 其他分享 >Sentinel 是如何做限流

Sentinel 是如何做限流

时间:2024-01-17 10:04:32浏览次数:23  
标签:SentinelResource 熔断 如何 限流 Sentinel 方法 源码

限流是保障服务高可用的方式之一,尤其是在微服务架构中,对接口或资源进行限流可以有效地保障服务的可用性和稳定性。

之前的项目中使用的限流措施主要是Guava的RateLimiter。RateLimiter是基于令牌桶流控算法,使用非常简单,但是功能相对比较少。

而现在,我们有了一种新的选择,阿里提供的Sentinel。

Sentinel 是阿里巴巴提供的一种限流、熔断中间件,与RateLimiter相比,Sentinel提供了丰富的限流、熔断功能。它支持控制台配置限流、熔断规则,支持集群限流,并可以将相应服务调用情况可视化。

目前已经有很多项目接入了Sentinel,而本文主要是对Sentinel的限流功能做一次详细的分析,至于Sentinel的其他能力,则不作深究。

一:总体流程:

Sentinel 是如何做限流_限流

从设计模式上来看,典型的的责任链模式。外部请求进来后,要经过责任链上各个节点的处理,而Sentinel的限流、熔断就是通过责任链上的这些节点实现的。

从限流算法来看,Sentinel使用滑动窗口算法来进行限流。要想深入了解原理,还是得从源码上入手,下面,直接进入Sentinel的源码阅读。

二:源码解读:

1,总体流程:

读源码先得找到源码入口。我们经常使用@ SentinelResource来标记一个方法,可以将这个被@ SentinelResource标记的方法看成是一个Sentinel资源。因此,我们以@ SentinelResource为入口,找到其切面,看看切面拦截后所做的工作,就可以明确Sentinel的工作原理了。直接看注解@SentinelResource的切面代码(SentinelResourceAspect)。

可以清晰的看到Sentinel的行为方式。进入SentinelResource切面后,会执行SphU.entry方法,在这个方法中会对被拦截方法做限流和熔断的逻辑处理。

如果触发熔断和限流,会抛出BlockException,我们可以指定blockHandler方法来处理BlockException。而对于业务上的异常,我们也可以配置fallback方法来处理被拦截方法调用产生的异常。

所以,Sentinel熔断限流的处理主要是在SphU.entry方法中,其主要处理逻辑见下图源码。




标签:SentinelResource,熔断,如何,限流,Sentinel,方法,源码
From: https://blog.51cto.com/u_13529088/9285441

相关文章

  • 如何阅读芯片手册,裸机驱动开发步骤以及纯汇编实现点灯,汇编结合c点灯,c实现点灯
    一.如何阅读芯片手册(datasheet)     作为嵌入式学习者,如何去阅读芯片手册是重中之重。不管是什么芯片手册,在写的怎么天花乱坠,它的本质也就是使用说明书。     可是问题来了,它Y的是本英语的说明书,但是英语不好的友友们不要过于焦虑,我们现在有了很好的翻译软件......
  • 如何选择既安全 同时让业务部门满意的跨网文件安全交换系统?
    企业进行网络隔离后,需要专业的跨网文件交换平台,而一般情况下,企业的IT部门和业务部门在跨网文件交换平台上的需求是不同的:1、业务部门在文件交换方面通常更注重功能性、实用性和效率。他们需要系统具备丰富的功能,能够满足各种业务需求;同时要求系统易于使用,能够快速上手,减少培训和......
  • Mysql死锁问题如何排查和解决
    Mysql查询是否存在锁表有多种方式,这里只介绍一种最常用的。1、查看正在进行中的事务SELECT*FROMinformation_schema.INNODB_TRX2、查看正在锁的事务SELECT*FROMINFORMATION_SCHEMA.INNODB_LOCKS;3、查看等待锁的事务SELECT*FROMINFORMATION_SCHEMA.INNODB_LOCK_......
  • 如何实现数据库读一致性
    1导读数据的一致性是数据准确的重要指标,那如何实现数据的一致性呢?本文从事务特性和事务级别的角度和大家一起学习如何实现数据的读写一致性。2一致性1.数据的一致性:通常指关联数据之间的逻辑关系是否正确和完整。举个例子:某系统实现读写分离,读数据库是写数据库的备份库,小李......
  • 高新制造业如何实现便捷安全的数据摆渡?
    高新制造业是当前世界各国竞相发展的重点领域,也是我国“十四五”规划和2035年远景目标纲要中重点发展的产业之一。发展高新制造业对于推动我国经济高质量发展、提升国际竞争力和实现产业升级具有重要意义。数据对于高新制造业来说至关重要,企业的正常生产运营均离不开数据,高新制......
  • 如何给shopify的URL做301跳转
    很多shopify的运营者或者推广者由于缺货或者货物变更,又或者自己更换了使用的主题,导致自己的URL结构发生了变化,由于不想浪费掉自己原有URL的流量,就想做个301跳转,让自己新的网址来承接原有的流量。接下来给大家介绍下如何给自己的URL做301跳转。首先你要在后台先访问你的所要修改......
  • 面试题:AtomicInteger底层是如何实现的?
    有过Java面试经验的同学,可能很多都被问过这样一个问题:说一说AtomicInteger底层是如何实现的。废话不多说,源码先贴出来:publicfinalintgetAndAddInt(Objectvar1,longvar2,intvar4){intvar5;do{var5=this.getIntVolatile(var1,var2);}whil......
  • 一个excel文件,我用pandas如何取行,只能用pandas?
    大家好,我是皮皮。一、前言前几天在Python白银交流群粉丝问了一个Pandas数据筛选的问题。问题如下:我突然想到,如果一个excel文件,我用pandas如何取行,只能用pandas。二、实现过程后来【月神】给了一个思路和代码如下:其实粉丝之前也问了一个类似的花式索引的问题,可能时就间太久......
  • C++:GDAL中CreateCopy()函数生成的栅格图像如何修改波段数?
      本文介绍基于C++语言GDAL库,为CreateCopy()函数创建的栅格图像添加更多波段的方法。  在C++语言的GDAL库中,我们可以基于CreateCopy()函数与Create()函数创建新的栅格图像文件。其中,CreateCopy()函数需要基于一个已有的栅格图像文件作为模板,将模板文件的各项属性信息(例如空......
  • 如何将python上调试好的whisper部署到微信小程序上
    如何将Python上调试好的Whisper部署到微信小程序上引言随着智能手机的普及和移动互联网的快速发展,微信小程序成为了一个非常热门的应用开发平台。Python作为一门非常流行的编程语言,拥有丰富的第三方库和强大的调试功能。本文将介绍如何将Python上调试好的Whisper部署到微信小程序......