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 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
4.2 配置 application.yml
spring:
zipkin:
base-url: http://zipkin:9411 # Zipkin 服务地址
sleuth:
sampler:
probability: 1.0 # 采样率,1.0 表示采集所有请求
4.3 效果
- 请求进入微服务 A → 调用 B → 调用 C
- Sleuth 自动在请求头中打上 Trace ID 和 Span ID
- Zipkin 收集并展示完整调用链路
- 开发者在 UI 上看到每个服务耗时、依赖关系和异常
5. 在 Kubernetes 中部署 Zipkin
可以通过 Helm 或 Deployment YAML 部署 Zipkin:
apiVersion: apps/v1
kind: Deployment
metadata:
name: zipkin
spec:
replicas: 1
selector:
matchLabels:
app: zipkin
template:
metadata:
labels:
app: zipkin
spec:
containers:
- name: zipkin
image: openzipkin/zipkin:2.27
ports:
- containerPort: 9411
---
apiVersion: v1
kind: Service
metadata:
name: zipkin
spec:
type: ClusterIP
ports:
- port: 9411
targetPort: 9411
selector:
app: 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,可以实现自动埋点,无需修改业务代码,让追踪更轻量、无侵入。