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

背景简介

什么是定时任务

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

什么是链路追踪

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

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

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

面对上述问题,从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.mzph.cn/news/510346.shtml

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

相关文章

关于平台工程的开发者工具链,你还想加点啥?

前言 从 Kubernetes 诞生以来&#xff0c;以 DevOps、容器化、可观测、微服务、Serverless 等技术为代表的云原生&#xff0c;催生了应用架构新一轮的升级。有意思的是&#xff0c;与以往的技术迭代更新不同&#xff0c;原本是一个技术圈常规的一次技术实践&#xff0c;在千行…

sdut 走迷宫

走迷宫Time Limit: 1000MS Memory limit: 65536K题目描述一个由n * m 个格子组成的迷宫&#xff0c;起点是(1, 1)&#xff0c; 终点是(n, m)&#xff0c;每次可以向上下左右四个方向任意走一步&#xff0c;并且有些格子是不能走动&#xff0c;求从起点到终点经过每个格子至多一…

阿里云联合“产学研媒”发起 BizDevOps 共促计划,助力企业提升组织效能

2012年全球最具影响力的独立研究咨询机构Forrester曾预言&#xff1a;“In the future, all companies will be software companies”&#xff08;在未来&#xff0c;所有的企业都将成为软件企业&#xff09; 近10年来&#xff0c;DevOps运动在全球和中国风起云涌&#xff0c;…

Kubernetes HPA 的三个误区与避坑指南

前言 云计算带来的优势之一便是弹性能力&#xff0c;云原生场景下Kubernetes提供了水平弹性扩容能力&#xff08;HPA&#xff09;&#xff0c;让应用可以随着实时指标进行扩/缩。然而HPA的实际工作情况可能和我们直观预想的情况是不一样的&#xff0c;这里面存在一些认知误区。…

K8s有损发布问题探究

问题提出 流量有损是在应用发布时的常见问题&#xff0c;其现象通常会反馈到流量监控上&#xff0c;如下图所示&#xff0c;发布过程中服务RT突然升高&#xff0c;造成部分业务响应变慢&#xff0c;给用户的最直观体验就是卡顿&#xff1b;或是请求的500错误数突增&#xff0c…

解读 K8s Pod 的13种典型异常

在K8s中&#xff0c;Pod作为工作负载的运行载体&#xff0c;是最为核心的一个资源对象。Pod具有复杂的生命周期&#xff0c;在其生命周期的每一个阶段&#xff0c;可能发生多种不同的异常情况。K8s作为一个复杂系统&#xff0c;异常诊断往往要求强大的知识和经验储备。结合实战…

实践教程之如何快速使用 PolarDB-X

PolarDB-X 为了方便用户体验&#xff0c;提供了免费的实验环境&#xff0c;您可以在实验环境里体验 PolarDB-X 的安装部署和各种内核特性。除了免费的实验&#xff0c;PolarDB-X 也提供免费的视频课程&#xff0c;手把手教你玩转 PolarDB-X 分布式数据库。 本期实验可以让您快…

实践教程之如何将 PolarDB-X 与大数据等系统互通

本期实验将指导您使用PolarDB-XCanalClickHouse搭建实时分析系统。 本期免费实验地址 本期教学视频地址 前置准备 假设已经根据前一讲内容完成了PolarDB-X的搭建部署&#xff0c;可以成功链接上PolarDB-X数据库。 实践教程之如何快速安装部署PolarDB-X 部署Canal Canal是…

caffe安装 cuda安装 opencv安装 cudnn安装 python相关依赖库安装

1安装cuda8.0 安装依赖库 #sudo apt-get install g #sudo apt-get install git #sudo apt-get install freeglut3-dev Ctraltf4 进入后台 输入用户名和密码 User&#xff1a; Password&#xff1a; #sudo vi /etc/modprobe.d/blacklist-nouveau.conf 输入 blacklistnouve…

加载速度提升 15%,关于 Python 启动加速探索与实践的解析

编者按&#xff1a;在刚刚结束的 PyCon China 2022 大会上&#xff0c;龙蜥社区开发者严懿宸分享了主题为《Python 启动加速的探索与实践》的技术演讲。本次演讲&#xff0c;作者将从 CPython 社区相关工作、本方案的设计及实现&#xff0c;以及业务层面的集成等方面进行介绍。…

