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 的使用场景
- 定位性能瓶颈
当一个请求跨越多个服务时,可以清楚看到每个服务的响应时间,快速发现慢服务。
- 故障排查
可以分析调用链路中哪一环节发生异常或报错,便于快速定位问题。
- 监控调用链路
在微服务架构下,能够整体掌握系统的请求拓扑和依赖关系。
- 优化微服务设计
根据调用链路数据优化服务拆分、接口设计和资源配置。
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 调用链:
- 用户请求下单
- OrderService 调用 PaymentService
- PaymentService 调用 InventoryService 扣减库存
- 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,可以实现自动埋点,无需修改业务代码,让追踪更轻量、无侵入。