想象你是一家网红奶茶店的老板。平时每天 500 位顾客,两个店员从容应付。突然有一天,一位美食博主在短视频里推荐了你的招牌水果茶,第二天下午三点,店里瞬间涌入 5000 人——队伍排到隔壁街道,原料桶见底,店员手忙脚乱,出杯速度越来越慢,最后收银机当场死机,顾客们愤怒地打了差评。 这样的“流量洪峰”,每天都在 LLM 服务的世界里真实上演:电商大促、热点事件、新品发布,都可能让请求量在几分钟内暴涨数十倍。如果服务没有一套应对策略,就会像那家奶茶店一样——响应变慢、请求超时、用户流失。 幸运的是,有经验的奶茶店老板早有准备:提前看天气预报和商场活动安排来预测客流,备足原料和人力,客流暴涨时加雇临时工,进店超员时门口排队取号,原料不足时简化菜单,厨房故障时暂停接单,还有一块实时显示排队人数和出杯速度的监控屏——这些朴素的经验,正是 LLM 服务应对突发流量的完整方法论:流量预测、容量规划、弹性伸缩、限流保护、排队降级、熔断恢复与监控告警。
学完本文,你将掌握 LLM 服务在流量洪峰下“活下来”的完整套路:从预测、规划到弹性伸缩、限流降级与熔断恢复。这是云架构师、DevOps 工程师和技术管理者的核心看家本领。
可视化演示
展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。
本节配有交互动效(进入视口后自动加载,约 3KB)。
系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T
流量预测分析
奶茶店老板的柜台上放着一本厚厚的经营日志,上面记录着每天的天气、是否促销、卖了多少杯。每个周末打烊后,他都会翻看这本日志,琢磨“下周六会来多少客人”。这就是预测——不是算命,而是从历史中找规律。
对 LLM 服务来说,流量预测同样不是玄学,而是四个动作的组合。第一是历史数据回溯:翻出过去一年的请求日志,按小时统计 QPS,找出“去年同期发生了什么”。第二是业务事件驱动:把公司的大促日历、产品发布会、营销活动排期转换成流量增量因子——就像奶茶店老板知道商场贴出“买一送一”海报那天,客流一定会涨。第三是周期规律挖掘:识别日、周、月的重复模式,比如工作日上午十点和晚上八点总是出现两个请求高峰,每周一模型调用量明显高于周日。第四是预测模型评估:通过 MAPE(平均绝对百分比误差)等指标衡量预测偏差,持续修正预测参数。
奶茶店老板在预测时会格外看重“昨天卖了 500 杯”这个数字,而不是上个月的日均——加权移动平均正是把这种直觉数学化:让近期的流量数据拥有最大的发言权。预测越准,后面的容量规划越有底气。
- 预测值$\hat{y}_{t+1}$ 带上“帽子”符号,表示这是对下一时刻流量的估计值,而非真实观测值
- 历史观测$y_{t-i}$ 是回溯 i 个时间步的真实流量记录,i=0 时就是“刚刚”的流量
- 权重系数$w_i$ 表示第 i 个历史值在预测中的分量,时间离得越近,权重越大
- 求和归一$\sum_{i=0}^{n-1}$ 把所有历史项加权求和,且所有权重之和为 1,确保预测值落在合理刻度
容量规划评估
预测到周末会大爆满之后,店长开始算账:店里最多能同时站多少人?几台奶茶机一刻不停能出多少杯?要提前备多少珍珠和鲜奶?这套“算账”在技术世界叫容量规划。
容量规划包含四个步骤。峰值需求估算:根据预测结果换算出峰值 QPS 和峰值并发数,这是规划的目标值。资源基线测量:通过压测得到单个 LLM 实例的 QPS 上限、显存占用和 P99 延迟——相当于让店员试做 100 杯,测出单人单机的极限速度。余量设计原则:容量目标 = 峰值 ×(1 + 冗余系数),冗余系数通常取 20%~50%,用来吸收预测误差和未知波动。压测验证方法:用压测工具(如 k6、Locust)模拟真实流量冲击服务,验证容量评估是否准确,就像大促前一晚让临时工提前演练一遍。
这就像奶茶店的操作台:每分钟进来 10 个订单(QPS=10),每单从下单到出杯平均要 2 分钟(T=2),那操作台上任何时刻都会堆着 20 杯在做的饮品(C=20)。如果操作台只能放 15 杯,说明系统的并发能力不够了。
- 并发数$C$ 表示任一时刻系统内正在处理中的请求总数,也就是“同时占着坑的请求”
- 请求速率$QPS$ 是每秒进入系统的请求数,即系统的吞吐压力
- 平均耗时$T$ 是每个请求从进入到完成所需的平均时间(秒)
- 乘积关系$\times$ 将“来的速度”与“处理时长”结合——来得多走得慢,系统里堆积的就多
弹性伸缩策略
客流高峰杀到,店长一个电话召来三名兼职大学生,又支起一张折叠操作台;傍晚客流回落,就让兼职先下班、收起折叠台。这种“人多加人、人少减人”的动态调整,就是弹性伸缩。
在 Kubernetes 世界里,弹性伸缩有四个关键设计。水平自动扩缩:通过 HPA(Horizontal Pod Autoscaler)根据 CPU、内存或自定义指标自动增减 Pod 副本数——相当于按客流人数增减操作台。垂直资源调整:临时调大单个实例的 CPU 和显存配额,比如把 8GB 显存升到 16GB——相当于给奶茶机换一个更大的原料桶。伸缩阈值设定:合理设置触发条件,比如“CPU 使用率超过 70% 且持续 3 分钟则扩容一个副本”,防止瞬时抖动导致频繁伸缩。冷启动优化:大模型权重加载动辄数分钟,可通过预置实例池、容器镜像预热、模型权重预先加载等手段,让新实例“秒上岗”。
回到奶茶店:预测周末峰值 600 单/小时(QPS_peak),一名店员每小时最多做 60 单(QPS_single),再留 20% 的富余(m=0.2),那就需要 ⌈600/60 × 1.2⌉ = 12 名店员。伸缩不是拍脑袋,而是这套算术。
- 峰值流量$QPS_{peak}$ 是预测出的最高每秒请求数,容量规划的目标值
- 单实例能力$QPS_{single}$ 是压测得出的单个实例最大吞吐,即“一个人最多能干的活”
- 冗余系数$(1 + m)$ 在需求之上留出安全余量,$m$ 通常取 0.2~0.5
- 向上取整$\lceil \cdot \rceil$ 是天花板函数,实例数必须是整数,且“宁多勿少”
服务限流保护
店门口站着一位壮硕的保安,手里捏着计数器,店里满 50 人后,“请排队取号”——这就是限流。限流看似在“赶客”,实则在保护:让店内系统始终在安全容量内运转。
LLM 服务的限流体系包含四层设计。限流算法选择:固定窗口计数、滑动窗口、令牌桶、漏桶是四种经典算法,其中令牌桶能同时兼顾“平均速率限制”和“突发流量容忍”,是网关限流的主流选择。客户端限流:在 App 或 SDK 层面控制单个用户的请求频率,防止客户端异常重试或恶意刷接口——相当于保安认识老顾客,常客可以先放进去。网关层限流:在 API 网关统一施行全局限流,无论请求来自哪个客户端,都必须在“大门”处过闸机。过载保护:当系统负载超过危险线(如 CPU 90%),主动拒绝新请求、优先保护存量请求完成,这是最后的“保命手段”。
限流的精髓在于“先放行一部分,保全整体”。就像奶茶店保安宁可让顾客在门外排 10 分钟,也不让 100 人同时涌进只有 20 个座位的小店——那会让所有人都等 40 分钟并且体验崩溃。
- 窗口时长$T_{window}$ 是滑动时间窗口的长度,如 1 秒或 1 分钟
- 放行额度$N_{allowed}$ 是窗口内允许的最大请求数,相当于保安手里的“门票总数”
- 限流速率$R_{limit}$ 是等效的每秒放行速率,超过即拒绝
- 窗口滑动窗口随当前时间不断前移,避免固定窗口的“临界突刺”问题
排队降级机制
暴雨天客流实在太大,保安开始发号:你是 108 号,前面还有 30 桌,预计等 15 分钟。同时,招牌“雪山芝士莓莓”的草莓用完了,店员诚恳建议:“要不要试试基础款珍珠奶茶?一样好喝。”这就是排队和降级。
排队降级机制有四个设计要点。队列缓冲设计:将超出处理能力的请求写入消息队列(如 Kafka、Redis Stream),让后端按自身节奏消费,实现“削峰填谷”——就像取号机把等待客人的“需求”先存起来。优先级调度:在队列中为不同等级的请求分配权重,如付费用户、VIP 客户的请求优先出队。降级预案:提前准备好“降级菜单”:返回缓存结果、切换轻量模型、限制上下文长度(如 4K 降到 2K)、关闭非核心功能(如停止“联网搜索”)。友好提示反馈:对实在无法进入队列的请求,返回 429 状态码并携带 Retry-After 头部,告诉客户端“太忙了,请 30 秒后再来”。
这个公式最震撼的结论是:当 λ 逼近 μ 时,等待时间会急剧变长——奶茶店每秒来 58 个单、每秒只能做 60 个时,等待时间会明显拉长;若每秒只能做 59 个,同样的到达率下排队就会失控。所以系统设计一定要让 μ 远大于 λ,留出能力余量。
- 到达率$\lambda$ 是单位时间内到达队列的请求数,代表“涌入速度”
- 服务率$\mu$ 是单位时间内服务完成的请求数,代表“处理速度”
- 稳定性条件$\mu - \lambda$ 要求 $\mu > \lambda$,否则服务能力小于涌入速度,队列会无限拉长
- 等待时间$W_q$ 是请求在队列中的平均等待秒数,分母越小等待越久
熔断恢复机制
如果厨房的炸锅突然起火,店长会做三件事:先按下消防按钮停止一切接单(熔断打开);火灭了,打开一个小窗,只接几个熟客的订单试试(半开探测);确认出杯正常后,才重新开门迎客(恢复闭合)。这就是熔断器的完整生命周期。
熔断机制的设计包含四个环节。熔断状态机:记住三种状态——闭合(closed,正常放行)、打开(open,拒绝所有请求)、半开(half-open,试探性放行)。失败率阈值:在滚动窗口内统计失败率(超时、5xx 错误),当失败率 ≥ 阈值(如 50%),熔断器从闭合跳转为打开。半开探测恢复:打开状态持续一段时间(如 30 秒)后转入半开,放行少量探测请求,若成功率达到阈值则迅速恢复闭合,否则再次跳回打开。故障隔离:熔断只隔离故障依赖,避免一个下游服务的故障像多米诺骨牌一样压垮整个链路。
熔断的本质是“主动止损”:与其让所有请求都超时、把系统拖入雪崩,不如让一小部分请求快速失败,换回整体的快速恢复。这就像厨房起火时果断停业,远比勉强出杯制造更大的事故划算。
- 失败请求$N_{failed}$ 是最近滑动窗口内超时或返回错误的请求数量
- 总请求$N_{total}$ 是同时期进入系统的全部请求数量
- 失败率$F$ 是两者的比值,代表系统的健康水平
- 阈值判断当 $F \geq 0.5$ 时,熔断器从闭合跳转为打开,拒绝新请求
监控告警体系
店长的办公室有一面监控墙:当前排队人数、三台奶茶机的运行状态、珍珠和鲜奶的库存、最近十分钟的出杯速度,全部实时刷新。任何一项指标异常,对讲机立刻响起——这就是监控告警。
一套完整的监控告警体系包含四层能力。核心指标监控:盯住四个黄金信号——QPS、延迟(P95/P99)、错误率和资源饱和度(GPU 利用率、显存占用、CPU)。日志追踪链路:为每个请求生成全链路 Trace ID,串联网关、模型服务、下游依赖的日志,一旦出问题能快速定位“请求究竟卡在了哪个环节”。告警分级响应:P0 级(如错误率 > 20%)通过短信 + 电话轰炸值班人,P1 级(如 P99 延迟超阈值)发企业微信并创建工单,P2 级仅记录观察。大屏可视化:把黄金指标集中到 Dashboard 大屏,帮助值班团队在一分钟内定位全局状态。
记住一个经典数字:99.9% 的 SLO 意味着每月最多约 43 分钟的故障时间。奶茶店要承诺“99.9% 的订单 3 分钟内出杯”,那一个月累计超时不得超过 43 分钟——超出预算就必须启动熔断和限流来“止损”。
- 成功量$N_{total} - N_{error}$ 是用总量减去失败量,得到成功处理的请求数
- 可用性比值$\frac{N_{total} - N_{error}}{N_{total}}$ 计算成功请求占总量的比例
- 百分比$\times 100\%$ 将比值转换为直观的百分比
- 误差预算$1 - A$ 即“可失败的额度”,如 SLO 99.9% 则每月约 43 分钟故障余量
AI 应用场景
电商大促的智能客服 LLM 服务
阶段:流量预测与容量规划
解决的问题:双十一 0 点一到,智能客服的请求量在几分钟内暴涨 10 倍。传统做法是人工盯监控、手动加机器,往往要 30 分钟才能完成扩容,期间大量请求超时。通过预测 + 容量规划,系统在流量到来前就做好了准备。
具体案例:某电商平台在双十一前一个月,拉取历史大促日志并结合活动排期,预测出 0 点峰值 QPS 为平时的 12 倍。按 30% 冗余规划出 200 个 Pod 的目标容量,并配置 K8s HPA 自动扩缩。活动当晚系统自动扩容、平稳扛过洪峰,智能客服的 P99 延迟控制在 2 秒以内。
热点事件引发的 LLM 应用流量暴涨
阶段:弹性伸缩与限流降级
解决的问题:一款 AI 写作助手因用户晒出爆款文案在社交平台病毒式传播,2 小时内流量暴涨 50 倍。如果没有限流和降级预案,模型服务会被瞬间压垮。
具体案例:某创业公司紧急启用了“走红预案”:网关层令牌桶限流将入口 QPS 控制在安全范围;预置实例池在 30 秒内完成扩容;超长文生成降级为短文生成,非核心的“风格润色”功能直接关闭。系统在流量洪峰中保持了 99.9% 的可用性,事件结束后又平滑缩容。
在线教育开学季的 AI 批改服务保障
阶段:监控告警与熔断恢复
解决的问题:开学季数百万学生同时使用 AI 批改作业,上游大模型 API 因过载开始抖动,错误率急剧攀升,若不及时熔断,会拖垮整个批改链路。
具体案例:某教育平台的监控系统在错误率超过 50% 的瞬间触发熔断,AI 批改自动降级为“基础批改模式”(规则引擎批改),同时对上游 API 进行限流。上游服务恢复后,熔断器半开探测逐步放量,30 分钟内全量恢复,家长的投诉量被控制在了最低水平。
Python 演示
import randomimport math def generate_traffic(t): """模拟 t 时刻的请求量: 平时 50 左右, 第 20-35 步飙到 400""" if 20 <= t <= 35: return 400 + random.randint(-20, 20) return 50 + random.randint(-5, 5) def predict_next_traffic(history): """加权移动平均: 越近的数据权重越大""" n = min(len(history), 5) if n == 0: return 50 weights = [0.1, 0.15, 0.2, 0.25, 0.3] recent = history[-n:] w_sum = sum(weights[-n:]) return sum(w * q for w, q in zip(weights[-n:], recent)) / w_sum class TokenBucket: """令牌桶限流器""" def __init__(self, rate, capacity): self.rate = rate # 每秒补充令牌数 self.capacity = capacity # 桶容量 self.tokens = capacity # 当前令牌数 def allow(self, n=1): self.tokens = min(self.capacity, self.tokens + self.rate) if self.tokens >= n: self.tokens -= n return True return False def main(): SINGLE_INSTANCE_QPS = 60 # 单个实例能处理的 QPS REDUNDANCY = 0.2 # 冗余系数 history = [] bucket = TokenBucket(rate=80, capacity=120) stats = {"total": 0, "rejected": 0, "instances": []} for t in range(50): qps = generate_traffic(t) history.append(qps) pred = predict_next_traffic(history) need = math.ceil(pred / SINGLE_INSTANCE_QPS * (1 + REDUNDANCY)) capacity = need * SINGLE_INSTANCE_QPS allowed = 0 for _ in range(qps): if allowed >= capacity * 1.2: stats["rejected"] += 1 continue if bucket.allow(): allowed += 1 else: stats["rejected"] += 1 stats["total"] += qps stats["instances"].append(need) if t % 10 == 0 or 20 <= t <= 36: drop = 1 - allowed / qps print("t={:2d} QPS={:3d} 预测={:6.1f} 实例={:2d} 拒绝={:3d} 丢弃率={:.1%}".format( t, qps, pred, need, qps - allowed, drop)) print("\n总请求={} 被拒={} 总丢弃率={:.2%}".format( stats["total"], stats["rejected"], stats["rejected"] / stats["total"])) print("实例数峰值={} 平均={:.1f}".format( max(stats["instances"]), sum(stats["instances"]) / len(stats["instances"]))) if __name__ == "__main__": main()
history.append(qps)每步把真实流量记入历史序列,为预测提供素材pred = predict_next_traffic(history)用加权移动平均推断下一时刻流量,权重偏向最近数据need = math.ceil(...)根据预测值、单实例能力与冗余系数算出目标实例数bucket.allow()令牌桶判断当前请求是否放行,是网关限流的经典实现if allowed >= capacity * 1.2:超过容量 120% 的请求直接拒绝,模拟过载保护stats["rejected"] += 1统计被限流丢弃的请求数,用于计算总丢弃率
常见误区
误区突发流量来了就加机器呗,云上资源无限,加到足够多肯定没问题。扩容是万能药。
正解扩容有三大隐形壁垒:一是冷启动延迟,大模型权重加载动辄数分钟,流量洪峰等不起;二是下游依赖瓶颈,比如向量数据库、认证服务可能先被压垮;三是云厂商配额和成本限制,临时加几百台 GPU 机器既不现实也可能被配额卡住。所以必须配合限流、降级、缓存等手段打“组合拳”,而不是把宝全押在扩容上。
为何常见:大家习惯了云计算“按需付费”的营销话术,忽略了物理资源上线的时延和依赖链的约束。
误区一旦限流,用户请求就被拒,体验极差。宁可让系统慢一点,也千万别拒绝用户。
正解限流拒绝的只是“超额的”请求。系统性崩溃时所有请求都超时,那才是真正的灾难。限流 + 排队 + 友好提示(“当前繁忙,请稍后再试”)保住了核心用户的体验,是“两害相权取其轻”。想想奶茶店,让顾客在门外排队,总比顾客冲进去把店挤爆、所有人喝不上奶茶要好得多。
为何常见:产品经理视角往往把“拒绝”视为体验失败,而工程视角更关注对存量请求的保护。
误区用深度学习模型预测流量才高级,简单移动平均太 low 了,精度肯定不够。
正解容量规划的实践中,预测精度并不是唯一目标。复杂模型需要大量数据训练,可业务事件(双十一、热点新闻)带来的流量突变是历史数据里没有的“黑天鹅”。业界常用做法是“简单基线预测 + 业务事件因子叠加 + 人工经验校正”,既稳健又可解释。
为何常见:过度迷信 AI 能力,忽略了业务场景的因果性——预测不是猜数字,而是理解流量为什么涨。
误区熔断打开说明服务不对劲,我应该马上发大量请求测试它恢复没有,这样能加速恢复。
正解熔断器打开后大量重试反而会加重下游负担,形成“惊群效应”。正确做法是半开状态只放行少量探测流量,成功率高才逐步放量恢复。这就像家里跳闸后,你不会把所有电器一次性全开,而是先插一盏台灯试试线路是否正常。
为何常见:人的第一反应是“赶紧看看好了没”,忽略了“过度抢救”对故障系统的二次伤害。
面试题
Q1. 遭遇突发流量时,以下哪一步是应对的第一要务?
- A.立即限流保护
- B.预测评估流量← 正确答案
- C.直接加购机器
- D.关闭次要服务
答案:B。突发流量应对的正确顺序是“先预测、再规划、后执行”(B)。立即限流(A)和加机器(C)都是在没搞清流量规模时盲目行动,可能过度限流伤及正常用户或扩容不足。关闭服务(D)更不可取。就像奶茶店老板得先判断“明天会来多少人”,才能决定备多少料、喊几个人。
Q2. 令牌桶容量为 100,每秒补充 10 个令牌,瞬间最多放行多少个请求?
- A.十个请求
- B.一百个← 正确答案
- C.一百一十
- D.无限多个
答案:B。令牌桶中,桶容量决定了瞬时突发能力。桶里有 100 个令牌时,一瞬间最多放行 100 个请求(B),之后只能按每秒 10 个的补充速率继续放行。一百一十(C)错在把桶容量和补充速率相加;无限多个(D)违背了限流的根本目的。
Q3. 以下属于 LLM 服务核心监控指标的是?
- A.办公室温度
- B.GPU 利用率← 正确答案
- C.员工出勤率
- D.会议室空置
答案:B。GPU 利用率是 LLM 推理服务的关键资源饱和度指标,直接反映算力是否吃紧(B)。办公室温度、员工出勤率、会议室空置都是与系统运行无关的指标,无法帮助判断服务是否将要过载。
Q4. 某 LLM 服务单实例 QPS 上限为 50,预测峰值流量 500,预留 20% 冗余,需要几个实例?
- A.需要十个实例
- B.需要十一个
- C.需要十二个← 正确答案
- D.需要十五个
答案:C。按弹性伸缩公式 N = ⌈峰值/单实例能力 × (1 + 冗余)⌉ = ⌈500/50 × 1.2⌉ = ⌈12⌉ = 12(C)。十个(A)没有留冗余,十一个(B)是向下取整,十五个(D)冗余系数算错为 0.5。就像奶茶店算人手,必须向上取整且留出缓冲。
Q5. M/M/1 排队模型中,λ=50 req/s,μ=60 req/s,请求的平均等待时间是多少秒?
- A.零点零五秒
- B.零点零八秒← 正确答案
- C.零点一零秒
- D.零点二零秒
答案:B。代入公式 W_q = λ / [μ(μ−λ)] = 50 / [60 × (60−50)] = 50 / 600 ≈ 0.083 秒,约等于 0.08 秒(B)。零点零五(A)错把分母当成 μ−λ,零点一零(C)和零点二零(D)属于计算错误。排队论提醒我们:服务率 μ 必须明显大于到达率 λ,否则等待时间会急剧恶化。
Q6. 限流与降级的关键区别是什么?
- A.限流放行所有请求而降级拒绝
- B.限流拒绝超额请求降级降低规格← 正确答案
- C.两者完全没有本质上的区别
- D.限流针对用户而降级针对服务器
答案:B。限流是对“超额请求”直接拒绝,保护系统不过载;降级是降低服务规格(如返回缓存结果、切换轻量模型)来换取整体可用性(B)。A 把两者的作用对象搞反了;C 完全错误;D 的划分不准确,两者都服务于系统保护。
Q7. 弹性伸缩中防止“抖动”(频繁伸缩震荡)的常用手段是?
- A.一定调低触发阈值
- B.设置冷却等待窗口← 正确答案
- C.取消所有缩容动作
- D.缩短指标观察周期
答案:B。设置冷却时间/观察窗口(B),让伸缩动作执行后等待一段时间再评估下一次伸缩,是防止系统在阈值边界来回震荡的经典手段。调低阈值(A)和缩短观察周期(D)反而加剧抖动;取消缩容(C)会造成资源浪费。
Q8. 以下属于 LLM 服务降级预案的是?
- A.返回缓存结果即可← 正确答案
- B.切换为轻量级模型← 正确答案
- C.拒绝所有用户请求
- D.缩短上下文的长度← 正确答案
答案:ABD。降级的核心是“牺牲一点质量,保住整体可用”。返回缓存结果(A)、切换到轻量模型(B)、缩短上下文长度(D)都是典型的降级手段。拒绝所有用户请求(C)属于完全中断服务,不是降级而是“躺平”。就像奶茶店用基础款替代招牌款,但不会直接关门。
Q9. 关于熔断器半开状态,下列说法正确的是?
- A.放行全部请求验证恢复
- B.放行少量试探请求检测← 正确答案
- C.成功率达标则关闭熔断← 正确答案
- D.失败则重新打开熔断← 正确答案
答案:BCD。半开状态的核心是“小流量试探”:只放行少量请求探测下游是否恢复(B),成功率达到阈值就恢复闭合(C),若探测请求失败则立即回到打开状态(D)。A 错在放行全部请求,那会让刚缓过来的下游再次被压垮,失去半开的意义。
Q10. 某 LLM 服务预测峰值 2000 QPS,单实例支撑 300 QPS,但下游向量库上限仅 1000 QPS,合理的应对措施有哪些?
- A.扩容到七个实例即可
- B.扩容同时保护向量库← 正确答案
- C.优化向量库容量上限← 正确答案
- D.忽略瓶颈只扩容应用
答案:BC。只看应用层需要 ⌈2000/300⌉ ≈ 7 个实例(A 单独看没错),但下游向量库只能扛 1000 QPS,必须同时解决依赖瓶颈:扩容应用的同时对向量库限流保护(B),并优化向量库容量(C)。只扩容应用而忽略依赖(D)必然导致雪崩。这就像奶茶店加了一堆店员,但制冰机只能产那么多冰,照样出不了杯。