优化-处理大量定时任务的思路

使用定时任务实现支付单自动关单,并通过多线程+分段优化扫表延迟 支付系统关单优化方案:定时任务+多线程+分段策略 摘要:针对支付系统中订单超时未支付导致的库存占用等问题,本文提出优化方案。传统单线程全表扫描方式存在扫描耗时长、数据库压力大等缺陷。新方案采用分段策略(如按ID或时间分片)缩小扫描范围,配合多线程并发处理和批量SQL更新,显著提升效率。以500万日订单量为例,关单延迟从8分钟降至1分钟内,数据库CPU利用率从80%降至40%。关键点包括合理设计分片规则、线程池调优和保证更新幂等性。该方案有效解决了大数据量下的关单延迟问题。 阅读详情

HashedWheelTimer-高效处理大量定时任务

背景

业务需要,要对app用户做个30s离线的功能,即:用户自登录开始,30s内无操作及下线。

常规思路1(单定时器轮询)

  • 用户登录时用关联数组记录用户的uid & 用户最后操作时间,用户的任何操作也要更新对应的操作时间。
  • 开一个定时任务,每秒触发一次,遍历该数组,(操作时间与30s求和)与当前时间比对判断是否该离线

优点
实现简单
缺点
效率较低,用户量一大玩脱,轮询的通病

常规思路2(多定时器)

  • 和思路1一样,需要一个数组记录用户uid和最后操作时间
  • 收到用户操作的请求后开一个定时器,30s后触发,任务内容是,检查该uid最后操作时间是否超过30s,是否该离线处理
    优点
    多定时器,效率高
    缺点
    用户的每次操作都开一个定时器,很耗资源,用户量大也是问题

HashedWheelTimer的实现思路

相信很多同学和我一样第一次看到这个名词,这个结构通俗的讲就是一个环形队列,专门设计用来处理大量定时任务的结构。
先看一张结构图
1.png

原理介绍
为了理解,我们假设业务:用户无操作时,8s即离线处理
如图,该环形队列有8个槽位,每个槽位有index值,定时任务设置为每1s顺时针走1格,聪明的你肯定想到了,我们可以把大量的定时任务通过一套算法落地到每一个槽位,这样当定时任务走到对应槽位时只需要获取该槽位所有的任务去处理即可

实现

  • 8s超时,就创建一个index从1到8的环形队列(本质是个数组)
  • 环上每一个槽位是一个数组(存储uid)
  • 定义一个数组,记录uid落在环形队列的哪个槽位里
  • 启动一个定时器,每隔1s,在上述环形队列中移动一格
  • 定义一个index指针来标识刚检测过的槽的位置

用户请求到达时

  • 从数组中,查找出这个uid存储在哪一个槽里
  • 从这个槽的集合中,删除这个uid
  • 将uid重新加入到新的槽集合中(具体是哪一个槽呢 ,Index指针所指向的上一个槽位,因为这个槽位,会被定时器在10s之后扫描到)
  • 更新数组,记录这个uid对应槽的值
  • 离线操作,定时器每秒种移动一个槽位,这个槽对应的集合中所有uid都应该被集体超时

优点
只需要1个定时器
定时器每1s只需要一次触发,消耗CPU很低
批量超时,当前扫到的槽位集合中所有元素都应该被离线

请关注我的订阅号

订阅号.png

定时任务管理器:优化时间服务的大数据方案 在软件开发过程中,定时任务经常被用来执行重复性的操作,比如数据抓取、定时备份和定时通知等。而定时任务的管理与调度,对于提高系统的稳定性和性能至关重要。为了优化时间服务的效率,我们设计并实现了一个名为“定时任务管理器”的大数据方案。定时任务管理器的主要目标是提供一个可靠和高效的机制来管理大量的定时任务,并减少时间服务的负载。我们将采用分布式架构和基于事件驱动的设计思路,结合大数据技术,实现一个高可扩展性和高性能的定时任务管理器。上述示例代码展示了一个简单的定时任务调度器的实现,其中任务调度由。 阅读详情

相关推荐

自动驾驶感知融合算法拆解:从华为MDC案例看前融合与大融合的工程实现

