分布式跟踪系统选型与实践

APM(Application Performance Management & Monitoring)即应用性能管理和监控,主要通过对程序的性能指标进行分析和监控,来帮助开发、测试、运维人员来掌握程序的性能和运行情况。


APM原理与简介

APM通过汇聚业务系统各个处理环节的实时数据,分析业务系统各事务处理的路径和处理时间,实现对应用的全链路性能监测。

APM工具与传统的性能监控工具的区别在于,它不仅仅提供一些零散的资源监控点和指标,而是关注于系统内部执行和系统间调用的性能瓶颈分析。

目前市面的APM系统基本都是参考Google的大规模分布式系统的跟踪系统Dapper的论文(中文翻译)来实现的。

APM的核心思想

在应用服务各节点相互调用的时候,记录并传递一个应用级别的标记,用来关联整个调用链路。如何传递这些标记,与应用节点之间使用的通信协议有关。如使用http协议的话,标记会被加入到http头中。

分布式跟踪系统要做的是记录每次发送和接受动作的标识符和时间戳,将一次请求涉及的所有服务串联起来。其中涉及一些概念如下:

trace
表示对一次请求完整调用链的跟踪,一般是一个树形结构,由多个span组成,所有span使用一个全局的traceId。如下图所示:
在这里插入图片描述

图中描述了一个完整的跟踪(Trace),记录了Trace上的每个span的id和父id。如果一个span没有父id,则被成为root span。所有span共用一个跟踪id(图中未标出)。

span
跟踪的基本单元,一个span表示一个rpc调用,多个span组成一个trace。

APM的组成

一个APM涉及的基本模块包括:

  • 数据收集,在广度和效率上进行数据归并——Agent。
  • 数据加工,对数据进行整理,传输和存储——Collector。
  • 数据存储,将计算出来的指标和聚合链路信息实时保存起来——Storage。
  • 数据展示,高颜值,多功能展示——UI。

市面上的APM工具

近年来随着APM技术和市场的快速发展,相关产品也如雨后春笋般大量的涌了出来。

商业产品有国外的Dynatrace、Appdynamics、New Relic等,国内的RichAPM、OneAPM、阿里的业务实时监控服务ARMS和百度MTC等。

当然,开源产品也得到了迅速发展。主要的APM开源工具有Pinpoint,SkyWalking,Zipkin和CAT。

Pinpoint

这是一个韩国团队开源出来的,通过JavaAgent的机制,在字节码层面做植入,实现加入traceid和抓取性能数据的目的。由于是在字节码层面植入的,对业务代码的侵入性为零,使用较为广泛。
Pinpoint的基本架构图如下:
在这里插入图片描述

  • Pinpoint collect:用于收集各种性能数据。
  • Pinpoint Agent:探针,与应用服务器(如tomcat)关联,部署到同一台服务器上,用字节码增强来实现对应用代码的无侵入。
  • Pinpoint Web UI:数据展示层
  • Pinpoint Storage:数据存储层,将收集到的数据存储到Hbase中。

在Pinpoint中,核心数据结构由Span,Trace和TraceId组成。Span和Trace在上文中介绍过,TraceId是由TransactionId,SpanId和ParentSpanId组成的key的集合。TransactionId指明消息id,必须在整个服务器集中做到全局唯一。

SkyWalking

SkyWalking是国内的一个叫吴晟的人开源出来的,目前已经贡献给了Apache基金会,成为了Apache的顶级项目。
SkyWaling通过探针自动收集性能指标,并进行分布式跟踪,对业务代码的侵入性低。

Zipkin

该系统是twitter开源出来的。特点是轻量,使用部署简单。通过在Java程序中引入客户端,可隐式拦截http,thrift等形式的服务调用。

Cat

Cat是大众点评开源出来的,其实现跟踪的手段主要是在代码里硬编码,通过埋点的方式来做数据收集,侵入性较大。

开源APM比较

维度CatZipKinPinPointSkyWalking
实现方式代码埋点拦截请求,发送数据至ZipKin服务Java探针,字节码增强Java探针,字节码增强
接入方式代码侵入引入配置字节码植入,无侵入字节码植入,无侵入
数据存储Mysql,hdfsES,mysql,CassandraHbase,mysqlES,H2,Mysql,Tidb
分析粒度代码级,全局调用统计,报警,JVM监控接口级方法级,全局调用统计,报警方法级,全局调用统计
报表丰富
埋点方式侵入侵入无侵入无侵入
客户端支持Java、C/C++、Node.js、PythonJava、go、JavaScript、Ruby、scala、php(除官方支持外,社区还支持其他各种语言客户端)Java、PhpJava、C#、Php、Node.js、Go

除了上述的apm工具之外,还有elasticsearch APM。

Elastic stack在6.3版本开始推出了APM功能。ElasticAPM是基于Elastic Stack构建的应用程序性能监视系统,它可以嵌入应用进程内部,实时采集各种运行指标并传输到elasticsearch平台进行聚合统计,通过kibana界面端展示应用系统性能处理能力。

下文将介绍Elastic APM的安装和使用

参考资料

[1]. https://www.jianshu.com/p/d2d912cc982a
[2]. https://www.jianshu.com/p/07a00d66e703
[3]. https://cloud.tencent.com/developer/article/1501891

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值