连续分析:提高应用效率和成本效益的关键

作者:John Knoepfle

最近,Elastic Universal Profiling 已经正式发布。 它是我们可观察性解决方案的一部分,允许用户在生产环境中进行整个系统的连续分析。 如果你不熟悉连续分析,你可能想知道通用分析是什么以及为什么你应该关心。 这就是我们将在这篇文章中讨论的内容。

效率很重要(再次)

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

摩尔定律的终结

首先,摩尔定律时代即将结束。 这是不可避免的,仅仅是由于晶体管的尺寸以及它们之间的连接的物理限制。 长期以来,软件开发人员不必担心复杂性和效率,因为下一代硬件将减轻任何负面的成本或性能影响。

如果你不能依赖不断进步的更快硬件,那么你应该对计算效率感兴趣。

转向软件即服务

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

如果你是竞争环境中的 SaaS 企业,你应该对计算效率感兴趣。

云迁移

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

如果你的企业云成本不断增加,你应该对计算效率感兴趣。

我们不断变化的气候

最后,如果这些原因都没有激起你的兴趣,让我们考虑一个我们所有人都应该牢记的全球问题 ------ 即气候变化。 应对气候变化需要解决很多问题,但由于我们社会各个领域都依赖软件,计算效率当然是我们应该考虑的问题。

Elastic 杰出工程师、Optymize 创始人之一 Thomas Dullien 指出,如果你可以在 800 台服务器上节省 20%,并假设每台服务器的功耗为 300W,则代码更改相当于每年节省 160 吨二氧化碳。 这似乎只是杯水车薪,但如果所有企业都更多地关注计算效率,它将产生影响。 此外,我们不要忘记经济效益:减少 160 吨二氧化碳排放也意味着每年可节省大量成本。

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

性能工程

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

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

那么,当需要调查生产中的性能问题时,这些团队可以做什么呢? 这就是连续分析的用武之地。

连续分析

连续分析并不是一个新想法。 Google 在 2010 年发表了一篇相关论文,并开始在其环境中实施持续分析。 不久之后,Facebook 和 Netflix 也纷纷效仿。

通常,连续分析工具一直是专门的性能工程或操作系统工程团队的领域,这些团队通常只出现在像上面提到的超大规模企业中。 关键思想是始终在每台服务器上运行分析。 这样,当你的可观察性工具将你指向应用程序的特定部分,但你需要更详细地了解该应用程序消耗 CPU 资源的具体位置时,分析数据就会在那里,可供使用。

连续分析的另一个好处是,它提供了整个环境中 CPU 密集型软件的视图 - 无论是 CPU 密集型功能还是环境中每秒运行数千次的相对较小功能的集合。

虽然分析工具并不新鲜,但大多数都存在显着差距。 让我们看看几个最重要的。

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

Elastic 通用分析:为所有人提供连续分析

我们的目标是让任何企业,无论规模大小,都能将计算效率作为其运行的所有软件的核心考虑因素。 通用分析对服务器的开销非常低,因此可以在生产中使用,并且可以提供每台计算机上运行的所有内容的可见性。 它提供了查看业务中每个系统上运行的每行代码的财务单位成本和二氧化碳影响的可能性。 我们该怎么做呢?

整个系统的可见性 ------ 简单

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

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

所有符号

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

你最喜欢的语言,然后是一些

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

说到本机代码,所有分析工具都与特定类型的 CPU 相关。 目前大多数工具仅支持 Intel x86 CPU 架构。 通用分析支持基于 x86 和 ARM 的处理器。 随着基于 ARM 的服务器的广泛使用,尤其是在云环境中,通用分析可以为你的持续分析提供面向未来的保障。

显示 Python、Native、Kernel 和 Java 代码跟踪的火焰图

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

可视化你的影响

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

任何功能的年化美元成本和二氧化碳排放量

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

更高效的哈希函数的性能、二氧化碳排放和成本改进

让我们回顾一下

无论是从我们所工作的竞争异常激烈的商业环境的角度来看,还是从我们面临的地球气候变化的挑战来看,计算效率都是一个重要的话题。 提高效率可能是一项具有挑战性的工作,但如果不知道将努力的重点放在哪里,我们甚至无法开始尝试进行改进。 弹性通用分析旨在为每个企业提供计算效率的可见性。

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

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

这些只是几个例子。 如需更多想法,请阅读 AppOmni 如何从 Elastic 通用分析中受益

你现在就可以开始使用 Elastic Universal Profiling!

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

原文:What is Elastic Universal Profiling? A continuous profiling solution for all | Elastic Blog

相关推荐
hummhumm25 分钟前
第 25 章 - Golang 项目结构
java·开发语言·前端·后端·python·elasticsearch·golang
java1234_小锋4 小时前
Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?
大数据·elasticsearch·jenkins
Elastic 中国社区官方博客4 小时前
Elasticsearch 开放推理 API 增加了对 IBM watsonx.ai Slate 嵌入模型的支持
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
我的运维人生4 小时前
Elasticsearch实战应用:构建高效搜索与分析平台
大数据·elasticsearch·jenkins·运维开发·技术共享
Mephisto.java8 小时前
【大数据学习 | Spark】Spark的改变分区的算子
大数据·elasticsearch·oracle·spark·kafka·memcache
mqiqe8 小时前
Elasticsearch 分词器
python·elasticsearch
小马爱打代码8 小时前
Elasticsearch简介与实操
大数据·elasticsearch·搜索引擎
java1234_小锋17 小时前
Elasticsearch是如何实现Master选举的?
大数据·elasticsearch·搜索引擎
梦幻通灵1 天前
ES分词环境实战
大数据·elasticsearch·搜索引擎
Elastic 中国社区官方博客1 天前
Elasticsearch 中的热点以及如何使用 AutoOps 解决它们
大数据·运维·elasticsearch·搜索引擎·全文检索