跳到主要内容

Sentinel 网关流控

介绍

Sentinel 是阿里巴巴开源的一款轻量级流量控制组件,广泛应用于微服务架构中,用于保护系统的稳定性。Sentinel 网关流控是 Sentinel 的一个重要功能,专门用于在网关层面对流量进行控制和管理。通过网关流控,可以有效地防止突发流量对后端服务的冲击,确保系统的稳定性和高可用性。

什么是网关流控?

网关流控是指在网关层面对进入系统的流量进行限制和管理。网关作为系统的入口,所有的外部请求都会首先经过网关。通过在网关上设置流控规则,可以有效地控制进入系统的流量,防止系统过载。

网关流控的核心概念

  1. 流量控制规则:定义在网关上的流量控制规则,包括 QPS(每秒查询率)、并发线程数等。
  2. 限流策略:包括直接拒绝、排队等待、预热等策略。
  3. 资源定义:在 Sentinel 中,资源是流控的基本单位,可以是 URL、API 接口等。

网关流控的工作原理

Sentinel 网关流控通过在网关上设置流控规则,对进入系统的流量进行实时监控和控制。当流量超过设定的阈值时,Sentinel 会根据配置的限流策略进行处理,例如直接拒绝请求或让请求排队等待。

流控规则的配置

在 Sentinel 中,可以通过代码或配置文件来定义流控规则。以下是一个简单的流控规则配置示例:

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

在这个示例中,我们为资源 GET:/api/v1/resource 设置了一个 QPS 为 10 的流控规则。当每秒的请求数超过 10 时,Sentinel 会根据配置的限流策略进行处理。

限流策略

Sentinel 提供了多种限流策略,常见的包括:

  • 直接拒绝:当流量超过阈值时,直接拒绝请求。
  • 排队等待:当流量超过阈值时,让请求排队等待,直到有可用的资源。
  • 预热:在系统启动时,逐步增加流量,避免系统突然承受高流量。

实际应用场景

场景一:保护后端服务

假设我们有一个电商系统,其中有一个商品详情页的 API 接口 GET:/api/v1/product/{id}。在高并发场景下,这个接口可能会承受大量的请求,导致后端服务过载。通过在网关上设置流控规则,可以有效地保护后端服务。

java
FlowRule rule = new FlowRule();
rule.setResource("GET:/api/v1/product/{id}");
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule.setCount(100); // 每秒最多允许 100 个请求
FlowRuleManager.loadRules(Collections.singletonList(rule));

在这个场景中,我们为商品详情页的 API 接口设置了 QPS 为 100 的流控规则。当每秒的请求数超过 100 时,Sentinel 会直接拒绝多余的请求,从而保护后端服务。

场景二:平滑系统启动

在系统启动时,如果突然有大量请求涌入,可能会导致系统崩溃。通过使用预热策略,可以逐步增加流量,避免系统突然承受高流量。

java
FlowRule rule = new FlowRule();
rule.setResource("GET:/api/v1/product/{id}");
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule.setCount(100); // 每秒最多允许 100 个请求
rule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_WARM_UP);
rule.setWarmUpPeriodSec(10); // 预热时间为 10 秒
FlowRuleManager.loadRules(Collections.singletonList(rule));

在这个场景中,我们为商品详情页的 API 接口设置了预热策略,预热时间为 10 秒。在系统启动后的 10 秒内,Sentinel 会逐步增加流量,直到达到设定的 QPS 阈值。

总结

Sentinel 网关流控是保护系统稳定性的重要工具。通过在网关上设置流控规则,可以有效地控制进入系统的流量,防止系统过载。Sentinel 提供了多种限流策略,包括直接拒绝、排队等待和预热等,可以根据实际需求进行配置。

附加资源

练习

  1. 尝试在你的项目中配置一个简单的流控规则,并测试其效果。
  2. 思考在你的系统中,哪些接口需要设置流控规则,并尝试配置相应的规则。