微服务平台之全链路追踪( 二 )


Span:链路中的调用由span来表示,每个span由spanid和parentid来标识,可以记录调用的父子关系 。
Timestamp:调用点的时间戳,记录每个执行点的时间信息 。
如果想知道一个接口在哪个环节出现了问题,就必须清楚该接口调用了哪些服务,以及调用的顺序,如果把这些服务串起来,看起来就像链条一样,我们称其为调用链 。

微服务平台之全链路追踪

文章插图
 
到现在,已经知道调用顺序和层级关系了,但是接口出现问题后,还是不能找到出问题的环节,如果某个服务有问题,那个被调用执行的服务一定耗时很长,要想计算出耗时,上述的三个标识还不够,还需要加上时间戳,时间戳可以更精细一点,精确到微秒级 。
【微服务平台之全链路追踪】只记录发起调用时的时间戳还算不出耗时,要记录下服务返回时的时间戳,有始有终才能算出时间差,既然返回的也记了,就把上述的三个标识都记一下吧,不然区分不出是谁的时间戳 。
3.链路追踪的Demo实现前面我们介绍了链路追踪的技术原理,以及相关的实现链路追踪的开源组件,那么我们实际在项目中要怎么做,是否需要根据技术原理去实现底层的相关开发 。通过这个章节,我简单的通过一个demo去演示如何在微服务架构系统中完成链路追踪的功能 。
我们简单描述一下demo的相关情况,首先demo是要基于微服务架构的,那么我们提供2个微服务应用(订单服务、产品服务),并且提供一个服务注册发现中心,订单服务会调用产品服务,并且是通过注册中心去发现服务调用服务,这样从前端请求调用订单服务,再由订单服务调用产品服务,完成了一个简单的链路调用,需求链路很短,只有两次调用,足够演示demo的链路追踪功能 。
微服务平台之全链路追踪

文章插图
 
通过demo将教打家一步一步的去实现链路的相关功能,包括还原请求的完整调用链路情况,能够查看请求过程中订单服务,产品服务执行的耗时情况,总的请求响应时间,并且可以根据请求链路的traceid查看到对应的请求处理的日志信息 。
微服务平台之全链路追踪

文章插图
 
首先创建springboot项目,通过依赖eureka组件,提供服务的注册中心,实现服务的注册与发现 。
添加依赖
微服务平台之全链路追踪

文章插图
 
Properties配置信息
微服务平台之全链路追踪

文章插图
 
再添加两个springboot项目,一个订单服务,一个产品服务
微服务平台之全链路追踪

文章插图
 
由于服务需要注册到注册中心,因此两个项目需要添加依赖
微服务平台之全链路追踪

文章插图
 
并添加配置信息
微服务平台之全链路追踪

文章插图
 
并且订单服务需要调用产品服务的方法,在demo中我们使用feign的方式进行服务调用,因此在订单服务项目中需要添加依赖
微服务平台之全链路追踪

文章插图
 
由于是demo,因此我们服务中的方法就简单通过返回字符串的方式实现 。
至此我们启动两个微服务应用,可以在注册中心中看到两个服务都已经注册上来,再通过浏览器请求订单服务的接口,可以看到后端通过调用产品服务的接口,并返回信息 。
微服务平台之全链路追踪

文章插图
 
到目前为止,我们只是构建好了微服务应用,对应链路追踪功能还没有实现,其实在微服务架构下实现链路追踪很简单,毕竟有很多开源的组件封装了底层实现原理,我们只需要引用这些组件就可以实现链路追踪功能,在demo中我通过skywalking来进行链路追踪,由于skywalking本身的特性无需代码侵入,只需要以探针的方式启动微服务应用即可 。并自动采集服务调用的相关信息,写入数据库,然后通过自带的dashboard查看相关信息 。
首先我们先下载skywalking
微服务平台之全链路追踪

文章插图
 
其中,agent目录是应用启动时用的代理,bin目录是skywalking后端服务和dashboard,在bin目录执行startup.bat文件,启动服务 。


推荐阅读