首页 > 其他分享 >任务下发优化分析过程记录

任务下发优化分析过程记录

时间:2024-06-11 18:03:08浏览次数:11  
标签:task 记录 ip 任务 server where 下发 优化 id

任务下发优化分析过程记录

背景

最近接手了一个任务下发平台, 基本功能是接收任务脚本, 下发给目标服务器执行.
简化的业务流程如下:

sequenceDiagram autonumber participant client participant server participant DB participant MQ participant target client->>+server: 任务请求 server->>DB: 新建任务和任务明细 server->>target: 下发任务 target->>+MQ: 上报结果 MQ->>-server: 处理结果 server->>DB: 更新任务和任务明细 server->>-client: 返回结果

理论上讲同一个 task 内目标执行是并行的, 整个流程耗时与目标数量无关.
但实际情况是目标数量大时, 耗时会超线性增长.

排查

分析代码看消费者主要业务逻辑为更新任务明细表, 通过查询日志看消息处理时长非常不稳定. 推测整个业务流程遇到了竞争.

表结构如下:

// task表
create table task
(
    id             bigint                not null comment '主键id' primary key
)

// task_server表, 用于记录任务明细
create table task_server
(
    id      bigint       not null comment '主键'
        primary key,
    task_id bigint       not null comment '主表task_id',
    ip      varchar(20)  not null comment '具体执行任务的机器内网ip',
    status  tinyint(1)   not null comment '任务状态;0:待发送,1:执行中,2执行完成,3:发送失败:4:手动终止,9:任务超时',
    result  tinyint(1)   null comment '任务结果;0:执行失败,1:执行成功,2:执行超时',
    msg     varchar(128) null comment '失败详情',
)

更新语句如下:

update task_server set status={status},result={result},u_time={utime},msg={msg}
where task_id={taskId} and ip={ip}

通过 explain 查看, 发现索引类型为 index_merge, 同时用到了 idx_task_id,idx_ip 两个索引;
根据分析, 同一个 task 下更新一条任务明细数据时, 会将其它任务明细加上行锁, 导致大量锁竞争.

mysql> explain UPDATE task_server t SET t.status = 1 WHERE t.task_id=95722684647319 AND t.ip='192.168.68.92';
+----+-------------+-------+------------+-------------+--------------------+--------------------+---------+------+------+----------+--------------------------------------------------+
| id | select_type | table | partitions | type        | possible_keys      | key                | key_len | ref  | rows | filtered | Extra                                            |
+----+-------------+-------+------------+-------------+--------------------+--------------------+---------+------+------+----------+--------------------------------------------------+
|  1 | UPDATE      | t     | NULL       | index_merge | idx_task_id,idx_ip | idx_task_id,idx_ip | 8,82    | NULL |    1 |   100.00 | Using intersect(idx_task_id,idx_ip); Using where |
+----+-------------+-------+------------+-------------+--------------------+--------------------+---------+------+------+----------+--------------------------------------------------+

验证行锁

测试数据如下:

id task_id ip msg
95722684658071 95722684647319 192.168.68.92
95722684658583 95722684647319 10.9.188.56
95722699750295 95722699740567 192.168.68.92
95722699750807 95722699740567 10.9.188.56

session1

begin;
UPDATE task_server t SET t.status = 1 WHERE t.task_id=95722684647319 AND t.ip='192.168.68.92';

session2

update task_server set msg='foo' where id=95722684658071;
// blocked
update task_server set msg='foo' where id=95722684658583;
// blocked
update task_server set msg='foo' where id=95722699750295;
// blocked
update task_server set msg='foo' where id=95722831021975;
Query OK, 0 rows affected (0.01 sec)

解决方案

通过以上分析可以知道耗时大量增加是因为大量数据库竞争锁导致的.解决方案就是避免加锁.
我采用的方案如下:

select id from task_server where task_id={taskId} and ip={ip};
update task_server set ... where id={id};

虽然两条语句无法保证一致性, 但是在这个业务场景下完全没问题.

标签:task,记录,ip,任务,server,where,下发,优化,id
From: https://www.cnblogs.com/aloe-n/p/18242497

