别再只用QChart了!用QtDataVisualization给你的Qt应用加个3D图表有多香?
2026/4/24 9:38:36
本文博主将详细介绍Sentinel Warm Up(预热模式),上面的这些图展示了预热期间QPS阈值的变化过程:
根据图中说明:
10QPS35秒初始阈值计算公式:
初始阈值 = threshold ÷ coldFactor = 10 ÷ 3 ≈ 3.33 QPS09:31:00 - 09:31:05:预热期(5秒) 09:31:05 - 09:31:12:稳定期(阈值保持10)具体变化过程:
| 时间 | QPS阈值 | 说明 |
|---|---|---|
| 09:31:00 | 3.33 | 系统启动,初始阈值 |
| 09:31:01 | ≈4.66 | 逐渐上升 |
| 09:31:02 | ≈6.00 | 继续上升 |
| 09:31:03 | ≈7.33 | 接近目标 |
| 09:31:04 | ≈8.66 | 几乎达到 |
| 09:31:05 | 10.00 | 预热结束,达到设定阈值 |
| 09:31:06-12 | 10.00 | 保持稳定阈值 |
阈值随时间线性增长:
当前阈值 = 初始阈值 + (最大阈值 - 初始阈值) × (当前时间/预热时间)或更精确地:
当前阈值 = threshold/coldFactor + (threshold - threshold/coldFactor) × (time/warmUpPeriod)┌─────────────────────────────────────┐ │ 添加流控规则 │ ├─────────────────────────────────────┤ │ 资源名: queryGoods │ │ 阈值类型: QPS │ │ 单机阈值: 10 │ ← 最终阈值 │ │ │ 流控效果: [Warm Up] │ │ 预热时长: 5 秒 │ ← 5秒预热时间 └─────────────────────────────────────┘spring:cloud:sentinel:datasource:flow:nacos:server-addr:localhost:8848dataId:${spring.application.name}-flow-rulesrule-type:flowdata-type:json# 对应规则配置rule-data:|[ { "resource": "queryGoods", "count": 10, # 最大阈值 "grade": 1, # QPS模式 "controlBehavior": 1, # 1=Warm Up "warmUpPeriodSec": 5 # 预热5秒 } ]// 每天凌晨执行的数据统计任务@Scheduled(cron="0 0 0 * * ?")@SentinelResource(value="dailyReport",blockHandler="reportBlockHandler")publicvoidgenerateDailyReport(){// 系统从空闲状态突然启动// Warm Up模式给系统准备时间}@RestControllerpublicclassPromotionController{@GetMapping("/promotion/start")@SentinelResource(value="promotionStart",controlBehavior=ControlBehavior.WARM_UP,warmUpPeriodSec=10// 预热10秒)publicStringstartPromotion(){// 促销活动开始时,流量突然激增// Warm Up让系统逐步适应return"促销开始";}}@RestControllerpublicclassOrderController{@PostMapping("/order/create")@SentinelResource(value="createOrder",count=100,// 最终支持100 QPSwarmUpPeriodSec=30// 但需要30秒预热)publicOrdercreateOrder(@RequestBodyOrderDTOdto){// 服务重启后,需要时间恢复数据库连接池、// Redis连接、线程池等资源returnorderService.create(dto);}}| 流控效果 | 初始阶段 | 达到阈值时间 | 适用阶段 |
|---|---|---|---|
| 快速失败 | 立即生效 | 立即 | 系统稳定运行期 |
| Warm Up | 低阈值 | 逐渐提升 | 系统启动/恢复期 |
| 排队等待 | 立即排队 | 立即 | 需要均匀处理的场景 |
# Sentinel 1.8+ 支持自定义coldFactor# 默认是3,可以调整:warmUp:coldFactor:2# 更激进的冷启动// 监控预热期的表现@Slf4j@ComponentpublicclassWarmUpMonitor{@EventListenerpublicvoidonBlockEvent(BlockExceptionEventevent){if(event.getRule().getControlBehavior()==ControlBehavior.WARM_UP){log.info("Warm Up期间触发限流: {}, 当前时间: {}",event.getResource(),System.currentTimeMillis());// 可以动态调整预热时间}}}QPS阈值变化曲线: ▲ 10│ ┌───────── 稳定期(阈值=10) │ / │ / │ / 5 │ / │ / │ / │ / 3.3├───────/ 预热期(5秒) │ / │ / └─────┴────────────────────► 时间 启动 5秒后核心价值:Warm Up模式让系统能够平稳过渡从冷启动到正常负载状态,避免了直接承受高流量可能导致的雪崩效应。