选型目的
随着公司业务的与日俱增,各个系统也越来越复杂,服务间的调用,服务的依赖,以及分析服务的性能问题也越棘手,因此引入服务追踪系统尤为重要。现有的服务追踪体系,基本都是参考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的展示界面要丰富的多,并且提供各种统计方式;