Sentinel如何拦截异常流量


这篇文章主要介绍“Sentinel如何拦截异常流量”,在日常操作中,相信很多人在Sentinel如何拦截异常流量问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Sentinel如何拦截异常流量”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!各位在家里用电的过程中,一定也经历过「跳闸」。这个「」就是在电量超过负荷的时候用来保护我们用电安全的,也被称为「断路器」,还有个响亮的英文名 — CircuitBreaker。
和用电安全一样,对于「限流」、「降级」、「熔断」…,你我应该也都耳熟能详。我们开发的各类软件、系统、互联网应用等为了不被异常流量压垮,也需要一个断路器。
在 Spring 应用中,使用断路器很方便,我们可以使用 Spring Cloud CircuitBreaker。
Spring Cloud Circuit Breaker 是啥?如果你熟悉 Spring 是什么人的话,你能猜个八九不离十。和Spring Data JPA 这些类似,Spring 他又搞了个抽象的,标准的API 出来。这次他抽象的是关于降级熔断的「断路器」。有了这一层,具体实现是谁可以方便的更换,我们使用的代码里改动基本为0。我们先来从官方Demo有个初步印象:千言万语,总结出来这样一句circuitBreakerFactory.create("delay").run()因为是抽象,对应的实现就有好多种啦。目前支持的实现有:HystrixResilience4jSentinelSpring Retry而抽象相当于定了个标准,像JDBC一样,无论我们把数据库换成了MySQL,Oracle 还是SQLite,接口等非特定类型的代码都不需要改变。断路器也一样。这里的断路器工厂,创建方法都是标准的。具体这里执行业务逻辑的时候断路器实现要怎样进行拦截降级,就可以交给具体的实现来完成。这次,我们以开源的 Sentinel 为例,来看看他们是怎样拦住异常流量的。首先,因为是Spring Cloud,所以还会基于 Spring Boot 的 Autoconfiguration。以下是配置类,我们看到生成了一个工厂。在我们实际代码执行逻辑的时候,create 出来的是什么呢?是个断路器 CircuitBreaker,用来执行代码。包含两个执行的方法,需要在的时候可以指定fallback逻辑。具体到 Sentinel 是这样的:你会看到创建了一个SentinelCircuitBreaker。我们的业务逻辑,就会在这个断路器里执行,run方法就是各个具体实现的舞台。OK,到此为止, Spring Cloud CircuitBreaker 已经展现完了。其它的细节都放到了具体实现的「盒子」里。下面我们把这个盒子打开。Sentinel 是个熔断降级框架,官方这样自我介绍:面向分布式服务架构的高可用流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助用户保障微服务的稳定性。官网的这张代码截图简洁的说明了他是怎样工作的挡在业务代码的前面,有事儿先冲它来,能通过之后才走业务逻辑,和各类闯关还真类似。
在上面CircuitBreaker 的 run 方法里,咱们一定都注意到了这句这就是一切拦截的秘密。
无论我们是通过前面的CircuitBreaker的方式,还是@SentinelResource 这种注解形式,还是通过 Interceptor 的方式,没什么本质区别。只是触发点不一样。最后都是通过SphU来搞定。
既然是拦截,那一定要拦下来做这样或那样的检查。实际检查的时候,entry 里核心代码有这些:注意这里的ProcessorSlotchain = lookProcessChain(resourceWrapper);会在请求过来处理的时候,如果未初始化处理链,则进行初始化,将各种first,next设置好,后面的请求都会按这个来处理。所有需要拦截的Slot,都会加到这个 chain 里面,再逐个执行 chain 里的 slot。和Servlet Filter 类似。chain里都加了些啥呢?初始的时候,first 指向一个匿名内部类,这些加进来的slot,会在每次addLast的时候,做为链的next,而每个 slot,有自己的特定用处,处理完自己的逻辑之后,会通过 fireEntry 来触发下一个 slot的执行。
给你一张长长的线程调用栈就会过分的明显了:
降级有三种类型
每种类型,都会根据对应的配置项数据比对,不符合就中断,中断之后也不能一直断着,啥时候再恢复呢?就根据配置的时间窗口,会启动一个恢复线程,到时间就会调度,把中断标识恢复。
恢复做了两件事:一、把passCount设置成0,二、中断标识还原
上面介绍了对请求的拦截处理,这其中最核心的,也就是我们最主要配置的,一个是「流控」,一个是「降级」。这两个对应的Slot,会在处理请求的时候,根据配置好的 「规则」rule 来判断。比如我们上面看到的时间 香港云主机窗口、熔断时间等,以及流控的线程数,QPS数这些。这些规则默认的配置在内存里,也可以通过不同的数据源加载进来。同时启用了Sentinel 控制台的话,在控制台 也可以配置规则。这些规则,会通过 HTTP 发送给对应使用了 sentinel 的应用实例节点。收到更新内容后,实例里的「规则管理器」会重新加载一次 rule,下次请求处理就直接生效了。到此,关于“Sentinel如何拦截异常流量”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注开发云网站,小编会继续努力为大家带来更多实用的文章!

相关推荐: Python的方括号、花括号和圆括号怎么使用

本篇内容介绍了“Python的方括号、花括号和圆括号怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!方括号几乎是所有编程语言的第一符号。这里的第一,并不是…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 10/09 22:22
Next 10/09 22:23

相关推荐