如何通过链路追踪进行定时任务诊断

news2025/1/11 16:53:34

作者:千习

背景简介

什么是定时任务

定时任务是业务应用系统中存在定时周期性运行的业务逻辑。由于其运行于后端进程中往往存在执行状态和执行链路的不可见性《常见定时任务技术方案》。

https://developer.aliyun.com/article/882393

什么是链路追踪

随着分布式微服务化架构在企业中大规模运用,业务运行的应用平台是一个由各个业务研发团队不同业务应用组合而成的庞杂系统工程,相互之间存在各种形式的访问交互。

在这里插入图片描述

面对上述如此复杂的系统结构,对于业务入口端应用而言所有的下游服务状态都是黑盒不可知的存在。相应的运维问题也随之而来:

  • 入口服务不可用时,如何快速定位具体是哪个服务节点不可用及原因?
  • 如何快速定位分析业务链路中性能瓶颈点?
  • 如何掌控业务链路完整执行过程?

面对上述问题,从 Google 分布式链路追踪系统的 Dapper 论文开启了各类分布式链路追踪的实现,出现了很多相关系统,如:Zipkin、Skywalking、Pinpoint。所有这些其核心逻辑就是在一次业务请求开始时构建相应请求的链路上下文信息,并在服务调用过程中透传完善相应的链路节点信息,最终通过该请求 TraceId(本次请求的链路标识)和每个节点父子依赖关系构建出一个完整的调用链数据结构。

在这里插入图片描述

整个分布式全链路追踪平台各项主要分工:

  • 应用侧完成服务调用埋点,常见方式:手动调用 SDK 埋点、java agent 模式自动埋点
  • 服务之间通信交互,相应通信协议上需要添加 Trace 信息进行传递,保证在整个调用链中 Trace 信息共享
  • Trace 信息上报至全链路追踪平台进行存储展现

基于上述几个主要环节,各个开源方案分别实现了各自在采集、传输、存储环节的不同数据结构。为实现链路追踪领域范围内数据结构统一,出现了 OpenTracing 和 OpenTelemetry 来定义相应的规范和协议。

为什么定时任务需要链路追踪

分析任务为什么执行失败

当业务不断发展,业务开发的定时任务也会越来越趋于复杂化,定时任务执行过程中会发展出如下各种形态:

  • 会调用其他业务方各类下游应用服务
  • 会调用其他中间件服务(如:redis、mq 等)
  • 会切分出 N 个子任务分发给不同机器进行分布式并行批处理,每个子任务处理又是一整套复杂组合

当面对此类复杂定时任务场景下任务执行如果出现异常,相应的问题定位将变得很复杂。在完整的全链路追踪能力支持下,问题将能被快速定位处理。

在这里插入图片描述

分析任务为什么执行慢

一般场景下离线任务往往承担着大批量数据处理的业务场景,因而很多定时离线任务有运行耗时长的特征,往往在这些耗时长的任务上存在着巨大的性能优化空间,性能提升能直接优化基础资源使用效率并节省业务成本。

在这里插入图片描述

在任务调度平台上我们可通任务执行超时报警,再结合任务执行链路追踪能力可有效地锁定业务处理的耗时瓶颈点供进一步业务性能优化作为参考。

全链路流量控制

在全链路追踪体系下,可以进行后续其他能力拓展:

  • 灰度发布:定时任务应用发布过程中的任务全链路灰度能力
  • 全链路压测:定时任务通过业务测试标签参与全链路压测
  • 流量隔离:定时任务调用下游服务,下游服务根据流量来源进行隔离处理

在这里插入图片描述

定时任务链路追踪解决方案

开源解决方案

从开源定时任务平台看,目前常见开源方案都未支持任务执行链路可视化查询,对复杂任务或分片任务执行异常下的问题分析会比较困难。

