跳到主要内容

Sentinel SphU API

介绍

Sentinel 是阿里巴巴开源的一款轻量级流量控制组件,主要用于保护应用系统的稳定性。SphU 是 Sentinel 提供的一个核心 API,用于定义资源点并进行流量控制。通过 SphU,开发者可以轻松地在代码中标记需要保护的资源,并为其配置相应的流量控制规则。

SphUSentinel Protection Hotspot Util 的缩写,它提供了一种简单的方式来定义资源点,并通过 Sentinel 的规则引擎对这些资源进行保护。

基本用法

定义资源点

在 Sentinel 中,资源点是流量控制的基本单位。通过 SphU.entry() 方法,我们可以定义一个资源点,并在其周围包裹需要保护的代码逻辑。

java
try (Entry entry = SphU.entry("resourceName")) {
// 被保护的业务逻辑
doSomething();
} catch (BlockException e) {
// 处理被限流或降级的逻辑
handleBlockException(e);
}

在上面的代码中,resourceName 是资源的名称,SphU.entry() 方法会尝试进入该资源点。如果资源点被限流或降级,SphU.entry() 会抛出 BlockException 异常,开发者可以在 catch 块中处理这些异常。

配置规则

在定义资源点后,我们可以通过 Sentinel 的规则管理 API 来配置流量控制规则。例如,我们可以为 resourceName 配置一个 QPS(每秒查询率)限流规则:

java
FlowRule rule = new FlowRule();
rule.setResource("resourceName");
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule.setCount(10); // 每秒最多允许 10 个请求
FlowRuleManager.loadRules(Collections.singletonList(rule));

在这个例子中,我们为 resourceName 配置了一个 QPS 限流规则,限制每秒最多允许 10 个请求。如果请求超过这个限制,Sentinel 会触发限流逻辑。

实际应用场景

场景 1:保护关键业务逻辑

假设我们有一个电商系统,其中有一个关键的业务逻辑是下单操作。为了保护这个操作不被过多的请求压垮,我们可以使用 SphU 来定义资源点并进行限流。

java
public void placeOrder(Order order) {
try (Entry entry = SphU.entry("placeOrder")) {
// 下单逻辑
orderService.processOrder(order);
} catch (BlockException e) {
// 处理限流逻辑
throw new ServiceException("系统繁忙,请稍后再试");
}
}

在这个例子中,我们为 placeOrder 资源点配置了一个限流规则,确保下单操作不会因为过多的请求而崩溃。

场景 2:保护外部服务调用

在微服务架构中,服务之间的调用非常频繁。为了保护外部服务不被过多的请求压垮,我们可以使用 SphU 来保护这些调用。

java
public String callExternalService(String url) {
try (Entry entry = SphU.entry("externalService")) {
// 调用外部服务
return httpClient.get(url);
} catch (BlockException e) {
// 处理限流逻辑
return "服务不可用,请稍后再试";
}
}

在这个例子中,我们为 externalService 资源点配置了一个限流规则,确保外部服务的调用不会因为过多的请求而失败。

总结

SphU 是 Sentinel 提供的一个核心 API,用于定义资源点并进行流量控制。通过 SphU,开发者可以轻松地在代码中标记需要保护的资源,并为其配置相应的流量控制规则。在实际应用中,SphU 可以用于保护关键业务逻辑、外部服务调用等场景,确保系统的稳定性。

附加资源

练习

  1. 尝试在你的项目中引入 Sentinel,并使用 SphU 定义一个资源点。
  2. 为定义的资源点配置一个 QPS 限流规则,并测试其效果。
  3. 思考在你的项目中还有哪些场景可以使用 SphU 进行流量控制。