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

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

这里的一个核心技术点就是 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 学习笔记,内容来源于极客时间《赵成的运维体系管理课》,推荐该课程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/7885.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java版工程项目管理系统 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离 功能清单

ava版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目显示1…

学习数据结构第3天(线性表的定义和基本操作)

线性表的定义和基本操作前言线性表的定义线性表的基本操作经典试题前言 线性表是算法题命题的重点。这类算法题实现比较容易且代码量较少,但是要求具有最优的性能(时间复杂度、空间复杂度),才能获得满分。因此应牢固掌握线性表的…

【牛客刷题专栏】0x18:JZ16 数值的整数次方(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏:个人CSDN牛客刷题专栏。 题目来自:牛客/题库 / 在线编程 / 剑指offer: 目录前言问题…

安全防御 --- APT、密码学

APT 深度包检测技术:将应用层内容展开进行分析,根据不同的设定从而做出不同的安全产品。 深度流检测技术:与APS画像类似。会记录正常流量行为,也会将某些应用的行为画像描述出来。也可将加密流量进行判断,并执行相应措…

程序员必知必会7种UML图(类图、序列图、组件图、部署图、用例图、状态图和活动图)画法盘点

众所周知,软件开发是一个分阶段进行的过程。不同的开发阶段需要使用不同的模型图来描述业务场景和设计思路,在不同的阶段输出不同的设计文档也是必不可少的,例如,在需求分析阶段需要输出领域模型和业务模型,在架构阶段…

2023疫情当头,3个月转行软件测试拿下8k+offer,我心满意足了

从2020年的疫情开始,全世界好像按下了暂停键一般,大量新网民涌入互联网。我们的生活方式也随之改变,失业也如洪流般席卷整个世界,宅家的人数在变多,当然大多数人开始寻求新的工作方式,随之进军互联网的人开…

域名过户操作流程及常见问题

模板添加及模板过户操作流程: 一、添加模板操作流程: 1.在业务管理-域名管理-模板管理中找到“添加模板” 2.选择所有者类型(个人或是企业/组织),填写新的域名所有者资料,填写无误后点击“确定”。 目前…

记录分享vscode里面非常好用的两个markdown插件

文章目录Markdown PDFMarkdown All in One效果图Markdown PDF 主要用于将markdown文件转为pdf文件 使用方法 安装此插件编辑区鼠标右键就会出来一个弹框,在弹框里面选择 Markdown All in One 我主要用它来生成文章的目录结构,然后转为pdf文件后,目录结构默认就是pdf文章目录,…

告别至暗时刻,高端与全系列手机市场前景可期

作者|落笔 近年来,智能手机用户换机周期持续拉长,市场出货量逐年走低,IDC数据显示,2022年全年中国智能手机市场出货量约2.86亿台,同比下降13.2%,创有史以来最大降幅,全球智能手机发展已进入成熟…

大厂研发成本大曝光,研发占大头

近日,腾讯发布《2022 年腾讯研发大数据报告》,披露了 2022 年腾讯在研发投入、研发效能、开源协同等方面的重要数据。 《报告》显示,2022 年腾讯内部研发人员占比达到 74%,这意味着,平均每四个腾讯员工中,…

linux 共享内存 shmget

专栏内容:linux下并发编程个人主页:我的主页座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物.目录 前言 概述 原理机制 系统命令 接口说明 代码演示 结尾 前言 本专栏主要分享linu…

【深度解刨C语言】内存管理(详)

文章目录前言一.动态内存1.动态内存的用处2.内存的布局简单证明内存布局栈向下生长的证明堆向上增长的证明3.malloc与free进一步理解总结前言 前提: 内存有基本的认识 内存函数基本的了解 如果你对内存与内存函数太不清楚可以看:动态内存管理 目标: 为什么要用动态内存&…

我体验了首个接入GPT-4的代码编辑器,太炸裂了

最近一款名为Cursor的代码编辑器已经传遍了圈内,受到众多编程爱好者的追捧。 它主打的亮点就是,通过 GPT-4 来辅助你编程,完成 AI 智能生成代码、修改 Bug、生成测试等操作。 确实很吸引人,而且貌似也能大大节省人为的重复工作&…

vue尚品汇商城项目-day04【29.加入购物车操作(难点)】

文章目录29.加入购物车操作(难点)29.1加入购物车按钮29.2addCartSuce29.3购物车29.3.1 向服务器发送ajax请求,获取购物车数据29.3.2UUID临时游客身份29.3.3动态展示购物车29.4修改购物车产品的数量(需要发请求:参数理解…

203. 移除链表元素

1、题目 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,4,5]示例 2: 输入&…

File 类的用法和 InputStream, OutputStream,System 类的用法

🎉🎉🎉点进来你就是我的人了 博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔🦾&am…

Typescript学习笔记(一)

什么是TypeScript? TypeScript 是添加了类型系统的 JavaScript,适用于任何规模的项目。 TypeScript 是一门静态类型、弱类型的语言。 安装TypeScript npm install -g typescript编译 tsc hello.tsTypeScript 只会在编译时对类型进行静态检查,如果发…

iOS 内存管理机制与原理

内存分区 内存一般分为五大区:栈区、堆区、常量区、全局区、代码区。如图 1.栈区 是由编译器自动分配并释放的,主要用来存储局部变量、函数的参数等,是一块连续的内存区域,遵循先进后出(FILO)原则。一般在…

WebAssembly 助力云原生:APISIX 如何借助 Wasm 插件实现扩展功能?

本文将介绍 Wasm,以及 Apache APISIX 如何实现 Wasm 功能。 作者朱欣欣,API7.ai 技术工程师 原文链接 什么是 Wasm Wasm 是 WebAssembly 的缩写。WebAssembly/Wasm 是一个基于堆栈的虚拟机设计的指令格式。 在 Wasm 未出现之前,浏览器中只能…

Hadoop(伪分布式)+Spark(local模式)搭建Hadoop和Spark组合环境

一、安装Hadoop环境使用Ubuntu 14.04 64位 作为系统环境(Ubuntu 12.04,Ubuntu16.04 也行,32位、64位均可),请自行安装系统。Hadoop版本: Hadoop 2.7.4创建hadoop用户如果你安装 Ubuntu 的时候不是用的 "hadoop&qu…