本文深度解析了华为MDC平台在自动驾驶感知融合算法中的前沿工程实践,重点探讨了Camera-Lidar前融合与多传感器大融合的架构设计。通过异构融合架构、数据流优化和场景化应用,华为MDC平台实现了高效、安全的感知能力,显著提升了自动驾驶系统的性能与可靠性。

weixin_29198045的博客 533

定时任务调度及优化

一、场景描述:XXLJOB每隔三小时定时处理一批数据,这批数据可达到几千万以上,这是kafka监听消息的截图。 这种设计存在很大的一个问题,定时任务触发的时候,都是一个很大的峰值,这个时候对服务器资源消耗最大,而且存在很多空闲的时间是没有任务处理的状态。争对这个问题,进行了分析和思考。 方案1:使用延时队列,每个处理的请求都放到延时队列里面,时间到了在做消费,这种情况不需要使用定时任务,就可以合理的分摊系统资源,提升调度能力,但是kafka天生不支持延时队列的场景,不像其他MQ中间件可以配置..

qq_28406419的博客 2851

OpenSceneGraph编译、安装、开发环境

详细描述WIndows 10下使用Visual Studio 2019编译OpenSceneGraph 3.6.5的操作流程

国产CAx(CAD/CAE/CAM)软件研发 8770

java大量定时任务_Java应用多机器部署解决大量定时任务问题

今天来说一个Java多机部署下定时任务的处理方案。需求: 有两台服务器同时部署了同一套代码, 代码中写有spring自带的定时任务,但是每次执行定时任务时只需要一台机器去执行。当拿到这个需求时我脑子中立马出现了两个简单的解决方案:利用ip进行判断, 两台机器ip肯定不一样, 指定某一台机器的ip运行。只在一台机器上部署定时任务的代码。最后两个方案又都被自己否决了。 第一条,如果指定ip的机器出现了...

weixin_42513365的博客 868

项目计划书、规划文档模板

项目计划书、规划文档模板 最近通过项目实践经历,整理出的一套项目计划书(仅供自己参考梳理思路使用) 有喜欢的文末加VX 辛苦码字如有转载请标明出处谢谢!——木研 更新的简版项目规划文档! 原版文件请+vx :baierfa ...

weixin_43194923的博客 987

PyTorch 深度学习实战(28):对比学习(Contrastive Learning)与自监督表示学习

本文实现了基于对比学习的自监督表征学习框架,通过 InfoNCE 损失在 CIFAR-10 数据集上学习到具有判别性的特征表示。实验表明,仅使用线性分类器即可达到 82% 以上的验证准确率,证明了对比学习的有效性。在下一篇文章中,我们将深入计算机视觉的核心任务之一——《目标检测与 YOLO 实战》,探讨如何利用深度学习实现高效的目标检测系统。

m0_60414444的博客 2383

定时任务优化

我们每天凌晨都要跑一个定时任务,插入逾期记录,并且重新计算用户的逾期,待还,待收等各种统计。前两天发现线上的逾期太多了,定时任务都跑到下午了。因此决定对定时任务进行优化,让他在凌晨跑完。 定时任务是按照借条分期来处理的,每张借条分期插入逾期记录,更新借条分期信息,更新借条信息,更新相关用户的各种统计信息。最先想到的优化办法是采用多线程,同时跑他50个线程,同时把可能产生互相锁表的用户统计采用sq

qq_32532853的博客 1809

手把手教你排查libstdc++.so.6版本问题:从GLIBCXX缺失到完美解决

本文深入解析Linux系统中常见的GLIBCXX版本缺失问题,以`ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6: version 'GLIBCXX_3.4.29' not found`为例,从动态链接原理入手,提供使用`strings`和`find`命令的诊断方法,并详细对比了四种解决方案的优缺点。文章重点推荐通过设置`LD_LIBRARY_PATH`或更新系统库的安全策略,并最终建议使用Docker容器化技术实现环境依赖的根治与统一管理。

j7k8l的博客 300

dubbo-详解海量定时任务实现机制

dubbo中的时间轮机制讲解

tdt008的博客 1023

【实战项目开发技术分享】ROS1.0、ROS 2.0和CyberRT开源通信框架对比

