Sentinel

守听  金牌会员 | 2025-2-18 10:51:23 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 871|帖子 871|积分 2613

一、Sentinel 简介

Sentinel 是阿里巴巴开源的分布式体系流量防卫组件,提供流量控制熔断降级体系自顺应保护等功能。作为 Spring Cloud Alibaba 核心组件,广泛应用于电商秒杀、直播等高并发场景,防止体系因突发流量瓦解。
核心特性



  • 流量控制:基于 QPS/并发数/调用关系多维度限流
  • 熔断降级:自动检测慢调用/异常比例触发熔断
  • 热门防护:针对高频参数自动限流
  • 体系保护:根据体系负载动态调整流量
  • 实时监控:秒级监控数据可视化
二、环境预备

1. 控制台安装

  1. # 下载最新版本(以 1.8.5 为例)
  2. wget https://github.com/alibaba/Sentinel/releases/download/1.8.5/sentinel-dashboard-1.8.5.jar
  3. # 启动控制台(默认端口 8080)
  4. java -Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -jar sentinel-dashboard-1.8.5.jar
复制代码
访问 http://localhost:8080(默认账号暗码:sentinel/sentinel)
2. Spring Boot 集成

  1. <!-- pom.xml -->
  2. <dependency>
  3.     <groupId>com.alibaba.cloud</groupId>
  4.     <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
  5.     <version>2022.0.0.0</version>
  6. </dependency>
复制代码
  1. # application.yml
  2. spring:
  3.   cloud:
  4.     sentinel:
  5.       transport:
  6.         dashboard: localhost:8080
  7.       eager: true # 立即注册到控制台
复制代码
三、核心功能实战

1. 流量控制

定义资源
  1. @GetMapping("/order")
  2. @SentinelResource(value = "createOrder", blockHandler = "handleFlowLimit")
  3. public String createOrder() {
  4.     return "订单创建成功";
  5. }
  6. // 流控处理函数
  7. public String handleFlowLimit(BlockException ex) {
  8.     return "系统繁忙,请稍后再试!";
  9. }
复制代码
控制台配置

  • 在控制台找到对应资源
  • 新增流控规则:QPS=2(阈值类型选QPS,单机阈值=2)
  • 使用 JMeter 压测验证效果
2. 熔断降级

  1. @SentinelResource(value = "paymentService",
  2.                   fallback = "paymentFallback",
  3.                   exceptionsToIgnore = {IllegalArgumentException.class})
  4. public String processPayment(String orderId) {
  5.     // 业务逻辑
  6. }
  7. // 降级处理函数
  8. public String paymentFallback(String orderId, Throwable t) {
  9.     return "支付服务暂时不可用,请稍后重试";
  10. }
复制代码
熔断规则配置


  • 熔断战略:慢调用比例
  • 最大 RT:500ms
  • 比例阈值:0.5(50%)
  • 熔断时长:5秒
  • 最小哀求数:5
3. 热门参数限流

  1. @GetMapping("/product")
  2. @SentinelResource(value = "queryProduct", blockHandler = "paramFlowHandler")
  3. public String getProduct(@RequestParam("pid") String productId) {
  4.     return "商品详情";
  5. }
  6. // 热点参数处理
  7. public String paramFlowHandler(String productId, BlockException ex) {
  8.     return "当前商品访问火爆,请稍后再试";
  9. }
复制代码
参数规则配置
  1. ParamFlowRule rule = new ParamFlowRule("queryProduct")
  2.     .setParamIdx(0) // 参数索引
  3.     .setCount(10);  // 阈值
  4. ParamFlowRuleManager.loadRules(Collections.singletonList(rule));
复制代码
四、高级配置

1. 规则持久化(Nacos 集成)

  1. <dependency>
  2.     <groupId>com.alibaba.csp</groupId>
  3.     <artifactId>sentinel-datasource-nacos</artifactId>
  4. </dependency>
复制代码
  1. spring:
  2.   cloud:
  3.     sentinel:
  4.       datasource:
  5.         ds1:
  6.           nacos:
  7.             server-addr: localhost:8848
  8.             dataId: sentinel-rules
  9.             groupId: DEFAULT_GROUP
  10.             rule-type: flow
复制代码
2. 集群流控

  1. // 启动 Token Server
  2. ClusterServerConfigManager.loadServerNamespaceSet(Collections.singleton("App-Cluster"));
复制代码
  1. # token-server 配置
  2. spring:
  3.   cloud:
  4.     sentinel:
  5.       transport:
  6.         client-ip: 192.168.1.10
  7.         cluster-server:
  8.           port: 18730
复制代码
五、生产实践发起


  • 压测基准:通过 curl http://localhost:8719/tree?type=root 获取资源树
  • 监控集成:对接 Prometheus + Grafana
  • 动态调整:使用 Sentinel 的 HTTP API 实时修改规则
  • 异常处理:同一实现 BlockExceptionHandler 接口
   完整示例代码:Sentinel Demo 项目

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

守听

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表