跳转到内容

Sentinel

Sentinel 是阿里巴巴开源的轻量级流量控制、熔断降级框架,主要用于保障微服务的稳定性。作为 Spring Cloud Alibaba 生态组件之一,Sentinel 以流量为切入点,提供流量控制、熔断降级、系统自适应保护等功能,帮助开发者解决微服务架构中的稳定性问题。

核心特性[编辑 | 编辑源代码]

Sentinel 具有以下主要特性:

  • 流量控制:基于 QPS、并发线程数等指标进行流量控制
  • 熔断降级:通过响应时间、异常比例等指标自动熔断不稳定服务
  • 系统保护:自适应保护系统,防止系统被突发流量压垮
  • 实时监控:提供实时的监控数据和控制台
  • 规则持久化:支持将规则配置持久化到 NacosZookeeper 等配置中心
  • 丰富的适配:支持 Spring CloudDubbogRPC 等框架

基本概念[编辑 | 编辑源代码]

资源 (Resource)[编辑 | 编辑源代码]

资源是 Sentinel 的关键概念,可以是 Java 应用程序中的任何内容(如服务、方法、代码块)。Sentinel 通过资源来实施保护规则。

规则 (Rule)[编辑 | 编辑源代码]

围绕资源的保护规则,主要包括:

  • 流量控制规则 (FlowRule)
  • 熔断降级规则 (DegradeRule)
  • 系统保护规则 (SystemRule)
  • 来源访问控制规则 (AuthorityRule)
  • 热点参数规则 (ParamFlowRule)

使用示例[编辑 | 编辑源代码]

基本使用[编辑 | 编辑源代码]

以下是一个简单的 Sentinel 资源定义示例:

// 定义资源
@SentinelResource(value = "helloWorld", blockHandler = "handleBlock")
public String helloWorld() {
    return "Hello World";
}

// 定义限流处理逻辑
public String handleBlock(BlockException ex) {
    return "Blocked by Sentinel";
}

控制台配置[编辑 | 编辑源代码]

Sentinel 提供了可视化控制台,可以实时查看监控数据和管理规则:

1. 下载 Sentinel 控制台 2. 启动控制台:

java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -jar sentinel-dashboard.jar

3. 在应用中配置控制台地址:

spring.cloud.sentinel.transport.dashboard=localhost:8080

工作原理[编辑 | 编辑源代码]

Sentinel 的核心工作流程如下:

graph TD A[请求进入] --> B{是否受保护资源?} B -->|是| C[执行限流检查] B -->|否| D[正常执行] C --> E{是否超过阈值?} E -->|是| F[执行限流处理] E -->|否| G[正常执行]

高级特性[编辑 | 编辑源代码]

热点参数限流[编辑 | 编辑源代码]

支持对热点参数进行细粒度限流:

@SentinelResource(value = "queryByUserId", blockHandler = "handleBlock")
public String queryByUserId(@RequestParam String userId) {
    // 业务逻辑
}

系统自适应保护[编辑 | 编辑源代码]

Sentinel 可以根据系统指标(如 LOAD、CPU 使用率等)自动调整流量:

List<SystemRule> rules = new ArrayList<>();
SystemRule rule = new SystemRule();
rule.setHighestSystemLoad(3.0);
rules.add(rule);
SystemRuleManager.loadRules(rules);

与其他组件的集成[编辑 | 编辑源代码]

实际应用案例[编辑 | 编辑源代码]

某电商平台使用 Sentinel 解决了以下问题:

1. 秒杀场景:通过 QPS 限流防止系统过载 2. 服务熔断:当依赖服务响应时间过长时自动熔断 3. 热点商品保护:对热门商品查询进行特殊限流 4. 系统保护:在促销期间保护核心系统不被压垮

性能考量[编辑 | 编辑源代码]

Sentinel 的性能开销极低,基准测试表明:

  • 单机 QPS 可达 10W+
  • 平均响应时间增加 <1ms
  • 资源占用极少

参见[编辑 | 编辑源代码]

参考资料[编辑 | 编辑源代码]