Sentinel 核心术语
介绍
Sentinel 是阿里巴巴开源的一款轻量级流量控制组件,主要用于实现微服务架构中的流量控制、熔断降级、系统负载保护等功能。为了更好地理解和使用 Sentinel,我们需要先掌握其核心术语。这些术语是 Sentinel 实现流量控制的基础,理解它们将帮助你更高效地使用 Sentinel。
核心术语
1. 资源(Resource)
在 Sentinel 中,资源 是流量控制的基本单位。资源可以是任何需要保护的逻辑单元,例如一个方法、一个接口、一个服务等。Sentinel 通过定义资源来实现对特定逻辑单元的流量控制。
// 示例:定义一个资源
try (Entry entry = SphU.entry("myResource")) {
// 被保护的逻辑
} catch (BlockException ex) {
// 处理被限流或降级的逻辑
}
在上面的代码中,myResource
就是一个资源。Sentinel 会根据配置的规则对这个资源进行流量控制。
2. 规则(Rule)
规则 是 Sentinel 中用于定义流量控制策略的配置。Sentinel 提供了多种规则类型,包括流量控制规则、熔断降级规则、系统负载保护规则等。每种规则都有其特定的配置参数,用于控制资源的访问行为。
// 示例:定义一个流量控制规则
FlowRule rule = new FlowRule();
rule.setResource("myResource");
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule.setCount(10); // 每秒最多允许10次访问
FlowRuleManager.loadRules(Collections.singletonList(rule));
在这个例子中,我们定义了一个流量控制规则,限制 myResource
每秒最多允许 10 次访问。
3. 流量控制(Flow Control)
流量控制 是 Sentinel 的核心功能之一,用于控制资源的访问速率。通过设置流量控制规则,可以限制资源的访问频率,防止系统被过多的请求压垮。
流量控制通常用于保护系统的稳定性,防止因流量突增导致的系统崩溃。
4. 熔断降级(Circuit Breaking)
熔断降级 是 Sentinel 的另一个重要功能,用于在系统出现异常时自动切断对资源的访问,防止异常扩散。熔断降级通常基于资源的响应时间、异常比例等指标进行判断。
// 示例:定义一个熔断降级规则
DegradeRule degradeRule = new DegradeRule();
degradeRule.setResource("myResource");
degradeRule.setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT);
degradeRule.setCount(5); // 当异常数达到5次时触发熔断
degradeRule.setTimeWindow(10); // 熔断持续10秒
DegradeRuleManager.loadRules(Collections.singletonList(degradeRule));
在这个例子中,当 myResource
的异常数达到 5 次时,Sentinel 会触发熔断,并在接下来的 10 秒内拒绝所有对该资源的访问。
5. 系统负载保护(System Load Protection)
系统负载保护 是 Sentinel 用于保护系统整体稳定性的功能。当系统的负载(如 CPU 使用率、平均 RT 等)达到一定阈值时,Sentinel 会自动限制对资源的访问,防止系统过载。
// 示例:定义一个系统负载保护规则
SystemRule systemRule = new SystemRule();
systemRule.setHighestSystemLoad(2.0); // 当系统负载超过2.0时触发保护
SystemRuleManager.loadRules(Collections.singletonList(systemRule));
在这个例子中,当系统的负载超过 2.0 时,Sentinel 会触发系统负载保护,限制对资源的访问。
6. 入口(Entry)
入口 是 Sentinel 中用于标识资源访问的起点。每次对资源的访问都需要通过一个入口,Sentinel 会通过入口来统计资源的访问情况,并根据规则进行流量控制。
// 示例:使用入口访问资源
try (Entry entry = SphU.entry("myResource")) {
// 被保护的逻辑
} catch (BlockException ex) {
// 处理被限流或降级的逻辑
}
在这个例子中,SphU.entry("myResource")
创建了一个入口,Sentinel 会通过这个入口来监控 myResource
的访问情况。
7. 上下文(Context)
上下文 是 Sentinel 中用于存储资源访问的上下文信息。每个资源的访问都会关联一个上下文,Sentinel 会通过上下文来传递一些额外的信息,例如调用链、来源等。
// 示例:创建一个上下文
ContextUtil.enter("myContext", "origin");
try (Entry entry = SphU.entry("myResource")) {
// 被保护的逻辑
} catch (BlockException ex) {
// 处理被限流或降级的逻辑
} finally {
ContextUtil.exit();
}
在这个例子中,我们创建了一个名为 myContext
的上下文,并指定了来源为 origin
。Sentinel 会通过这个上下文来传递额外的信息。
实际案例
假设我们有一个电商系统,其中有一个商品详情接口 getProductDetail
,我们需要对这个接口进行流量控制,防止因流量突增导致的系统崩溃。
// 定义资源
try (Entry entry = SphU.entry("getProductDetail")) {
// 查询商品详情的逻辑
} catch (BlockException ex) {
// 处理被限流或降级的逻辑
}
// 定义流量控制规则
FlowRule rule = new FlowRule();
rule.setResource("getProductDetail");
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule.setCount(100); // 每秒最多允许100次访问
FlowRuleManager.loadRules(Collections.singletonList(rule));
在这个案例中,我们对 getProductDetail
接口进行了流量控制,限制其每秒最多允许 100 次访问。
总结
通过本文,我们了解了 Sentinel 的核心术语,包括资源、规则、流量控制、熔断降级、系统负载保护、入口和上下文。这些术语是 Sentinel 实现流量控制的基础,理解它们将帮助你更高效地使用 Sentinel。
附加资源
练习
- 尝试在你的项目中定义一个资源,并为其设置流量控制规则。
- 模拟高并发场景,观察 Sentinel 的流量控制效果。
- 尝试使用熔断降级规则,保护你的系统免受异常流量的影响。