跳到主要内容

Sentinel 电商系统保护案例

介绍

在电商系统中,高并发场景是常态。例如,双十一大促期间,系统可能会面临突发的流量高峰。如果不对这些流量进行有效控制,系统可能会因为资源耗尽而崩溃。Sentinel 是阿里巴巴开源的一款轻量级流量控制组件,能够帮助我们在高并发场景下保护系统,确保系统的稳定性和可用性。

在本案例中,我们将通过一个电商系统的实际场景,学习如何使用 Sentinel 实现流量控制、熔断降级和系统自适应保护。

场景描述

假设我们有一个电商系统,主要包含以下几个核心功能:

  1. 商品详情页:用户查看商品信息。
  2. 购物车:用户添加商品到购物车。
  3. 订单服务:用户提交订单。

在高并发场景下,商品详情页和购物车的访问量可能会激增,而订单服务的处理能力有限。如果不加以控制,订单服务可能会因为请求过多而崩溃,导致整个系统不可用。

使用 Sentinel 进行流量控制

1. 流量控制

首先,我们需要对商品详情页和购物车的访问进行流量控制,确保订单服务不会被过多的请求压垮。

java
// 商品详情页的流量控制规则
FlowRule rule = new FlowRule();
rule.setResource("productDetail");
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule.setCount(100); // 每秒最多允许100个请求
FlowRuleManager.loadRules(Collections.singletonList(rule));

在上述代码中,我们为 productDetail 资源设置了一个流量控制规则,限制每秒最多允许 100 个请求。如果请求量超过这个阈值,Sentinel 会拒绝多余的请求。

2. 熔断降级

接下来,我们需要对订单服务进行熔断降级。当订单服务的响应时间过长或失败率过高时,Sentinel 会自动熔断该服务,避免系统雪崩。

java
// 订单服务的熔断降级规则
DegradeRule degradeRule = new DegradeRule();
degradeRule.setResource("orderService");
degradeRule.setGrade(RuleConstant.DEGRADE_GRADE_RT);
degradeRule.setCount(200); // 响应时间超过200ms时触发熔断
degradeRule.setTimeWindow(10); // 熔断持续10秒
DegradeRuleManager.loadRules(Collections.singletonList(degradeRule));

在上述代码中,我们为 orderService 资源设置了一个熔断降级规则,当订单服务的响应时间超过 200ms 时,Sentinel 会触发熔断,并在接下来的 10 秒内拒绝所有请求。

3. 系统自适应保护

最后,我们可以使用 Sentinel 的系统自适应保护功能,根据系统的实时负载情况动态调整流量控制规则。

java
// 系统自适应保护规则
SystemRule systemRule = new SystemRule();
systemRule.setHighestSystemLoad(4.0); // 系统负载超过4.0时触发保护
SystemRuleManager.loadRules(Collections.singletonList(systemRule));

在上述代码中,我们设置了一个系统自适应保护规则,当系统的负载超过 4.0 时,Sentinel 会自动触发保护机制,限制系统的流量。

实际案例

假设我们的电商系统在双十一大促期间,商品详情页的访问量突然激增,每秒达到了 200 个请求。由于我们设置了流量控制规则,Sentinel 会自动将请求量限制在每秒 100 个,多余的请求会被拒绝。

同时,订单服务的响应时间由于请求量过大而超过了 200ms,Sentinel 触发了熔断降级机制,订单服务在接下来的 10 秒内不再接受新的请求,避免了系统雪崩。

最后,系统的负载由于流量过大而超过了 4.0,Sentinel 触发了系统自适应保护机制,进一步限制了系统的流量,确保系统不会因为资源耗尽而崩溃。

总结

通过本案例,我们学习了如何使用 Sentinel 在电商系统中实现流量控制、熔断降级和系统自适应保护。Sentinel 能够帮助我们有效地应对高并发场景,确保系统的稳定性和可用性。

附加资源

练习

  1. 尝试在你的本地环境中配置 Sentinel,并模拟高并发场景,观察 Sentinel 的流量控制和熔断降级效果。
  2. 修改流量控制和熔断降级的规则,观察系统的行为变化。
  3. 阅读 Sentinel 的官方文档,了解更多高级功能和使用场景。