Zipkin 介绍

一、Zipkin 是什么?

Zipkin是一个分布式跟踪系统。它有助于收集解决服务体系结构中的延迟问题所需的时序数据。功能包括该数据的收集和查找。

如果日志文件中有跟踪ID,则可以直接跳至该跟踪ID。否则,您可以基于属性进行查询,例如服务,操作名称,标签和持续时间。将为您总结一些有趣的数据,例如在服务中花费的时间百分比以及操作是否失败。

二、架构概述

跟踪程序存在于您的应用程序中,并记录有关发生的操作的时间和元数据。它们通常会检测库,因此它们的使用对用户是透明的。例如,已检测的Web服务器记录它何时接收到请求以及何时发送响应。收集的跟踪数据称为跨度。

仪器的编写保证了生产的安全性和很少的开销。因此,它们仅在带内传播ID,以告知接收方正在进行跟踪。完成的跨度将带外报告给Zipkin,类似于应用程序异步报告指标的方式。

例如,当跟踪某个操作并且需要发出传出的http请求时,会添加一些标头来传播ID。标头不用于发送详细信息,例如操作名称。

在检测应用程序中将数据发送到Zipkin的组件称为Reporter。记者通过几种传输方式之一将跟踪数据发送到Zipkin收集器,后者将跟踪数据持久保存到存储中。稍后,API会查询存储以将数据提供给UI。

这是描述此流程的图:
在这里插入图片描述

三、流程实例

如概述中所述,标识符是带内发送的,详细信息是带外发送到Zipkin的。在这两种情况下,跟踪工具都负责创建有效的跟踪并正确呈现它们。例如,跟踪器可确保在带内(下行)和带外(与Zipkin异步)发送的数据之间保持奇偶校验。

这是http跟踪的示例序列,其中用户代码调用资源/ foo。这导致一个跨度,在用户代码收到http响应后,异步发送到Zipkin。

┌─────────────┐ ┌───────────────────────┐  ┌─────────────┐  ┌──────────────────┐
│ User Code   │ │ Trace Instrumentation │  │ Http Client │  │ Zipkin Collector │
└─────────────┘ └───────────────────────┘  └─────────────┘  └──────────────────┘
       │                 │                         │                 │
           ┌─────────┐
       │ ──┤GET /foo ├─▶ │ ────┐                   │                 │
           └─────────┘         │ record tags
       │                 │ ◀───┘                   │                 │
                           ────┐
       │                 │     │ add trace headers │                 │
                           ◀───┘
       │                 │ ────┐                   │                 │
                               │ record timestamp
       │                 │ ◀───┘                   │                 │
                             ┌─────────────────┐
       │                 │ ──┤GET /foo         ├─▶ │                 │
                             │X-B3-TraceId: aa │     ────┐
       │                 │   │X-B3-SpanId: 6b  │   │     │           │
                             └─────────────────┘         │ invoke
       │                 │                         │     │ request   │
                                                         │
       │                 │                         │     │           │
                                 ┌────────┐          ◀───┘
       │                 │ ◀─────┤200 OK  ├─────── │                 │
                           ────┐ └────────┘
       │                 │     │ record duration   │                 │
            ┌────────┐     ◀───┘
       │ ◀──┤200 OK  ├── │                         │                 │
            └────────┘       ┌────────────────────────────────┐
       │                 │ ──┤ asynchronously report span     ├────▶ │
                             │                                │
                             │{                               │
                             │  "traceId": "aa",              │
                             │  "id": "6b",                   │
                             │  "name": "get",                │
                             │  "timestamp": 1483945573944000,│
                             │  "duration": 386000,           │
                             │  "annotations": [              │
                             │--snip--                        │
                             └────────────────────────────────┘

跟踪检测报告异步跨越,以防止与跟踪系统有关的延迟或故障延迟或破坏用户代码。

四、传输方式

检测库发送的跨度必须从要跟踪的服务传输到Zipkin收集器。有三种主要的传输方式:HTTP,Kafka和Scribe。

五、存储

Zipkin最初是为了在Cassandra上存储数据而构建的,因为Cassandra具有可伸缩性,具有灵活的架构并在Twitter中大量使用。但是,我们使该组件可插入。除了Cassandra,我们还原生支持ElasticSearch和MySQL。其他后端可能会作为第三方扩展提供。
今天的分享就当这里,希望对大家有所帮助!

关注 Java有货领取更多资料

联系小编。微信:372787553,带您进群互相学习
左侧小编微信,右侧获取免费资料
在这里插入图片描述

技术博客:https://blog.csdn.net/weixin_38937840

SpringCloud学习代码: https://github.com/Dylan-haiji/javayh-cloud

Redis、Mongo、Rabbitmq、Kafka学习代码: https://github.com/Dylan-haiji/javayh-middleware

AlibabaCloud学习代码:https://github.com/Dylan-haiji/javayh-cloud-nacos

SpringBoot+SpringSecurity实现自定义登录学习代码:https://github.com/Dylan-haiji/javayh-distribution


版权声明:本文为weixin_38937840原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。