目前,国内的APM市场虽未及全球市场的繁盛,也已开始呈现腾飞的态势,国内出品的APM产品可谓百花齐放。然而自从进入2016年之后,国内的IT从业者们开始纷纷把目光聚集在通过Server端植入探针来获取数据的后端Server类APM产品上面。从数据获取的角度来说,这类产品可以更加全面深入地展现业务的性能损耗,帮助企业技术团队更好地管理业务质量和IT设备质量。但是,现阶段国内Server类产品五花八门,想选择一款最适合自己团队的产品还应先从APM本身需求来看。
企业为什么需要APM服务?答案很简单,APM可以帮助企业技术团队更好的管理业务质量和IT设备质量。那么是不是所有的APM产品都能做到这两方面呢,以Server端APM产品为例,我们需要从如下几个方面来分析:
关键字:大量服务集群、多层级业务拓扑
首先,你的技术团队所运维或者运营的Server架构体系是什么规模的呢?是两三台服务器,还是数十台、数百台甚至上千台服务器?另外,你的业务拓扑关系是简单的单线调用关系还是极其复杂的网状的连环调用拓扑?我想,以目前国内互联网和APP发展的规模与势头,稍具规模的企业,其业务服务的拓扑架构以及后端服务器规模都不会太简单的。业务被执行时,一条请求就可能需要在各个应用服务器、web服务器、数据库、NoSQL等服务节点之间反复调用、跳转,这些节点可能组成一个大的业务集群,此外,我们还通常会在某个节点部署几台虚拟机来做负载均衡。因此,你所需要的Server端APM产品就必须支持复杂的逻辑结构和多层级的集群拓扑。当然,你所关注的业务集群不会仅是两三个,所以你的APM产品还需要支持同时接收并处理大量探针产生的数据。如果能够支持三个逻辑拓扑层级,并且可以同时处理500个以上探针的数据,应该能够满足现阶段国内大部分企业的技术团队了。
关键字:多线程、自定义代码
其次,我们使用Server端APM产品,最主要的目的还是做业务流程分析,找出业务被调用时,时间损耗最严重的代码。因此,若想准确定位出业务的性能损耗瓶颈,就需要探针能撷取到足够全面的数据。所以这里有两个因素需要注意:***,APM产品要支持异步线程调用的数据获取,并能够将异步线程数据与主线程数据以及业务调用关联起来。因为在请求调用中,除了主线程的处理之外,很可能还会调用其它服务,从而新开一到多个线程来工作。这些异步线程同主线程一样在消耗着整个业务的运行时间,且有可能对主线程产生拖累。第二,一定要支持用户自定义代码的监测。我们都知道,研发工程师在coding过程中会写出大量符合自己业务逻辑的自定义函数以便调用,这就会给探针获取数据造成瓶颈。所以说,支持‘关联异步线程’与‘自定义代码’这两个从使用者角度看来非常关键的需求点,正是一部分APM产品功能上相对欠缺的地方。
关键字:数据关联分析
除以上两点外,Server端APM产品还应在数据分析中突显出各环节数据的关联性。已经使用过APM相关产品的朋友会了解,APM平台中会提供很多不同的分析入口,如:业务过程、数据库、NoSQL等。使用者从不同的入口进入查看相应层面的数据。但是,在有一些APM平台中,这些模块是相互割裂的,使得大家无法对数据进行真正的钻取分析。更先进的做法是把各个层面的数据全部打通,让使用者可以对每条业务请求自由的串联查看。比如:从数据库入口进入后,可以关联查看每条错误SQL语句都是由哪些请求调用的。这一点对于细化关键问题尤为重要,也是我们需要着重关注的。