当前位置:首页 > 科技  > 软件

Sentinel原理介绍,你学会了吗?

来源: 责编: 时间:2023-10-06 19:16:36 205观看
导读今日目标理解Sentinel原理之前已经介绍了雪崩产生原因和解决方式,那么这些解决方式如何落地?现在支持SpringCloud微服务保护技术一般都是:Hystrix和Sentinle,早期比较流行的是Hystrix框架,但目前国内实用最广泛的还是阿

今日目标

  • 理解Sentinel原理

之前已经介绍了雪崩产生原因和解决方式,那么这些解决方式如何落地?现在支持SpringCloud微服务保护技术一般都是:Hystrix和Sentinle,早期比较流行的是Hystrix框架,但目前国内实用最广泛的还是阿里巴巴的Sentinel框架,我们对这两种常见技术进行对比:RrK28资讯网——每日最新资讯28at.com


RrK28资讯网——每日最新资讯28at.com

SentinelRrK28资讯网——每日最新资讯28at.com

HystrixRrK28资讯网——每日最新资讯28at.com

隔离策略RrK28资讯网——每日最新资讯28at.com

信号量隔离
RrK28资讯网——每日最新资讯28at.com

线程池隔离/信号量隔离
RrK28资讯网——每日最新资讯28at.com

熔断降级策略RrK28资讯网——每日最新资讯28at.com

基于慢调用比例或异常比例
RrK28资讯网——每日最新资讯28at.com

基于失败比率
RrK28资讯网——每日最新资讯28at.com

实时指标实现
RrK28资讯网——每日最新资讯28at.com

滑动窗口
RrK28资讯网——每日最新资讯28at.com

滑动窗口(基于 RxJava)
RrK28资讯网——每日最新资讯28at.com

规则配置
RrK28资讯网——每日最新资讯28at.com

支持多种数据源
RrK28资讯网——每日最新资讯28at.com

支持多种数据源
RrK28资讯网——每日最新资讯28at.com

扩展性
RrK28资讯网——每日最新资讯28at.com

多个扩展点
RrK28资讯网——每日最新资讯28at.com

插件的形式
RrK28资讯网——每日最新资讯28at.com

基于注解的支持
RrK28资讯网——每日最新资讯28at.com

支持
RrK28资讯网——每日最新资讯28at.com

支持
RrK28资讯网——每日最新资讯28at.com

限流RrK28资讯网——每日最新资讯28at.com

基于 QPS,支持基于调用关系的限流
RrK28资讯网——每日最新资讯28at.com

有限的支持
RrK28资讯网——每日最新资讯28at.com

流量整形RrK28资讯网——每日最新资讯28at.com

支持慢启动、匀速排队模式
RrK28资讯网——每日最新资讯28at.com

不支持
RrK28资讯网——每日最新资讯28at.com

系统自适应保护
RrK28资讯网——每日最新资讯28at.com

支持
RrK28资讯网——每日最新资讯28at.com

不支持
RrK28资讯网——每日最新资讯28at.com

控制台RrK28资讯网——每日最新资讯28at.com

开箱即用,可配置规则、查看秒级监控、机器发现等
RrK28资讯网——每日最新资讯28at.com

不完善
RrK28资讯网——每日最新资讯28at.com

常见框架的适配
RrK28资讯网——每日最新资讯28at.com

Servlet、Spring Cloud、Dubbo、gRPC  等
RrK28资讯网——每日最新资讯28at.com

Servlet、Spring Cloud Netflix
RrK28资讯网——每日最新资讯28at.com

在种种差异中,我们重点关注加粗标注的部分:RrK28资讯网——每日最新资讯28at.com

隔离策略:RrK28资讯网——每日最新资讯28at.com

  • 线程池隔离:同上述线程隔离案例,给不同业务分配不同线程池,这种方案可以杜绝雪崩问题;但是因为tomcat之外的线程池开销也使得系统开销增加,频繁的上下文切换将给系统性能带来额外的损失。
  • 信号量隔离:不会给业务单独创建线程池(统一使用tomcat一个容器),而是限制每个业务能使用的线程数量。统计当前业务使用的线程数,当达到指定数量后(类似计数器)触发隔离。相较于线程池隔离性差一点。

熔断降级策略RrK28资讯网——每日最新资讯28at.com

  • 慢调用比例/异常比例/异常数:统计调用中慢性能的比例、异常的比例、或异常数量均可触发熔断降级。
  • 失败比例:只能根据异常请求比例触发熔断降级策略。

限流:RrK28资讯网——每日最新资讯28at.com

  • 基于QPS/调用链路:基于调用的QPS、调用链路都可以做到限流。
  • 有限的控制:没有专门的限流方案,基于线程池隔离做的,线程池有多少线程数就限制到多少。

流量整形:RrK28资讯网——每日最新资讯28at.com

  • 慢调用/排队等待:避免突发流量的暴增而引起系统崩溃,而Hystrix则没有解决方案

控制台:RrK28资讯网——每日最新资讯28at.com

  • Sentinel有较为完善的控制台,界面化操作实时生效,而Hystrix只能查看一下服务状态,不可动态调整。

对比可以发现Hystrix的重点在于隔离、熔断为主的容错机制,而Sentinel的侧重点在于:多样化的流量控制、熔断降级、系统保护、实时监控和控制台。同时基于HyStrix停止维护,加上Sentinel在阿里巴巴经过双十一的高峰流量验证,目前国内主流保护还是选择了后者。因为后续的章节中我们也将借助于Sentinel为大家实践微服务保护相关的知识点。RrK28资讯网——每日最新资讯28at.com

