Sentinel的核心概念
Sentinel是阿里巴巴开源的分布式系统流量控制组件,专注于流量管理、熔断降级和系统保护。其核心目标是通过规则配置保障微服务的稳定性,避免因流量激增或依赖服务故障导致系统崩溃。
流量控制原理
Sentinel通过定义QPS(每秒查询数)或并发线程数阈值实现流量控制。当流量超过阈值时,采取拒绝、排队或预热等策略。规则配置示例:
java
FlowRule rule = new FlowRule("resourceName");
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule.setCount(10); // 阈值设为10 QPS
FlowRuleManager.loadRules(Collections.singletonList(rule));
熔断降级机制
基于异常比例、响应时间或异常数触发熔断。当服务调用失败率达到阈值,Sentinel会暂时阻断请求,避免级联故障。降级规则示例:
java
DegradeRule rule = new DegradeRule("resourceName")
.setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_RATIO)
.setCount(0.5) // 异常比例阈值50%
.setTimeWindow(10); // 熔断时长10秒
DegradeRuleManager.loadRules(Collections.singletonList(rule));
系统自适应保护
Sentinel通过动态调整流量阈值保护系统。基于Load、CPU使用率等指标,自动限制入口流量,防止系统过载。配置示例:
java
SystemRule rule = new SystemRule();
rule.setHighestSystemLoad(3.0); // 最大Load阈值
SystemRuleManager.loadRules(Collections.singletonList(rule));
动态规则扩展
支持通过Nacos、ZooKeeper等配置中心动态更新规则,无需重启服务。Nacos集成示例:
java
ReadableDataSource<String, List<FlowRule>> flowRuleDataSource = new NacosDataSource<>(
"nacos-server:8848", "groupId", "dataId", source -> JSON.parseObject(source, new TypeReference<List<FlowRule>>() {}));
FlowRuleManager.register2Property(flowRuleDataSource.getProperty());
实际应用场景
- 秒杀系统:通过QPS限流防止库存超卖。
- 第三方API调用:熔断异常频发的接口,避免资源耗尽。
- 慢调用保护:拦截响应时间过长的请求,保障核心链路。
监控与可视化
Sentinel Dashboard提供实时监控面板,展示资源通过数、拒绝数、响应时间等指标,支持规则实时调整。部署后可通过http://localhost:8080访问控制台。
最佳实践建议
- 生产环境建议启用集群流控,通过Token Server统一管理配额。
- 结合日志和Metrics系统(如Prometheus)实现长期监控。
- 对核心业务和非核心业务设置差异化规则,优先保障关键路径。