定时任务的调度问题

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

公众号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关注的点在数据,添加了弹性扩容和数据分片的思路,更方便利用分布式服务器的资源, 但是学习难度较大,推荐在数据量庞大,服务器数量多的时候使用


相关文章
|
算法 Unix 调度
【OSTEP】调度: 多级反馈队列 (MLFQ) | 优先级提升 | 饥饿问题 | 愚弄调度问题 | MLFQ 调优
【OSTEP】调度: 多级反馈队列 (MLFQ) | 优先级提升 | 饥饿问题 | 愚弄调度问题 | MLFQ 调优
455 0
|
1月前
|
Kubernetes Linux 调度
【赵渝强老师】K8s的周期性任务控制器CronJob
本文介绍了K8s中的CronJob控制器,它类似于Linux的crontab命令,用于管理和调度定时作业。CronJob可以设置在未来某一时间运行作业一次或在指定时间点重复运行作业。文章通过一个示例展示了如何创建和使用CronJob控制器,包括创建配置文件、应用配置、查看Pod信息和日志等步骤。同时,还解释了CronJob的时间表示方式及其限制。
|
4月前
|
Kubernetes Unix API
在K8S中,如果解决周期性任务?
在K8S中,如果解决周期性任务?
|
算法 Java Linux
Java线程常用定时任务算法与应用
Java线程常用定时任务算法与应用
120 0
|
7月前
|
算法 调度 UED
作业调度算法(含详细计算过程)和进程调度算法浅析
作业调度算法(含详细计算过程)和进程调度算法浅析
745 1
作业调度算法(含详细计算过程)和进程调度算法浅析
|
Java 数据处理 调度
Java线程并发协作与任务定时调度
Java线程并发协作与任务定时调度
95 1
|
关系型数据库 MySQL 调度
定时任务优化
简单描述一下定时任务的优化
145 0
|
算法 调度
【车间调度】基于模拟退火优化算法的的并行车间机器优化调度(Matlab代码实现)
【车间调度】基于模拟退火优化算法的的并行车间机器优化调度(Matlab代码实现)
138 0
|
Java 调度 数据库
坑爹!Quartz 重复调度问题,你遇到过么?(2)
坑爹!Quartz 重复调度问题,你遇到过么?
247 0
坑爹!Quartz 重复调度问题,你遇到过么?(2)
|
存储 安全 Java
坑爹!Quartz 重复调度问题,你遇到过么?(1)
坑爹!Quartz 重复调度问题,你遇到过么?
377 0
坑爹!Quartz 重复调度问题,你遇到过么?(1)