横跨十几个分布式服务的慢请求要如何排查?
核心目标是:定位瓶颈在哪里(是哪个服务慢了?是网络延迟?还是数据库慢了?),而不是仅仅知道最终耗时很久。
基础工具:分布式追踪系统(The Must-Have)
没有分布式追踪系统,排查这类问题几乎是不可能的。你需要一个工具来聚合和可视化请求在所有服务间的流转。
常见工具:Zipkin、Jaeger、skyWalking (国产生态友好)。
追踪系统的工作原理
- Trace ID(全局唯一请求 ID):客户端发起请求时生成,并贯穿所有服务调用。
- Span ID (服务调用段 ID):每个服务收到请求后,都会生成一个新的 Span ID 来标识自己在这次请求中的处理过程。
- 上下文传递 (Context Propagation):当服务 A调用服务B时,服务A 必须将 Trace ID 和 Span ID 通过 HITP Header 或 RPC 协议头传递给服务 B
- 数据上报:每个服务处理完自己的逻辑后,将本次Span 的开始时间、结束时间、耗时、父 Span ID 等信息异步上报给追踪系统。
