John Knoepfle

持续性能分析:提高应用程序效率和成本效益的关键

在本文中,我们将讨论计算效率为何重要,以及 Elastic Universal Profiling 如何让您的企业在生产环境中使用持续性能分析,以尽可能提高运行您业务的软件的效率。

阅读时长 12 分钟
Continuous profiling: The key to more efficient and cost-effective applications

最近,Elastic Universal ProfilingTM正式发布。它是我们可观测性解决方案的一部分,允许用户在生产环境中进行全系统、持续性能分析。如果您不熟悉持续性能分析,您可能想知道什么是 Universal Profiling 以及您为什么要关心它。这就是我们将在本文中讨论的内容。

效率再次变得重要

在我们深入探讨持续性能分析之前,让我们先从“我为什么要关心它?”这个问题开始。为此,我想谈谈效率以及我们行业中正在发生的一些大规模趋势,这些趋势正在使效率,特别是计算效率,再次变得重要。我说再次是因为过去,当计算机上的内存和存储非常有限时,您必须担心代码的每个字节,效率是开发软件的一个重要方面。

摩尔定律的终结

首先,摩尔定律时代正在走向尾声。这不可避免,仅仅是因为晶体管及其之间连接的物理尺寸限制。长期以来,软件开发人员可以不用担心复杂性和效率,因为下一代硬件将缓解任何负面的成本或性能影响。

如果您不能依赖不断进步的、速度越来越快的硬件,那么您应该对计算效率感兴趣。

向软件即服务 (SaaS) 的转变

另一个需要考虑的趋势是从向客户销售软件以自行运行的软件供应商到软件即服务业务的转变。传统的软件供应商不必太担心其代码的效率。这个问题主要由客户来解决;新的软件版本可能会要求更新到最新和性能最高的硬件。对于 SaaS 业务而言,低效的软件通常会降低客户的体验,并且肯定会影响利润。

如果您是一家处于竞争环境中的 SaaS 企业,那么您应该对计算效率感兴趣。

云迁移

接下来是正在进行的向云计算的 云迁移。云计算的好处之一是易于扩展,包括硬件和软件。在云中,我们不受数据中心限制或下一次硬件采购的限制。相反,我们只需启动更多云实例即可缓解性能问题。除了基础设施的可扩展性之外,微服务架构、容器化以及 Kubernetes 和类似编排工具的兴起意味着扩展服务比以往任何时候都更简单。在云环境中运行某个服务的数千个实例并不罕见。这种易于扩展性导致了另一个趋势,即许多企业正在面临飞涨的云计算成本。

如果您是一家云计算成本不断增加的企业,那么您应该对计算效率感兴趣。

我们不断变化的气候

最后,如果这些原因都不能引起您的兴趣,那么让我们考虑一个我们所有人都应该牢记的全球性问题 — 即气候变化。解决气候变化需要解决很多问题,但随着我们社会各个方面都依赖软件,我们肯定应该考虑计算效率。

Elastic 的杰出工程师、Optymize 的创始人之一 Thomas Dullien 指出,如果您可以在 800 台服务器上节省 20%,并假设每台服务器的功耗为 300W,则该代码更改每年可节省 160 公吨的二氧化碳排放量。这看起来可能只是九牛一毛,但如果所有企业都更加关注计算效率,它将产生影响。此外,我们不要忘记经济效益:节省的这 160 公吨二氧化碳排放量也代表着可观的年度成本节省。

如果您生活在地球上,那么您应该对计算效率感兴趣。

性能工程

谁的职责是担心计算效率?应用程序开发人员在开发代码时通常至少会关注效率。性能分析是开发人员了解其代码性能的常用方法,并且有大量的性能分析工具可供使用。然而,通常情况下,进度压力会胜过花费在性能分析和计算效率上的时间。此外,性能问题可能要等到应用程序在生产环境中大规模运行并与该环境中的其他所有内容交互(和竞争)后才会变得明显。许多性能分析工具不适合在生产环境中使用,因为它们需要代码检测和重新编译,并会增加大量开销。

当低效的代码进入生产环境并开始导致性能问题时,下一道防线是运营或 SRE 团队。他们的任务是保持一切正常运行,性能问题肯定会引起关注。APM 等可观测性工具可以阐明这些类型的问题,并引导团队找到特定的应用程序或服务,但这些工具对整个系统的可观测性有限。如果没有生产环境中的性能分析解决方案,第三方库和操作系统内核函数仍然是隐藏的。

那么,当需要调查生产环境中的性能问题时,这些团队可以做些什么呢?这就是持续剖析发挥作用的地方。

持续剖析

持续剖析并不是一个新概念。谷歌在 2010 年发表了一篇相关论文,并在那时开始在其环境中实施持续剖析。不久之后,Facebook 和 Netflix 也纷纷效仿。

通常,持续剖析工具一直是专门的性能工程或操作系统工程团队的领域,而这些团队通常只在像上述提到的大型企业中才能找到。其核心思想是在每台服务器上始终运行剖析。这样,当您的可观察性工具将您指向应用程序的特定部分,但您需要更详细地了解该应用程序究竟在何处消耗 CPU 资源时,剖析数据将随时可用。

持续剖析的另一个好处是,它可以提供您整个环境中 CPU 密集型软件的视图,无论是 CPU 密集型函数,还是在您的环境中每秒运行数千次的相对较小函数的聚合。

