type
status
date
slug
summary
tags
category
icon
password

1. 什么是 Zipkin?

Zipkin 是一个开源的 分布式链路追踪系统(Distributed Tracing System),主要作用是:
  • 收集服务调用链路(Trace)数据
  • 可视化显示请求经过的各个微服务
  • 帮助开发者分析性能瓶颈和排查问题

核心概念

  • Trace:一次完整请求的调用链路
  • Span:Trace 中的单次操作(例如服务 A 调用服务 B)
  • Annotation:Span 内的事件标记(如请求发送/接收时间)
  • Trace ID:标识整个请求链路
  • Span ID:标识单个 Span
类比:Trace 就像一条快递路线,Span 是每个中转站的记录,Trace ID 是快递单号,Span ID 是每个中转站的编号。

2. Zipkin 的使用场景

  1. 定位性能瓶颈
    1. 当一个请求跨越多个服务时,可以清楚看到每个服务的响应时间,快速发现慢服务。
  1. 故障排查
    1. 可以分析调用链路中哪一环节发生异常或报错,便于快速定位问题。
  1. 监控调用链路
    1. 在微服务架构下,能够整体掌握系统的请求拓扑和依赖关系。
  1. 优化微服务设计
    1. 根据调用链路数据优化服务拆分、接口设计和资源配置。

3. Zipkin 架构

在 Kubernetes 环境中,Zipkin 一般包括以下组件:
  • Collector:收集微服务上报的 Trace 数据
  • Storage:存储 Trace 数据,可使用 MySQL、Elasticsearch 等
  • Query API:提供查询接口
  • Web UI:可视化展示调用链
(图片示意,实际部署可用 Helm 或 Docker Compose 安装 Zipkin 服务)

4. Java 服务如何集成 Zipkin

在 Java 生态中,通常使用 Spring Cloud Sleuth + Spring Cloud Zipkin 来集成。

4.1 添加 Maven 依赖

4.2 配置 application.yml

4.3 效果

  • 请求进入微服务 A → 调用 B → 调用 C
  • Sleuth 自动在请求头中打上 Trace ID 和 Span ID
  • Zipkin 收集并展示完整调用链路
  • 开发者在 UI 上看到每个服务耗时、依赖关系和异常

5. 在 Kubernetes 中部署 Zipkin

可以通过 Helm 或 Deployment YAML 部署 Zipkin:
然后 Java 微服务只需要将 spring.zipkin.base-url 指向 http://zipkin:9411 即可。

6. 使用示例

假设系统有 OrderService → PaymentService → InventoryService 调用链:
  1. 用户请求下单
  1. OrderService 调用 PaymentService
  1. PaymentService 调用 InventoryService 扣减库存
  1. Zipkin UI 显示完整调用链:
      • OrderService: 50ms
      • PaymentService: 120ms
      • InventoryService: 40ms
      • Trace ID: abc123
通过调用链可以快速发现 PaymentService 耗时最长,需要优化。

7. 总结

  • Zipkin:分布式链路追踪系统,帮助开发者定位性能问题和异常
  • 使用场景
    • 性能分析
    • 故障排查
    • 调用链监控
    • 微服务优化
  • Java 集成:Spring Cloud Sleuth + Spring Cloud Zipkin
  • Kubernetes 部署:Deployment + ClusterIP Service,微服务配置 Zipkin 地址即可
结合 Istio Sidecar,可以实现自动埋点,无需修改业务代码,让追踪更轻量、无侵入。