John Knoepfle

持续性能分析:构建更高效、更经济应用程序的关键

在这篇文章中,我们将讨论计算效率为何重要,以及 Elastic 通用性能分析如何帮助您的企业在生产环境中使用持续性能分析,从而使您的业务软件达到最高的效率。

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

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

效率再次变得重要

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

摩尔定律的终结

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

如果您不能依赖于永无止境的更快速硬件的进步,那么您应该关注计算效率。

向软件即服务的转变

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

如果您是在竞争环境中的 SaaS 企业,那么您应该关注计算效率。

云迁移

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

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

我们正在变化的气候

最后,如果这些原因都没有引起您的兴趣,让我们考虑一个我们所有人都应该牢记的全球性问题——即气候变化。解决气候变化需要处理许多问题,但鉴于我们在社会各个方面都依赖于软件,计算效率肯定是我们应该思考的事情。

Elastic 首席工程师兼 Optymize 创始人之一 Thomas Dullien 指出,如果您能够在 800 台服务器上节省 20% 的能源,并假设每台服务器的功耗为 300W,那么代码更改每年可节省 160 吨 CO2。这似乎微不足道,但如果所有企业都更加关注计算效率,它将产生影响。此外,我们也不应忘记财务效益:这 160 吨 CO2 的节省也代表着可观的年度成本节省。

如果您居住在地球上,那么您应该关注计算效率。

性能工程

谁应该负责计算效率?应用程序开发人员通常会在开发代码时至少关注一些效率问题。性能分析是开发人员了解其代码性能的一种常用方法,并且可以使用各种性能分析工具。但是,时间安排压力通常会胜过花在性能分析和计算效率上的时间。此外,性能问题可能直到应用程序在生产环境中大规模运行并与该环境中的所有其他内容交互(和竞争)时才会显现出来。许多性能分析工具不适合在生产环境中使用,因为它们需要代码检测和重新编译,并会增加大量的开销。

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

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

持续性能分析

持续性能分析并非一个新概念。Google 在 2010 年发表了一篇关于它的论文,并开始在其环境中实施持续性能分析。Facebook 和 Netflix 不久后也纷纷效仿。

通常,持续性能分析工具一直是专门的性能工程或操作系统工程团队的领域,这些团队通常仅存在于上述那些极其大型的企业中。关键思想是在所有服务器上始终运行性能分析。这样,当您的可观测性工具将您引导到应用程序的特定部分时,但您需要更详细地了解该应用程序究竟在哪里消耗 CPU 资源,则性能分析数据将随时可用。

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

虽然性能分析工具并非新事物,但大多数工具都存在显著的不足。让我们来看几个最显著的不足。

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

Elastic 通用性能分析:适用于所有人的持续性能分析

我们的目标是让任何规模的企业都能将计算效率作为其运行的所有软件的核心考量因素。通用性能分析对您的服务器造成的开销非常低,因此它可以在生产环境中使用,并且可以查看每台机器上运行的所有内容。它开启了查看每行代码在您企业每个系统上运行的财务单位成本和 CO2 影响的可能性。我们如何做到这一点呢?

全系统可见性——简单

通用性能分析基于 eBPF,这意味着它对您的服务器造成的开销非常低(我们的目标是 CPU 开销低于 1%,RAM 开销低于 250MB),因为它不需要代码检测。低开销意味着它可以连续运行,在每台服务器上运行,即使在生产环境中也是如此。

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

所有符号

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

您最喜欢的语言,以及更多

通用性能分析是多语言的。我们支持当今所有流行的编程语言,包括 Python、Go、Java(以及任何其他基于 JVM 的语言)、Ruby、NodeJS、PHP、Perl,当然还有 C 和 C++,这至关重要,因为这些语言仍然是许多其他语言使用的第三方库的基础。此外,我们还支持分析 原生代码,也就是机器语言。

说到原生代码,所有性能分析工具都与特定类型的 CPU 相关联。如今,大多数工具只支持 Intel x86 CPU 架构。通用性能分析支持 x86 和基于 ARM 的处理器。随着基于 ARM 的服务器(尤其是在云环境中)的广泛使用,通用性能分析使您的持续性能分析具有前瞻性。

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

可视化您的影响

Elastic 通用性能分析具有直观的 UI,可以立即向您显示任何给定函数的影响,包括其在 CPU 上执行的时间以及这在美元和碳排放方面的成本。

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

让我们回顾一下

计算效率是一个重要的话题,从我们所有人都在工作的超竞争商业环境的角度来看,以及从应对我们星球气候变化的挑战的角度来看都是如此。提高效率可能是一项具有挑战性的工作,但如果没有知道将精力集中在哪里,我们就无法开始尝试改进。Elastic 通用性能分析旨在为每个企业提供计算效率的可见性。

您将在您的企业中如何使用 Elastic 通用性能分析?

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

这些只是一些例子。有关更多想法,请阅读 AppOmni 如何受益于 Elastic 通用性能分析

您现在就可以 开始使用 Elastic 通用性能分析!

本文中描述的任何功能或功能的发布和时间安排完全由 Elastic 自行决定。任何当前不可用的功能或功能可能无法按时或根本无法交付。

分享这篇文章