7.2 开源的全链路追踪系统
全链路追踪系统已经是大型互联网应用程序的必备中间件,被广泛应用于监控系统或调用链追踪系统。现在有很多的开源全链路追踪系统供大家使用。本节主要从开源的全链路追踪系统架构等方面介绍比较知名的调用链追踪工具。
7.2.1 Dapper 简介
Dapper 是谷歌公司内部的调用链追踪系统,该系统没有开源。谷歌公司在 2010 年发表了论文 Dapper, a Large-Scale Distributed Systems Tracing Infrastructure,其中定义了追踪数据的格式、追踪方式及调用链追踪系统的架构等理论模型。大部分开源调用链追踪系统都是参照 Dapper 这篇论文提出的模型进行实现的。
如图 7.3 所示为 Dapper 收集数据的过程。Dapper 对谷歌公司内部的通用框架都提供了装配工具,服务部署了这些装配工具后就会对调用链进行追踪,装配工具将追踪信息保存到机器的磁盘上,每台服务器上部署的 Dapper daemon 会将追踪信息收集到 Dapper Collector 上。Dapper Collector 根据各个服务上报的追踪信息中包含的 traceId、spanId 和 parentSpanId 组装成完整的调用链,同时注明每个环节的耗时,然后进行存储并提供查询功能。
图 7.3 Dapper 架构图
7.2.2 Zipkin 简介
Zipkin 是 Twitter 公司按照 Dapper 论文中定义的追踪数据格式、追踪方式和架构进行了开发实现。Zipkin 主要包括 Collector、Storage 和 UI 界面等组件,同时提供数据查询功能,如图 7.4 所示。
图 7.4 Zipkin 架构图
Zipkin 的整个架构与 Dapper 非常类似,它装配了追踪工具的服务,首先将追踪信息上报给 Transport,然后 Collector 对追踪信息进行处理、存储,最后前端 UI 通过调用 API 查询存储中的信息并进行展示。其中,Transport 支持 HTTP、Kafka 等,Storage 存储支持 MySQL、Elasticsearch 和 Cassandra 等。Zipkin 的追踪是独立于开发语言的,只要满足 Zipkin 的追踪数据格式即可,它支持的框架包括 Grpc、Spring Web、Spring Boot 及 Spring Cloud 等。
7.2.3 Pinpoint 简介
Pinpoint 是韩国的搜索公司 Naver 基于 Google Dapper 开发的一款开源分布式调用链追踪系统。Pinpoint 对代码零侵入,运用了 Java Agent 字节码增强技术,只需要添加启动参数即可使用。
如图 7.5 所示,Pinpoint 框架的基本组成部分与 Zipkin 相似。Pinpoint Collector 作为收集组件,收集各种性能数据;Pinpoint Agent 和服务一起运行,作为探针采集数据;Pinpoint Web UI 是展示页面;HBase Storage 作为存储组件,将采集到的数据存到 HBase 中。
图 7.5 Pinpoint 架构图
Pinpoint 使用字节码增强技术对服务进行埋点,追踪信息通过 Thrift 等方式上传到 Pinpoint Collector, Pinpoint 负责计算统计指标,并将实时结果和原始追踪信息都存入 HBase,前端 Web UI 从 HBase 中读数据进行展示查询。
Pinpoint 支持追踪的服务包括 Spring Boot、Thrift 和 Dubbo 等。它采用字节码增强技术侵入服务,业务无须修改代码,具有实时统计展示、JVM 实时监控及调用链追踪服务的特点。
7.2.4 Skywalking 简介
Skywalking 是国内开源的一款调用链追踪系统。2019 年 4 月 17 日,SkyWalking 成为 Apache 的顶级项目,当前支持的开发语言包括 Java、.NET 和 Node.js 等,数据存储支持 MySQL 和 Elasticsearch 等。Skywalking 跟 Pinpoint 一样,采用字节码注入的方式实现代码的无侵入,支持云原生,目前增长势头强劲,其架构如图 7.6 所示。
图 7.6 Skywalking 架构图
Skywalking 在逻辑上包含 4 部分,分别是 Probes、Platform backend、Storage 和 UI。Probes 主要用于收集和格式化数据;Platform backend 支持数据聚合、分析和处理;Storage 用于数据存储,支持 MySQL、H2 和 ElasticSearch 等;Web UI 用于数据的可视化。
7.2.5 开源的全链路追踪系统比较
开源的全链路追踪系统从架构上看包括以下几个方面。
1. 采集方式
采集方式就是通常所说的埋点。埋点是调用链追踪系统与业务服务交互的部分,该部分需要做到低消耗与低侵入。Pinpoint 与 Skywalking 开源组件采用了字节码增强技术,可以做到低侵入。追踪数据的上传有两种方式,即 HTTP 和 TCP。此外,也可以通过日志采集方式进行追踪。Skywalking 的采集对吞吐量的影响比较小。
2. 数据计算
根据上传的追踪数据可以统计多维度指标,以了解服务的各种状态,如实时的 QPS、调用延时、延时分布、服务状态监控及服务依赖关系拓扑图等。
3. 数据存储
原始数据量比较大,一般存储在 HDFS、HBase、Elasticsearch 和 Cassandra 等分布式数据库中。统计报表类数据的数据量比较小,需要具有快速地按时间检索的能力,一般存储在 MySQL 或时序数据库中。
4. 数据展示
调用链追踪系统的数据最终通过 UI 界面展示,其中包含许多查询指标和调用链树形展示。Pinpoint 界面的展示效果更加丰富,Zipkin 的拓扑局限于服务与服务之间。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论