另外在开源链路追踪平台,对应开源方案中部分采集端 agent 集成了定时任务框架执行入口埋点采集,但该模式下与任务调度平台侧较为割裂,从负责定时任务运维的视角出发想具体锁定某一次任务执行链路,需要通过日志或根据执行时间检索匹配相应的执行记录,当链路追踪平台上数据繁多想快速唯一锁定目标链路存在很多不便。

在这里插入图片描述

阿里解决方案

阿里分布式任务调度平台 SchedulerX 提供了一站式的链路追踪解决方案,可以将任务执行信息与链路追踪 Trace 信息绑定,用户可以很方便的从任务调度侧,查看某个任务、某次执行、某个分片的完整调用链。

在这里插入图片描述

阿里 SchedulerX 方案优势:

  • 精准定位任务执行 Trace 信息:常见链路追踪平台只负责任务执行的时候生成 traceId,不提供和具体任务的绑定关系,想要从成千上万的 traceId 中分析某个任务的调用链变得非常复杂;SchedulerX 无论是单机任务还是分布式任务的某个分片,每一次调度都能快速定位到调用链。

  • 调度侧支持控制采样率:手动运行一次支持必采样、动态配置采样率。

  • 免运维低成本:通过 EDAS 部署的 Java 业务应用天然支持定时任务 Trace 能力,无需自建链路追踪服务端平台和 agent 采集,降低业务成本,并且可以从任务调度侧一键跳转到调用链。

定时任务链路追踪客户案例

某电商业务定位任务执行慢

用户案例:目前电商业务场景下都基于微服务架构体系,定时任务运行涉及的应用较多且链路较深,用户对某个任务运行慢时,希望能快速定位哪个业务应用方哪个业务功能是执行链路瓶颈点。

在这里插入图片描述

以下将展示如何分析任务的执行耗时,任务触发执行后会调用多次下游业务应用服务以完成整个业务逻辑,整个任务执行耗时较长。

在这里插入图片描述

如上图所示,常规情况下一次执行<5 秒,但最近两次次执行耗时>15s,通过任务配置超时报警可监测到该执行记录超过预期执行时间,对该执行记录的调用链路进入下一步分析。

在这里插入图片描述
在这里插入图片描述

如上图所示,通过链路追踪自动跳转获取完整调用链(同样自建平台者可拷贝 TraceId 查询锁定),从上图可分析获得执行耗时占比较高的业务应用和 IP,可锁定在下游业务应用 ServiceApplication 的保存用户信息服务出现明显耗时。

某金融账户批处理定位执行异常

用户案例:某金融机构对老业务系统升级,需将所有客户账户信息进行定期批量迁移升级处理至新系统,每天会从老系统中加载一批次账户信息在业务集群中分发处理,完成每个账户信息升级迁移;当某个账户出现异常时,需要能快速定位执行异常的位置和原因。

通过 SchedulerX 的 MapReduce 模型进行分布式跑批,每个子任务对应一个客户账户信息业务处理,可展示每个子任务的执行列表,并提供链路追踪、重跑、日志查看等功能。

在这里插入图片描述

如上图所示,当整个任务执行出现异常失败,进入子任务列表锁定失败的子任务(如:账号 1000002 处理失败)。

在这里插入图片描述

如上图所示,通过链路追踪自动调整至该子任务的完整执行调用链(自建平台可拷贝 TraceId 查询锁定),可快速定位业务处理异常位置所在的业务应用和IP。

在这里插入图片描述

如上图所示,展开失败节点详情即可进一步获取失败内容信息(如案例:账号 1000002 在更新名称信息时字段超长),至此一个分布式批处理任务且存在多方服务调用的业务执行异常即可被快速定位。

某游戏业务分析 Http 执行链路

用户案例:某游戏业务系统中其内部采用了 C++、Go 等技术栈,SchedulerX 未提供相应语言 SDK 直接接入,用户则通过暴露 http 服务方式接入 SchedulerX 定时触发运行,并支持其实现 http 任务执行完整调用链查看。

