[ 后端与 Go | 青训营笔记 ]

116 阅读6分钟

[ 后端与 Go | 青训营笔记 ]

这是我参与「第五届青训营 」伴学笔记创作活动的第 14 天

课内:Go 分布式定时任务

对分布式定时任务建立起宏观的认识,并深入了解其实现原理。了解关联的单机定时任务、大数据处理引擎,通过了解不同实现方案的优劣来拓展知识面。了解在哪些实际业务场景中使用分布式定时任务。对实际业务场景的中间件选型、技术方案设计做到成竹在胸。

重点

  • 发展历程;
  • 实现原理;
  • 业务应用;

细节

引入

image-20230208193326510

image-20230208193339812

image-20230208193350732

发展历程

Windows

批处理

  • 10 分钟后 Windows 电脑自动关机;

image-20230208193543504

任务计划程序

  • 每天 12:00 自动疫情打卡;

image-20230208193729006

Linux 命令

CronJob

  • 每天 02:30 定时清理机器日志;

image-20230208193930044

单机定时任务

Timer、Ticker

  • 每隔 5 分钟定时刷新本地缓存数据;

image-20230208194101311

ScheduleExecutorService

  • 每隔 5 分钟定时执行多个任务;

image-20230208194202373

任务调度

Quartz

image-20230208194324842

分布式定时任务

image-20230208194349905

什么是分布式定时任务

  • 定时任务是指系统为了自动完成特定任务,实时、延时、周期性完成任务调度的过程;
  • 分布式定时任务是把分散的、可靠性差的定时任务纳入同一的平台,并实现集群管理调度和分布式部署的一种定时任务的管理方式;

image-20230208194636303

特点

  • 平台化;
  • 自动化;
  • 分布式;
  • 伸缩性;
  • 高可用;

image-20230208194723391

执行方式

  • 单机任务;
  • 广播任务;
  • Map 任务;
  • MapReduce 任务;

image-20230208194824828

image-20230208194847423

业内定时任务框架

image-20230208194935277

Xxl - job

  • 开源且免费;
  • 轻量级;
  • 开箱即用;
  • 操作简单;

image-20230208195053702

SchedulerX

  • 广泛使用;
  • 久经考验;

image-20230208195147910

TCT

image-20230208195220653

拓展

分布式定时任务 VS 定时任务

  • 关系

    • 都可以实现自动化的定时、延时、周期任务调度;
  • 差异

    • 分布式定时任务可支撑更大的业务体量;
    • 分布式定时任务的性能、伸缩性、稳定性更高;

分布式定时任务 VS 大数据处理引擎

  • 关系

    • 都可以对海量数据做处理;
    • 性能、伸缩性、稳定性都很高;
  • 差异

    • 定时并不是大数据处理引擎要解决的核心问题;
    • 大数据处理引擎往往致力于将源数据处理成结果数据,分布式定时任务还可以调用 HTTP 和 RPC 服务;

image-20230208195640127

实现原理

核心架构

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

  • 触发器;
  • 调度器;
  • 执行器;

image-20230208195816935

数据流

image-20230208195835018

功能架构

image-20230208195859159

控制台

基本概念

  • 任务;
  • 任务实例;
  • 任务结果;
  • 任务历史;

image-20230208195953675

任务元数据

  • 用户对任务属性定义,包括任务类型调度时机、执行行为等;

image-20230208200117970

任务实例

  • 一个确定的 Job 的一次运行实例;

image-20230208200200931

触发器

核心职责

  • 给定一系列任务,解析它们的触发规则,在规定的时间点触发任务的调度;

设计约束

  • 支持大量任务;
  • 支持秒级调度;
  • 周期任务需要多次执行;
  • 保证秒级扫描的高性能,并避免资源浪费;

方案一

image-20230208200518991

方案二

image-20230208200546955

image-20230208200557968

image-20230208200610146

image-20230208200619212

image-20230208200631636

高可用

  • 不同业务之间,任务的调度互相影响如何解决;
  • 负责扫描和触发的机器故障怎么解决;

image-20230208200848752

问题

image-20230208200927432

数据库行锁模式

image-20230208200953075

分布式锁模式

image-20230208201017892

调度器

资源来源

  • 业务系统提供机器资源;
  • 定时任务平台提供机器资源;

image-20230208201113080

节点选择

  • 随机节点执行;
  • 广播执行;
  • 分片执行;

image-20230208201255047

任务分片

  • 通过任务分配来提高任务执行的效率和资源的利用率;

image-20230208201343986

任务编排

  • 使用有向无环图 DAG 进行可视化任务编排;

image-20230208201440245

故障转移

  • 确保部分执行单元任务失败时,任务最终成功;

image-20230208201534997

高可用

  • 可以集群部署,做到完全的无状态,靠消息队列的重试机制保障任务一定会被调度;

image-20230208201647296

执行器

image-20230208201717005

image-20230208201726819

业务应用

image-20230208201742282

image-20230208201754245

image-20230208201802331

image-20230208201809867

总结

对分布式定时任务有了一定的了解。