在生产环境中测量性能
当应用程序在共享基础设施中运行(例如在公有云中),通常会有来自其他客户的工作负载同时运行在相同的服务器上。随着虚拟化(virtualization)和容器(containers)等技术日益普及,公有云提供商努力充分利用其服务器的容量。遗憾的是,这为在此类环境中测量性能制造了额外障碍。当你的应用程序与邻居进程共享资源时,其性能可能变得非常不可预测。
通过在实验室中重现特定场景来分析生产工作负载(production workloads)可能相当困难。有时,"内部"性能测试无法复现确切的行为。这就是为什么云提供商和超大规模企业(hyperscalers)提供工具,直接在生产系统上监控性能。在实验室环境中表现良好的代码变更,不一定在生产环境中也表现良好。请咨询你的云服务提供商,了解如何为生产实例启用性能监控。我们在 [ContinuousProfiling] 中提供了持续性能剖析工具(continuous profilers)的概述。
大型服务提供商在用户设备上实施遥测系统(telemetry systems)来监控性能,正逐渐成为一种趋势。Netflix Icarus1 遥测服务就是一个例子,它运行在分布于全球的数千台不同设备上。这样的遥测系统帮助 Netflix 了解用户对其应用程序性能的感知,使 Netflix 工程师能够分析从众多设备收集的数据,发现否则无法发现的问题。这类数据有助于在优化方向上做出更明智的决策。
监控生产部署的一个重要注意事项是测量开销(measurement overhead)。由于任何形式的监控都会影响运行中服务的性能,建议使用轻量级的性能剖析方法。根据 [GoogleWideProfiling]:"要在为真实流量提供服务的数据中心机器上进行持续性能剖析,极低的开销是至关重要的。"通常,可接受的聚合开销被认为低于 1%。可以通过限制被剖析机器的数量以及降低数据采样频率来减少性能监控开销。
1. 在 CMG 2019 上发布,https://www.youtube.com/watch?v=4RG2DUK03_0。 ↩