分布式定时任务|青训营笔记

99 阅读3分钟

这是我参与【第五届青训营】伴学笔记创作活动的第12天,

前言

春节集卡瓜分活动:先用扫描脚步进行扫描集卡信息,然后进行汇总计算,之后定时开奖

需求:自动化、定时执行、海量数据、高效稳定 (分布式定时任务)

发展历程

Windows批处理

1.定时关机

2.定时打卡

Linux命令——CronJob

  • 定时清理机器日志

单机定时任务

  • 每五分钟刷新本地缓存数据
fun main(){
    ticker:=time.NewTicker(5*time.Minute)
    for{
        select{
        case <-ticker.C:
            SyncLocalCache()
        }
    }
}

任务调度——Quartz

分布式定时任务

  • 平台化管理

  • 分布式部署

  • 支持海量数据

分布式定时任务是把分散的、可靠性差的定时任务纳入统一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式

按照执行方式分为:单机任务、广播任务、Map任务(分成小任务)、MapReduce任务(汇总计算)

框架

Xxl-job是开源且免费的,腾讯TCT没有开源

实现原理

整体架构

分布式定时任务核心解决触发、调度、执行三个关键问题

  • 触发器:Trigger

  • 调度器:Scheduler

  • 执行器:Executor

还需要提供一个控制台,提供任务管理和干预的功能

业务流 image.png

功能架构

  • Admin:元数据存储、元数据状态流转、任务分片、任务依赖、规则引擎、任务暂停、日志管理、监控报警、指标统计等

  • Trigger:解析引擎、Scanner、可靠投递、状态流转、补偿策略等

  • Scheduler:调度、负载均衡、幂等控制、容错、故障转移、限流、计费、状态管控等

  • Executor:注册、任务获取、任务执行、状态上报、日志处理、本都幂等、任务回溯等

控制台

任务元数据是用户对任务属性定义(基础信息,时机,执行行为,执行方式)

任务实例是一个确定的Job的一次运行实例(Job_id,触发事件,状态,过程)

触发器

设计约束:

  • 支持大量任务

  • 支持秒级的调度

  • 需多次执行

  • 高性能

方案1:定时扫描+延时消息(Scanner定时扫描DB,然后遇到延时的任务会有延时消息)

方案2:时间轮(一种高效利用线程资源进行批量化调度的一种调度模型,是一个存储环形队列,底层采用数组实现)

Trigger集群模式可避免单点故障

高可用-分布式锁模式

调度器

资源来源:业务系统提供机器资源、定时任务平台提供机器资源

节点选择:随机节点执行、广播执行、分片执行(自定义拆分)

  • 任务分片:提高执行任务的的效率和资源的利用率

故障转移:确保部分执行单元任务失败时,任务最终成功

执行器

首先机器注册,然后调度器发出调度请求,之后进行日志服务和回调服务

业务应用

定时、延时、周期性都可以考虑定时任务

电商(自动关闭订单,发放优惠价)