统信软件高级工程师:关于云原生技术在容器方面的应用介绍

编者按&#xff1a;随着近几年来云原生生态的不断壮大&#xff0c;众多企业纷纷开展了用云上云的工作&#xff0c;学习云原生及容器技术对于现代工程师是必不可少的。本文整理自龙蜥大讲堂 54 期&#xff0c;统信高级研发工程师参与技术分享&#xff0c;为大家介绍了云原生的介…

sdut 区间覆盖问题

区间覆盖问题 Time Limit: 1000MS Memory Limit: 65536KBSubmit Statistic DiscussProblem Description 用i来表示x坐标轴上坐标为[i-1&#xff0c;i]的长度为1的区间&#xff0c;并给出n&#xff08;1≤n≤200&#xff09;个不同的整数&#xff0c;表示n个这样的区间。 现在要…

opencv mat数据剪裁感兴趣的部分处理方法

Mat srcImage_r imread("c_d_right.jpg",1);Mat srcImage_l imread("c_d_left.jpg",1);Mat vv(srcImage_r,Rect(10,10,100,100));imshow("vv", vv);

解读最佳实践:倚天710 ARM芯片的 Python+AI 算力优化

编者按&#xff1a;在刚刚结束的 PyCon China 2022 大会上&#xff0c;龙蜥社区开发者朱宏林分享了主题为《ARM 芯片的 PythonAI 算力优化》的技术演讲。本次演讲&#xff0c;作者将向大家介绍他们在倚天 710 ARM 芯片上开展的 PythonAI 优化工作&#xff0c;以及在 ARM 云平台…

从敏捷协作到价值交付

前面我的同事在分享的时候&#xff0c;指出目前软件研发的最大问题不是效率&#xff0c;而是研发资源的浪费。可能产品经理半天写的需求&#xff0c;开发要埋头苦干三个月。如果错误的选择了一个对业务发展无益的需求&#xff0c;会带着大家往错误的方向越跑越远。 那么什么是…

opencv实现几幅图像拼接成一整幅大图

opencv实现几幅图像拼接成一整幅大图 标签&#xff1a; 博客opencv 2013-10-22 12:05 9846人阅读 评论(3) 收藏 举报 本文章已收录于&#xff1a; 分类&#xff1a; opencv&#xff08;14&#xff09; 作者同类文章X版权声明&#xff1a;本文为博主原创文章&#xff0c;未…

行动策略过于复杂怎么办?试试下面一些解决方法

背景 随着使用SLS告警越来越深入&#xff0c;有些用户的行动策略会配置的特别复杂&#xff0c;有些时候可以让用户通过创建多个行动策略来进行一定的精简&#xff0c;但是在一些场景下&#xff0c;用户是无法创建多个行动策略的。例如用户想要通过SLS来统一管理其各个监控系统…

从效能公式解构研发效能

这几年&#xff0c;云原生、Web3.0、元宇宙等技术的出现和应用&#xff0c;正在深刻地改变着我们这个世界。以数字技术应用为主线的数字化转型是此次人类文明变革的核心动力。在这一变革过程中&#xff0c;软件研发模式的发展起到了重至关重要的作用。从早期瀑布式、精益敏捷、…

sdut 汉诺塔系列2

汉诺塔系列2 Time Limit: 1000MS Memory Limit: 65536KBSubmit Statistic DiscussProblem Description 用1,2,...,n表示n个盘子&#xff0c;称为1号盘&#xff0c;2号盘,...。号数大盘子就大。经典的汉诺塔问 题经常作为一个递归的经典例题存在。可能有人并不知道汉诺塔问题的典…

阿里CCO:基于 Hologres 的亿级明细 BI 探索分析实践

CCO是Chief Customer Officer的缩写&#xff0c;也是阿里巴巴集团客户体验事业部的简称。随着业务的多元化发展以及行业竞争的深入&#xff0c;用户体验问题越来越受到关注。CCO体验业务运营小二日常会大量投入在体验洞察分析中&#xff0c;旨在通过用户的声音数据结合交易、物…