首页 > 其他分享 >定时任务

定时任务

时间:2023-12-06 23:45:41浏览次数:35  
标签:执行器 请求 调度 任务 定时 执行

 常见定时任务方案

  • While + Sleep : 通过循环加休眠的方式定时执行
  • Timer和TimerTask实现 :JDK自带的定时任务,可以实现简单的间隔执行任务(在指定时间点执行某一任务,也能定时的周期性执行),无法实现按日历去调度执行任务。
  • ScheduledExecutorService : Java并发包下,JDK1.5出现,是比较理想的定时任务实现方案。Eureka就使用的是它
  • QuartZ : 使用Quartz,它是一个异步任务调度框架,功能丰富,可以实现按日历调度,支持持久化。
  • 使用Spring Task:Spring 3.0后提供Spring Task实现任务调度,支持按日历调度,相比Quartz功能稍简单,但是在开发基本够用,支持注解编程方式。
  • SpringBoot中的Schedule :通过@EnableScheduling+@Scheduled最实现定时任务,底层使用的是Spring Task

分布式定时任务面临的问题

上述的定时任务都是集中式(单体项目使用)的定时任务,在分布式中将会面临一些问题或不足

  • 业务量大,单机性能瓶颈需要扩展
  • 多台机器部署如何保证定时任务不重复执行
  • 定时任务时间需要可调整,可以暂停
  • 机器发生故障down机,定时任务依然可用,如何实现故障转移
  • 定时任务,执行日志是否可监控

分布式定时任务xxl-job

XXL-JOB是一个分布式任务调度平台

  • 简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手;
  • 动态:支持动态修改任务状态、启动/停止任务,以及终止运行中任务,即时生效;
  • 调度中心HA(中心式):调度采用中心式设计,“调度中心”基于集群Quartz实现并支持集群部署,可保证调度中心HA;
  • 执行器HA(分布式):任务分布式执行,任务"执行器"支持集群部署,可保证任务执行HA;
  • 弹性扩容缩容:一旦有新执行器机器上线或者下线,下次调度时将会重新分配任务;
  • 路由策略:执行器集群部署时提供丰富的路由策略,包括:第一个、最后一个、轮询、随机、一致- 性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等;
  • 故障转移:任务路由策略选择"故障转移"情况下,如果执行器集群中某一台机器故障,将会自动Failover切换到一台正常的执行器发送调度请求。
  • 任务失败告警:默认提供邮件方式失败告警,同时预留扩展接口,可方面的扩展短信、钉钉等告警方式;

xxl-job架构设计

设计思想

将调度行为抽象形成“调度中心”公共平台,而平台自身并不承担业务逻辑,“调度中心”负责发起调度请求。

将任务抽象成分散的JobHandler,交由“执行器”统一管理,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。因此,“调度”和“任务”两部分可以相互解耦,提高系统整体稳定性和扩展性;

架构设计图

xxl-job分为 调度中心和执行器两大模块

调度模块(调度中心)

负责管理调度信息,按照调度配置发出调度请求,自身不承担业务代码。调度系统与任务解耦,提高了系统可用性和稳定性,同时调度系统性能不再受限于任务模块;

支持可视化、简单且动态的管理调度信息,包括任务新建,更新,删除,GLUE开发和任务报警等,所有上述操作都会实时生效,同时支持监控调度结果以及执行日志,支持执行器Failover(故障转移)。

执行模块(执行器)

负责接收调度请求并执行任务逻辑。任务模块专注于任务的执行等操作,开发和维护更加简单和高效;

接收“调度中心”的执行请求、终止请求和日志请求等。

调度中心高可用

基于数据库的集群方案,数据库选用Mysql;集群分布式并发环境中进行定时任务调度时,会在各个节点会上报任务,存到数据库中,执行时会从数据库中取出触发器来执行,如果触发器的名称和执行时间相同,则只有一个节点去执行此任务。

并行调度

调度采用线程池方式实现,避免单线程因阻塞而引起任务调度延迟。XXL-JOB调度模块默认采用并行机制,在多线程调度的情况下,调度模块被阻塞的几率很低,大大提高了调度系统的承载量。

XXL-JOB的不同任务之间并行调度、并行执行。XXL-JOB的单个任务,针对多个执行器是并行运行的,针对单个执行器是串行执行的。同时支持任务终止。

执行器(任务)高可用

执行器如若集群部署,调度中心将会感知到在线的所有执行器,如“127.0.0.1:9997, 127.0.0.1:9998, 127.0.0.1:9999”。多个执行器可以选择“路由策略”来采用轮询,随机等方式进行多机器调度。

