随着微服务和分布式架构的引入,各类应用和基础组件形成了网状的分布式调用关系,这种复杂的调用关系就大大增加了问题定位、瓶颈分析、容量评估以及限流降级等稳定性保障工作的难度。正是这样的背景,催生了全链路追踪的解决方案。

这里的一个核心技术点就是 TraceID,当请求从接入层进来时,这个 TraceID 就要被创建出来;或者是通过 Nginx 插件方式创建放到 http 的 header 里面;或者是通过 RPC 服务化框架生成。然后在后续的请求中,这个字段会通过框架自动传递到下一个调用方,而不需要业务考虑如何处理这个核心字段。

有了这个 TraceID,我们就可以将一个完整的请求链路给串联起来了,这也是后面场景化应用的基础。下面我们就一起来看会有哪些具体的技术运营场景。

1、问题定位和排查

我们做全链路追踪系统,要解决的首要问题就是在纷繁复杂的服务调用关系中快速准确地定位问题。

常见的问题场景,主要有两类:瓶颈分析和异常错误定位。

常见的问题就是某某页面变慢了,或者某个服务突然出现大量超时告警,因为无论是页面也好,还是服务也好,在分布式环境中都会依赖后端大量的其它服务或基础部件,所以定位类似的问题,期望能有一个详细的调用关系呈现出来,这样我们就可以非常方便快速地判断瓶颈出现在什么地方。

比如下图的情况,就是某个页面变慢。我们根据 URL 查看某次调用的情况,就发现瓶颈是在 RateReadService 的 query 接口出现了严重阻塞。接下来,我们就可以根据详细的 IP 地址信息,到这台机器上或者监控系统上,进一步判断这个应用或者这台主机的异常状况是什么,可能是机器故障,也可能是应用运行故障等等。

通过上面的案例,我们可以看到,在应用了全链路跟踪的解决方案后,复杂调用关系下的问题定位就相对简单多了。

2、服务运行状态分析

上面的问题定位,主要还是针对单次请求或相对独立的场景进行的。更进一步,我们在采集了海量请求和调用关系数据后,还可以分析出更有价值的服务运行信息。比如以下几类信息。

1. 服务运行质量

一个应用对外可能提供 HTTP 服务,也可能提供 RPC 接口。针对这两类不同的接口,我们可以通过一段时间的数据收集形成服务接口运行状态的分析,也就是应用层的运行监控,常见的监控指标有 QPS、RT 和错误码,同时还可以跟之前的趋势进行对比。这样就可以对一个应用,以及对提供的服务运行情况有一个完整的视图。

2. 应用和服务依赖

除了上述单个应用的运行状态,我们还可以根据调用链的分析,统计出应用与应用之间,服务与服务之间的依赖关系及依赖比例,如下图所示。

我们可以根据来源依赖和比例评估单链路的扩容准备;同时根据去向依赖进行流量拆分,为下游应用的扩容提供依据,因为这个依赖比例完全来源于线上真实调用,所以能够反映出真实的业务访问模型。

同时,因为我们的业务场景和需求在不断变化,应用和服务间的调用关系和依赖关系也是在不断变化中的,这就需要我们不断地分析和调整强弱依赖关系,同时也要关注各种调用间的合理性,这个过程中就会有大量的可优化的工作。

3. 依赖关系的服务质量

也会关注被依赖的应用或服务的实时运行状态和质量,这样就可以看到应用间实时的调用状态。是不是有的应用调用 QPS 突然增加了,或者 RT 突然暴涨,通过这个依赖关系就可以快速确认。

3、业务全息

业务全息就是全链路追踪系统与业务信息的关联。全链路追踪系统的应用更多的还是在技术层面,比如定位“应用或服务”的问题,应用或服务间的依赖关系等等。

但是现实中,我们也会遇到大量的业务链路分析的场景,比如可能会有针对某个订单在不同阶段的状态等。假设一个情况是用户投诉,他的订单没有享受到满 100 元包邮的优惠,这时我们就要去查找用户从商品浏览、加购物车到下单整个环节的信息,来判断问题出在哪儿。其实,这个场景和一个请求的全链路追踪非常相似。

所以,为了能够在业务上也采用类似的思路,可以将请求链路上的唯一 TraceID 与业务上的订单 ID、用户 ID、商品 ID 等信息进行关联,当出现业务问题需要排查时,就会根据对应的 ID 将一串业务链整个提取出来,然后进行问题确认。这就会极大地提升解决业务问题的效率。

全链路追踪系统在技术方案的广泛应用,提供了大量可分析处理的线上运行数据,从这些数据中,我们又能提炼出对线上稳定运行更有价值的信息。

此文章为4月Day10 学习笔记,内容来源于极客时间《赵成的运维体系管理课》,推荐该课程。

