在生产环境中进行性能测量
当一个应用程序在共享基础设施上运行时(在公共云中很常见),通常会有来自其他客户的其他工作负载在同一台服务器上运行。随着虚拟化和容器等技术变得越来越流行,公共云提供商试图充分利用他们服务器的容量。不幸的是,在这样的环境中进行性能测量带来了额外的障碍。与相邻进程共享资源可能以不可预测的方式影响性能测量。
通过在实验室中重现生产工作负载来分析生产工作负载可能会很棘手。有时,对于“内部”性能测试,可能无法合成精确的行为。这就是为什么越来越多的云提供商和超大规模云服务提供商选择直接在生产系统上进行性能分析和监控的原因。在“没有其他参与者”的情况下进行性能测量可能不反映真实的场景。在实验室环境中执行性能优化代码可能会得到良好的性能表现,但在生产环境中可能不尽如人意。话虽如此,这并不意味着不需要持续的“内部”测试来及早捕捉性能问题。并非所有性能回归都可以在实验室中捕捉到,但工程师应设计具有代表性的真实场景性能基准测试。
大型服务提供商实施监控用户设备上性能的遥测系统正在成为一种趋势。Netflix Icarus1遥测服务就是一个例子,它在全球范围内的数千台不同设备上运行。这种遥测系统帮助Netflix了解真实用户如何感知Netflix应用的性能。它允许工程师分析从许多设备收集的数据,并找到否则无法发现的问题。这种数据可以帮助更明智地决定在哪里集中优化工作。
监控生产部署的一个重要注意事项是测量开销。因为任何类型的监控都会影响正在运行的服务的性能,因此建议仅使用轻量级的分析方法。根据[@GoogleWideProfiling]的说法:“对于提供实时流量的数据中心机器进行持续性能分析,极低的开销至关重要”。通常,可接受的聚合开销被认为低于1%。性能监控开销可以通过限制受监控机器的集合以及使用更长的时间间隔来减少。
在这样的生产环境中进行性能测量意味着我们必须接受其嘈杂的特性,并使用统计方法来分析结果。[@liu2019largescale]提供了一个好例子,说明像LinkedIn这样的大公司如何在生产环境中使用统计方法来测量和比较基于分位数的指标(例如90分位数的页面加载时间)在其A/B测试中的表现。
1. 在CMG 2019年展示,https://www.youtube.com/watch?v=4RG2DUK03_0。 ↩