阿里开源流量防护组件——Sentinel

Sentinel(哨兵)是阿里巴巴开源的轻量级分布式系统流量防护组件,定位为分布式系统的流量防卫兵,核心解决微服务架构下的流量失控、依赖故障扩散、系统过载等问题,保障服务高可用。

一、核心定位

(1)定位:流量控制、熔断降级、系统保护、热点防护、访问控制。

(2)多语言:Java(主)、Go、Rust、C++,支持云原生(Envoy WASM/eBPF)。

(3)生态:无缝集成 Spring Cloud Alibaba、Dubbo、gRPC、WebFlux 等。

二、Sentinel核心概念

(1)资源(Resource)

① 被 Sentinel 保护的对象:接口、方法、代码块、服务调用、数据库访问等。

② 用 @SentinelResource 或 API 包裹后成为可防护资源。

(2)规则(Rule)

① 定义资源的防护策略:流控、熔断、降级、热点、系统、授权。

② 支持动态配置(控制台/API/配置中心),无需重启应用。

三、可视化界面控制台------Dashboard

1、管理服务

① 可视化监控:实时查看资源调用、流控/熔断记录

​② 规则管理:动态配置流控、熔断、热点等规则

​③ 集群管理:支持集群限流与规则推送

​④ 接入:启动 Dashboard 后,客户端配置控制台地址即可

2、 SpringCloud集成Sentinel

(1)依赖 引入

<!-- Sentinel 核心 -->

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>sentinel-spring-webmvc-adapter</artifactId>

<version>1.8.8</version>

</dependency>

<!-- 控制台客户端 -->

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>sentinel-transport-simple-http</artifactId>

<version>1.8.8</version>

</dependency>

(2)application.yml 配置(连接 Dashboard)

spring:

cloud:

sentinel:

transport:

dashboard: 127.0.0.1:8080 # 控制台地址

port: 8719 # 本机和控制台通信端口

web-context-unify: false # 按 URL 细粒度限流

3、Sentinel Dashboard搭建

下载 jar 包后运行

java -jar sentinel-dashboard-1.8.8.jar
访问:

http://localhost:8080

账号/密码: sentinel / sentinel

四、核心功能

1. 流量控制(Flow Control)

① 目标:削峰填谷,防止流量峰值打垮服务

② 指标:QPS、线程数、并发数

③ 策略:快速失败、排队等待、预热启动、匀速器

④ 场景:秒杀限流、API 网关入口限流、服务间调用限流

⑤ 具体实例:

例如有如下业务接口:

@GetMapping("/api/product/list")

public String productList() {

return "商品列表";

}
dashboard配置(流控规则):

  • 资源名: /api/product/list

  • 阈值类型:QPS

  • 单机阈值:10(每秒最多10次)

  • 流控模式:直接

  • 流控效果:快速失败

超过直接报错: Blocked by Sentinel (flow limiting)

2. 熔断降级(Circuit Breaking)

① 目标:故障隔离,防止下游故障引发雪崩

② 触发条件: 异常比例/异常数和慢调用比例(响应超时)

③ 状态机:CLOSED(正常)→ OPEN(熔断拒绝)→ HALF-OPEN(半开试探)→ CLOSED

④ 场景:下游服务超时/宕机、第三方接口不稳定

⑤ 具体实例:

代码示例:

@GetMapping("/api/order/get")

@SentinelResource(

value = "getOrder",

fallback = "orderFallback" // 熔断后走降级方法

)

public String getOrder(Long orderId) {

if (orderId == 999) {

throw new RuntimeException("异常");

}

return "订单详情:" + orderId;

}

// 降级兜底

public String orderFallback(Long orderId, Throwable e) {

return "订单服务繁忙,请稍后再试:" + e.getMessage();

}

面板配置(熔断规则)

  • 资源名: getOrder
  • 熔断策略:异常比例
  • 比例:0.5(50%异常就熔断)
  • 熔断时长:10秒
  • 最小请求数:5

3. 热点参数限流(Hot Parameter)

① 目标:针对高频参数单独限流,避免热点数据打垮系统

② 示例:商品ID=1001 被高频访问,单独限制该 ID 的 QPS

③ 场景:商品详情、用户中心、热点新闻

代码示例:

@GetMapping("/api/product/detail")

@SentinelResource(value = "productDetail")

public String productDetail(@RequestParam("skuId") Long skuId) {

return "SKU详情:" + skuId;

}
面板配置(热点规则):

  • 资源名: productDetail

  • 参数索引:0(对应第一个参数 skuId)

  • 单机阈值:5

  • 统计窗口:1s

效果:同一个 skuId 每秒最多5次访问。

4. 系统自适应保护(System Protection)

① 目标:从系统全局维度防过载,而非单一接口

② 指标:CPU 使用率、系统负载、入口 QPS、内存

③ 策略:系统负载高时自动限流,优先保障核心服务

面板配置(系统规则):

  • CPU 使用率:0.7(CPU ≥70% 自动限流)

  • 最大QPS:1000

  • 负载保护(Linux):根据系统 load 限流

防止服务器被打满、OOM。

5. 来源访问控制(Authority)

① 目标:按调用来源黑白名单控制访问

② 场景:内部服务/第三方调用权限控制、防恶意请求

例如有如下网关传来源:

// 定义来源解析器

@Component

public class MyRequestOriginParser implements RequestOriginParser {

@Override

public String parseOrigin(HttpServletRequest request) {

// 从请求头获取来源 appA / appB / gateway

return request.getHeader("source");

}

}

面板配置(授权规则)

  • 资源名: /api/*

  • 流控应用: appA

  • 类型:黑名单 / 白名单

五、典型应用场景

① 微服务 API 网关入口限流

② 服务间调用熔断降级

③ 电商秒杀/大促流量控制

④ 数据库/缓存访问保护

⑤ 第三方接口调用防护

⑥ 热点数据(商品/用户)限流

相关推荐
weixin199701080161 天前
《淘宝双11同款:基于 Sentinel 的微服务流量防卫兵实战》
微服务·架构·sentinel
一叶飘零_sweeeet2 天前
高可用架构核心:限流熔断降级全解,Sentinel 与 Resilience4j 原理 + 落地实战
架构·sentinel
Fang fan5 天前
Redis基础数据结构
数据结构·数据库·redis·缓存·bootstrap·sentinel
回到原点的码农6 天前
SpringCloud Gateway 集成 Sentinel 详解 及实现动态监听Nacos规则配置实时更新流控规则
spring cloud·gateway·sentinel
没有bug.的程序员7 天前
黑客僵尸网络的降维打击:Spring Cloud Gateway 自定义限流剿杀 Sentinel 内存黑洞
java·网络·spring·gateway·sentinel
xiaolingting9 天前
Gateway 网关流控与限流架构指南
spring cloud·架构·gateway·sentinel
sc_爬坑之路10 天前
redis windows环境配置读写分离:一主一从 + Sentinel 完整实战
windows·redis·sentinel
sc_爬坑之路10 天前
Linux 部署 Redis:一主一从 + Sentinel 完整实战
linux·redis·sentinel
杜子不疼.10 天前
Spring Cloud 熔断降级详解:用 “保险丝“ 类比,Sentinel 实战教程
人工智能·spring·spring cloud·sentinel