Sentinel 是阿里巴巴开源的一款面向分布式系统的高可用防护组件,主要以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度帮助开发者保障微服务的稳定性。Sentinel 在阿里巴巴内部被广泛应用于高并发场景,能够有效应对流量洪峰和依赖服务故障。
Sentinel 的核心功能包括以下几个方面:
流量控制(Flow Control)
通过限制流量,防止系统过载,支持基于 QPS(每秒查询量)和线程数的流量控制。
熔断降级(Circuit Breaker)
当依赖服务出现故障时,自动熔断调用,避免故障扩散,保护上游服务。
系统负载保护(System Protection)
根据系统负载(如 CPU 使用率、线程池使用率等)进行保护,防止系统过载。
热点参数限流(Hotspot Param Flow Control)
对特定参数进行限流,避免某些高频参数导致系统过载。
实时监控与动态规则配置
提供 Dashboard,支持实时监控和动态修改规则。
Sentinel 的熔断降级功能是其核心特性之一。它通过以下机制实现熔断:
Sentinel 适用于以下场景:
以下是一个基于 Spring Cloud Alibaba 的 Sentinel 使用示例,展示如何在 Java 微服务中实现熔断降级。
在 pom.xml
中添加 Sentinel 和 Spring Cloud Alibaba 的依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
在 application.yml
中配置 Sentinel 的基本参数:
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8080 # Sentinel Dashboard 地址
在代码中定义熔断规则:
import com.alibaba.csp.sentinel.annotation.SentinelResource;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule;
import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRuleManager;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class SentinelService {
// 定义熔断规则
static {
List<DegradeRule> rules = new ArrayList<>();
DegradeRule rule = new DegradeRule();
rule.setResource("testDegrade");
rule.setCount(1); // 当1秒内异常数超过1时触发熔断
rule.setTimeWindow(10); // 熔断10秒
rules.add(rule);
DegradeRuleManager.loadRules(rules);
}
@SentinelResource(value = "testDegrade", blockHandler = "handleException")
public String testDegrade() {
// 模拟一个可能失败的调用
if (Math.random() > 0.5) {
throw new RuntimeException("Failed");
}
return "Success";
}
// 熔断后的降级处理方法
public String handleException(BlockException ex) {
return "Fallback: " + ex.getClass().getSimpleName();
}
}
启动服务后,多次调用 testDegrade
方法,观察熔断机制是否生效:
Sentinel 是一个强大的微服务防护组件,通过流量控制、熔断降级和系统保护等功能,能够有效保障系统的高可用性。它在阿里巴巴的生产环境中经过了大规模验证,适合各种高并发和分布式场景。