以下展示一个 http 服务被定时调度后,其内部还会进行下游多个应用业务服务调用。

在这里插入图片描述
在这里插入图片描述

通过上述执行链路即可获得一个 http 定时任务在整个业务集群中完整的执行链路。如果单纯在链路追踪平台上来查询该 http 服务的调用链路时,往往会罗列一堆请求记录且无法快速区分是否是某个定时任务触发而来的。因此对比上述方式,对任务调度平台侧运维定时任务执行状况的场景下,SchedulerX 提供了更为清晰的任务执行链路追踪分析入口。

总结

分布式任务调度平台 SchedulerX 有效地将用于微服务场景下的可视化全链路追踪能力引入至定时任务处理场景,这将大大提升定时任务在运行时可观测能力,有效地帮助定时任务执行过程中异常、耗时、执行卡住等问题的定位分析。

相关链接

[1] 分布式任务调度 SchedulerX 接入全链路追踪

https://help.aliyun.com/document_detail/450856.html

[ 2] 企业级分布式应用服务 EDAS

https://help.aliyun.com/document_detail/450856.html

[ 3] 应用实时监控服务 ARMS

https://help.aliyun.com/product/34364.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计springboot基于微信小程序的网络办公系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

zookeeper集群环境搭建及使用

文章目录前提条件下载解压配置文件集群配置测试常用命令前提条件 操作系统&#xff1a;CentOS7服务器&#xff1a;3台Java环境&#xff1a;JDK1.8。安装教程参考JDK1.8安装 下载 执行cd /usr/local进入安装的目录执行命令wget https://archive.apache.org/dist/zookeeper/zo…

ThreadPoolExecutor类是如何保证线程池正确运行的

ThreadPoolExecutor类中的重要属性 在ThreadPoolExecutor类中&#xff0c;存在几个非常重要的属性和方法&#xff0c;接下来&#xff0c;我们就介绍下这些重要的属性和方法。 ctl相关的属性 AtomicInteger类型的常量ctl是贯穿线程池整个生命周期的重要属性&#xff0c;它是一…

LRU Cache【理论讲解 + 代码实现】

LRU Cache&#x1f4d6;1. 什么是LRU Cache&#x1f4d6;2. 为什么需要LRU算法&#xff1f;&#x1f4d6;3. LRU Cache的实现&#x1f4d6;1. 什么是LRU Cache LRU是Least Recently Used的缩写&#xff0c;意思是最近最少使用. 它是一种Cache替换算法. 什么是Cache? 狭义的…

校园论坛(Java)—— 登录注册和用户信息模块

校园论坛&#xff08;Java&#xff09;—— 登录注册和用户信息模块 文章目录校园论坛&#xff08;Java&#xff09;—— 登录注册和用户信息模块1、写在前面2、系统结构设计2.1 各个页面之间的调用关系2.2. 登录注册模块各层的设计3、登录注册模块设计3.1 用户注册功能3.2 用户…

HighTec 工程配置详解

HighTec 工程配置详解 编译配置 构建配置管理器 管理器内&#xff0c;可以创建各种不同用途的配置项。例如用于生产工程的 ROM 配置&#xff0c;用于调试工程的 Debug 配置。对于每个配置&#xff0c;所设置的工程属性是单独分开的&#xff0c;互相之间没有影响。 打开构建配…

[附源码]计算机毕业设计springboot咖啡销售平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Unity复刻骑砍中的帝国象棋(一)

Unity复刻骑砍中的帝国象棋&#xff08;一&#xff09; 起因和简介 这两天从一款游戏中发现了这么个棋类小游戏&#xff0c;觉得挺有意思&#xff0c;没错&#xff0c;就是下面这个&#xff1a; 作为程序员的我&#xff0c;一下就想到复刻它一下。这个棋类小游戏&#xff0c…