1. Sentinel基本概念

资源

资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。在接下来的文档中,我们都会用资源来描述代码块。RrK28资讯网——每日最新资讯28at.com

只要通过 Sentinel API 定义的代码,就是资源,能够被 Sentinel 保护起来。大部分情况下,可以使用方法签名,URL,甚至服务名称作为资源名来标示资源。RrK28资讯网——每日最新资讯28at.com

规则RrK28资讯网——每日最新资讯28at.com

围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。RrK28资讯网——每日最新资讯28at.com

2.Sentinel 功能和设计理念

2.1 流量控制

流量控制在网络传输中是一个常用的概念,它用于调整网络包的发送数据。然而,从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。Sentinel 作为一个调配器,可以根据需要把随机的请求调整成合适的形状,如下图所示:RrK28资讯网——每日最新资讯28at.com

图片图片RrK28资讯网——每日最新资讯28at.com

流量控制有以下几个角度:RrK28资讯网——每日最新资讯28at.com

  • 资源的调用关系,例如资源的调用链路,资源和资源之间的关系;
  • 运行指标,例如 QPS、线程池、系统负载等;
  • 控制的效果,例如直接限流、冷启动、排队等。

Sentinel 的设计理念是让您自由选择控制的角度,并进行灵活组合,从而达到想要的效果。RrK28资讯网——每日最新资讯28at.com

2.2 熔断降级

什么是熔断降级RrK28资讯网——每日最新资讯28at.com

除了流量控制以外,降低调用链路中的不稳定资源也是 Sentinel 的使命之一。由于调用关系的复杂性,如果调用链路中的某个资源出现了不稳定,最终会导致请求发生堆积。这个问题和 Hystrix 里面描述的问题是一样的。RrK28资讯网——每日最新资讯28at.com

图片图片RrK28资讯网——每日最新资讯28at.com

Sentinel 和 Hystrix 的原则是一致的: 当调用链路中某个资源出现不稳定,例如,表现为 timeout,异常比例升高的时候,则对这个资源的调用进行限制,并让请求快速失败,避免影响到其它的资源,最终产生雪崩的效果。RrK28资讯网——每日最新资讯28at.com

熔断降级设计理念

在限制的手段上,Sentinel 和 Hystrix 采取了完全不一样的方法。RrK28资讯网——每日最新资讯28at.com

Hystrix 通过线程池的方式,来对依赖(在我们的概念中对应资源)进行了隔离。这样做的好处是资源和资源之间做到了最彻底的隔离。缺点是除了增加了线程切换的成本,还需要预先给各个资源做线程池大小的分配。RrK28资讯网——每日最新资讯28at.com

Sentinel 对这个问题采取了两种手段:RrK28资讯网——每日最新资讯28at.com

1.通过并发线程数进行限制RrK28资讯网——每日最新资讯28at.com

和资源池隔离的方法不同,Sentinel 通过限制资源并发线程的数量,来减少不稳定资源对其它资源的影响。这样不但没有线程切换的损耗,也不需要您预先分配线程池的大小。当某个资源出现不稳定的情况下,例如响应时间变长,对资源的直接影响就是会造成线程数的逐步堆积。当线程数在特定资源上堆积到一定的数量之后,对该资源的新请求就会被拒绝。堆积的线程完成任务后才开始继续接收请求。RrK28资讯网——每日最新资讯28at.com

2.通过响应时间对资源进行降级RrK28资讯网——每日最新资讯28at.com

除了对并发线程数进行控制以外,Sentinel 还可以通过响应时间来快速降级不稳定的资源。当依赖的资源出现响应时间过长后,所有对该资RrK28资讯网——每日最新资讯28at.com

系统负载保护

Sentinel 同时提供系统维度的自适应保护能力。防止雪崩,是系统防护中重要的一环。当系统负载较高的时候,如果还持续让请求进入,可能会导致系统崩溃,无法响应。在集群环境下,网络负载均衡会把本应这台机器承载的流量转发到其它的机器上去。如果这个时候其它的机器也处在一个边缘状态的时候,这个增加的流量就会导致这台机器也崩溃,最后导致整个集群不可用。RrK28资讯网——每日最新资讯28at.com

针对这个情况,Sentinel 提供了对应的保护机制,让系统的入口流量和系统的负载达到一个平衡,保证系统在能力范围之内处理最多的请求。RrK28资讯网——每日最新资讯28at.com

2.3. Sentinel 是如何工作的

Sentinel 的主要工作机制如下:RrK28资讯网——每日最新资讯28at.com

  • 对主流框架提供适配或者显示的 API,来定义需要保护的资源,并提供设施对资源进行实时统计和调用链路分析。
  • 根据预设的规则,结合对资源的实时统计信息,对流量进行控制。同时,Sentinel 提供开放的接口,方便您定义及改变规则。
  • Sentinel 提供实时的监控系统,方便您快速了解目前系统的状态。

RrK28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-12092-0.htmlSentinel原理介绍,你学会了吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Python 3.12 版本正式推出:f-string 解析改进,整体性能提升 5%

下一篇: Java中定时任务调度不准确或执行异常,导致计划任务失败

标签:
  • 热门焦点
Top