定时任务的调度问题

简介: 定时任务的调度问题

公众号merlinsea


  • 定时任务执行定期删除的功能背景
  • 在用户已经购买的短链是有一个有效期限的,如果一旦超过了有效期限,流量包就不能使用,这种情况相当于逻辑删除,但过期的流量包 依旧存储在数据库中,这种流量包对用户而言是没有意义的,但却依旧占据着服务器端端物理内存。随着业务的发展,这种过期的流量包 的记录会占用数据库的内存资源,因此需要引入定时任务,每过一段时间对过期的流量包进行物理删除。


  • 业界常用的删除手段
  • 逻辑删除:这种删除是通过del标记位来判断,当del=0标识没有删除,用户可见;del=1标识已经删除,用户不可见。 优点:可以在服务器端存储用户的记录数 缺点:删除的数据依旧占据着数据库资源
  • 物理删除:这种删除是直接操作数据库,将数据彻底删除,且无法恢复 优点:删除的数据将不会占据数据库的内存资源 缺点:无法恢复用户删除的数据
  • 转移到日志文件归档: 将用户删除的记录存储到日志文件中,如elasticSearch 优点:删除的数据不会继续占据用户数据库,且可以恢复用户的数据,方便做行为分析。


  • 定时任务的分类
  • 单机定时任务:单机的容易实现,但应用于集群环境做分布式部署,就会带来重复执行,解决方案有很多比如加锁、数据库等,但是增加了很多非业务逻辑。
  • 分布式调度定时任务:把需要处理的计划任务放入到统一的平台,实现集群管理调度与分布式部署的定时任务 叫做分布式定时任务 支持集群部署、高可用、并行调度、分片处理等。


  • 单机分布式任务存在的问题:

640.jpg


  • 常见的定时任务


  • 单机:Java自带的java.util.Timer类配置比较麻烦,时间延后问题
  • 单机:ScheduledExecutorService,是基于线程池来进行设计的定时任务类,在这里每个调度的任务都会分配到线程池里的一个线程去执行该任务,并发执行,互不影响
  • 单机:SpringBoot框架自带,SpringBoot使用注解方式开启定时任务
  • 启动类里面 @EnableScheduling开启定时任务,自动扫描
  • 定时任务业务类 加注解 @Component被容器扫描
  • 定时执行的方法加上注解 @Scheduled(fixedRate=2000) 定期执行一次
  • 分布式任务调度框架
  • Elastic-Job
  • XXL-Job
  • Quartz
  • 常见的分布式定时任务框架对比

640.jpg


  • 如何选择分布式定时任务框架?


  • XXL-Job和Elastic-Job都具有广泛的用户基础和完善的技术文档,都可以满足定时任务的基本功能需求
  • xxl-job侧重在业务实现简单和管理方便,容易学习,失败与路由策略丰富, 推荐使用在用户基数相对较少,服务器的数量在一定的范围内的场景下使用
  • elastic-job关注的点在数据,添加了弹性扩容和数据分片的思路,更方便利用分布式服务器的资源, 但是学习难度较大,推荐在数据量庞大,服务器数量多的时候使用


相关文章
|
8月前
|
算法 Unix 调度
【OSTEP】调度: 多级反馈队列 (MLFQ) | 优先级提升 | 饥饿问题 | 愚弄调度问题 | MLFQ 调优
【OSTEP】调度: 多级反馈队列 (MLFQ) | 优先级提升 | 饥饿问题 | 愚弄调度问题 | MLFQ 调优
164 0
|
2月前
|
异构计算
zTasker v1.88.1一键定时自动化任务
zTasker是一款完全免费支持定时、热键或条件触发的方式执行多种自动化任务的小工具,支持win7-11。其支持超过100种任务类型,50+种定时/条件执行方法,而且任务列表可以随意编辑、排列、移动、更改类型,支持任务执行日志,可覆盖win自带的热键,同时支持任务列表等数据的备份及自动更新等。
52 3
|
10月前
|
缓存 Linux 调度
分布式定时任务
分布式定时任务
115 0
分布式定时任务
|
10月前
|
消息中间件 算法 Java
定时任务实现方案总结
定时任务实现方案总结
62 0
定时任务实现方案总结
|
12月前
|
关系型数据库 MySQL 调度
定时任务优化
简单描述一下定时任务的优化
109 0
|
调度
【解决方案 二十】作业调度系统cron表达式详解
【解决方案 二十】作业调度系统cron表达式详解
71 0
|
机器学习/深度学习 传感器 算法
【生产调度】基于和声搜索算法实现并行机器调度附matlab代码
【生产调度】基于和声搜索算法实现并行机器调度附matlab代码
|
算法 调度
作业调度算法
作业调度算法
|
存储 Kubernetes 固态存储
k8s调度之初探nodeSelector和nodeAffinity
k8s调度之初探nodeSelector和nodeAffinity
171 0
|
canal 架构师 数据库
处理亿级数据的“定时任务”,如何缩短执行时间?
一次性集中处理大量数据的定时任务,优化思路是:同一份数据,减少重复计算次数;分摊CPU计算时间,尽量分散处理(甚至可以实时),而不是集中处理;减少单次计算数据量。
1654 0
处理亿级数据的“定时任务”,如何缩短执行时间?