Sentinel记录

    科技2025-09-07  39

    1.服务雪崩

    分布式系统环境下, 通常有多层的服务调用,当由于网络原因或者自身的原因,导致服务不可用,调用这个服务就会出现线程阻塞的情况,若有大量请求涌入,导致服务瘫痪。

    由于服务与服务的依赖性,故障会传播,不可用请求调用链向上传递,导致整个微服务系统瘫痪。

    1.1常见的容错方案

    隔离、超时、限流、熔断、降级

    隔离:将系统按照一定原则划分为若干个服务模块,各个模块相互独立,无强依赖。当发生故障,将问题和影响隔离在某个模块内部,不影响整体的系统服务。

    线程池隔离和信号量隔离

    超时:设置一个最大响应时间,若服务调用超出响应时间则断开请求,释放线程。

    限流:限定阈值,请求超过阈值则抛弃或者排队处理。

    熔断:当下游服务因访问压力过大而响应慢或失败时,上游服务暂时切断对下游服务的调用,以免影响其他服务的运行

    降级:为服务提供一个备用方案,一旦服务无法正常调用就执行备用方案。

    2.Sentinel

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

    2.1Sentinel 的特征

    丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控:Sentinel 提供了实时的监控功能。通过控制台可以看到接入应用的单台机器秒级数据,甚至 500 台以下规模的集群的汇总运行情况。广泛的开源生态:Sentinel 提供开箱即用的与其它开源框架/库的整合模块,例如与 SpringCloud、Dubbo、gRPC 的整合。只需要引入相应的依赖并进行简单的配置即可快速地接入Sentinel。完善的扩展点:Sentinel 提供简单易用、完善的扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。

    2.2Sentinel 的组成

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

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

    3.OpenFeign整合Sentinel

    3.1引入sentinel的依赖

    <!--服务容错--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>

    3.2开启Sentinel支持

    feign: sentinel: enabled: true

    3.3创建容错类

    @Service @Slf4j public class OssFileServiceFallBack implements OssFileService { @Override public R test() { return R.error(); } @Override public R removeFile(String url) { log.info("熔断保护"); return R.error(); } }

    3.4指定容错类

    @Service @FeignClient(value = "service-oss", fallback = OssFileServiceFallBack.class) public interface OssFileService {
    Processed: 0.011, SQL: 9