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

news2024/11/19 3:49:50

背景简介

什么是定时任务

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

什么是链路追踪

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

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

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

面对上述问题,从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有效地将用于微服务场景下的可视化全链路追踪能力引入至定时任务处理场景,这将大大提升定时任务在运行时可观测能力,有效地帮助定时任务执行过程中异常、耗时、执行卡住等问题的定位分析。

原文链接

本文为阿里云原创内容,未经允许不得转载。

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

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

相关文章

基于GINA/凭证提供程序的自助密码管理

大多数组织依赖于密码自助管理工具来跟踪用户的密码相关日常 事务。但是&#xff0c;另一方面&#xff0c;大多数自助解决方案只能从web浏览器进行访问。因此&#xff0c;已锁定的用户被迫从同事的工作站或用web浏览器从自助服务终端重置其密码。这与自助密码管理的意图背道而驰…

两级电力市场环境下计及风险的省间交易商最优购电模型(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【小程序】声明式和编程式导航传参

目录 声明式导航 1. 导航到 tabBar 页面 2. 导航到非 tabBar 页面 3. 后退导航 编程式导航 1. 导航到 tabBar 页面 ​编辑 2. 导航到非 tabBar 页面 3. 后退导航 ​编辑 导航传参 1. 声明式导航传参 2. 编程式导航传参 ​编辑 3. 在 onLoad 中接收导航参数 声明式…

pandas对于文件数据基本操作,数据处理常用

基本操作 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple &#xff08;安装包&#xff09; 清华安装 例如 pip3 install --index-url https://pypi.douban.com/simple pandas国内的其他镜像源 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ 阿里云 http://m…

作为程序员的你,常用的软件有哪些?

作为一个合格程序员的你&#xff0c;必须要有一套用起来得心应手的软件工具&#xff0c;有了好的工具才能够让自己的工作效率达到事半功倍的效果。下面我以常见的编程开发软件和数据库管理软件为例&#xff0c;简单介绍几种&#xff0c;感兴趣的朋友可以尝试一下&#xff1a;一…

并发编程学习(六):park、unpark

1、 park、unpark介绍 park、unpark它们是LockSupport类中的方法&#xff0c;内部调用的是Unsafe类中的native方法。 // 暂停当前线程&#xff0c;暂停后&#xff0c;线程状态变为 WAITING LockSupport.park(); // 恢复某个线程的运行&#xff0c;恢复后线程状态变为RUNNING Lo…

炸弹(二分图最大匹配 = 二分图最小顶点覆盖)

D-炸弹_2022图论班第一章图匹配例题与习题 (nowcoder.com) 看题解前先理解二分图最小点集覆盖 最大匹配 一、什么是最小点覆盖 点覆盖的概念定义&#xff1a; 对于图G(V,E)中的一个点覆盖是一个集合S⊆V使得每一条边至少有一个端点在S中。 最小点覆盖&#xff1a;点个数最少的…

《编译原理》实验一:熟悉实验环境VSCode并完成正则表达式转换为NFA

目录 实验一 熟悉实验环境VSCode并完成正则表达式转换为NFA 一、实验目的 二、预备知识 三、实验内容 VSCode的基本使用方法 安装和启动VSCode VSCode的窗口布局 使用VSCode将项目克隆到本地磁盘 使用VSCode登录平台 查看项目中的文件 实验源代码 演示程序的执行过程 四、实验过…

LeetCode Hot 100~Day2

目录 三数之和 电话号码的字母组合 括号生成 合并k个升序链表 下一个排列 搜索旋转排序数组 在排序数组中查找元素的第一个和最后一个位置 组合总数 全排列 旋转图像 三数之和 题目链接&#xff1a;15.三数之和 示例 输入&#xff1a;nums [-1,0,1,2,-1,-4] 输…

金山云将于12月30日在港交所上市:不发行新股,王育林已辞职

12月23日&#xff0c;金山云&#xff08;NASDAQ:KC&#xff0c;HK:03896&#xff09;发布公告称&#xff0c;拟通过介绍方式在港交所主板上市&#xff0c;代码为“03896”。按照计划&#xff0c;金山云将于2022年12月30日正式登陆港交所&#xff0c;不发行新股融资。 据贝多财…

我写这10+个JavaScript单行代码,被组长夸代码写得优雅!

大厂面试题分享 面试题库 前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 JavaScript 非常大的特点容易上手且非常灵活&#xff0c;代码实现方式五花八门&#xff1b;有时候能一行代码解决&#xff0c;就尽量不用…

MES系统与WMS系统的区别在哪里?

从字面上理解 MES是一套面向制造企业车间执行层的生产信息化管理系统。 WMS是仓储管理系统(WarehouseManagentsystem)的缩写&#xff0c;是通过入库、出库、调拨、管理等功能&#xff0c;实现一体化批量管理。 从用法上理解 WMS仓库管理系统主要采用条码技术&#xff0c;可及…

认识 微内核架构

微内核架构 1 说明背景 关于宏内核、微内核、混合内核&#xff0c;都是相对而言的概念。 宏内核: 通用的操作系统&#xff0c;将操作系统内核的所有模块放置在内核态运行&#xff0c;具备直接操作硬件的能力。例如 UNIX/Linux, FreeBSD 等微内核: 简单的操作系统&#xff0c;…

深度学习训练营之海贼王人物识别

深度学习训练营之海贼王人物识别原文链接环境介绍前置工作设置GPU导入数据数据查看数据预处理加载数据可视化数据检查数据配置数据集prefetch()功能详细介绍&#xff1a;归一化查看归一化后的数据构建VGG-16网络网络结构编译模型训练结果可视化原文链接 &#x1f368; 本文为&a…

ELK集群部署---ElasticSearch集群的部署

1. 环境规划&#xff1a; 主机名IP地址角色node1192.168.56.111 ElasticSearch(master) Zookeeper Kafka node2192.168.56.112 ElasticSearch(slave) Kibana Zookeeper Kafka node3192.168.56.113 ElasticSearch(slave) Zookeeper Kafka node4192.168.56.114 Logstash Filebe…

4. Json数据传递与接收

由于Json数据传递与接收在以后的开发中是主流&#xff0c;所以把它拿出来独立记一篇笔记&#xff0c;其他的笔记太庞杂了。 1. json数据参数传递实现步骤 1.1 添加json数据转换相关坐标 <dependency><groupId>com.fasterxml.jackson.core</groupId><ar…

HBCPC2022-河北省大学生程序设计竞赛

部分题解7-4 键盘故障7-6 筷子7-8 方7-9 优美的字符串7-4 键盘故障 签到题&#xff0c;直接遍历字符串&#xff0c;相同则跳过&#xff0c;不相同则输出 题目链接&#xff1a;https://pintia.cn/problem-sets/1584003400735793152/exam/problems/1584003481883000835 AC代码&a…

业聚医疗在港交所上市:市值约76亿港元,钱永勋、刘桂祯夫妇控股

12月23日&#xff0c;业聚医疗集团控股有限公司&#xff08;下称“业聚医疗”&#xff0c;HK:06929&#xff09;在港交所上市。本次上市&#xff0c;业聚医疗的发行价为8.80港元/股&#xff0c;全球发行发售5463.30万股&#xff0c;募集资金总额约为4.81亿港元&#xff0c;募资…

java基于ssm,jsp鞋城源码卖鞋服装男鞋商城女鞋商城项目源码

ssm开发的网上鞋城系统&#xff0c;主要有商品分类&#xff0c;列表&#xff0c;详情&#xff0c;加入购物车&#xff0c;订单&#xff0c;收货地址等功能&#xff0c;单商家登录后台可以发布商品&#xff0c;上下架商品&#xff0c;发货退款等管理订单。 演示视频&#xff1a;…

【开源项目】历史数据迁移

历史数据迁移 项目地址&#xff1a;https://gitee.com/xl-echo/dataMigration 历史迁移解决方案。微服务的架构为基础&#xff0c;使用多种设计模式&#xff0c;如&#xff1a;单利、桥接、工厂、模板、策略等。其中涉及的核心技术有&#xff0c;多线程、过滤器等。致力于解决…