1. 为什么需要sentinel
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。在分布式系统里,许多服务之间通过远程调用实现信息交互,调用时不可避免会出现调用失败,比如超时、异常等原因导致调用失败,Sentinel能够保证在一个服务出问题的情况下,不会导致整体服务失败,避免级联故障(服务雪崩),以提高分布式系统的弹性。
比如电商中的用户下订单,我们有两个服务,一个下订单服务,一个查询商品服务,当用户下订单时调用下订单服务,然后下订单服务又调用查询商品服务,如果查询商品服务响应延迟或者没有响应,则会造成下订单服务的线程挂起等待,
如果大量的用户请求下订单,或导致大量的请求堆积,引起下订单服务也不可用,如果还有另外一个服务依赖于订单服务,比如用户服务,它需要查询用户订单,那么用户服务查询订单也会引起大量的延迟和请求堆积,导致用户服务也不可用。所以在微服务架构中,很容易造成服务故障的蔓延,引发整个微服务系统瘫痪不可用。
常用的容错方案或思想
1、超时,设置比较短的超时时间,调用不成功,很短时间就释放线程,避
免大量线程堵塞等待,导致服务cpu、内存等资源飙高;(快速失败)
2、限流,超过设置的阈值就拒绝,比如评估系统的QPS是3000,那么就
可以设置限流阈值是2800;
3、断路器,熔断器也有叫断路器,他们表示同一个意思,最早来源于微服
务之父Martin Fowler 的论文CircuitBreaker 一文,“熔断器”本身是一种开
关装置,用于在电路上保护线路过载,当线路中有电器发生短路时,能够
及时切断故障电路,防止发生过载、发热甚至起火等严重后果。
Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个
维度保护服务的稳定性。
Sentinel 具有以下特征:
丰富的应用场景:Sentinel 承接了阿里巴巴近 12 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范
围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。
完备的实时监控:Sentinel 同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况
广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入 Sentinel。
完善的 SPI 扩展点:Sentinel 提供简单易用、完善的 SPI 扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。
添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibabasentinel</artifactId>
</dependency>
配置文件
Spring:
cloud:
sentinel:
transport:
dashboard: localhost:8080
定义规则
Sentinel的所有规则都可以在内存态中动态地查询及修改,修改之后立即生效。同时Sentinel 也提供相关API,供您来定制自己的规则策略。
Sentinel支持以下几种规则:流量控制规则、熔断降级规则、系统保护规则、来源访问控制规则和热点参数规则。