2018-10-24 20:31:34 +08:00
|
|
|
|
# 分布式追踪
|
|
|
|
|
|
2021-10-15 13:14:05 +08:00
|
|
|
|
当我将单体应用拆成多个微服务之后,它们可能分布在上千个服务器、不同的数据中心和可用区中,如何监控服务之间的依赖关系和调用链,以判断应用在哪个服务环节出了问题,哪些地方可以优化?这就需要用到分布式追踪(Distributed Tracing)。
|
2018-10-24 20:31:34 +08:00
|
|
|
|
|
|
|
|
|
CNCF 提出了分布式追踪的标准 [OpenTracing](https://opentracing.io/),它提供用厂商中立的 API,并提供 Go、Java、JavaScript、Python、Ruby、PHP、Objective-C、C++ 和 C# 这九种语言的库。
|
|
|
|
|
|
2021-10-15 13:14:05 +08:00
|
|
|
|
大部分分布式追踪系统都是根据 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. **可扩展**:为了将所有服务接入分布式追踪系统,该系统必须是可以承载大规模服务的可扩展的。
|
|
|
|
|
|
|
|
|
|
另外还有一些其他要求,比如该系统对产生的追踪数据的处理要尽可能的快,可以方便的对追踪结果进行查询和可视化等。
|
2018-10-24 20:31:34 +08:00
|
|
|
|
|
|
|
|
|
## 参考
|
|
|
|
|
|
2021-10-15 13:14:05 +08:00
|
|
|
|
- [OpenTracing 官方网站 - opentracing.io](https://opentracing.io/)
|
|
|
|
|
- [Jaeger 官方网站 - jeagertracing.io](https://www.jaegertracing.io/)
|
2020-05-08 23:22:37 +08:00
|
|
|
|
- [Apache SkyWalking 官方网站](https://skywalking.apache.org/)
|
2021-10-15 13:14:05 +08:00
|
|
|
|
- [Dapper,大规模分布式系统的跟踪系统 - bigbully.github.io](https://bigbully.github.io/Dapper-translation/)
|