1. APM简述
APM (Application Performance Management)是对企业的应用系统进行实时监控,它是用于实现对应用程序性能管理和故障管理的系统化的解决方案。
2.APM主要解决的问题:
- 集中式度量系统
 - 分布式全链接追踪系统
 - 集中式日志系统(elk)
 
......
3.分布式调用追踪(APM)一览
- Google的Drapper--未开源,最早的APM
 - 阿里-鹰眼--未开源
 - 大众点评——CAT--跨服务的跟踪功能与点评内部的RPC框架集成,这部分未开源且项目在2014.1已经停止维护。服务粒度的监控,通过代码埋点的方式来实现监控,比如: 拦截器,注解,过滤器等,对代码的侵入性较大,集成成本较高。
 - Hydra-京东: 与dubbo框架集成,对于服务级别的跟踪统计,现有业务可以无缝接入。对于细粒度的兴趣点,需要业务人员手动添加。开源项目已于2013年6月停止维护
 - PinPoint-naver,字节码探针技术,代码无侵入,体系完善不易修改,支持java,技术栈支持dubbo。其他语言社区支援中
 - zipkin——java方便集成于springcloud,社区支持的插件也包括dubbo、rabbit、mysql、httpclient等(https://github.com/openzipkin/brave/tree/master/instrumentation),同时支持php、go、js等语言客户端,界面功能较为简单,本身无告警功能,可能需要二次开发。代码入侵度小。
 - uber-jaeger, Jaeger支持java/c++/go/node/php,在界面上较为完善(对比zipkin),但是也无告警功能。代码入侵度小。dubbo目前无插件支持,可二次开发。
 - skywalking ——华为,类似于PinPoint,目前还在apache孵化中,网上吞吐量对比中强于pinpoint,实际未验证。本身支持dubbo
 
4.方案对比
|   pinpoint  |   zipkin  |   jaeger  |   skywalking  | |
|   OpenTracing兼容  |   否  |   是  |   是  |   是  | 
|   客户端支持语言  |   java、php  |   java,c#,go,php等  |   java,c#,go,php等  |   Java, .NET Core, NodeJS and PHP  | 
|   存储  |   hbase  |   ES,mysql,Cassandra,内存  |   ES,kafka,Cassandra,内存  |   ES,H2,mysql,TIDB,sharding sphere  | 
|   传输协议支持  |   thrift  |   http、MQ  |   udp/http  |   gRPC  | 
|   ui丰富程度  |   高  |   低  |   中  |   中  | 
|   实现方式-代码侵入性  |   字节码注入,无侵入  |   拦截请求,侵入  |   拦截请求,侵入  |   字节码注入,无侵入  | 
|   扩展性  |   低  |   高  |   高  |   中  | 
|   trace查询  |   不支持  |   支持  |   支持  |   支持  | 
|   告警支持  |   支持  |   不支持  |   不支持  |   支持  | 
|   jvm监控  |   支持  |   不支持  |   不支持  |   支持  | 
|   性能损失  |   高  |   中  |   中  |   低  | 
5.各方案参考链接
1.pinpoint-naver
github: https://github.com/naver/pinpoint
docker快速体验:https://github.com/naver/pinpoint-docker
2.zipkin-推特:
github: https://github.com/openzipkin/zipkin
页面详解:sleuth+zipkin ui界面详解(二)_sharedCode源码交流-CSDN博客_zipkin 界面
zipkin于php对接:https://www.colabug.com/1872361.html
3.jaeger-uber
部分参考资料:
jaeger简介,部署,入门实践 Uber jaeger--一个基于Go的分布式追踪系统 - 北极之北的个人空间 - OSCHINA - 中文开源技术交流社区
jaeger——java实现 https://my.oschina.net/u/1789379/blog/1551421
Uber分布式追踪系统Jaeger使用介绍和案例(PHP Hprose Go 跨语言调用)
https://segmentfault.com/a/1190000011636957
全链路监控Jaeger搭建实战 全链路监控Jaeger搭建实战 - 简书
jaeger官网快速开始 Getting started — Jaeger documentation
4.skywalking(推荐)
github: https://github.com/apache/incubator-skywalking
SkyWalking 分布式追踪系统 SkyWalking 分布式追踪系统 - 简书
Apache SkyWalking 5.0中文版图文详解使用手册
http://skywalking.apache.org/zh/blog/2018-12-18-Apache-SkyWalking-5-0-UserGuide.html
skywalking学习笔记 skywalking学习笔记 - 掘金
6.参考资料
- 分布式链路追踪技术对比 分布式链路追踪技术对比_moonpure的专栏-CSDN博客_链路追踪对比
 - 回到网易后开源 APM 技术选型与实战 回到网易后开源APM技术选型与实战-InfoQ
 - zipkin vs jaeger https://segmentfault.com/a/1190000015308746
 - 调用链选型之Zipkin,Pinpoint,SkyWalking,CAT 调用链选型之Zipkin,Pinpoint,SkyWalking,CAT - 简书
 










