一、什么是sentinel

随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。

二、Sentinel 具有以下特征:

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

  • 完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。

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

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

Sentinel 的主要特性:在这里插入图片描述
Sentinel 的开源生态:
在这里插入图片描述

三、sentinel与Hystrix 对比

Sentinel 和 Hystrix 都是基于熔断器模式。都支持基于异常比率来进行熔断,但 Sentinel 更强大,可以基于响应时间、异常比率和异常数来进行熔断降级。

1、隔离设计上对比

Hystrix
Hystrix 提供两种隔离策略,线程池隔离和信号量隔离。

Hystrix 中最推荐的也是最常用的是线程池隔离。线程池隔离的好处是隔离度很高,不会影响其他资源,但是线程本身也有自己的问题,线程上下文切换时比较耗 CPU 资源的,如果对低延时要求比较高,影响还是挺大的,而且创建线程是需要分配内存的,创建的线程越多,需要分配的内存也会更多。而且如果对每个资源都创建一个线程池,那线程切换会带来更大的损耗。

而 Hystrix 的信号量隔离,可以对某个资源调用的并发数进行限制,轻量级的,不用显式创建线程池,但缺点是不能对慢调用进行自动降级,只能等客户端那边超时,还是有可能出现级联阻塞的情形。

Sentinel
Sentinel 可以通过并发线程数模式的流量控制来提供信号量隔离的功能,而且它还具备响应时间的熔断降级模式,防止过多的慢调用占满并发数而影响整个系统。

2、熔断降级的对比

Sentinel 和 Hystrix 都是基于熔断器模式。都支持基于异常比率来进行熔断,但 Sentinel 更强大,可以基于响应时间、异常比率和异常数来进行熔断降级。

3、实时统计的对比

Sentinel 和 Hystrix 都是基于滑动窗口进行实时统计,但 Hystrix 是基于 RxJava 的事件驱动模型,在服务调用成功/失败/超时的时候发布响应的事件,通过一系列的变换和聚合最终得到实时的指标统计数据流,可以被熔断器或 Dashboard 消费。而 Sentinel 是基于 LeapArray 的滑动窗口。

SentinelHystrix
隔离策略信号量隔离线程池隔离/信号量隔离
熔断降级策略基于响应时间或失败比率基于失败比率
实时指标实现滑动窗口滑动窗口(基于 RxJava)
规则配置支持多种数据源支持多种数据源
扩展性多个扩展点插件的形式
基于注解的支持支持支持
限流基于 QPS,支持基于调用关系的限流不支持
流量整形支持慢启动、匀速器模式不支持
系统负载保护支持不支持
控制台开箱即用,可配置规则、查看秒级监控、机器发现等不完善
常见框架的适配Servlet、Spring Cloud、Dubbo、gRPCServlet、Spring Cloud Netflix

四、部署sentinel dashboard

sentinel dashboard 官网说明

docker hub地址

我这里启动镜像是

docker pull bladex/sentinel-dashboard:1.8.0

端口如下图查看
在这里插入图片描述

docker run --name sentinelDashboard -d -p 8858:8858 镜像id

在这里插入图片描述
官网配置说明地址

部署成功后:http://localhost:8858,帐号密码登陆
在这里插入图片描述

五、Springcloud项目配置

  • jar包

    • 父工程引入alibaba cloud
      <!-- 版本根据cloud版本来决定 -->
      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-alibaba-dependencies</artifactId>
          <version>${spring.cloud.alibaba.version}</version>
          <type>pom</type>
          <scope>import</scope>
      </dependency>
      
      版本对应关系
      在这里插入图片描述
    • 子工程
      <!-- 阿里巴巴流量卫兵 -->
      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
      </dependency>
      
  • 配置文件,直接配置dashboard项目地址

    spring:
      cloud:
        sentinel:
          transport:
            dashboard: localhost:8858
    
  1. 实时监控:时时显示qps信息
    在这里插入图片描述
  2. 簇点链路:所有接口信息,及常用规则设置
    在这里插入图片描述
  3. 规则需要在对应的方法上设置后才会限制到规则列表中
    在这里插入图片描述

六、sentinel保护说明

  • sentinel starter 依赖默认情况下就会为所有的HTTP服务提供埋点,就是把请求的url 加入到sentinel监控中所以在springboot 中的Controller都可以受到Sentinel的保护;

  • 可以通过如下配置关闭对微服务的保护:

    #关闭sentinel对controller的url的保护
    spring.cloud.sentinel.filter.enabled=false

  • 可以通过@SentinelResource(value = “app”)注解保护应用;

    属性作用是否必须
    value资源名称
    entryTypeentry类型,标记流量的方向,取值IN/OUT,默认是OUT
    blockHandler处理BlockException的函数名称。函数要求:1. 必须是 public;2.返回类型与原方法一致;3. 参数类型需要和原方法相匹配,并在最后加 BlockException 类型的参数。;4. 默认需和原方法在同一个类中。若希望使用其他类的函数,可配置 blockHandlerClass ,并指定blockHandlerClass里面的方法。
    blockHandlerClass存放blockHandler的类。对应的处理函数必须static修饰,否则无法解析,其他要求:同blockHandler。
    fallback用于在抛出异常的时候提供fallback处理逻辑。fallback函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。函数要求: 1. 返回类型与原方法一致;2. 参数类型需要和原方法相匹配,Sentinel 1.6开始,也可在方法最后加 Throwable 类型的参数;3.默认需和原方法在同一个类中。若希望使用其他类的函数,可配置 fallbackClass ,并指定fallbackClass里面的方法。
    fallbackClass存放fallback的类。对应的处理函数必须static修饰,否则无法解析,其他要求:同fallback。
    defaultFallback用于通用的 fallback 逻辑。默认fallback函数可以针对所有类型的异常(除了 exceptionsToIgnore 里面排除掉的异常类型)进行处理。若同时配置了 fallback 和 defaultFallback,以fallback为准。函数要求: 1. 返回类型与原方法一致 ;2. 方法参数列表为空,或者有一个 Throwable 类型的参数;3. 默认需要和原方法在同一个类中。若希望使用其他类的函数,可配置 fallbackClass ,并指定 fallbackClass 里面的方法。
    exceptionsToIgnore指定排除掉哪些异常。排除的异常不会计入异常统计,也不会进入fallback逻辑,而是原样抛出。
    exceptionsToTrace需要trace的异常Throwable

官网

更多内容请关注下一章节

!!!!SpringCloudAlibaba项目集成代码示例!!!

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