本文要点
- Prefix 是供开发人员使用的桌面端分析工具,为开发中的本地应用提供实时性能数据。
- Retrace 作为一种 APM 解决方案,针对的是服务器端工作负载的优化。
- 两个产品在对广为使用的框架和软件库(例如 ASP.NET 和实体框架)做性能分析时是开箱即可用的,无需任何额外的配置。
- Prefix 和 Retrace 都支持.NET Core。
Stackify 公司创立于 2012 年,是应用性能管理(APM,Application Performance Management)和代码分析工具领域的一支新生力量。为更多地了解该公司的 APM 产品 Prefix 和 Retrace,InfoQ 采访了 Stackify 的 CEO 和创始人 Matt Watson。
Prefix 简介
Prefix 是一种免费的轻量级代码分析工具,适用于.NET 和 Java 开发人员。它运行在开发人员的工作站端,在应用的创建和测试过程中给出有关代码的细节。我个人认为 Prefix 是世界上最好的开发人员日志查看工具。你可以通过 ASP.NET 的 Web 请求查看所有的日志语句及更多细节。例如,Prefix 会显示一个请求所需的时间、执行的 SQL 查询内容、HTTP 调用、异常及更多信息。
我们的目标是帮助开发人员理解代码中每一微秒的使用情况。当然,我们永远无法做到追踪所有的信息,但正努力做到追踪所有常见信息,诸如代码所用到的通用库和依赖。Prefix 追踪的信息还包括代码读取和发送响应所用的时间。很多开发人员从不考虑他们的代码所需的时间,包括读取进入的 POST 数据并反序列化,或是对大型响应做序列化。
并非所有的性能问题都与运行慢相关。应用的失败会很突然,很快。这时能看到错误抛出的所有异常就很有帮助了,即使它们是被捕获并抛出的。Prefix 还会对多次运行的 SQL 查询给出告警,这有助于捕获 N+1 类型 SQL 查询问题。
Prefix 提供了一种快速反馈循环机制,开发人员可以了解他们的代码做了什么,需多长的运行时间。这对于在开发循环中尽早找到应用问题十分有帮助。已有超过 1 万用户下载了 Prefix,他们分布在 100 多个国家。其中一些用户为了密切观察代码的工作情况,将 Prefix 作为监控显示在桌面的第二台显示器上,并保持日常运行。
Retrace 简介
Retrace 是我们推出的用于.NET 和 Java 的应用性能管理(APM,Application Performance Management)产品。它帮助开发人员理解他们的应用在所有服务器上的性能情况。开发人员可以快速看到运行时间最长的Web 请求以及原因,包括最慢的SQL 查询、外部Web 服务及更多其它细节。
与其他的APM 产品相比, Retrace 的独特性在于它是设计给开发人员使用的。很多 APM 解决方案主要被 IT 运维类型人员用于对高层业务事务的监控,价格非常昂贵。Retrace 特意简化了开发人员的使用,并且价格更可承受。
举个例子,我所供职的上一家企业使用了 AppDynamics,每年需支付 200,000 美元费用。AppDynamics 被主要用于监控该企业应用的整体性能,设置为仪表面板形式运行在办公室各处的电视机屏幕上。就这种使用方式而言,所需支付的费用过高,只是充当了一个昂贵的交通信号灯。该企业的 100 多名软件开发人员中没有任何人使用它,因为它难以快速地找到他们正在解决问题的症结所在。
APM 产品采集非常大量的数据,这些数据对开发人员可能十分有用。问题在于产品从未在设计上就用于此用途,而是设计用于 IT 运营,作为昂贵的应用监控产品出售。开发人员需要从不同的角度访问同一类型的数据。
开发人员只是想要理解他们的应用工作异常的原因。导致原因可能是应用错误、CPU 高占用、有服务器宕机、突发的高 Web 流量、SQL 查询运行慢,或是很多其它的问题。尽快指出实际导致问题的潜在因素是最为重要的。
Prefix 和 Retrace 在 Windows 上支持.NET Core。是什么使你们决定提供对.NET Core 1.0 的支持,而非等待 2.0 发布?
我们的这两个产品设计用于帮助开发人员理解应用的性能。由于我们的客户是.NET Core 等新技术最先采用者,他们会在第一时间就咨询是否我们的产品会支持这些新技术。我们知道这些新技术是 Microsoft .NET 开发的未来所在,我们希望能对它们提供很好的支持。
Microsoft Azure 自一面世就支持.NET Core。我们的很多用户使用 Azure 作为.NET Core 的后台。这导致这类用户也开始咨询我们的产品对在.NET Core 上支持Azure 应用监控的支持情况。
我们自身也想用.NET Core 将Prefix 移植到MacOS 上。鉴于Prefix 支持Windows 上的.NET 和Java,我们想在Mac 上对Java 重用同一代码库。我们现在使用了一种奇特的方式,支持在Mac 上对Java 应用做性能分析并用.NET 显示数据,这听上去就很奇特!
在移植到.NET Core 过程中有哪些意外的挑战?
如果你的目标在于仍然采用完整的Windows 上的.NET 框架并部署应用,将一个现有应用转换到.NET Core 是很容易的。只需创建一个新的项目文件,并重新添加所有的软件包依赖。对此我们写过一篇很好的文章,内容是关于在转换到.NET Core 中的经验教训,从中可以读到很多的细节。
如果你想在MacOS 和Linux 上运行的新的.NET Core CLR,事情就变得尤为复杂了。.NET Core 1.0 版支持的API 规模有限,此外,不存在System.Drawing 命名空间和DataTables 等类型。如果以“netcoreapp”为目标框架,你的.NET Core 应用可在Linux 或MacOS 上运行。
最大的问题在于.NET Core 1.0 在推出时的确是与第三方软件库兼容的。如果在应用中使用了任何第三方的软件库,你必须确保这些软件库已经被转化为支持.NET Core,否则你就不能使用这些软件库。log4net 是在推出1.0 版时缺失的最大软件库之一,它是.NET 开发人员最常用的日志框架。Stackify 使用的一种第三方的SQL 解析库也不支持.NET Core。因此我们被迫改用了另一种解决方案。
在.NET Core 2.0 中最大的挑战之一是引用尚未被.NET Core 完全支持的第三方软件库。为此Microsoft 提供了一个兼容垫片功能,在某种程度上很神奇地解决了这个问题。如果被引用软件库的一些功能不被Core 支持,我猜测会抛出PlatformNotSupportedException 或类似的异常。
Prefix 支持对 Retrace 采集数据的可视化。您能介绍一下这为开发人员提供了什么吗?
Prefix 和 Retrace 都可作为性能分析器收集代码的性能和行为细节。两者的主要不同之处在于,Prefix 设计上是运行在工作站端的,显示每一个发生的请求;而 Retrace 设计是针对服务器端的,它将所有性能细节聚合在一起。
Prefix 最酷的一个功能是可以根据在 Prefix 中查看的所有 Web 请求而从 Retrace 拉取相应的性能度量。这个功能十分有用,你可以将在本地看到信息与 QA 和生产系统做对比,可以看到在生产系统中请求的发生频率、平均响应时间和错误率,仅需点击一下鼠标就可以跳转到 Retrace,查看 Web 请求的细节。
Prefix 开箱即用地支持哪些库和框架?Retrace 也一样吗?
我们的目标是让这两个产品非常易于安装和使用。我们并不希望用户考虑如何设置他们的应用去采集性能分析数据,而是希望用户安装了我们的工具就能开箱即用地开展工作。因此我们正努力确保产品支持所有所有广为使用的依赖和框架。
Prefix 和 Retrace 都开箱即用地支持常见的.NET 应用,例如 ASP.NET、ASP.NET Core 和 Windows 服务。在 ASP.NET 中,你会操心如何在 IIS 内部和外部运行 MVC、WebForms、WCF、Owin、Nancy 和 Web API。它们由于.NET 2.0、.NET 4.5、32 位、64 位和.NET Core 而更为复杂了。正如你能想到的,有很多的应用场景。
两个产品目前都支持对 SQL Server、HTTP 调用、MongoDB、Elasticsearch、Redis、常见的 Azure 库和 AWS 库等的自动性能分析。在参考文档中提供了完整的支持列表。
就数据采集而言,Prefix 和Retrace 有什么差别?
两者的数据采集基本相同。Prefix 采集数据稍多,因为我们并不担心分析的性能开销问题。因为在Retrace 中,性能问题具有最高优先级,所以使用方式稍有不同。一些功能选项在Prefix 中是默认开启的,但在Retrace 中却是关闭的。
例如,在Prefix 中,我们可以收集并显示进入请求的头部和POST 数据,以及来自请求的完整响应。而Retrace 默认并不采集这些数据,但是提供允许采集的选项。
我们能定制Prefix 去对其他尚未支持的库做性能分析吗?
当然可以!这两个产品的卓越之处在于它们都基于通用的.NET 性能分析API,因此可以对代码中的所有方法或是第三方软件库做性能分析。我们提供了一个机制,你可以指定要做性能分析的命名空间、类和方法,然后这些将会包括在我们采集和显示的事务追踪中。
Prefix 和 Retrace 都使用标准的.NET CLR 分析 API。开发人员可借助这些 API 得到异常、垃圾收集、当前堆栈追踪、即时(JIT)编译、函数入口和出口、线程创建以及更多事件的信息。性能分析 API 支持 Windows 上的.NET Core,部分可运行于 Linux。我并不确认 Linux/MacOS 上性能分析 API 的最新移植情况,但是其中一些 API 在推出.NET Core 1.0 时依然处于实现状态。
关于被访问者
Matt Watson( @mattwatson81 )是 Stackify 的创始人和 CEO。他有 14 年的.NET 开发经验,热衷于帮助开发人员改进软件。在编写代码或记录博客之外,他会陪三个孩子玩耍。
查看英文原文: Introducing Prefix and Retrace : Interview with Stackify’s Founder Matt Watson
感谢冬雨对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ , @丁晓昀),微信(微信号: InfoQChina )关注我们。
活动推荐:
2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。
评论