OTel 组件性能基准测试
博客文章在发布后不会更新。这篇文章已经发布一年多了,其内容可能已过时,部分链接可能无效。在依赖任何信息之前,请务必核实。
随着越来越多的用户开始在生产部署中使用 OpenTelemetry,一个重要的考虑因素是 OpenTelemetry 将对应用程序性能产生的影响。在本篇博文中,我将讨论围绕性能基准测试的一些最新工具改进。
测量性能开销
插桩并非免费的。它会拦截应用程序的操作并收集(通常)大量数据,这会占用额外的 CPU 和内存。这可能直接影响吞吐量和响应时间,从而影响用户对应用程序的体验。它还可能影响运营成本,例如增加服务运行实例的数量。
提供关于性能开销的通用指导非常困难。有许多因素会影响性能:应用程序吞吐量、应用程序运行的硬件、具体插桩的内容、OpenTelemetry SDK 的配置方式、采样率等。最终,在特定应用程序的上下文中通过运行负载测试来衡量性能是最好的方法。
尽管如此,许多 OpenTelemetry 组件都包含性能测试,这些测试有助于捕获回归,并可用于大致了解其性能特征。
OpenTelemetry Collector
对主分支上的每一次合并,OpenTelemetry Collector 都会运行端到端负载测试。CI 工作流程最近有两个更新:
- 测试在社区拥有的裸机上运行,这使得测试结果更加一致。
- 测试结果会自动发布:有关一部分负载测试结果,请参阅Collector Benchmarks。完整的测试结果也可在此获得:完整的测试结果。
语言 SDK
许多 OpenTelemetry SDK 已包含现有的微基准测试,例如:
过去,这些测试仅按需运行。随着最近的工具改进,Java 和 JavaScript 测试现在会在每次合并到主分支时自动运行,并且结果会发布供任何人轻松访问。这些测试也在社区拥有的裸机上运行,以使结果尽可能一致。

Java 的示例基准测试结果

JavaScript 的示例基准测试结果
Python 和 Go 的相同更新正在进行中。
结论
性能优化通常被视为事后考虑,但并非如此。我们正在改进自动化工具和文档,以便在开发过程中为项目维护者和社区提供可靠的性能测试。最终,我们社区的目标是让最终用户在使用我们的组件时充满信心,尤其是在 OpenTelemetry 的插桩对其应用程序性能的影响方面。