当任务”路由策略”选择”故障转移(FAILOVER)”时,当调度中心每次发起调度请求时,会按照顺序对执行器发出心跳检测请求,第一个检测为存活状态的执行器将会被选定并发送调度请求。调度成功后,可在日志监控界面查看“调度备注”

标签:执行器,请求,调度,任务,定时,执行
From: https://www.cnblogs.com/KL2016/p/17880786.html

相关文章

  • pg数据库 定时备份脚本
    !/bin/bash使用环境变量设置pg密码exportPGUSER=xxxxexportPGPASSWORD=xxxxpghost="xxxxx"logfile="/db/log/dump/pg_dump_backup_$(date'+%d').log"touch$logfileecho"">$logfilebackup_dir="/db/dump_files"tim......
  • 定时清理docker容器日志
    场景:docker容器启用一段时间之后日志会逐渐累积,越来越臃肿,可能高达几十个G,我们需要定期自动清理此容器日志1.创建文件夹,创建文件写入命令,更改可执行权限:mkdir-p/opt/docker-shcat>/opt/docker-sh/clean_docker_log.sh<<EOF#!/bin/shecho"========startclean......
  • Linux_315_Ansible模块之定时任务管理
    ansible的cron模块来添加任务1、添加定时任务,每5分钟进行时间同步ansibleyu-mcron-a"name=ntp_cronjob='/usr/sbin/ntpdatentp.aliyun.com>/dev/null2>&1'minute=*/5"2、远程的查看定时任务是否添加ansibleyu-mshell-a"crontab-l"3、再添加一个记录,事件是......
  • 如何审核SQL变更以防止数据风险?推荐使用NineData SQL任务
    自从上世纪70年代数据库开始普及以来,DBA们就不停地遭遇各种各样的数据库管理难题,其中最为显著的,可能就是日常的开发任务中,研发人员们对于核心库进行变更带来的一系列风险。由于针对数据库的数据变更是一项非常常见的任务,几乎所有开发者都会涉及对核心数据库的结构、数据内容的......
  • 修改python打包后的窗体图标、任务栏图标、exe图标
    前言我python开发的GUI界面(图形用户界面)一直是tkinter,打包exe一直是Pyinstaller。但是打包出来的exe图标、状态栏图标、窗体左上角图标一直是默认的羽毛,我想自定义。效果最后使用base64创建临时ico解决了该问题步骤创建icoToBase64.py,内容如下:importbase64#ico......
  • ASUS主板不定时死机以及各节能状态
    ASUS主板不定时死机(非蓝屏),关掉EPU,C1E,C3,C6C1状态为部分核心停止工作,C1E为C1的增强状态,而外可以降低电压C1E状态无需软件操作,主板直接就可以控制EIST比C1等状态更详细控制,如C1状态效能固定为50%,EIST可控制的范围更广泛效能可以为0%-100%,同时也可以控制电压EI......
  • 大型网络游戏任务系统的架构与设计
    在网路游戏中做任务已经成为游戏很重要的一个核心功能和玩法,如何做好一个灵活可扩展的任务系统的架构与设计,今天来给大家分享一些我们的设计经验。接下来我把整个的任务系统分成以下6个模块:(1)任务配置表设计与管理;(2)游戏任务的解锁与生成;(3)任务完成判定;(4)任务完成......
  • React:实现一个定时器计数器,每秒自动+1
    需求:实现一个定时器计数器,每秒自动+1importReact,{useState,useEffect}from"react";exportdefaultfunctionApp(){let[count,setCount]=useState(0);useEffect(()=>{lettimer=setInterval(()=>{setCount(count+1);},100......
  • 计划任务
    计划任务使用方法计划任务的作用:是做一些周期性的任务,在生产中的主要用来定期备份数据CROND:这个守护进程是为了周期性执行任务或处理等待事件而存在任务调度分两种:系统任务调度,用户任务调度计划任务的安排方式分两种:一种是定时性的,也就是例行。就是每隔一定的周期就要重复......
  • Linux下设置定时任务常用的三种方法
    在Linux系统中,设置定时任务是一项常见且重要的操作,它有助于自动化执行各种任务,如系统维护、备份和日志审计。Linux提供了多种工具来安排这些自动化任务,其中最常用的三种方法是Cron、At和SystemdTimers。1.cronCron是Linux中最传统且广泛使用的定时任务工具。它允许用......