English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

访客
1 / ?
返回课程列表

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 个指标在子分钟级分辨率下追踪。该服务摄取视频上传、将它们排队、转码成多种格式,并将输出写入对象存储。

准确选择 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 个请求。

在接下来的 4 周内设计一个容量上限测试计划。指定测试类型、定义'坏掉'的指标、你将设置的余量目标,以及根据容量上限测试是否显示当前 12 个服务器能处理 3,000 RPS 而采取的行动。如果容量上限测试显示当前 12 个服务器不能处理 3,000 RPS,请具体说明你做什么。

向上、向外或对角线

何时添加功率、添加服务器或两者兼有

三个核心扩展策略,每个都有不同的成本和可靠性配置文件:


垂直扩展(向上扩展):更大的机器。将 8 核服务器替换为 32 核服务器。最简单的路径;有效直到达到单机器限制。单点失败仍然存在。成本非线性增长:32 核机器的成本通常超过 8 核的 4 倍。


水平扩展(向外扩展):更多的机器。在负载均衡器后面添加服务器。容量随服务器数量线性扩展。失败模式转移:你必须处理分布式协调,但单个服务器失败不再摧毁服务。操作复杂性增加。


对角线扩展(Allspaw 的术语):先向上扩展到舒适的每服务器大小,然后从那里向外扩展。结合了大型服务器的更简单操作与多个服务器的冗余。大多数生产服务生活在对角线扩展领地。


保留与按需定价:云提供商奖励可预测性。保留容量比按需便宜 30-60%,但需要 1-3 年的承诺。容量规划师通常使用保留容量锁定稳定状态需求,并突发进入按需用于峰值。误判这个拆分可能浪费金钱(过度保留)或暴露预算惊喜(峰值期间按需不足)。


Spot 实例和可抢占的工作负载:比按需便宜 60-90%,但可在几分钟通知后被回收。适合批处理、分析、训练工作负载或任何为正常中断设计的服务。生产用户面向的流量通常避免 spot。

对角线扩展路径:小到中等服务器然后水平扩展

选择扩展路径

你的视频转码服务在 8 个中等大小的云实例(每个 8 核)上运行。你预计接下来 6 个月增长 3 倍。工作负载是 CPU 绑定的、每个视频可并行化的,每个视频转码耗时 90 秒端到端。保留实例的成本为按需的 50%。Spot 实例的成本为按需的 30%,但可在 2 分钟通知后被终止。

为接下来的 6 个月推荐扩展策略。指定你选择的实例大小、保留/按需/spot 的混合,并针对工作负载特征证明混合的每个部分。确定你的计划中最大的单一风险,并提出一个缓解措施。

容量规划职业

容量规划技能在何处获利

容量规划很少是一个独立的职位名称。这些技能出现在几个角色下:


网站可靠性工程师:容量规划是核心 SRE 责任。大多数 SRE 团队有一到两个工程师专门从事容量,拥有预测模型、容量上限测试和配置自动化。


云成本 / FinOps 工程师:一个更新的角色专注于云支出优化。结合容量规划与财务建模、合同谈判和保留实例组合管理。在大型云原生公司,因为云账单通常是薪资后的第二大支出而获得报酬极高。


性能工程师:专注于每个节点的效率和容量上限测试。这项工作:通过分析、优化和架构变化从相同的硬件中提取更多容量。大量的系统和语言运行时知识。


容量规划专家:在非常大的公司(Google、Meta、Amazon、Netflix),存在专门的容量规划团队。他们拥有整个舰队的预测模型,以规模进行采购谈判,并与财务协调多年硬件路线图。


复合的技能:时间序列分析(R、Python statsmodels、Prophet)、排队论(M/M/1、M/M/c、Little 定律)、至少一个配置管理工具、至少一个云成本仪表板,以及编写 CFO 能理解和采取行动的预测报告的能力。技术技能让你进入面试;沟通技能让你获得预算。

容量职业:SRE、FinOps、性能、专家

总结

你现在知道什么

容量规划是一个持续的纪律,不是一年一次的练习。你已涵盖:

- 容量不足与过度配置之间的走廊

- 工作负载与利用率作为测量的两个维度

- 趋势、季节性和不确定性范围作为每个预测的三个层次

- 容量上限测试(综合、影子、演练)作为了解真实容量的唯一方式

- 余量缓冲和为什么它们不是浪费

- 对角线扩展和保留/按需/spot 定价决策

- 这些技能获得预算权威的职业路径


最重要的两个想法。用范围预测,永不用单点。并且在生产发现之前测量你的容量上限。向前携带这两个想法,其余就跟着来了。


推荐阅读:Allspaw 的《容量规划艺术》(O'Reilly,第二版 2017)、Google 的 SRE 书中的相关章节(免费在 sre.google/books/),以及 Brendan Gregg 的《系统性能》用于底层系统工作。几何学的伴侣课程更深入地探讨了可视结构:Little 定律作为面积、排队曲线、趋势斜率和余量包络。