Allspaw 著作解决的问题
避免容量耗尽的纪律
John Allspaw 在通过 Flickr 多年的爆炸式增长运维后,写了《容量规划艺术》(O'Reilly,2008 年;第二版 2017 年)。他的论点是:容量规划不是一次性的电子表格练习。它是一个持续的纪律,结合了测量、预测和工程判断。缺少这三个中的任何一个,要么在生产中容量耗尽,要么浪费金钱购买闲置的硬件。
容量规划处于两个失败模式之间:
- 容量不足:服务运行在高负荷,延迟激增,错误率上升,用户流失。在增长阶段失去用户的最快方式。
- 过度配置:硬件以 10% 的利用率运行,财务部询问为什么预算持续增长而收入没有相应增加。在预算审查中失去人力的最快方式。
艺术在于找到这两个悬崖之间的走廊,并在工作负载变化时保持在其中。
三个核心问题驱动每个容量练习:
- 我们有什么?当前容量的具体单位:每秒请求数、每秒查询数、千兆字节存储、并发连接数。
- 我们需要什么?未来日期的预测需求,具有明确的不确定性范围。
- 我们何时必须采取行动?采购、配置或扩展的交付时间。云可以缩短到几分钟;本地部署可能需要数月。
为什么不能只用电子表格
一家电子商务公司每年在 11 月计划容量一次,通过线性推外过去 12 个月的流量。他们在专用服务器上运行,采购交付时间为 6 周。他们的流量显示强烈的周季节性(周末峰值为 3 倍)、强烈的年度季节性(黑色星期五为 5 倍),并且在过去三年中一直以每年 40% 的速度增长。
工作负载与利用率
两个不同的数字,都是必需的
当团队只测量两个基本维度中的一个时,容量规划会失败。
工作负载:系统来自外部的需求。每秒请求数、每分钟交易数、每秒兆字节、并发用户数。工作负载描述世界对你的要求。
利用率:系统在服务该需求时运行的满度。CPU 百分比、使用的内存、队列深度、网络带宽、磁盘 IOPS。利用率描述系统在该需求下的感受。
仅工作负载告诉你有什么来临,但不告诉你是否能提供服务。仅利用率告诉你满度有多高,但不告诉你明天的预期。你需要两者,并排绘制,以做出容量决策。
容量比率 = 工作负载 / 利用率。如果你在 50% CPU 下每秒服务 1,000 个请求,你的容量比率是每个服务器 100% CPU 时的 2,000 RPS。这个转换因子让你能够将预测的工作负载转换为所需的服务器数量。
Allspaw 强调在正确的粒度进行测量。每分钟一个样本隐藏 30 秒的峰值。每小时一个样本隐藏一切。真实的容量工作需要子分钟级分辨率用于峰值事件,分钟级分辨率用于趋势。任何更粗的粒度都会产生危险的虚假信心。
要测量什么
你的团队在新产品发布(视频转码服务)上启动容量仪器。你最多可以选择 8 个指标在子分钟级分辨率下追踪。该服务摄取视频上传、将它们排队、转码成多种格式,并将输出写入对象存储。
趋势、季节性、不确定性
每个预测的三个层次
Allspaw 和 Google SRE 书都同意有用预测的结构:趋势、季节性和不确定性范围。缺少其中任何一个,预测就会变得误导。
趋势:需求在数月或数年内的斜率。通常对于短窗口用线性回归建模,对于复合增长用指数或分段线性。趋势线回答'需求大体上走向何处?'
季节性:多个时间尺度上的周期模式。每日(下午峰值流量)、每周(周末峰值)、每年(黑色星期五、税务季节、学年)。乘法季节性随趋势缩放;加法季节性添加常数偏移。
不确定性范围:预测锥。没有范围的预测是猜测。真实的预测发布中心估计与明确的上下范围,通常在 90% 或 95% 的置信度。锥随着你向未来投影而变宽。4 周预测可能有 ±10% 范围;12 个月预测通常有 ±50%。
解耦业务增长与技术需求:容量规划预测技术工作负载,但业务团队预测收入、注册数或活动。容量规划师的工作是将业务预测转换为技术需求:30% 的注册增长可能意味着 30% 的 API 调用增加,但如果新用户使用系统更频繁,可能意味着 80%,或者如果他们以更低的速率转换,可能只有 15%。转换比率和基础业务预测一样重要。
预测假期流量
你的服务为电子商务网站提供服务。去年的黑色星期五流量是 11 月平均流量的 5 倍,持续 12 小时。业务已以每年 40% 的速度增长。营销正在启动一项促销活动,预计会为黑色星期五流量增加额外的 20%。
了解你的容量上限
在生产发现之前找到容量上限
预测告诉你有什么来临。容量上限测试告诉你系统是否能提供服务。Allspaw 将容量上限测试视为容量规划的不可谈判的输入:在你在受控负载下测试它之前,你不知道你的真实容量。
三种容量上限测试类型:
- 综合负载测试:负载生成器(k6、Locust、JMeter、vegeta)在暂存中驱动目标服务的流量。增加负载直到某件事坏掉。坏掉的点是容量上限。最适合隔离服务测试。
- 生产演练:故意在生产中减少容量(排干一定百分比的服务器、杀死一个区域),并观察剩余容量如何处理真实流量。测试真正的生产行为,包括意外的交互。信心最高但风险最高。
- 影子负载:在与生产并行运行的目标服务中重放真实生产流量。捕获真实工作负载模式(稀有查询混合、奇怪的用户代理),不会影响用户。强大的中间地带。
余量是当前负载和容量上限之间的缓冲区。SRE 经验法则:
- 单区域服务在稳定状态中 50% 的余量(所以区域失败不会耗尽幸存的区域)
- 具有 N+2 冗余的多区域服务 30% 的余量
- 100%+ 接近已知峰值事件的余量(黑色星期五、体育决赛)
余量不是浪费。它是不在凌晨 3 点给工程师打页面电话、在峰值期间不失去客户、在一个区域失败时不承受级联失败的代价。财务团队有时会推动减少余量;容量工程师必须解释运行紧张的成本,以使那次谈话基于事实而不是情感。
设计容量上限测试
你继承了一个没有记录的容量上限的服务。当前生产负载在 12 个服务器上是每秒 800 个请求,平均 CPU 35%。营销正在宣布一项活动,预计在 6 周内驱动流量达到峰值每秒 3,000 个请求。
向上、向外或对角线
何时添加功率、添加服务器或两者兼有
三个核心扩展策略,每个都有不同的成本和可靠性配置文件:
垂直扩展(向上扩展):更大的机器。将 8 核服务器替换为 32 核服务器。最简单的路径;有效直到达到单机器限制。单点失败仍然存在。成本非线性增长:32 核机器的成本通常超过 8 核的 4 倍。
水平扩展(向外扩展):更多的机器。在负载均衡器后面添加服务器。容量随服务器数量线性扩展。失败模式转移:你必须处理分布式协调,但单个服务器失败不再摧毁服务。操作复杂性增加。
对角线扩展(Allspaw 的术语):先向上扩展到舒适的每服务器大小,然后从那里向外扩展。结合了大型服务器的更简单操作与多个服务器的冗余。大多数生产服务生活在对角线扩展领地。
保留与按需定价:云提供商奖励可预测性。保留容量比按需便宜 30-60%,但需要 1-3 年的承诺。容量规划师通常使用保留容量锁定稳定状态需求,并突发进入按需用于峰值。误判这个拆分可能浪费金钱(过度保留)或暴露预算惊喜(峰值期间按需不足)。
Spot 实例和可抢占的工作负载:比按需便宜 60-90%,但可在几分钟通知后被回收。适合批处理、分析、训练工作负载或任何为正常中断设计的服务。生产用户面向的流量通常避免 spot。
选择扩展路径
你的视频转码服务在 8 个中等大小的云实例(每个 8 核)上运行。你预计接下来 6 个月增长 3 倍。工作负载是 CPU 绑定的、每个视频可并行化的,每个视频转码耗时 90 秒端到端。保留实例的成本为按需的 50%。Spot 实例的成本为按需的 30%,但可在 2 分钟通知后被终止。
容量规划职业
容量规划技能在何处获利
容量规划很少是一个独立的职位名称。这些技能出现在几个角色下:
网站可靠性工程师:容量规划是核心 SRE 责任。大多数 SRE 团队有一到两个工程师专门从事容量,拥有预测模型、容量上限测试和配置自动化。
云成本 / FinOps 工程师:一个更新的角色专注于云支出优化。结合容量规划与财务建模、合同谈判和保留实例组合管理。在大型云原生公司,因为云账单通常是薪资后的第二大支出而获得报酬极高。
性能工程师:专注于每个节点的效率和容量上限测试。这项工作:通过分析、优化和架构变化从相同的硬件中提取更多容量。大量的系统和语言运行时知识。
容量规划专家:在非常大的公司(Google、Meta、Amazon、Netflix),存在专门的容量规划团队。他们拥有整个舰队的预测模型,以规模进行采购谈判,并与财务协调多年硬件路线图。
复合的技能:时间序列分析(R、Python statsmodels、Prophet)、排队论(M/M/1、M/M/c、Little 定律)、至少一个配置管理工具、至少一个云成本仪表板,以及编写 CFO 能理解和采取行动的预测报告的能力。技术技能让你进入面试;沟通技能让你获得预算。
总结
你现在知道什么
容量规划是一个持续的纪律,不是一年一次的练习。你已涵盖:
- 容量不足与过度配置之间的走廊
- 工作负载与利用率作为测量的两个维度
- 趋势、季节性和不确定性范围作为每个预测的三个层次
- 容量上限测试(综合、影子、演练)作为了解真实容量的唯一方式
- 余量缓冲和为什么它们不是浪费
- 对角线扩展和保留/按需/spot 定价决策
- 这些技能获得预算权威的职业路径
最重要的两个想法。用范围预测,永不用单点。并且在生产发现之前测量你的容量上限。向前携带这两个想法,其余就跟着来了。
推荐阅读:Allspaw 的《容量规划艺术》(O'Reilly,第二版 2017)、Google 的 SRE 书中的相关章节(免费在 sre.google/books/),以及 Brendan Gregg 的《系统性能》用于底层系统工作。几何学的伴侣课程更深入地探讨了可视结构:Little 定律作为面积、排队曲线、趋势斜率和余量包络。