陈师傅在全球开了六家“智慧面馆”:洛杉矶、新加坡、法兰克福、东京、曼谷和悉尼各一家。每家分店独立营业,但顾客分布会随着时差、节假日和突发活动剧烈变化——洛杉矶分店排起长队时,曼谷分店可能门可罗雀。陈师傅必须回答三个问题:每家店明天要备多少食材?排长队的店如何把顾客引到空闲的店?各店的食材和厨师能不能互相借调?——这就是多区域容量规划的本质:一个全球面馆连锁的“食材与人力调度系统”。 对 AI 从业者而言,这些“面馆问题”对应着 LLM 推理服务的真实挑战:用户遍布全球、请求量随时段波动、GPU 算力昂贵且分散在不同云区域。本文将从需求预测、流量调度、弹性调拨、成本优化、监控告警、自动化调整到权衡决策,完整走一遍多区域容量规划的工程链路。
学会多区域容量规划,意味着你能以全局视角调度千万级用户的推理请求,在延迟、成本与稳定性之间做出最优平衡——这是资深 LLM 平台工程师的核心能力门槛。
目录
可视化演示
从需求预测、跨区域调度到QPS换算GPU,演示如何按全球流量分布合理分配推理算力容量。
本节配有交互动效(进入视口后自动加载,约 3KB)。
需求预测 趋势 季节 周期 LOAD×exp(gt) 预测未来负载
一、需求预测方法:先算好明天要备多少面
陈师傅每周日晚上都要做一件大事:翻开六个分店过去三个月的账本,找出“星期几人多、几点是高峰、节假日翻几倍”的规律,再结合天气和城市活动日历,给每家分店写下明天的备料单。备少了,顾客排队半小时骂骂咧咧;备多了,食材过夜不新鲜,全是成本。这份“备料单”,就是面馆版的容量需求预测。
在多区域容量规划中,“备料单”对应的是每个区域未来一段时间的推理请求量预估。预测依据不再是顾客账本,而是历史请求日志、用户所在时区的作息规律和节假日营销日历。不同区域差异巨大:华东的上班族高峰集中在北京时间 9 点,美西的夜猫子则在 UTC 凌晨活跃,因此必须按区域分别建模,不能套一个全局模板。
常用的预测方法包括移动平均、指数平滑和周期分解。指数平滑把“历史趋势”与“最新观测”按权重混合,实现简单、计算廉价,非常适合作为容量规划的基线预测器。
陈师傅靠着这套备料逻辑,平稳度过了春节客流翻倍,也没在淡季浪费三百碗面。多区域容量规划的起点同样如此:一份靠谱的需求预测,决定了后续调度和成本策略能否站得住脚。
- 预测目标 $\hat{y}_{t+1}$下标 $t+1$ 表示下一个时间段,尖帽符号在统计学中代表“估计值”,即预测出来的下一段请求量。
- 平滑系数 $\alpha$取值范围 $0 < \alpha < 1$,决定“最新数据”和“历史预测”谁的权重大。$\alpha$ 越接近 1,预测越跟手、越敏感。
- 新观测值 $y_t$当前时段实际发生的请求量,相当于面馆今天真实的客流记录。
- 旧预测值 $\hat{y}_t$上一轮模型对今天给出的预测结果,把新旧信息按权重混合,就像陈师傅把“昨天的账本”和“今天的直觉”结合。
二、流量调度策略:排队太长的店,把客人引到隔壁街
某天晚上,洛杉矶分店排队超过 40 分钟,而三公里外的圣莫尼卡分店只坐了两桌客人。陈师傅的 App 立刻向排队顾客推送:“隔壁店不排队,今天全场免配送费。” 这就是流量调度——把顾客(请求)从拥挤的分店(区域)引导到空闲的分店。
在 LLM 推理服务中,流量调度通常分三层:第一层是“就近路由”,按用户 IP 归属地或 Anycast 协议把请求发到最近的区域,降低网络延迟;第二层是“负载均衡”,在区域内多个推理实例之间按权重分发请求;第三层是“跨区域迁移”,当某区域排队积压时,把一部分请求转发到其他负载较低的区域。
决定要不要迁移,核心要看负载因子——一个区域有多“拥挤”:
陈师傅总结出一条经验:跨店引流必须算上“顾客打车过去的 10 分钟路程”。对应到技术层面,跨区域流量迁移带来的额外网络延迟,必须小于排队等待节省的时间,否则就是得不偿失。
- 区域下标 $i$多区域中的第 $i$ 个区域,比如华东或美西,每个区域都有自己的负载因子。
- 已用算力 $U_i$该区域当前被请求占用的 GPU 算力,单位可以是每秒处理的 Token 数或并发请求数。
- 总容量 $C_i$该区域实际部署的算力上限,相当于面馆的座位数加后厨产能。
- 负载因子 $L_i$两者相除得到拥挤程度。$L_i < 0.7$ 表示很闲,$L_i > 0.85$ 表示接近红线,再涨就可能排队雪崩。
三、资源弹性调拨:中央冷库与借灶台的艺术
陈师傅在曼谷建了一个中央冷库,平时各分店按预测备料,但谁也没法保证预测完全准确。于是他又定下两条规矩:第一,高峰期分店间可以互相借调厨师和灶台;第二,冷库里永远备着一批“半成品食材”,接到电话十分钟就能送到任何分店。这就是资源弹性调拨的雏形。
在 LLM 服务中,这套机制对应三层能力:按需扩缩容(高峰期自动增加推理实例)、区域间闲时借调(把需求低谷区域的算力调度给高峰区域)、热备资源池(预先拉起但未接流量的“温实例”,随时准备承接突发流量)。弹性调拨让每个区域不再孤军奋战,而是共享一张全网算力网。
判断借调效果,要看全局利用率——把全网看成一个大池子:
中央冷库和借灶台的规矩让陈师傅发现:六家分店总备料量比原来各备各的少了 25%,却几乎没有再出现“这边排长队、那边空转”的情况。多区域弹性调拨的核心价值,正是用全网冗余替代区域冗余。
- 需求量 $D_i$区域 $i$ 预测到的请求所需算力,即“顾客想吃多少碗面”。
- 容量 $C_i$区域 $i$ 的算力供给,即“这家店能出多少碗面”。
- 分母 $\sum_{i=1}^{n} C_i$所有区域容量之和,也就是全网总供给。
- 分子 $\sum_{i=1}^{n} D_i$所有区域需求之和,也就是全网总需求。
- 全局利用率 $\bar{U}_{global}$两者相除得到全网平均水位。通过借调,高峰区域的溢出需求被低谷区域吸收,整体利用率比各区域独立规划时更平稳、更高效。
四、成本优化方案:东京的面粉和曼谷的面粉
陈师傅发现一个有趣的现象:东京分店的面粉进价比曼谷贵 1.5 倍,电费也更贵。同样是煮一碗面,成本差距巨大。于是他把“可以延后制作的半成品”统一安排在曼谷集中生产,再通过冷链运到各分店;东京分店只保留应对高峰的“现煮产能”。这种精打细算,对应到 AI 基础设施就是区域间的成本优化。
LLM 服务的成本优化主要有三条路径:第一,利用区域机型和电价差异,将非实时任务(如离线批处理、模型微调)调度到算力单价更低的区域;第二,容量水位控制——不为极端峰值预留 100% 资源,而是留出 20% 左右的安全余量,其余靠弹性扩缩容兜底;第三,接入可被回收但价格低廉的竞价实例,用于跑可中断的弹性任务。
衡量成本优化效果,最直观的指标是单次请求的平均算力成本:
陈师傅把半成品生产线搬到曼谷后,总成本下降了近三成,而顾客完全没感觉到味道变化。多区域成本优化的精髓正是如此:在不影响体验的前提下,让每一份算力都花在最便宜的地方。
- 单价 $p_i$区域 $i$ 每单位算力的价格,比如每 GPU 小时的价格,类似东京和曼谷的面粉单价。
- 时长 $t_i$在区域 $i$ 上消耗的算力时长,面馆里就是“在哪个城市煮了多少分钟”。
- 乘积 $p_i \cdot t_i$区域 $i$ 的算力开销,单价乘时长。
- 求和 $\sum_{i=1}^{n}$把每个区域的算力开销汇总成总账单。
- 总请求数 $Q$这段时间内服务的全部请求量,用总开销除以总请求数,就得到平摊到每一次请求上的成本。
五、监控告警体系:后厨仪表盘与分级的铃声
现在,陈师傅给每家分店装了一块后厨仪表盘:实时显示排队人数、出餐速度、食材余量和空调温度。他还设了三档铃声——“叮”一声是普通提醒(某店客流开始上升),“叮叮”两声是警告(排队超过 15 分钟),连续急促的“叮叮叮”则是紧急(后厨产能即将耗尽,必须立刻干预)。
LLM 服务的监控体系同样分三个层次:关键指标采集(P99 延迟、GPU 利用率、请求成功率、队列深度);异常检测算法(用统计基线判断“当前是否偏离正常”);告警分级响应(信息级、警告级、严重级、紧急级,对应不同的处理时效)。
异常检测的常见做法是用均值加若干倍标准差作为动态阈值:
分级的铃声让陈师傅能精准判断:听到“叮”只是让伙计多备点料,听到“叮叮叮”才需要亲自冲到后厨。告警分级的本质,是把稀缺的“人工注意力”留给最致命的问题。
- 监控指标 $m_t$$t$ 时刻的指标值,比如 P99 延迟或 GPU 利用率,相当于仪表盘上跳动的数字。
- 均值 $\mu$ 与标准差 $\sigma$过去一段时间该指标的统计基线,描述“正常长什么样”。均值是平均水平,标准差是波动幅度。
- 阈值系数 $k$告警灵敏度,$k$ 越大越不容易误报,通常取 3 到 5,就像把“响铃红线”设得更高一些。
- 指示函数 $\mathbf{1}[\cdot]$括号内条件成立时为 1(触发告警),不成立时为 0(保持安静),就像一个温度计:超过红线就响铃。
六、容量自动化调整:半夜不用再爬起来
以前陈师傅最怕半夜接到电话:“老板,新加坡店排队爆了!” 后来他给系统接上了自动补货和自动调人逻辑:排队超过 15 分钟自动触发备用厨师到岗,食材低于安全线自动向中央冷库下单。陈师傅只需要在白天看一眼报表,晚上终于能睡个整觉。
容量自动化调整的思路与之完全一致:设定触发条件(如连续 5 分钟平均利用率超过 85%),自动执行扩缩容流程(新增或回收推理实例),并通过灰度验证逐步放量(先扩 10% 观察指标,再继续)。Kubernetes 的 HPA 和事件驱动的 KEDA 都是这套机制的典型实现。
核心计算是“目标副本数”——根据当前利用率反推需要多少个实例:
自动化系统上线三个月后,陈师傅只被紧急电话叫醒过一次——还是因为台风导致曼谷停电这种“系统外问题”。容量自动化的目标是让人类只处理例外,而让系统处理常态。
- 当前实例数 $R_{current}$当前运行的推理实例(Pod/副本)数量,相当于后厨在岗的厨师人数。
- 当前利用率 $U_{current}$最近一段时间测得的平均利用率,可能是 GPU 利用率或队列深度换算值。
- 期望利用率 $U_{target}$你希望压到的目标水位,比如 70%。利用率高于 70% 说明该加人,低于 70% 说明可以减人。
- 比例 $\frac{U_{target}}{U_{current}}$当前利用率越低,这个比值越大,需要扩的实例越多;利用率越高,比值越小,可以缩容。
- 向上取整 $\lceil \cdot \rceil$实例数必须是整数,算出 4.2 个也得变 5 个,宁可多一个也不冒容量不足的风险。
七、权衡分析决策:开店、扩厨房与备料之间的平衡
陈师傅最近在纠结:要不要在纽约开第七家分店?纽约租金高、人工贵,但客流量大;不开,高峰期顾客就会流失。他还纠结要不要扩大东京分店的厨房——扩大了能多接单,但平时会空着浪费。这些决策本质上都是多目标权衡:体验、成本、风险,三者不可能同时最优。
多区域容量规划的最终决策环节也是同样的权衡,最常见的三组矛盾是:延迟与成本(就近部署体验好但贵,集中部署便宜但远)、冗余与效率(多备容量扛得住突发但浪费,精打细算省钱但风险高)、确定性与弹性(固定预留稳定可控但僵化,动态扩缩灵活但依赖自动化可靠性)。
把这些矛盾统一到一个评分模型里,就是加权求和的决策函数:
陈师傅最终用一张“区域决策矩阵”收尾:纽约开一家小店先试点,东京厨房只扩一半,曼谷冷库加大一倍。任何容量规划都没有标准答案,只有基于预算、体验目标和风险偏好的最佳平衡。
- 延迟代价 $L$平均请求延迟带来的用户体验损失,排队越久代价越大。
- 成本代价 $C$算力账单开销,包括机器采购、电费和跨区域带宽费用。
- 风险代价 $R$冗余不足导致雪崩或超时赔付的风险损失。
- 权重 $\alpha, \beta, \gamma$决策者对三个目标的偏好程度,三者之和为 1。调权重就像陈师傅在“多备料”和“少浪费”之间定态度,权重不同,决策结论就不同。
AI 应用场景
场景一:全球 AI 写作助手 SaaS 的区域容量预测
阶段:容量需求预测与规划
解决的问题:传统做法是各区域固定部署一批 GPU,用户增长时人工加机器,经常出现“某个区域排队严重、另一个区域闲置”的局面。AI 平台团队用历史请求日志和用户活跃时区分布训练需求预测模型,为每个区域单独生成未来 24 小时的容量曲线。
具体案例:一家面向欧美和亚太用户的 AI 写作 SaaS 公司,通过指数平滑预测发现美西区域每晚 21 点(UTC)请求量翻倍,而新加坡区域在该时段处于低谷。平台据此在美西预留扩容量、在新加坡暂停扩容,整体 GPU 成本下降 22%,P99 延迟保持稳定。
场景二:电商大促期间跨区域流量调度与弹性借调
阶段:流量调度与资源弹性调拨
解决的问题:大促瞬间流量集中在一个区域,产生队列积压;而其他区域因时区差异负载不高。传统时按区域独立部署,无法互相救急。
具体案例:某跨境电商平台在“双十一”期间,将华东区域的智能客服推理请求按负载因子动态迁移到负载较低的东南亚和欧洲区域,同时在冷备池中拉起 500 个推理实例。跨区域调度让华东区域峰值排队时间从 8 秒降到 1.5 秒,而全网算力总成本只增加了 8%。
场景三:智能客服平台的容量自动化调整
阶段:监控告警与容量自动化
解决的问题:人工盯监控再手动扩缩容,常常滞后 10 分钟以上,导致故障扩大。平台需要“监控 → 决策 → 执行 → 验证”全自动闭环。
具体案例:某银行智能客服平台基于 P99 延迟和 GPU 利用率设定动态告警阈值,触发后由 Kubernetes HPA 自动扩容推理副本,并先扩容 10% 灰度观察 2 分钟再继续放量。上线后 95% 的容量调整无需人工介入,夜间故障响应时间从 30 分钟缩短到 3 分钟。
Python 演示
import mathimport random class Region: def __init__(self, name, capacity, base_load): self.name = name self.capacity = capacity self.base_load = base_load self.load = base_load def current_utilization(self): return self.load / self.capacity def predict_load(self, hour): wave = 0.3 * math.sin((hour - 8) / 24 * 2 * math.pi) return self.base_load * (1 + wave) + random.uniform(-0.02, 0.02) class MultiRegionPlanner: def __init__(self, regions): self.regions = regions self.region_map = {r.name: r for r in regions} def predict_all(self, hour): for r in self.regions: r.load = r.predict_load(hour) return {r.name: r.load for r in self.regions} def schedule_traffic(self, hour): self.predict_all(hour) overloaded = [r for r in self.regions if r.current_utilization() > 0.85] underloaded = [r for r in self.regions if r.current_utilization() < 0.60] moves = [] for src in overloaded: bring_back = src.load - src.capacity * 0.85 for dst in underloaded: headroom = dst.capacity * 0.60 - dst.load if headroom <= 0: continue amount = min(bring_back, headroom) moves.append((src.name, dst.name, round(amount, 3))) src.load -= amount dst.load += amount bring_back -= amount if bring_back <= 0: break return moves def adjust_capacity(self, hour): moves = self.schedule_traffic(hour) for r in self.regions: if r.current_utilization() > 0.9: r.capacity *= 1.2 elif r.current_utilization() < 0.4 and r.capacity > 100: r.capacity *= 0.9 return moves def main(): random.seed(42) regions = [ Region("华北", 1000, 680), Region("华东", 1200, 820), Region("美西", 800, 420), Region("欧洲", 600, 350), ] planner = MultiRegionPlanner(regions) for hour in range(8, 22): moves = planner.adjust_capacity(hour) print("Hour %02d:" % hour) for r in regions: print(" %s load=%.0f cap=%.0f util=%.2f" % (r.name, r.load, r.capacity, r.current_utilization())) for src, dst, amount in moves: print(" -> move %.0f requests from %s to %s" % (amount, src, dst)) if __name__ == "__main__": main()
class Region:定义一个区域对象,保存名称、容量和当前负载。def predict_load(self, hour):实现需求预测,用正弦波模拟早晚高峰的周期性波动,并加入随机扰动。wave = 0.3 * math.sin((hour - 8) / 24 * 2 * math.pi)周期波动建模:以早上 8 点为基准,生成一天内的流量起伏曲线。def schedule_traffic(self, hour):流量调度策略:先预测所有区域的负载,再找出超载区和空闲区。overloaded = [r for r in self.regions if r.current_utilization() > 0.85]找出利用率超过 85% 的超载区域。headroom = dst.capacity * 0.60 - dst.load计算目标区域的空闲容量(即 60% 水位以下还能接收多少请求)。moves.append((src.name, dst.name, round(amount, 3)))记录一笔调度动作:从哪个区域迁移多少流量到哪个区域。def adjust_capacity(self, hour):容量自动化调整:调度完成后根据最新利用率决定扩容还是缩容。r.capacity *= 1.2当利用率仍高于 90% 时弹性扩容 20%,给区域更多算力余量。
常见误区
误区多区域容量规划就是把每个区域当成独立的小项目,各自预测、各自扩缩容、各自做成本预算,区域之间不用互相协调。
正解如果各区域独立规划,每个区域都要为自身峰值预留大量冗余,整体资源浪费严重,而且一个区域突发流量时无法借助其他区域的空闲算力。正确的做法是像陈师傅的中央冷库一样,把全网看成一个资源池:各区域做需求预测用于初始分配,但通过流量调度和弹性借调共享冗余,用全网总冗余替代每个区域的局部冗余。
为何常见:很多团队是从单区域部署逐步扩展到多区域的,自然沿用“每个区域独立运维”的惯性思维,没有意识到多区域协同能带来数量级的效率提升。
误区只要预测算法足够先进,把误差压到接近零,就不需要预留任何容量余量,所有算力都能被充分利用。
正解预测永远无法消除不确定性——突发新闻、病毒式传播、新模型上线都可能瞬间击穿预测。即便预测误差只有 10%,在 95% 利用率下也会导致大量请求排队。行业实践是预留 15%-30% 的安全水位,配合弹性扩缩容吸收残余波动。陈师傅即便有再准的客流预测,也一定会让冷库留两袋应急面粉。
为何常见:工程师容易把“预测误差”和“容量风险”混为一谈,以为误差降下来了风险就消失了,忽略了异常事件的不可预测性。
误区既然某区域 GPU 每小时便宜一半,那就把能迁的请求全部迁过去,成本一定最低。
正解跨区域调度有隐性代价:网络延迟增加(用户体感变差)、跨区域带宽费用、数据合规限制。如果用户在美国却把请求路由到东南亚,强行走公网转一圈,延迟可能从 100ms 涨到 400ms,对交互式应用是灾难。正确做法是区分任务类型:交互式请求优先就近,可异步等待的批处理任务(如离线总结、批量翻译)才适合调度到低价区域。
为何常见:只盯着 GPU 单价对比,忽略了“全链路成本”包括带宽、延迟和用户体验损失,犯了局部分析的错误。
误区把触发阈值设得越低、扩缩容步长设得越大,系统就越“灵敏”,肯定能更快响应流量变化。
正解过于激进的扩缩容会导致震荡:流量稍涨就扩容 50%,稍跌就缩容 30%,实例频繁创建销毁,冷启动成本高,甚至把 CPU 花在调度本身。业界做法是“慢决策、快执行”:连续多个时间窗口确认超过阈值才触发,扩容时先加 10%-20% 灰度观察,缩容时加冷却时间避免抖动。
为何常见:直觉上“越快越好”符合常识,但忽略了弹性系统的反馈振荡问题,就像开车猛打方向盘反而更容易翻车。
面试题
Q1. 多区域容量规划的首要目标是什么?
- A.在单一区域堆叠更多GPU
- B.按用户地域合理分配算力← 正确答案
- C.用更高配置替换旧GPU
- D.无条件降低硬件采购预算
答案:B。多区域容量规划的核心是根据全球用户的地理分布和流量模式,在各区域间合理分配推理算力。B 正是这一目标的准确描述。A 是单区域堆硬件思路,C 是硬件升级,D 是纯成本导向,都忽略了“按地域合理分配”这一本质。
Q2. 需求预测中“周期性波动”指的是什么?
- A.用户密码被定期强制重置
- B.流量随时间呈现规律起伏← 正确答案
- C.请求体大小发生随机变化
- D.模型参数每天定时更新
答案:B。周期性波动指请求量随时间呈现可预测的规律变化,如早晚高峰、节假日波动和时区差异。这相当于面馆观察“几点人多”。A、D 是系统管理行为,C 是随机变化,都不具备周期性规律。
Q3. 跨区域流量调度时最应关注哪个指标?
- A.目标区域当前的负载水平← 正确答案
- B.数据中心机房的建成年代
- C.GPU核心架构的新旧差异
- D.区域网络出口的链路带宽
答案:A。调度决策的核心依据是目标区域的负载因子——把流量迁到一个已经快满的区域毫无意义。B、C 只是硬件属性,D 带宽是约束条件但并非调度决策的主指标。
Q4. “热备资源池”的含义是什么?
- A.提前启动等待调用的算力实例← 正确答案
- B.位于高温机房内的服务器
- C.只用于训练不推理的集群
- D.所有区域共用的共享账号
答案:A。热备资源池指预先拉起但暂未接流量的推理实例,接到信号即可快速承接流量,类似陈师傅冷库里的半成品食材。B 是字面误解,C 是用途区分,D 是账号概念,都与热备无关。
Q5. 自动扩缩容最合理的触发依据是什么?
- A.单次请求出现超时就立即扩容
- B.某用户在社区发帖抱怨延迟
- C.运维人员手动勾选立即扩容
- D.连续数分钟平均利用率超阈值← 正确答案
答案:D。合理的触发条件应具有统计意义,如连续 5 分钟平均利用率超过 85%,避免单次抖动引发误扩容。A 过于敏感,B 是事后反馈,C 是人工操作而非自动触发。
Q6. “严重级”告警通常对应什么场景?
- A.某区域 P99 延迟轻微上浮
- B.单个推理 Pod 重启成功
- C.区域整体容量即将耗尽← 正确答案
- D.磁盘空间使用率达到 55%
答案:C。严重级告警对应可能引发雪崩的大问题,如区域整体容量耗尽、大规模请求失败。A、B 属于警告甚至信息级,D 是常规运维关注项,未到严重级别。
Q7. 下列哪项是多区域成本优化的有效手段?
- A.各区域统一采购最高配 GPU
- B.按价格差异调度弹性任务← 正确答案
- C.关闭所有可观测性监控
- D.把推理请求发送到最近区域
答案:B。利用区域间 GPU 单价差异,把可延时的批量任务调度到低价区域,是典型成本优化手段。A 是成本浪费,C 牺牲稳定性,D 是延迟优化而非成本优化。
Q8. 多区域需求预测的数据来源通常包括哪些?
- A.用户所在时区分布← 正确答案
- B.请求来源地域分布← 正确答案
- C.各区域Token吞吐统计← 正确答案
- D.单个GPU风扇转速读数
答案:ABC。预测需要的是流量相关数据:时区分布解释周期波动、地域分布决定区域权重、Token 吞吐反映算力需求。D 是硬件健康指标,与需求预测无关。
Q9. 跨区域流量调度需要综合考量哪些因素?
- A.调度引入的额外网络延迟← 正确答案
- B.数据主权与合规性要求← 正确答案
- C.源区域当前的排队积压程度← 正确答案
- D.模型权重文件的具体格式
答案:ABC。调度决策要平衡转移收益与代价:网络延迟决定迁移成本,合规约束决定数据能否出境,源区域积压程度决定调度紧迫性。D 是模型存储细节,与调度无直接关系。
Q10. 下列哪些属于多区域容量规划中的关键权衡?
- A.延迟体验与算力成本的平衡← 正确答案
- B.冗余储备与资源效率的平衡← 正确答案
- C.固定预留与动态弹性的平衡← 正确答案
- D.品牌宣传与营销投入的平衡
答案:ABC。容量规划的每一层决策都是权衡:就近部署保延迟但贵、多备容量保稳定但浪费、固定预留控成本但僵化。D 是商业运营范畴,不属于容量规划的技术权衡。