Sentinel

Alibaba Sentinel 简介

1、概览 Sentinel,哨兵。顾名思义,它是微服务的强大守护者。它提供流量控制、并发限制、熔断和自适应系统保护等功能,以确保微服务的可靠性。它是一个开源组件,由阿里巴巴集团积极维护。此外,它还是 Spring Cloud Circuit Breaker 的官方组成部分。 本文将带你了解 Alibaba Sentinel 的核心功能,包括的流量控制、熔断器和自适应系统保护,以及它的注解支持和监控仪表盘。 2、功能 2.1、流量控制 Sentinel 控制随机传入请求的速度,以避免微服务超载。这可确保服务不会因流量激增而瘫痪。它支持各种流量整形策略。当每秒查询次数(QPS)过高时,这些策略会自动将流量调整为适当的形状。 这些流量整形策略包括: 直接拒绝模式(Direct Rejection Mode)- 当每秒请求数超过设定阈值时,它会自动拒绝后续的请求。 慢启动预热模式(Slow Start Warm-Up Mode) - 如果有突发的流量激增,此模式确保请求计数逐渐增加,直到达到上限为止。 2.2、熔断和降级 当一个服务同步调用另一个服务时,另一个服务有可能因某种原因宕机。在这种情况下,线程会被阻塞,因为它们一直在等待另一个服务的响应。这会导致资源耗尽,调用方服务也将无法处理更多请求。这就是所谓的级联效应,可能会导致整个微服务架构崩溃。 为了防止出现这种情况,引入了熔断器(Circuit Breaker)。它会立即阻止对其他服务的所有后续调用。在超时时间过后,一些请求会通过。如果请求成功,熔断器就会恢复正常流量。否则,超时时间将重新开始计时。 Sentinel 利用最大并发限制原理实现熔断。它通过限制并发线程的数量来减少不稳定资源的影响。 Sentinel 也会将不稳定的资源降级。当资源的响应时间过长时,对资源的所有调用都将在指定的时间窗口内被拒绝。这样可以防止调用变得非常缓慢,从而导致连锁效应。 2.3、自适应系统保护 Sentinel 会在系统负载过高时保护服务器。它使用 load1(系统负载)作为启动流量控制的指标。在以下情况下,请求将被阻止: 当前系统负载(load1) > 临界值(highestSystemLoad)。 当前并发请求(线程数) > 预计容量(最短响应时间 * 最大 QPS) 3、用法 3.1、添加 Maven 依赖 在 pom.xml 中添加 sentinel-core 依赖: <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-core</artifactId> <version>1.8.0</version> </dependency> 3.2、定义资源 使用 Sentinel API 在 try-catch 块中定义资源和相应的业务逻辑: try (Entry entry = SphU.