当前位置: 首页 > news >正文

AI 后端队列背压:请求堆住时,系统要会说不

AI 后端队列背压:请求堆住时,系统要会说不

AI 后端最怕一种状态:请求不断进来,模型服务已经处理不过来,队列越堆越长,用户还在等待,最终超时、重试、雪崩一起发生。很多系统不是被单个请求打垮,而是被没有边界的排队拖垮。

背压的核心是让系统在压力下会说不。不是所有请求都必须进入队列,不是所有任务都值得继续等。基础设施要保护核心路径,而不是把所有压力吞进去。

一、队列长度不是唯一指标

AI 请求成本差异很大。一个短标题生成和一个长文档总结,不能只按请求数排队。更合理的是按预计 token、任务优先级和超时时间估算队列压力。

flowchart TD A[请求进入] --> B[估算成本] B --> C{队列是否可接收} C -->|可接收| D[进入队列] C -->|不可接收| E[快速失败/降级] D --> F[Worker 处理]

如果队列等待时间已经超过用户可接受范围,继续接收只是在制造无意义等待。

二、入队前做预算判断

可以在网关层估算任务成本,并按租户和任务设置并发上限。

func canEnqueue(q QueueState, req InferenceJob) bool { if q.EstimatedWaitMs > req.MaxWaitMs { return false } if q.PendingTokens+req.EstimatedTokens > q.TokenBudget { return false } if q.TenantRunning[req.TenantID] >= req.TenantLimit { return false } return true }

这段逻辑不复杂,但能挡住很多雪崩。队列不是垃圾桶,它应该有容量和规则。

三、降级要提前设计

拒绝请求不是唯一动作。可以切小模型、缩短输出、关闭高成本功能、把离线任务延后,或者返回“稍后再试”。关键是这些策略要提前写好。

backpressure_policy: interactive_chat: action: use_smaller_model long_summary: action: delay_job batch_generation: action: reject_with_retry_after

不同任务的降级方式不同。在线用户要尽快得到可理解反馈,离线任务可以等待,批量任务可以限速。

四、重试要避免放大事故

请求失败后客户端如果立即重试,会把压力放大。服务端应返回Retry-After,客户端使用退避。内部 worker 重试也要有上限。

背压和重试必须一起设计。只做重试不做背压,会让系统在故障时更快崩;只做背压不控制客户端,也会被重试流量淹没。

背压还要被用户和上游服务看见。返回错误时不要只给500,而是明确这是容量保护,并带上可重试时间。内部调用可以用结构化错误,外部接口可以返回429或业务错误码。

{ "code": "QUEUE_OVERLOADED", "message": "当前生成任务较多,请稍后重试", "retry_after_seconds": 30, "degraded": false }

可观测性也要跟上:入队拒绝数、降级次数、队列等待 p95、重试来源、客户端是否遵守退避。没有这些指标,背压策略是否有效只能靠猜。

五、总结

AI 后端队列背压的目标,是让系统在压力下保持秩序。按成本估算队列压力,入队前做预算判断,提前设计降级,重试使用退避。

基础设施不是永远接住所有请求,而是在该说不的时候说得清楚、说得及时。

http://www.cnnetsun.cn/news/3111481.html

相关文章:

  • Node.js企业级部署手册:Windows与Linux生产环境实战指南
  • CSS 滚动驱动动效:让页面跟着内容节奏移动
  • 从零到一:STM32嵌入式温度控制系统实战指南 [特殊字符]
  • STM32F429ZI与MC6470 IMU的运动控制实现
  • 架构师转 CEO:别把公司当成一个大系统重构
  • 通达信缠论可视化插件:5分钟实现专业级K线分析
  • Uniapp+Vite H5真机调试HTTPS穿透方案实战
  • ClickHouse 分区设计:分区不是越细越好
  • 生产故障复盘的系统化框架:从根因追溯到改进闭环的方法论
  • CTFshow弱口令爆破
  • 魔兽世界宏工具GSE:智能技能循环与游戏自动化解决方案
  • Spring Boot整合MongoDB实战:从CRUD到聚合查询
  • PUBPEER上微纳光子学相关的质疑-1
  • 【2026实测有效】 如何永久禁止Win11自动升级?6大方法关闭Windows11更新最安全简单操作方法
  • 电容式触控感应原理,Q-Touch:针对不同的覆盖层厚度或 PCB 布局微调灵敏度 ,快速构建项目
  • TDD在Unity3D游戏项目开发中的实践0x00
  • ChatIG架构揭秘:高效推理网关背后的技术原理
  • Win7系统上安装Python教程:轻松上手3.8.6版本
  • 企业仓储数字化如何落地?不同规模仓库WMS仓储系统举例
  • ModSecurity CRS实战:解决误报、性能瓶颈与规则更新的完整指南
  • 专科生必学:8款AI工具提升学习效率
  • 这是一个世界难题
  • 喜报丨Cordys开源AI CRM系统全网累计下载数量突破30万次!
  • 第03章 引导启动程序(1):0x7C00到0x90000——解密bootsect.s的“搬家魔术”
  • LangChain快速入门-01概述
  • 95.基于 PLC 扫描周期原理!西门子 S7-1200 实现带软硬件互锁、防短路保护、自锁保持的电机正反转控制系统
  • 匹夫细说C#:庖丁解牛迭代器,那些藏在幕后的秘密
  • DIN DIEN DSIN 简述
  • 5分钟掌握全平台资源下载:从微信视频号到抖音快手的一站式解决方案
  • Python 自动化之文件批量整理——重命名、分类归档、清理重复