分布式追踪系统zipkin介绍

简介: 分布式追踪系统zipkin介绍

在前一期我们简单的介绍了作为分布式追踪系统的zipkin,并以一个demo简单演示了zipkin的使用,本文我们来从整体介绍一下zipkin的技术架构,以期能够更好的理解和使用zipkin。

一、理论基础

zipkin的理论基础是Google在2010年发表的论文《Dapper,a Large-Scale Distributed Systems Tracing Infrastructure》,这篇论文的原型是Google开源的Dapper链路追踪组件,这篇文章在业内链路追踪领域可谓是最经典的理论指导了,具有非常大的学习参考意义,建议有时间的朋友可以好好读一读。

基于链路追踪的一些理论基础,市场上出现了很多优秀的链路追踪组件,除了Google Dapper,如本文的主角Twitter Zipkin,阿里的EagleEye,华为(apache)的SkyWalking等。

这些链路追踪组件的出现有一个共同的原因:现代微服务框架的盛行,导致服务件调用问题排查的困难。

二、架构组成

回到本文的主角zipkin,一起来剖析一下zipkin的架构。如下图所示,zipkin包含4个组件,分别负责不同的功能:

网络异常,图片无法展示
|

1、collector

zipkin collector是zipkin的一个常驻进程组件,负责提供对外部的接口用以收集、校验和存储、索引追踪数据。

2、storage

存储模块,真正服务zipkin收集到的追踪数据的存储,zipkin默认存储在内存中,目前主要支持Cassandra、Elasticsearch和MySQL,对于这些存储源的支持都是可插拔的。

3、search

search组件提供的是查询服务,追踪数据被存储和索引以后就需要提供对外的查询服务,zipkin提供的JSON API用于数据检索。

4、web UI

zipkin提供了简洁而又直观的web UI用于进行数据的检索和调用链路展示,可以通过trace ID以及其他的条件来过滤查询,在页面上展示调用链路上各个节点所消耗的时间,方便用于判断性能瓶颈。

以上可以看到,其实zipkin的架构组成是比较简单的,部署亦并不复杂。架构简单、部署方便、存储插拔可选、UI简洁高效,这也是会被广泛应用的原因。

二、数据收集流程

在zipkin中每一次请求链路的追踪都是一个Trace,通过一个trace ID来标志。每个Trace可以拆分为有若干个存在依赖关系的Span,在微服务的架构下,一般请求会涉及到多个服务之间的调用或者是服务与中间件之间的交互,这里的每次请求调用就可以理解为一个Span,因此Span是一个树形的结构,每个Span都记录了相关的信息,使用一个64位的ID对一个Span进行标志。

Span通常包含其他的信息,如时间戳、parent id、annotation等信息。

  • Trace
    Span的集合,表示一次调用链路,使用traceId唯一标志。
  • Annotation
    记录请求特定事件信息,例如记录链路上各节点的时间,一般有以下几个分类:
    1、cs(Client Start):客户端发起了请求
    2、sr(Server Receive):服务端收到了请求
    3、ss(Server Send):服务端返回处理结果给客户端
    4、cr(Client Received):客户端收到服务端的响应

数据来源通常称为reporter,一般来说reporter由应用程序集成zipkin提供的客户端包来实现,数据的发送是轻量和异步的,不会阻塞应用程序的运行,对应用程序的负载很小。

在普通的请求传递时zipkin不会发送独立的请求收集详细的数据,而是在请求头中添加一些参数,例如,下图所示,添加trace请求头:

X-B3-TraceId: aa

X-B3-SpanId: 6b

在最终收到响应之后,异步的发送span详情到zipkin collector,由于是异步的,不会导致原业务代码的延迟。

三、流行的客户端组件

zipkin支持多语言和多场景,官方有很多流行的语言支持,例如:java语言中的brave,JavaScript语言中的zipkin-js。

社区也提供了很多的支持,例如Go语言的go-zipkin,Python语言的py_zipkin,Scala语言的kamon-zipkin等等,zipkin有非常好的社区支持生态。

四、使用brave向zipkin上报数据

业界针对常见的java应用程序框架提供了开源的分布式追踪组件brave,brave提供了面向Standard Servlet、Spring MVC、Http Client、JAX RS、Jersey、MySQL等接口集成能力,通过简单的配置就可以完成向zipkin上报数据的功能,无需对代码有过多的侵入。

同时zipkin提供了扩展的能力,当标准的功能无法满足需要时,可以通过接口进行扩展。

默认情况下,Brave将收集到的数据打印在日志中,当需要向zipkin报告数据时,需要引入zipkin 的Reporter,Reporter会将数据异步发送到zipkin Collector。

五、增加Log4j支持

appender.console.layout.pattern=%d{ABSOLUTE}[%X{traceId}/%X{spanId}] %-5p[%t]%C{2}{%F:%L}-%m%n
LocalSpanAPI.start("localA")'...LocalSpanAPI.finish();


