你的Node应用,对接分布式链路跟踪系统了吗?(一)

3,298 阅读5分钟
原文链接: mp.weixin.qq.com

  戳蓝字「前端技术优选」关注我们哦!

编者:本文讲述了Node应用的基建组件:分布式链路跟踪系统。

本文主要是讲述 Why, What,正在写下一篇: How。

你的Node应用,对接分布式链路跟踪系统了吗?

一、现状

1.1 背景

随着互联网架构的扩张,我们从传统的单体应用演进到今天日趋复杂的分布式系统。

如下图:

一个请求,最终到后端服务器内部,就会变成一个非常复杂的调用过程。

1.2 问题

当线上出现问题了,我们如何去排查问题原因?

传统的方式,我们的用户反馈了问题,前端查看是什么接口报错了,接着会跟后端说,你的接口报错了,后端会去通过日志和代码,查看问题的原因。如果后端是因为它服务的依赖方出的问题,这时候又会反馈给另外一个后端,依次定位,直到解决这个问题。

传统模式的特点:

  1. 低效

  2. 会遗漏,需要通过用户反馈给我们

  3. 依赖链路的复杂性,如果有100个后端,那怎么定位….

1.3 思考

既然传统模式无法解决这个问题,那我们应该如何高效的解决这个问题呢?难道,你的Node程序程序的下游出了问题,你每次都要陪跑定位问题吗?

二、介绍

为了解决这种问题,我们就需要来了解这个Node以及其他语言都会对接的这个基建:《分布式链路跟踪系统》。

2.1 什么是分布式链路跟踪系统?

分布式链路跟踪系统,他能将一次次分布式请求还原成调用链路,显式地在平台上查看一次分布式请求的调用情况,例如各个节点的耗时,请求具体打到了哪台机器、每个服务节点的请求状态等等。

功能一:

功能二:

除了将服务端里面,各个服务节点显式出来,链路跟踪系统还会提供应用拓扑图的查看功能。

例如Node程序A,依赖了后端Java程序B,然后后端Java程序又依赖另外一个服务。

例如简单的应用拓扑图:

功能三:

一些分布式链路系统,还提供了SQL性能分析的功能。

2.2 能用它做什么?

错误链路的排查:

通过在分布式链路跟踪平台,我们可以查看含有错误的链路,比如我们看到/user/getUserInfo.do接口报错的原因是因为,数据库Mysql挂掉了。这时候立马就去看看为什么Mysql挂了,是不是Mysql的机器没有磁盘空间了?

慢链路的排查:

通过在分布式链路跟踪平台,我们可以检索耗时严重的点,这时候我们就会分析,是我们的系统里面由于这块代码写的有问题呢?还是服务器不够导致这块服务A的响应不过来导致。

唯有知道了整体分布式链路里面慢的原因,我们才能去优化和改进我们的整体链路,例如整体电商购买的链路耗时很少。

三、分布式链路的理论

3.1 历史

其实Tracing,链路跟踪是在90年代就出现的技术。

但真正让这个领域流行,还是源于Google Dapper,《大规模分布式系统的跟踪系统》。中文论文的翻译地址: https://bigbully.github.io/Dapper-translation/

除了上面这篇论文以外,还有一篇关于采样这块的文章。《Uncertainty in Aggregate Estimates from Sampled Distributed Traces》

3.2 发展

有了理论基础,一批优秀的Tracing软件诞生,比较流行的例如:

  • Zipkin(twitter)

  • Apache Skywalking

  • 鹰眼(taobao)

  • Jaeger

  • 等等

3.3 核心步骤

我们做分布式链路跟踪,大概分为三步:

  • 代码埋点

  • 数据存储

  • 查询展示

3.4 初始的现状

由于链路系统都是根据上面两篇论文开发,每个开发的理解都不一样,所以不同链路跟踪系统开发出来之后,相互的API并不兼容。这就导致我们如果想要切换追踪系统,往往就会带来较大的改动。

那么是不是缺一个规范呢?

3.5 标准的诞生

为了解决不同的分布式链路系统API不兼容的问题,诞生了OpenTracing规范。

OpenTracing是一个轻量级的标准化层,它位于应用程序/类库和 链路跟踪系统之间的一层。

标准有哪些优势?

  • 统一了API,使开发人员能够方便的添加追踪系统的实现。

  • OpenTracing已进入CNCF,正在为全球的分布式链路跟踪系统,提供统一的模型和数据标准。

OpenTracing的数据模型:

总体相当于是一个Trace,然后Trace由Span构成。

需要说明,一个Trace并不是树形结构,他是一个有向无环图(DAG图),因为服务A依赖B,B也可以依赖A,然后Span和Span的关系叫References。

举个例子:

为了更好的展示,分布式链路跟踪系统用时间轴的方式展示:

Span含有哪些信息?

关于OpenTracing的更多信息,可以查看下面地址

总结

用OpenTracing实现的分布式链路跟踪系统的,有Jaeger、SkyWalking、Zipkin。

关于还有那些支持,我们可以查看OpenTracing官网: https://opentracing.io/docs/supported-tracers/

关于下一节,我们将以实战来讲解Node应用如何去对接分布式链路跟踪系统。下一次出现问题的时候,再也不用用传统的方式去定位问题了。

相信,你越是这样的时间节约下来,你就能花这部分知识,去学习更多有用的技术,依次反复,你就能成为大牛了。

下一篇写了一半了,实战搭建一个分布式链路跟踪系统,然后分享如何用Node程序接入这样的分布式链路系统。