kubernetes-handbook/practice/distributed-tracing.md

25 lines
2.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 分布式追踪
当我将单体应用拆成多个微服务之后它们可能分布在上千个服务器、不同的数据中心和可用区中如何监控服务之间的依赖关系和调用链以判断应用在哪个服务环节出了问题哪些地方可以优化这就需要用到分布式追踪Distributed Tracing
CNCF 提出了分布式追踪的标准 [OpenTracing](https://opentracing.io/),它提供用厂商中立的 API并提供 Go、Java、JavaScript、Python、Ruby、PHP、Objective-C、C++ 和 C# 这九种语言的库。
大部分分布式追踪系统都是根据 Google 的 [Dapper 论文](https://bigbully.github.io/Dapper-translation/) 实现的,比如 CNCF 中还有个端到端的支持 OpenTracing API 的分布式追踪项目 [Jaeger](https://www.jaegertracing.io/)。另外 Apache 基金会项目也有个中国开源的应用性能监控工具 [SkyWalking](https://skywalking.apache.org/) 也可以实现分布式追踪。
## 分布式追踪系统要求
我们对分布式追踪系统的要求如下:
1. **对应用程序的消耗足够低**:一是指占用的系统资源要足够低,二是指造成的延迟要足够低。
2. **对应用程序透明**:为了做到 7x24 小时无所不在的部署,在向应用程序中集成分布式追踪系统时,要让程序员对程序的改动尽可能的小,这样才便于大范围低成本接入。
3. **可扩展**:为了将所有服务接入分布式追踪系统,该系统必须是可以承载大规模服务的可扩展的。
另外还有一些其他要求,比如该系统对产生的追踪数据的处理要尽可能的快,可以方便的对追踪结果进行查询和可视化等。
## 参考
- [OpenTracing 官方网站 - opentracing.io](https://opentracing.io/)
- [Jaeger 官方网站 - jeagertracing.io](https://www.jaegertracing.io/)
- [Apache SkyWalking 官方网站](https://skywalking.apache.org/)
- [Dapper大规模分布式系统的跟踪系统 - bigbully.github.io](https://bigbully.github.io/Dapper-translation/)