@Rays
2017-03-06T11:52:18.000000Z
字数 4336
阅读 2102
未分类
摘要: 创立于2011年的Stackify公司是APM领域的新生力量,它推出的APM产品Prefix和Retrace产品分别针对桌面端和服务器端。产品基于.NET性能分析API构建,具有很好的易用性和普适性。本文是InfoQ对该公司CEO和创始人Matt Watson的访谈。
作者: Pierre-Luc Maheu
正文:
本文要点
- Prefix是供开发人员使用的桌面端分析工具,为开发中的本地应用提供实时性能数据。
- Retrace作为一种APM解决方案,针对的是服务器端工作负载的优化。
- 两个产品在对广为使用的框架和软件库(例如ASP.NET和实体框架)做性能分析时是开箱即可用的,无需任何额外的配置。
- Prefix和Retrace都支持.NET Core。
Stackify公司创立于2012年,是应用性能管理(APM,Application Performance Management)和代码分析工具领域的一支新生力量。为更多地了解该公司的APM产品Prefix和Retrace,InfoQ采访了Stackify的CEO和创始人Matt Watson。
Prefix是一种免费的轻量级代码分析工具,适用于.NET和Java开发人员。它运行在开发人员的工作站端,在应用的创建和测试过程中给出有关代码的细节。我个人认为Prefix是世界上最好的开发人员日志查看工具。你可以通过ASP.NET的Web请求查看所有的日志语句及更多细节。例如,Prefix会显示一个请求所需的时间、执行的SQL查询内容、HTTP调用、异常及更多信息。
我们的目标是帮助开发人员理解代码中每一微秒的使用情况。当然,我们永远无法做到追踪所有的信息,但正努力做到追踪所有常见信息,诸如代码所用到的通用库和依赖。Prefix追踪的信息还包括代码读取和发送响应所用的时间。很多开发人员从不考虑他们的代码所需的时间,包括读取进入的POST数据并反序列化,或是对大型响应做序列化。
并非所有的性能问题都与运行慢相关。应用的失败会很突然,很快。这时能看到错误抛出的所有异常就很有帮助了,即使它们是被捕获并抛出的。Prefix还会对多次运行的SQL查询给出告警,这有助于捕获N+1类型SQL查询问题。
Prefix提供了一种快速反馈循环机制,开发人员可以了解他们的代码做了什么,需多长的运行时间。这对于在开发循环中尽早找到应用问题十分有帮助。已有超过1万用户下载了Prefix,他们分布在100多个国家。其中一些用户为了密切观察代码的工作情况,将Prefix作为监控显示在桌面的第二台显示器上,并保持日常运行。
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查询运行慢,或是很多其它的问题。尽快指出实际导致问题的潜在因素是最为重要的。
我们的这两个产品设计用于帮助开发人员理解应用的性能。由于我们的客户是.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显示数据,这听上去就很奇特!
如果你的目标在于仍然采用完整的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最酷的一个功能是可以根据在Prefix中查看的所有Web请求而从Retrace拉取相应的性能度量。这个功能十分有用,你可以将在本地看到信息与QA和生产系统做对比,可以看到在生产系统中请求的发生频率、平均响应时间和错误率,仅需点击一下鼠标就可以跳转到Retrace,查看Web请求的细节。
我们的目标是让这两个产品非常易于安装和使用。我们并不希望用户考虑如何设置他们的应用去采集性能分析数据,而是希望用户安装了我们的工具就能开箱即用地开展工作。因此我们正努力确保产品支持所有所有广为使用的依赖和框架。
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中,我们可以收集并显示进入请求的头部和POST数据,以及来自请求的完整响应。而Retrace默认并不采集这些数据,但是提供允许采集的选项。
当然可以!这两个产品的卓越之处在于它们都基于通用的.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