【程序人生】4年创作纪念日,不忘初心,继续前行

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;专注于研究 Java/ Liunx内核/ C及汇编/计算机底层原理/源码&#xff0c;就职于大型金融公司后端高级工程师&#xff0c;擅长交易领域的高安全/可用/并发/性能的架构设计与演进、系统优化与稳定性建设。 &#x1…

JavaScript --04. 流程控制语句介绍

文章目录流程控制1 代码块1.1 声明代码块1.2 let 和 var的作用域2 条件判断语句 -- if语句3 条件分支语句3.1 if-else语句3.2 if-else if-else语句3.3 练习4 Switch语句5 循环语句5.1 While循环5.2 do-while循环5.3 for循环5.4 嵌套循环6 break和continue6.1 break6.2 continue…

PTL智能拣货系统

一、PTL背景介绍 随着工业 4.0 理念持续扩展并被接受&#xff0c;智能制造将是中国制造业发展趋势。未来的生产企业不仅仅在生产过程中追求智能化&#xff0c;仓储、工具、设备智能化管理都会成为新的趋势。 现阶段物流仓储行业进入了一个快速的发展期&#xff0c;各种各样的…

辣椒疫霉RXLR效应子抑制植物免疫

文章信息 题目&#xff1a;A Phytophthora capsici RXLR effector targets and inhibits the central immune kinases to suppress plant immunity 刊名&#xff1a;New Phytologist 作者&#xff1a;Xiangxiu Liang&#xff0c;Daolong Dou et al. 单位&#xff1a;China …

微信无感知检测单项好友【WeTool 免费版】【微信如何检测单向好友?】

一.微信无感知检测单项好友 1.1 背景 因为最近业务的原因加了好多的陌生微信好友&#xff0c;难免有很多好友删了我&#xff0c;但是我还有他的微信&#xff0c;岂不是很占地方&#xff1f; 所以我琢磨如何检测这些单项好友【利用转账、拉群的方法太费时间】&#xff0c;我无…

[附源码]计算机毕业设计springboot拉勾教育课程管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

事件绑定(onclick,onfocus,onblur)

事件绑定(onclick,onfocus,onblur) 学习路线&#xff1a;JavaScript_DOM->事件绑定(onclick,onfocus,onblur)-> 事件绑定(onmouseout,onmouseover) ->事件绑定(onsubmit)表单提交 ->提交表单与验证表单案例 常用绑定方式 方式一&#xff1a;通过 HTML标签中的事…

Java Hash 碰撞

散列函数&#xff08;英语&#xff1a;Hash function&#xff09;又称散列算法、哈希函数&#xff0c;是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要&#xff0c;使得数据量变小&#xff0c;将数据的格式固定下来。 该函数将数据打乱混合…

获取windows硬件、软件信息的方法

1&#xff0c;方法1 systeminfo 该命令是Windows中用于显示关于计算机及其操作系统的详细配置信息&#xff0c;包括操作系统配置、安全信息、产品 ID 和硬件属性&#xff0c;如 RAM、磁盘空间和网卡和补丁信息等。 SYSTEMINFO [/S system [/U username [/P [password]]]] [/FO…

从阿里降薪百分之三十来了国企,没想到还是要加班!哭了!

从阿里进国企&#xff0c;图什么&#xff1f;图它降工资&#xff1f;图它技术强&#xff1f;当然是图它轻松不加班&#xff0c;稳定不裁员&#xff01;但如果像下面这位阿里程序员一样&#xff0c;降薪百分之三十进了国企&#xff0c;发现还是得加班&#xff0c;大概只能emo了.…

[附源码]Python计算机毕业设计Django的文成考研培训管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Ae 动态图形模板

哈喽&#xff0c;各位小伙伴&#xff01;今天我们来学习一下如何通过AePr导出和安装动态图形模板&#xff1f; 新建合成 首先&#xff0c;新建一个合成&#xff0c;然后点击文字工具&#xff0c;内容自定义&#xff08;例&#xff1a;一场彗星雨&#xff0c;隔断了时空&#…