全链路追踪系统在技术运营层面的应用相关推荐

  1. 服务追踪系统_一键托管,阿里云全链路追踪服务正式商用:成本仅自建1/5或更少...

    随着互联网架构的扩张,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务.消息收发.分布式数据库.分布式缓存.分布式对象存储.跨域调用,这些组件共同构成了繁杂的分布式网络. 在一次800 ...

  2. 一键托管,阿里云全链路追踪服务正式商用:成本仅自建1/5或更少

    随着互联网架构的扩张,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务.消息收发.分布式数据库.分布式缓存.分布式对象存储.跨域调用,这些组件共同构成了繁杂的分布式网络. 在一次800 ...

  3. Node.js 应用全链路追踪技术——全链路信息存储

    作者:vivo 互联网前端团队- Yang Kun 本文是上篇文章<Node.js 应用全链路追踪技术--全链路信息获取>的后续.阅读完,再来看本文,效果会更佳哦. 本文主要介绍在Node ...

  4. 主流微服务全链路监控系统之战

    点击上方蓝色"方志朋",选择"设为星标"回复"666"获取独家整理的学习资料!问题背景随着微服务架构的流行,服务按照不同的维度进行拆分,一次 ...

  5. 企业如何从 0 到 1 构建整套全链路追踪体系

    简介:本文将分享 ARMS 在全链路追踪领域的最佳实践,分享主要分为四部分.首先,是对分布式链路追踪的整体简介.其次,是对 ARMS 在分布式链路追踪领域的核心能力进行介绍.然后,介绍如何从 0 到 ...

  6. 分布式链路追踪系统深入理解

    背景 对于普通系统或者服务来说,一般通过打日志来进行埋点,然后再通过elk进行定位及分析问题,更有甚者直接远程服务器,使用各种linux命令单手操作查看日志,说到这,我也没摆脱这种困境.那么随着业务越 ...

  7. 牛逼哄哄的全链路监控系统!搭建起来也没有想象中的那么难啊...

    点击关注公众号,回复"1024"获取2TB学习资源! 问题背景 随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务.互联网应用构建在不同的软件模块集上 ...

  8. 得物云原生全链路追踪Trace2.0-采集篇

    一.0xcc开篇 2020年3月,得物技术团队在三个月的时间内完成了整个交易体系的重构,交付了五彩石项目,业务系统也进入了微服务时代.系统服务拆分之后,虽然每个服务都会有不同的团队各司其职,但服务之间 ...

  9. 原来10张图就可以搞懂分布式链路追踪系统原理

    分布式系统为什么需要链路追踪? 随着互联网业务快速扩展,软件架构也日益变得复杂,为了适应海量用户高并发请求,系统中越来越多的组件开始走向分布式化,如单体架构拆分为微服务.服务内缓存变为分布式缓存.服务 ...

最新文章

  1. php中mysqli_query,在PHP中如何使用mysqli_query()函数
  2. Fabric--启动网络自动
  3. [译] 曝光!UX 行话大全
  4. Android下常见终端模拟器和SSH客户端感受及几个Tips
  5. Map value类型不同的写法
  6. 网页加载出现没有合适的负载均衡器_分布式必知必会-七层负载和四层负载到底是什么?...
  7. 互联网公司面试必备综合篇
  8. C语言 简单的文件下载器
  9. 估值模型不适用_揭开市盈率估值法的真正面纱 | 实战案例系列
  10. 3D游戏编程——游戏的本质
  11. 用oracle做九九乘法表,Oracle三种循环例题:打印九九乘法表
  12. angularJS入门与进阶(笔记1)
  13. mariadb mysql.h_MariaDB(MySQL)的常用命令1 【检索数据】
  14. Consul + fabio 实现自动服务发现、负载均衡 1
  15. Redis和MongoDB的区别(面试受用)
  16. tensorflow的slim调用预训练模型的权重进行迁移学习的一些感触
  17. oracle忘记解锁scott和hr用户问题
  18. ORACLE TKPROF使用步骤
  19. 【数独 2】候选数法解数独谜题-挖掘更深的信息-C++实现
  20. 游戏ai人工智能_为什么游戏AI无法帮助AI在现实世界中发挥作用,但可以

热门文章

  1. [LeetCode专场复盘] AutoX 安途智行专场竞赛
  2. mysql连接 xorm_go xorm连接数据库
  3. 微信小程序之授权登录
  4. 富士S2520网络一体机扫描功能异常处理
  5. 南邮CTF web题目总结
  6. php 电子耗材管理系统,PHPOA协同OA系统协助办公用品管理
  7. bss、data和rodata区别与联系
  8. 2020年中国放疗设备行业发展现状及竞争格局分析,放疗人数逐年递增,行业空间大「图」
  9. ps制作立体阴影效果
  10. TSN 3. Ethernet AVB 协议栈分析