随着机器人和自动驾驶技术的飞速发展,开源通信框架在机器人、自动驾驶行业扮演着重要的角色。ROS1.0是一个广泛应用于机器人领域的开源框架,ROS 2.0是其改进版本,而CyberRT是Baidu Apollo自动驾驶平台的通信框架。ROS和ROS 2.0都注重灵活性和共享性,适用于各种机器人应用。CyberRT则专注于实时性和高性能,适用于自动驾驶等对实时性要求较高的场景。选择适合的框架取决于具体应用需求和开发者的偏好。

xiewf的博客 2万+

STM32实战开发(110):基于STM32的智能地震监测系统开发

地震监测系统是自然灾害预警体系中至关重要的一部分。随着地震灾害的频发和对自然灾害预测精度要求的提高,智能地震监测系统逐渐成为研究的热点。STM32作为一款高性能的微控制器,凭借其强大的处理能力和丰富的外设接口,在地震监测领域中得到了广泛应用。本篇文章将详细介绍如何使用STM32实现一个智能地震监测系统的开发过程,涵盖硬件设计、软件编程、系统实现及相关代码。通过集成加速度传感器、地震数据采集、实时数据处理和无线数据传输功能,我们可以设计一个高效、稳定的智能地震监测系统。

2201_76125393的博客 710

说说 Spring 定时任务如何大规模企业级运用

Spring 定时任务简介定时任务是业务应用开发中非常普遍存在的场景(如:每分钟扫描超时支付的订单,每小时清理一次数据库历史数据,每天统计前一天的数据并生成报表等等), 解决方案很多 ,Spring 框架提供了一种通过注解来配置定时任务的解决方案,接入非常的简单,仅需如下两步:1. 在启动类上添加注解@EnableScheduling2. 开发定时任务 Bean 并配置相应的定时注解@ScheduledSpring 定时任务原理。

Candyz7的博客 378

6.14华为OD机试真题 新系统 - 字符串格式调整 (Java/Py/C/C++/Js/Go)

# **字符串格式调整** > 2026 华为OD机试真题 6月14日华为OD上机新系统考试真题 100 分题型 点击查看华为 OD 机试真题完整目录:[2026最新华为OD机试新系统卷 + 双机位C卷 真题题库目录|全覆盖题库 + 逐点算法考点详解](https://blog.youkuaiyun.com/banxia_frontend/article/details/160346662) # 题目描述 输入一个字符串,字符串中只包含大写字母和数字。要求将字符串中的所有数字提取出来,按出现的顺序组

算法大师! 944

python2处理耗时任务_一次性集中处理大量数据的定时任务,如何缩短执行时间?...

作者:58沈剑问题抽象:(1)用户会员系统;(2)用户会有分数流水,每个月要做一次分数统计,对不同分数等级的会员做不同业务处理;数据假设:(1)假设用户在100w级别;(2)假设用户日均1条流水,也就是说日增流水数据量在100W级别,月新增流水在3kW级别,3个月流水数据量在亿级别;常见解决方案:用一个定时任务,每个月的第一天计算一次。//(1)查询出所有用户uids[] = select uid...

weixin_35834687的博客 327

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

一次性集中处理大量数据的定时任务,如何缩短执行时间?

作者:58沈剑 问题抽象: (1)用户会员系统; (2)用户会有分数流水,每个月要做一次分数统计,对不同分数等级的会员做不同业务处理; 数据假设: (1)假设用户在100w级别; (2)假设用户日均1条流水,也就是说日增流水数据量在100W级别,月新增流水在3kW级别,3个月流水数据量在亿级别; 常见解决方案: 用一个定时任务,每个月的第一天计算一次。 //(1)查询出所有用户 uids[] =...

程序员追风的博客 3232

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

定时任务更新数据库---非常规思路

