在当今的互联网应用中,高并发场景屡见不鲜。当大量请求同时涌入服务时,可能会导致服务性能下降、系统崩溃等问题。为了保障服务的稳定性和可用性,限流是一种非常重要的技术手段。Sentinel 是阿里巴巴开源的一款轻量级的流量控制框架,它以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助用户保障微服务的稳定性。
Sentinel 具有以下几个核心特性:
Sentinel 的核心是一个流量控制器,它会对进入系统的请求进行拦截和检查。当请求到达时,Sentinel 会根据预设的规则判断是否允许该请求通过。如果请求超过了限流阈值,Sentinel 会采取相应的措施,如返回错误信息或进行熔断降级。
Sentinel 的主要工作流程如下:
在 pom.xml
中添加 Sentinel 的依赖:
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>1.8.3</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-transport-simple-http</artifactId>
<version>1.8.3</version>
</dependency>
创建一个配置类,用于初始化 Sentinel:
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class SentinelConfig {
@PostConstruct
public void initFlowRules() {
List<FlowRule> rules = new ArrayList<>();
FlowRule rule = new FlowRule();
// 设置资源名
rule.setResource("hello");
// 设置限流阈值类型为 QPS
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
// 设置 QPS 阈值为 2
rule.setCount(2);
rules.add(rule);
// 加载规则
FlowRuleManager.loadRules(rules);
}
}
创建一个简单的控制器,模拟业务逻辑:
import com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.SphU;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@GetMapping("/hello")
public String hello() {
Entry entry = null;
try {
// 尝试进入资源
entry = SphU.entry("hello");
// 业务逻辑
return "Hello, Sentinel!";
} catch (BlockException e) {
// 限流处理
return "请求被限流,请稍后再试!";
} finally {
if (entry != null) {
entry.exit();
}
}
}
}
启动 Spring Boot 项目,访问 http://localhost:8080/hello
。当请求频率超过 QPS 阈值(2 次/秒)时,会返回“请求被限流,请稍后再试!”的提示信息。
Sentinel 提供了一个可视化的控制台,方便用户查看系统的运行状态和配置限流规则。
从 Sentinel 官方 GitHub 仓库下载控制台的 JAR 包,然后使用以下命令启动:
java -Dserver.port=8088 -jar sentinel-dashboard-1.8.3.jar
在项目的 application.properties
中添加以下配置:
csp.sentinel.dashboard.server=localhost:8088
启动项目后,访问 http://localhost:8088
,使用默认用户名和密码(sentinel/sentinel)登录控制台。在控制台中可以实时查看系统的流量信息和配置限流规则。
Sentinel 是一款功能强大、使用方便的流量控制框架,它可以帮助我们有效地应对高并发场景,保障服务的稳定性和可用性。通过本文的介绍,我们学习了 Sentinel 的基本原理和在 Spring Boot 项目中的使用方法,同时也了解了 Sentinel 控制台的使用。
概念 | 描述 |
---|---|
资源 | 被 Sentinel 保护的对象,可以是一个方法、接口等。 |
规则 | 定义了对资源的保护策略,如限流规则、熔断降级规则等。 |
流量控制器 | Sentinel 的核心组件,负责对请求进行拦截和检查。 |
控制台 | 提供了可视化的界面,方便用户查看系统状态和配置规则。 |
希望本文能够帮助你快速上手 Sentinel,在实际项目中发挥它的作用。如果你对 Sentinel 还有其他疑问或想深入学习,可以参考 Sentinel 的官方文档。
通过以上内容,你可以全面了解 Sentinel 的基本原理、使用方法和控制台的配置,在实际项目中应用 Sentinel 进行服务限流,保障系统的稳定性和可用性。