Prefix 和 Retrace 简介:采访 Stackify 的创始人 Matt Watson

阅读数:1000 2017 年 3 月 26 日 18:09

本文要点

  • 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 时依然处于实现状态。

关于被访问者

Prefix和Retrace简介:采访Stackify的创始人Matt WatsonMatt Watson @mattwatson81 )是 Stackify 的创始人和 CEO。他有 14 年的.NET 开发经验,热衷于帮助开发人员改进软件。在编写代码或记录博客之外,他会陪三个孩子玩耍。

查看英文原文: Introducing Prefix and Retrace : Interview with Stackify's Founder Matt Watson


感谢冬雨对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

评论

发布