需求:设置定时任务,将数据库用户名全称按照固定规则更新用户简称(新增一列);因为在进行交易时,若并发量过大去处理会影响性能。 思路: 1. 使用do...while循环执行数据库查询,查询语句加limit限制为100条每次,循环更新每条记录,当查询的结束集不是100条时,认为是最后一次查询,退出while循环。 2.常规方式在项目中做定时任务: @Scheduled(cron = "0/...

woailuo23的博客 2669

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

腾讯面试真题:高效处理大量数据的JavaScript技巧

通过今天这一篇文章明白了时间分片是如何工作的以后只需要模仿写一段就可以达到处理大量数据了,不懂的地方欢迎留言.

辅导大学生代码设计15年 878

Android实现定时任务的几种方式(附带源码)

Android实现定时任务的几种方式(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 3136

字节跳动面试被拷打:高效处理大量数据的JavaScript技巧

通过今天这一篇文章明白了时间分片是如何工作的以后只需要模仿写一段就可以达到处理大量数据了,不懂的地方欢迎留言.

辅导大学生代码设计15年 1115

如何用mybatis快速插入大量数据?

mybatis快速批量插入大数据量

dengfengan的博客 7455

解决故障的处理思路

在有那么一瞬间,遇到服务器故障可能会手足无措,完全不知道自己应该干些什么,该如何处理。这里就简单记录一下解决服务器故障的思路,以便今后迅速定位问题。 问题的前因后果 尽可能搞清楚问题的前因后果,不要一下子就扎到服务器前面,你需要先搞明白对这台服务器有多少已知的情况,还有故障的具体情况。不然你很可能就是在无的放矢 必须搞清楚的问题有: 故障的表现是什么?无响应?报错? 故障是什么时候发现的...

无怨无悔专栏 828

MySQL插入数据很慢优化思路

MySQL插入数据很慢优化思路解决方法与思路 解决方法与思路 插入数据量非常大的场景 加大mysql配置中的bulk_insert_buffer_size,这个参数默认为8M bulk_insert_buffer_size=100M 修改该条记录有助于千万级别数据批量插入。 如果只是单纯避免业务侧阻塞 改写所有insert语句为insert delayed 这个insert delayed不同之处在于:立即返回结果,后台进行处理插入。 锁方面的排查 业务侧阻塞排查: 查询是否是因为线程长期获取不

weixin_38370441的博客 1万+

场景面试题:优惠券过期了,如何处理?

你好,我是田哥上周一个朋友去面试,被面试官问到:用户领取优惠券后,如果优惠券到了,该怎么处理?为什么他会被问到这个问题,那是因为他把我的充电桩项目写到了简历上,并且还写这么一句责任描述:负责项目中优惠券相关功能的设计和开发其实,除了问这个问题,还被问到了类似秒杀的问题:如果现在有个活动,这个活动就说送超大优惠券,但是需要用户有5000积分,假设系统中有1w个人积分超5000,但是优惠券只有10张,...

田维常 1832

Access把每一天的数据累加_一次性集中处理大量数据的定时任务,如何缩短执行时间?...

作者:58沈剑问题抽象:(1)用户会员系统;(2)用户会有分数流水,每个月要做一次分数统计,对不同分数等级的会员做不同业务处理;数据假设:(1)假设用户在100w级别;(2)假设用户日均1条流水,也就是说日增流水数据量在100W级别,月新增流水在3kW级别,3个月流水数据量在亿级别;常见解决方案:用一个定时任务,每个月的第一天计算一次。//(1)查询出所有用户uids[] = select uid...

weixin_39594312的博客 626

批处理优化引发的连锁故障:定时任务依赖治理与数据库性能调优指南

数据库性能优化是后端工程中绕不开的核心课题,尤其当业务发展到一定规模,定时清理、数据归档等批处理任务会频繁成为系统瓶颈。许多团队在优化单个任务时容易陷入局部最优,却忽略了任务之间存在的隐式依赖——上游任务的执行速度变化,可能直接改变下游任务的数据分布与索引选择。当优化器因统计信息失真而选择全表扫描,慢查询便可能如多米诺骨牌般引发连接池耗尽、接口超时等连锁故障。本文从一次典型的月度批量任务事故出发,梳理单点优化如何演变为链路风险,并给出分批事务、联合索引设计、执行计划验证、调度错峰与告警监控等工程实践方案,帮

weixin_34007886的博客 614
上一篇: 大数据高并发下表如何扩展字段?
下一篇: ApacheMPM
码哥说
博客等级 码龄8年 5645粉丝 172原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码哥说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值