分布式追踪

当我将单体应用拆成多个微服务之后,它们可能分布在上千个服务器、不同的数据中心和可用区中,如何监控服务之间的依赖关系和调用链,以判断应用在哪个服务环节出了问题,哪些地方可以优化?这就需要用到分布式追踪(Distributed Tracing)。

CNCF 提出了分布式追踪的标准 OpenTracing,它提供用厂商中立的 API,并提供 Go、Java、JavaScript、Python、Ruby、PHP、Objective-C、C++ 和 C# 这九种语言的库。

大部分分布式追踪系统都是根据 Google 的 Dapper 论文 实现的,比如 CNCF 中还有个端到端的支持 OpenTracing API 的分布式追踪项目 Jaeger。另外 Apache 基金会项目也有个中国开源的应用性能监控工具 SkyWalking 也可以实现分布式追踪。

分布式追踪系统要求

我们对分布式追踪系统的要求如下:

  1. 对应用程序的消耗足够低:一是指占用的系统资源要足够低,二是指造成的延迟要足够低。

  2. 对应用程序透明:为了做到 7x24 小时无所不在的部署,在向应用程序中集成分布式追踪系统时,要让程序员对程序的改动尽可能的小,这样才便于大范围低成本接入。

  3. 可扩展:为了将所有服务接入分布式追踪系统,该系统必须是可以承载大规模服务的可扩展的。

另外还有一些其他要求,比如该系统对产生的追踪数据的处理要尽可能的快,可以方便的对追踪结果进行查询和可视化等。

参考

最后更新于