相关实践学习
分布式链路追踪Skywalking
Skywalking是一个基于分布式跟踪的应用程序性能监控系统,用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据,提供了一种简便的方式来清晰地观测分布式系统,具有分布式追踪、性能指标分析、应用和服务依赖分析等功能。 分布式追踪系统发展很快,种类繁多,给我们带来很大的方便。但在数据采集过程中,有时需要侵入用户代码,并且不同系统的 API 并不兼容,这就导致了如果希望切换追踪系统,往往会带来较大改动。OpenTracing为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。Skywalking基于OpenTracing规范开发,具有性能好,支持多语言探针,无侵入性等优势,可以帮助我们准确快速的定位到线上故障和性能瓶颈。 在本套课程中,我们将全面的讲解Skywalking相关的知识。从APM系统、分布式调用链等基础概念的学习加深对Skywalking的理解,从0开始搭建一套完整的Skywalking环境,学会对各类应用进行监控,学习Skywalking常用插件。Skywalking原理章节中,将会对Skywalking使用的agent探针技术进行深度剖析,除此之外还会对OpenTracing规范作整体上的介绍。通过对本套课程的学习,不止能学会如何使用Skywalking,还将对其底层原理和分布式架构有更深的理解。本课程由黑马程序员提供。
相关文章
|
22天前
|
存储 安全 数据管理
新型数据库技术:基于区块链的分布式数据存储系统
传统数据库系统面临着中心化管理、数据安全性和可信度等方面的挑战。本文介绍了一种基于区块链技术的新型数据库系统,通过分布式存储和去中心化的特性,提高了数据的安全性和可信度,同时实现了高效的数据管理和共享。该系统在多个领域如金融、医疗和物联网等具有广阔的应用前景。
|
2天前
|
传感器 存储 SQL
LabVIEW使用ModbusTCP协议构建分布式测量系统
LabVIEW使用ModbusTCP协议构建分布式测量系统
11 4
|
3天前
|
存储 安全 区块链
一文说清楚IPFS分布式存储系统
一文说清楚IPFS分布式存储系统
11 1
|
9天前
|
Prometheus 监控 Cloud Native
Golang深入浅出之-Go语言中的分布式追踪与监控系统集成
【5月更文挑战第4天】本文探讨了Go语言中分布式追踪与监控的重要性,包括追踪的三个核心组件和监控系统集成。常见问题有追踪数据丢失、性能开销和监控指标不当。解决策略涉及使用OpenTracing或OpenTelemetry协议、采样策略以及聚焦关键指标。文中提供了OpenTelemetry和Prometheus的Go代码示例,强调全面可观测性对微服务架构的意义,并提示选择合适工具和策略以确保系统稳定高效。
34 5
|
13天前
|
Windows
Windows系统下安装分布式事务组件Seata
Windows系统下安装分布式事务组件Seata
|
13天前
|
缓存 NoSQL Java
【亮剑】分布式锁是保证多服务实例同步的关键机制,常用于互斥访问共享资源、控制访问顺序和系统保护,如何使用注解来实现 Redis 分布式锁的功能?
【4月更文挑战第30天】分布式锁是保证多服务实例同步的关键机制,常用于互斥访问共享资源、控制访问顺序和系统保护。基于 Redis 的分布式锁利用 SETNX 或 SET 命令实现,并考虑自动过期、可重入及原子性以确保可靠性。在 Java Spring Boot 中,可通过 `@EnableCaching`、`@Cacheable` 和 `@CacheEvict` 注解轻松实现 Redis 分布式锁功能。
|
13天前
|
数据采集 存储 运维
如何使用SkyWalking收集分析分布式系统的追踪数据
通过以上步骤,你可以使用 SkyWalking 工具实现对分布式系统的数据采集和可视化。SkyWalking 提供了强大的追踪和度量功能,帮助开发者和运维人员更好地理解系统的性能状况。欢迎关注威哥爱编程,一起学习成长。
|
18天前
|
存储 安全 数据管理
新一代数据库技术:融合区块链的分布式存储系统
传统数据库技术在面对日益增长的数据量和复杂的数据管理需求时显现出局限性。本文介绍了一种新一代数据库技术:融合区块链的分布式存储系统。通过将区块链技术与传统数据库相结合,实现了数据的分布式存储、安全性和透明度,以及去中心化的特性。这一技术的应用将极大地推动数据库系统的发展,为数据管理带来全新的解决方案。
|
18天前
|
存储 安全 数据管理
新一代数据库技术:融合区块链的分布式数据存储系统
传统数据库系统面临着数据安全性、可信度和去中心化等挑战,而区块链技术的兴起为解决这些问题提供了新的思路。本文介绍了一种新一代数据库技术,将区块链技术与传统的分布式数据存储系统相融合,实现了更高水平的数据安全性和可信度,以及去中心化的优势。通过结合区块链的不可篡改性和分布式存储系统的高性能,这一新型数据库技术将在未来的数据管理领域发挥重要作用。
|
20天前
|
存储 缓存 运维
Web系统如何实现数据分布式存储?
【4月更文挑战第24天】Web系统如何实现数据分布式存储?
20 2