虽然剖析工具并不新鲜,但大多数工具都存在明显的差距。让我们来看看其中几个最显著的差距。

  • 可见性有限。 现代分布式应用程序由复杂的构建模块组合而成,包括自定义软件函数、第三方软件库、网络软件、操作系统服务,以及越来越多的编排软件(例如 Kubernetes)。要充分了解应用程序中发生的情况,您需要了解每个部分。但是,即使开发人员能够剖析自己的代码,其他一切仍然是不可见的。更糟糕的是,大多数剖析工具都需要对代码进行插桩,这会增加开销,因此即使是开发人员的代码也不会在生产环境中进行剖析。
  • 生产环境中缺少符号。 所有这些代码构建块通常都有描述性名称(有些比其他更直观),以便开发人员可以理解并理解它们。在运行的程序中,这些描述性名称通常称为符号。对于人类来说,要理解正在运行的应用程序的执行,这些名称非常重要。不幸的是,几乎所有在生产环境中运行的软件都为了节省空间而剥离了这些人类可读的符号,因为 CPU 执行软件不需要它们。如果没有所有符号,就更难理解应用程序中发生的完整情况。为了说明这一点,请回想一下您上次在移动设备上进行 SMS 聊天时,您只有地址簿中的一些聊天群组的人员,而其余的人员只是显示为电话号码 - 这使得很难分辨谁在说什么。

Elastic Universal Profiling:面向所有人的持续剖析

我们的目标是让任何企业,无论大小,都将计算效率作为他们运行的所有软件的核心考虑因素。Universal Profiling 对您的服务器施加的开销非常低,因此可以在生产中使用,并且可以提供对每台机器上运行的所有内容的可见性。它开启了查看业务中每个系统上运行的每一行代码的财务单位成本和 CO2 影响的可能性。我们是如何做到这一点的?

全系统可见性 — 简单

Universal Profiling 基于 eBPF,这意味着它对您的服务器施加的开销非常低(我们的目标是 CPU 占用率低于 1%,内存占用率低于 250MB),因为它不需要代码插桩。这种低开销意味着它可以持续在每台服务器上运行,即使在生产环境中也是如此。

eBPF 还允许我们在主机上部署单个剖析代理,并窥视操作系统内部,查看 CPU 上执行的每一行代码。这意味着我们可以看到上述描述的所有应用程序构建块——操作系统本身以及 容器化和编排框架,而无需复杂的配置。

所有符号

Universal Profiling 的一个关键部分是我们的托管符号化服务。这意味着您的服务器上不需要符号,这不仅消除了使用符号重新编译软件的需求,而且还通过允许 Universal Profiling 代理将非常稀疏的数据发送回 Elasticsearch 平台(在那里使用所有缺失的符号进行丰富)来帮助减少开销。由于我们维护着大多数流行的第三方软件库和 Linux 操作系统符号的存储库,Universal Profiling UI 可以向您显示所有符号。

您喜欢的语言,以及更多

Universal Profiling 是多语言的。我们支持当今所有流行的编程语言,包括 Python、Go、Java(以及任何其他基于 JVM 的语言)、Ruby、NodeJS、PHP、Perl,当然还有 C 和 C++,这非常关键,因为这些语言仍然是其他语言使用的许多第三方库的基础。此外,我们还支持剖析 本地代码,也称为机器语言。

说到本地代码,所有剖析工具都与特定类型的 CPU 相关联。如今,大多数工具仅支持 Intel x86 CPU 架构。Universal Profiling 支持 x86 和基于 ARM 的处理器。随着基于 ARM 的服务器的使用不断扩展,尤其是在云环境中,Universal Profiling 使您的持续剖析具有面向未来的能力。

如今,许多企业都采用多语言编程,也就是说,他们使用多种语言来构建应用程序,而 Universal Profiling 是唯一可用的可以跨所有这些语言构建整体视图的剖析器。这将帮助您查找环境中的热点,从而引导您发现需要进行更深入性能分析的“未知未知”。这可能是一个应该高效且轻量级的简单利率计算,但令人惊讶的是,它并非如此。或者,它可能是一项重用的频率比最初预期的要高得多的服务,导致每秒在您的环境中运行数千个实例,使其成为提高效率的主要目标。

可视化您的影响

Elastic Universal Profiling 具有直观的 UI,可以立即显示任何给定函数的影响,包括它在 CPU 上执行所花费的时间以及美元和碳排放方面的成本。

最后,由于大多数生产环境中的软件复杂性,很有可能进行代码更改会对整个环境产生意想不到的影响。代码更改可能是由于推出新功能或为了提高效率而进行的更改。在任何一种情况下,更改前后的差异视图都将帮助您了解影响。

让我们回顾一下

从我们都在其中工作的竞争激烈的商业环境的角度以及从我们星球不断变化的气候的挑战中生活来看,计算效率都是一个重要的话题。提高效率可能是一项具有挑战性的工作,但如果我们不知道将精力集中在哪里,我们就无法开始尝试进行改进。Elastic Universal Profiling 旨在为每个企业提供对计算效率的可见性。

您将在您的业务中如何使用 Elastic Universal Profiling?

  • 如果您是应用程序开发人员或站点可靠性团队的一员,Universal Profiling 将为您提供前所未有的应用程序可见性,这将不仅帮助您排除生产环境中的性能问题,还可以了解新功能的影响并提供最佳的用户体验。
  • 如果您参与云和基础设施财务管理以及容量规划,Universal Profiling 将为您提供前所未有的业务运行的每行代码的单位成本可见性。
  • 如果您参与业务的 ESG 计划,Universal Profiling 将为您提供前所未有的 CO2 排放可见性,并开辟新的途径来减少碳足迹。

这些只是一些示例。有关更多想法,请阅读 AppOmni 如何从 Elastic Universal Profiling 中获益

您可以立即开始使用 Elastic Universal Profiling!

此帖子中描述的任何功能或特性的发布和时间安排均由 Elastic 自行决定。任何当前不可用的功能或特性可能不会按时交付或根本不会交付。