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


Metrics - 用于记录可聚合的数据 。 例如 , 队列的当前深度可被定义为一个度量值 , 在元素入队或出队时被更新;HTTP 请求个数可被定义为一个计数器 , 新请求到来时进行累加 。
Tracing- 用于记录请求范围内的信息 。 例如 , 一次远程方法调用的执行过程和耗时 。 它是我们排查系统性能问题的利器 。
2.链路追踪基本原理
在每个请求调用的入口和出口进行代码埋点记录调用之间的关系、每个调用处理时间点信息 。
通过调用关系梳理出一次请求的完整链路还原、请求具体到达哪台机器 。
通过每次处理记录的时间点 , 计算出相关的调用执行时间、响应时间、网络延时 。
对调用请求量进行统计 。
显示链路拓扑结构、应用依赖关系 。
|微服务平台之全链路追踪
本文插图

Trace:指一个请求经过后端所有服务的路径 , 每一条链路都用一个全局唯一的traceid来标识 。
Span:链路中的调用由span来表示 , 每个span由spanid和parentid来标识 , 可以记录调用的父子关系 。
Timestamp:调用点的时间戳 , 记录每个执行点的时间信息 。
如果想知道一个接口在哪个环节出现了问题 , 就必须清楚该接口调用了哪些服务 , 以及调用的顺序 , 如果把这些服务串起来 , 看起来就像链条一样 , 我们称其为调用链 。
|微服务平台之全链路追踪
本文插图

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

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

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

Properties配置信息
|微服务平台之全链路追踪


推荐阅读