APM和分布式调用链选型之Skywalking、Pinpoint、Zipkin和CAT
随着企业IT系统不断扩大,以及对内快速诊断效率和对外SLA(服务品质协议,service-level agreement)的追求,对于业务系统的掌控度的要求越来越高。
在这种情况下,一般都会引入APM(Application Performance Management & Monitoring)系统,通过各种探针采集数据,收集关键指标,同时搭配数据呈现和监控告警,能够解决上述的大部分问题。
同时,随着RPC框架、微服务框架的普及和发展,微服务架构在企业级应用开发中得到了大量的应用。一次业务调用,往往可能跨越多个服务或容器,依赖的中间件也越来越多,其中调用链上任何一个节点出现异常,都可以导致业务出现波动或异常,这就导致服务调用链的异常诊断和定位变得非常麻烦,于是当务之急是调用链跟踪(tracing)。
APM和调用链跟踪在很多公司已经有了大量的实践,开源的并且能够开箱即用的产品,主要有Skywalking、Pinpoint、Zipkin、CAT等等。
一、Skywalking
Skywalking 是一个国人开源分布式追踪系统,用于收集、分析、聚合和可视化来自服务和云原生基础设施的数据。本身支持OpenTracing规范,优秀的设计提供了良好的扩展性,支持Java、PHP、.Net、NodeJs探针,数据容器为ElasticSearch或MySQL。
Skywalking整体架构主要由四部分组成:collector、agent、web、storage,具体如下图所示。
- skywalking-collector:链路数据归集器,数据可以落地Elasticsearch,单机也可以落地H2(不推荐),H2仅作为临时演示用。
- skywalking-web:web可视化平台,用来展示落地的数据。
- skywalking-agent:探针,使用Javaagent做字节码植入,无侵入式的收集,并通过HTTP或者gRPC方式发送数据到Skywalking Collector。
- Storage:Skywalking的存储,时间更迭,skywalking已经开发迭代到了6.x版本,在6.x版本中支持以Elasticsearch、Mysql、TiDB、H2、作为存储介质进行数据存储。
关于Skywalking架构设计、单机安装和集群部署、以及和Spring Cloud微服务项目的集成等等,在前面的章节有详细的介绍。
二、Pinpoint
Pinpoint是一个比较早并且成熟度也非常高的APM+调用链监控的项目,在全世界范围内均有用户使用,支持Java和PHP的探针,数据容器为HBase。
Pinpoint是韩国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能强大,接入端无代码侵入。
最新UI界面如下所示:
架构图如下所示:
PinpointCollector收集来自应用的监控数据,写入到HBase中存储,然后通过PinPoint Web UI界面可视化呈现。
三、Zipkin+Sleuth
Zipkin是Twitter开源的调用链分析工具,目前基于Spring Cloud Sleuth得到了广泛的使用,特点是轻量,使用部署简单。
Spring Cloud Sleuth是对Zipkin的一个封装,对于Span、Trace等信息的生成、接入HTTP Request,以及向Zipkin Server发送采集信息等全部自动完成。
Zipkin Server主要包括四个模块:
(1)Collector 接收或收集各应用传输的数据。
(2)Storage 存储接受或收集过来的数据,当前支持Memory,MySQL,Cassandra,Elasticsearch等,默认存储在内存中。
(3)API(Query) 负责查询Storage中存储的数据,提供简单的JSON API获取数据,主要提供给web UI使用。
(4)Web 提供简单的web界面。
四、CAT(Central Application Tracking)
CAT是大众点评开源的基于编码和配置的调用链分析,应用监控分析,日志采集,监控报警等一系列的监控平台工具。拥有大量的企业级用户,对于监控和报警整合比较紧密,支持Java、C/C++、.Net、Python、Go、NodeJs。不过,CAT目前主要通过侵入性的方式接入,数据容器包括HDFS(存储原始数据)和MySQL(二次统计)。
在整个CAT从开发至今,一直秉承着简单的架构就是最好的架构原则,整个CAT主要分为三个模块,cat-client,cat-consumer,cat-home。
- cat-client 提供给业务以及中间层埋点的底层sdk。
- cat-consumer 用于实时分析从客户端提供的数据。
- cat-home 作为提供给用户展示的控制端。
在实际开发和部署中,cat-consumer和cat-home是部署在一个jvm内部,每个CAT服务端都可以作为consumer也可以作为home,这样既能减少整个CAT层级结构,也可以增加整个系统稳定性。
五、Skywalking、Pinpoint、Zipkin和CAT分析比较
1. 基本实现原理
2.接入方式
3.监控和报警
4.页面UI可视化效果
5.监控数据存储
6. 性能比较
在Skywalking、Pinpoint、Zipkin等三种链路监控组件中,Skywalking的探针对吞吐量的影响最小,Zipkin的吞吐量居中,Pinpoint的探针对吞吐量的影响较为明显。在500并发用户时,Pinpoint测试服务的吞吐量从1385降低到774,影响很大。然后再看下CPU和memory的影响,在内部服务器进行的压测,对CPU和memory的影响都差不多在10%之内。
六、小结
综上所述,在APM和分布式调用链产品选型时,我个人推荐Skywalking。当然,还需要结合企业现状以及团队情况,做出综合判断。
通过本技术专栏对Skywalking的剖析和实践,Skywalking确实是一个优秀的APM+调用链跟踪监控系统,能够覆盖大部分使用场景,让研发和运维能够更加实时/准实时的了解线上服务的运行情况。