服务容错之Sentinel

服务容错

  在微服务当中,一个请求经常会设计到调用几个服务,如果其中某个服务不可用,没有做服务容错的话,极有可能会造成一连串的服务不可用,这就是雪崩效应,我们没办法预防雪崩效应的发生,只能尽可能的去做好容错。

服务容错的三个核心思想是:

  • 不被外界环境影响
  • 不被上游请求压垮
  • 不被下游响应拖垮

Sentinel

  Sentinel(分布式系统的流量哨兵)是阿里开源的一套用于服务容错的综合性解决方案,它以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来保护服务的稳定性。

Sentinel有以下几个特征

丰富的应用场景

  Sentinel承接了阿里巴巴近10年的双十一大促流量的核心场景,例如秒杀(突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。

完备的实时监控     

  Sentinel提供了实时监控的功能。通过控制台可以看到接入应用的单台及其秒级数据,甚至500台一下规模的集群的汇总运行。

广泛的开源生态

  Sentinel提供开箱即用的与其它开源框架/库的整合模块,例如Spring Cloud、Dubbo、gRPC的整合。只需要引入相应的依赖并进行简单的配置即可快速地接入Sentinel。

完善的SPI扩展点:Sentinel提供简单易用、完善的SPI扩展接口。您可以通过实现扩展接口来快速的定制逻辑。例如定制规则管理、适配动态数据源等。

Sentinel分为两个部分

  核心库(java客户端)不依赖任何框架/库,能够运行于所有java运行时环境,同时对Dubbo/Spring Cloud等框架也有较好的支持。

  控制台(DashBoard)基于Springboot开发,打包后可以直接运行,不需要额外的Tomcat等应用容器。

Sentinel中的概念

资源:它可以是java程序中的任何内容,可以是一个服务,也可以是一个方法,甚至是一段代码。

规则:规则就是用来定义如何进行保护资源的。主要包括流量控制、熔断降级规则以及系统保护规则。

Sentinel三个功能

流量控制

用于调整网络包的发送数据。任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。

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

熔断降级

当检测到调用链路中某个资源出现不稳定的表现,例如请求响应时间长或异常比例升高的时候,则对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联故障。

  • 通过并发线程数进行限制,当线程数在特定资源上堆积到一定的数量之后,对该资源的新请求就会被拒绝。堆积的线程完成任务后才开始继续接收请求。
  • 针对慢调用和异常对资源进行降级,当依赖的资源出现响应时间过长后,所有对该资源的访问都会被直接拒绝,直到过了指定的时间窗口之后才重新渐进式地恢复。

系统自适应保护

Sentinel 同时提供系统维度的自适应保护能力。防止雪崩,是系统防护中重要的一环。当系统负载较高的时候,如果还持续让请求进入,可能会导致系统崩溃,无法响应。在集群环境下,网络负载均衡会把本应这台机器承载的流量转发到其它的机器上去。如果这个时候其它的机器也处在一个边缘状态的时候,这个增加的流量就会导致这台机器也崩溃,最后导致整个集群不可用。
针对这个情况,Sentinel 提供了对应的保护机制,让系统的入口流量和系统的负载达到一个平衡,保证系统在能力范围之内处理最多的请求。

 Sentinel控制台操作

流控规则-流控模式

直接(默认):接口达到限流条件时,开启限流。

关联:当关联的资源达到限流条件时,开启限流 (适合做应用让步)。

链路:当从某个接口过来的资源达到限流条件时,开启限流。

流控规则-流控效果

快速失败(默认): 直接失败,抛出异常,不做任何额外的处理,是最简单的效果

Warm Up:它从开始阈值到最大QPS阈值会有一个缓冲阶段,一开始的阈值是最大QPS阈值的1/3,然后慢慢增长,直到最大阈值,适用于将突然增大的流量转换为缓步增长的场景。

排队等待:让请求以均匀的速度通过,单机阈值为每秒通过数量,其余的排队等待; 它还会让设置一个超时时间,当请求超过超时间时间还未处理,则会被丢弃。

降级规则

平均响应时间:当资源的平均响应时间超过阈值(以ms为单位)之后,资源进入准降级状态。如果接下来1s内持续进入5个请求,他们的RT都持续超过这个阈值,那么在接下来的时间窗口(以s为单位)之内,就会对这个方法进行服务降级。

异常比例:当资源的每秒异常总数占通过量的比值超过阈值之后,资源进入降级状态,即在接下来的时间窗口(以s为单位)之内,对这个方法的调用会自动返回。异常比率的阈值范围是0.0到1.0。

热点规则

热点参数流控规则是一种更细颗粒度的流控规则,它允许将规则具体到参数上。

原文地址:https://www.cnblogs.com/guanghe/p/13827050.html