简介
-
Zipkin
由Twitter公司开源,开放源代码分布式的跟踪系统,用于收集服务的定时数据,以解决微服务架构中的延迟问题,包括:数据的收集、存储、查找和展现。
-
Pinpoint
pinpoint是韩国人开源的 APM (Application Performance Management/应用性能管理)工具 - Pinpoint。它基于google Dapper开发,目标就是为n(n>=1)层架构开发新的跟踪平台,为n层架构的系统提供解决方案。pinpoint能够对基于java的大规模分布式系统和应用做调用链的跟踪。pinpoint提供了一个web页面展示分布式系统的拓扑图以及系统这各个组件之间关系。pinpoint 有3个主要组件组成:日志收集器[Collector]、控制台[Web]、代理[Agent],采用HBase进行存储。
Supported Modules
- JDK 6+
- Tomcat 6/7/8/9, Jetty 8/9, JBoss EAP 6/7, Resin 4, Websphere 6/7/8, Vertx 3.3/3.4/3.5, Weblogic 10/11g/12c, Undertow
- Spring, Spring Boot (Embedded Tomcat, Jetty, Undertow), Spring asynchronous communication
- Apache HTTP Client 3.x/4.x, JDK HttpConnector, GoogleHttpClient, OkHttpClient, NingAsyncHttpClient, Akka-http, Apache CXF
- Thrift Client, Thrift Service, DUBBO PROVIDER, DUBBO CONSUMER, GRPC
- ActiveMQ, RabbitMQ, Kafka
- MySQL, Oracle, MSSQL(jtds), CUBRID, POSTGRESQL, MARIA
- Arcus, Memcached, Redis(Jedis, Lettuce), CASSANDRA, MongoDB, Hbase, Elasticsearch
- iBATIS, MyBatis
- DBCP, DBCP2, HIKARICP, DRUID
- gson, Jackson, Json Lib, Fastjson
- log4j, Logback, log4j2
-
SkyWalking(个人推荐)
国产的优秀APM组件,2015年由个人吴晟(华为开发者)开源 ,2017年加入Apache孵化器;是一个对JAVA分布式应用程序集群的业务运行情况进行追踪、告警和分析的系统。使用java探针字节码增加技术,实现对整个应用的监控 ;对应用零侵入。针对分布式系统的应用性能监控系统,特别针对微服务、cloud native和容器化(Docker, Kubernetes, Mesos)架构, 其核心是个分布式追踪系统;
Supported Modules:最全的支持
-
CAT
CAT 作为服务端项目基础组件,提供了 Java, C/C++, Node.js, Python, Go 等多语言客户端,已经在美团点评的基础架构中间件框架(MVC框架,RPC框架,数据库框架,缓存框架等,消息队列,配置系统等)深度集成,为美团点评各业务线提供系统丰富的性能指标、健康状况、实时告警等。
-
Spring Cloud Sleuth
Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案,并且兼容支持了 zipkin,你只需要在pom文件中引入相应的依赖即可。
特性
Zipkin+Sleuth | Pinpoint | SkyWalking | CAT | |
开发者 | 韩国 | Apache | 美团 | |
实现方式 | 拦截请求,发送(HTTP,mq)数据至zipkin服务 | java探针,字节码增强 | java探针,字节码增强,配置文件 | 代码埋点(拦截器,注解,过滤器等) |
接入方式 | 基于linkerd或者sleuth方式,引入配置即可 | javaagent字节码 | javaagent字节码 | 代码侵入 |
agent到collector的协议 | http,MQ | thrift,DUBBO,gRPC | gRPC | http/tcp |
OpenTracing | 支持 | x | 支持 | x |
颗粒度 | 接口级 | 方法 | 方法 | 代码级 |
全局调用统计 | x | 支持 | 支持 | 支持 |
traceid查询 | 支持 | x | 支持 | x |
虚拟机监控 | x | x | JVM、CLR | 支持 |
健壮度UI面板 | 中 | 优 | 良 | 优 |
数据存储 | es,mysql,Cassandra,mem | Hbase | ES,H2,mysql,influxdb | mysql,hdfs |
社区star(2020.5) | 12.9K | 10.3K | 13.4K | 13.3K |
当前版本 | 2.21.5 | 2.0.4 | 8.0.1 | 3.0.0 |
集群支持 | 单点 | 单点、zk、k8s、consul、etcd |
性能
- 环境
1核2g服务器
ek服务输出+返回字符串。
@RestController
@RequestMapping(value = "ek/", produces = "application/json; charset=utf-8")
public class HiController {
private static final Logger logger = LoggerFactory.getLogger(HiController.class);
@Autowired
private DoFeignService doFeignService;
@RequestMapping("hi/{name}")
public String hi(@PathVariable int name) throws Exception {
System.out.println(name+" ok ");
return name+" ok ";
}
}
- wrk压测命令:
wrk --latency -t5 -c300 -d30s http://10.244.0.1:8092/ek/hi/0
- 压测结果
- | 无apm | SkyWalking | zipkin(100%) | zipkin(100/s) |
---|---|---|---|---|
rps | 43529.36 | 41430.91 | 35509.00 | 43016.07 |
- SkyWalking:影响性能在5%左右
- zipkin:根据采集样本数浮动,影响范围0-20%左右。
参考:
别家之言:
他们都提供了分布式服务跟踪的能力,pinpoint以及skywalking不仅仅提供了分布式服务跟踪的能力,
还提供了其他性能监控,是一个APM解决方案。zipkin主要是分布式服务跟踪,同时与SpringCloud进行有效的集成。
个人觉得pinpoint以及skywalking部署相对麻烦一些。
江湖上都推荐pingpoint,zipkin的监控易于搭建,但是监控的东西很简单
pinpoint偏向于中等的分布式规模,拓扑和关系不会做的很深,会限制深度。优势是做的时间比较长,理论上稳定一些。缺点是hbase本身就是一个重度运维中间件,要考虑自身情况
skywalking会倾向于微服务的分布式系统,为自研的探针提供了完善的接入支持,我们目前就在给当当做这个接入当时的支持。同时我们会着重比如服务的依赖关系,服务的统计指标。我们对于应用,只需要配置应用id,不需要实例id,对容器环境毕竟k8,linkerd友好
zipkin强在生态和范围,国外的绝大多数组件都提供了集成方案,只需要少量修改代码或者配置就可以。比如linkerd原生就支持zipkin
部署上如果你容量不大,pinpoint负担最大,因为hbase,zipkin和skywalking差不多。存储都可以用es
另外,zipkin和skywalking属于opentracing规范体系下,可以共享相同的手动埋点api,skywalking针对非rpc埋点,甚至只需要标注就可以,零开发成本。而pinpoint是必须学习开发插件的。
不算自己的东西,相对pinpoint,我肯定会喜欢zipkin。我能说不喜欢棒子和他们不靠谱的社区行为么…
还是feign的作者。opentracing起草者之一。
个人理解:
- 使用场景:pinpoint虽然功能强大,但是对国内流行的技术支持不够,比如es、rocketmq、Redisson等,这方便国产的SkyWalking都提供了很好的支持。
- 性能:pinpoint因为监控力度更细导致对服务性能影响更大。
具体选型还是要根据具体需求来定。