Sentinel核心概念
Sentinel是阿里巴巴开源的一款轻量级流量控制框架,主要用于保护系统的稳定性和高可用性。它通过定义资源、规则和流量控制策略,帮助开发者应对高并发、流量突增等场景。本文将从核心概念入手,逐步讲解Sentinel的工作原理和使用方法。
什么是Sentinel?
Sentinel的核心思想是通过对系统资源的保护,确保系统在高并发或异常情况下仍能稳定运行。它提供了流量控制、熔断降级、系统负载保护等功能,广泛应用于微服务架构中。
Sentinel的核心概念包括:
- 资源(Resource):需要保护的逻辑单元,例如一个API接口、一个方法或一段代码。
- 规则(Rule):定义资源的行为,例如流量控制规则、熔断规则等。
- 流量控制(Flow Control):通过限制资源的访问量,防止系统过载。
核心概念详解
1. 资源(Resource)
资源是Sentinel中最基本的概念,代表需要保护的逻辑单元。资源可以是任何东西,例如一个HTTP接口、一个 数据库查询或一个方法调用。
在Sentinel中,资源通过SphU.entry()
方法定义。例如:
try (Entry entry = SphU.entry("myResource")) {
// 被保护的逻辑
System.out.println("执行资源逻辑");
} catch (BlockException e) {
// 处理被限流或降级的逻辑
System.out.println("资源被限流");
}
在上面的代码中,myResource
是一个资源名称。Sentinel会根据定义的规则对该资源进行保护。
提示
资源名称应具有唯一性,通常与业务逻辑相关,例如接口路径或方法名。
2. 规则(Rule)
规则定义了资源的行为。Sentinel支持多种规则类型,包括:
- 流量控制规则(FlowRule):限制资源的访问量。
- 熔断规则(DegradeRule):在资源异常时进行熔断降级。
- 系统保护规则(SystemRule):保护系统整体稳定性。
以下是一个流量控制规则的示例:
FlowRule rule = new FlowRule();
rule.setResource("myResource"); // 资源名称
rule.setGrade(RuleConstant.FLOW_GRADE_QPS); // 限流类型(QPS)
rule.setCount(10); // 每秒允许的最大请求数
FlowRuleManager.loadRules(Collections.singletonList(rule));
上述规则表示,myResource
资源每秒最多允许10个请求,超过的请求将被限流。
3. 流量控制(Flow Control)
流量控制是Sentinel的核心功能之一,用于限制资源的访问量,防止系统过载。Sentinel支持多种流量控制策略,包括:
- QPS(每秒查询数):限制每秒的请求量。
- 线程数:限制同时访问资源的线程数。
- 冷启 动:在系统启动时逐步增加流量,避免瞬间高并发。
以下是一个流量控制的示例:
FlowRule rule = new FlowRule();
rule.setResource("myResource");
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule.setCount(5); // 每秒最多5个请求
FlowRuleManager.loadRules(Collections.singletonList(rule));
当请求量超过5 QPS时,Sentinel会拒绝多余的请求,并抛出BlockException
。