分布式-技术专区-APM监控系统服务跟踪技术选型参考


选型目的

  随着公司业务的与日俱增,各个系统也越来越复杂,服务间的调用,服务的依赖,以及分析服务的性能问题也越棘手,因此引入服务追踪系统尤为重要。现有的服务追踪体系,基本都是参考Google的Dapper的体系来做的。通过跟踪请求的处理过程,来对应用系统在前后端处理、服务端调用的性能消耗进行跟踪(每个请求的完整调用链路,收集调用链路上每个服务的性能数据),方便工程师能够快速定位问题。

主要选型技术

  • Zipkin
  • Pinpoint

一.Zipkin

简介

  twitter开源出来的,参考Dapper的体系实现,为分布式链路调用监控系统,聚合各业务系统调用延迟数据,达到链路调用监控跟踪的目的。

实现

  Zipkin的一个叫Brave的组件来实现对应用内部的性能分析数据采集,通过实现一系列的java拦截器,来做到对http/servlet请求、数据库访问的调用过程跟踪。然后通过在spring之类的配置文件里加入这些拦截器,完成对java应用的性能数据采集。

简介

  twitter开源出来的,参考Dapper的体系实现,为分布式链路调用监控系统,聚合各业务系统调用延迟数据,达到链路调用监控跟踪的目的。

实现

  Zipkin的一个叫Brave的组件来实现对应用内部的性能分析数据采集,通过实现一系列的java拦截器,来做到对http/servlet请求、数据库访问的调用过程跟踪。然后通过在spring之类的配置文件里加入这些拦截器,完成对java应用的性能数据采集。

简介

  pinpoint是开源在github上的一款APM监控工具,它是用Java编写的,用于大规模分布式系统监控。它对性能的影响最小(只增加约3%资源利用率),安装agent是无侵入式的。

实现

  通过JavaAgent的机制来做字节码代码植入,实现加入traceid和抓取性能数据的目的。 

三.对比

侵入性

  pinPoint采用的是Java Agent向节点应用指定的函数前注入before和after逻辑,向服务器发送消息,因此基本不用修改代码,只需简单修改一下配置;--零侵入

  zipKin采用的是布点等方式,需要修改程序源码进行预埋点,相对麻烦一点;

  dubbo实现Filter、http新增拦截器等方式进行布点。 ---侵入、更灵活

性能

  Pinpoint 采用二进制格式、异步、UDP的方式进行采样,zipkin异步传输。

扩展性

  pinPoint原理是Java Agent,因此支持的模块不多,如下:

  • Tomcat 6/7/8, Jetty 8/9
  • Spring, Spring Boot
  • Apache HTTP Client 3.x/4.x, JDK HttpConnector, GoogleHttpClient, OkHttpClient, NingAsyncHttpClient
  • Thrift Client, Thrift Service
  • MySQL, Oracle, MSSQL, CUBRID, DBCP, POSTGRESQL
  • Arcus, Memcached, Redis
  • iBATIS, MyBatis
  • gson, Jackson, Json Lib
  • log4j, Logback

  zipKin基本可以支持所有的应用、所有的语言,并接提供了各种客户端,例如java的brave客户端,js的zipkin-js客户端

数据展示

  zipKin提供最简单的展示界面,只是简单的展示链路所用时间;

pinPoint的展示界面要丰富的多,并且提供各种统计方式;

相关