相关文章

  • 优化MySQL连接管理:深入解析max_connections参数与解决Too Many Connections策略
    前言​在现代的数据库管理中,合理配置max_connections参数对于确保MySQL数据库的稳定性和高效性至关重要。本文将深入探讨max_connections的基本概念,分析导致“Toomanyconnections”错误的常见原因,并提供一系列解决方案,以帮助数据库管理员和开发者优化数据库性能。基本......
  • 应用分发策略与渠道优化:确保应用成功触达用户的关键
    应用分发是指将安卓或iOS类型的应用下载到用户手机中的过程。这个过程可以细分为上架前的内测应用分发和上架后的正式应用分发。以下是关于应用分发的详细解释:上架前的内测应用分发:主要用于应用发布前的内部测试,确保应用在正式发布前能够达到预期的功能和性能要求。例如......
  • dynamics 365 online仪表板提示:超出最大记录限制。请减少记录数量
     1、Dynamics365online的仪表板确实有数量限制,当记录条数超过5万的时候,就会提示:超出最大记录限制。请减少记录数量https://learn.microsoft.com/zh-cn/power-apps/maker/model-driven-apps/create-edit-system-charthttps://learn.microsoft.com/zh-cn/power-apps/maker/mod......
  • Tomcat部署及优化
    目录一、Tomcat 1、tomca简介2、tomcat核心组件 3、Servlet是什么4、什么是JSP 5、tomcat功能组件结构5.1、Container结构分析:5.2、tomcat的请求过程2、Tomcat部署(1)安装jdk1)系统初始化2)安装jdk (2)安装并启动Tomcat1)上传压缩包并解压 2)开启tomcat 3)关......
  • 直播架构入门记录
    1.直播的工作原理【拉流】直播内容是通过流媒体播放器播放出来,而流媒体播放器通过流地址来拉取流数据,再处理相关解码工作,最后呈现出画面和声音。为了保证全国甚至海外用户都能够流畅的观看直播内容,就需要比较强大的物理网络覆盖。流媒体数据通过上游CDN源站推(或推......
  • 每日一题——Python实现PAT乙级1111 对称日(举一反三+思想解读+逐步优化)七千字好文
    一个认为一切根源都是“自己不够强”的INTJ个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数Python-3.12.0文档解读目录我的写法代码点评时间复杂度分析空间复杂度分析综上所述:优化建议我要更强优化建议完整代码和注释优化分析......
  • ClickHouse内幕(3)基于索引的查询优化
    ClickHouse索引采用唯一聚簇索引的方式,即Part内数据按照orderbykeys有序,在整个查询计划中,如果算子能够有效利用输入数据的有序性,对算子的执行性能将有巨大的提升。本文讨论ClickHouse基于索引的查询算子优化方式。在整个查询计划中Sort、Distinct、聚合这3个算子相比其他算子......
  • TCP优化
    TCP优化是指客户端和服务器端双方通信链路的优化,通过优化尽量减少丢包重传带来的网络额外负担。各种丢包重传的导致原因可以分为两种:•发送方发包速度高于网络链路所能承受的极限。•发送方发包速度高于服务器端所能承受的极限。那针对这两个问题,我们采取相应的优化:针对......
  • 网站关键词需要长期优化还是短期优化?
    网站关键词需要长期优化还是短期优化?下面跟小编一起来了解详细内容:当涉及到关键词搜索,它是众所周知的每个家庭。但是在关键词优化方面,企业很难做到,因为他们不知道如何通过优化关键词来提高网站排名,限度地提高网站的效果。更不知道,网站关键词优化几天就发了?是否改变关键词......
  • 笔记本电脑(win11+3060+conda)安装PyTorch踩坑记录
    简而言之,先看你的显卡,打开CMD,输入nvidia-smi,右上角有一个CUDA:XX.X表示当前显卡及当前驱动支持的最高版本CUDA。输入nvidia-smi-q可以看到显卡架构(或者直接去Nvidia官网找你的显卡)。再打开这个连接,查看你显卡架构支持的最低版本CUDA。从中选择一个cuda版本torch是自带了cu......