工具篇--分布式定时任务springBoot--elasticjob使用--工作流程(2)

文章目录

  • 前言
  • 一、工作流程:
    • [1.1 elasticjob 轻量级无中心化介绍:](#1.1 elasticjob 轻量级无中心化介绍:)
    • [1.2 elasticjob 工作流程:](#1.2 elasticjob 工作流程:)
      • [1.2.1 初始化:](#1.2.1 初始化:)
      • [1.2.2 注册:](#1.2.2 注册:)
      • [1.2.3 运行:](#1.2.3 运行:)
      • [1.2.4 zk 运行 时:](#1.2.4 zk 运行 时:)
      • [1.2.5 job 执行:](#1.2.5 job 执行:)
    • [1.3 elasticjob 高可用:](#1.3 elasticjob 高可用:)
  • [二、elasticjob zk 选举:](#二、elasticjob zk 选举:)
    • [2.1 elasticjob zk 选举过程:](#2.1 elasticjob zk 选举过程:)
    • [2.2 elasticjob 主节点的作用:](#2.2 elasticjob 主节点的作用:)
  • [三、elasticjob 分片:](#三、elasticjob 分片:)
    • [3.1 分片理解:](#3.1 分片理解:)
    • [3.2 分片项与业务处理解耦:](#3.2 分片项与业务处理解耦:)
    • [3.3 分片参数:](#3.3 分片参数:)
  • 总结

前言

本文对elasticjob 的工作流程介绍;


一、工作流程:

1.1 elasticjob 轻量级无中心化介绍:

ElasticJob 定位为轻量级无中心化解决方案,使用 jar 的形式提供分布式任务的协调服务。

  • app1,app2 表示不同的服务系统,每个系统都可以 引入elasticjob-lite-core jar 进行定时任务的执行

  • elasticjob-lite-core 内部包括,任务执行实例的注册,leader 的选举,任务的调度;在任务调度过程中可以将日志进行保存到 数据库中

  • ELK 可以对保存到数据库中的日志进行分析

  • Console 可以连接到数据读取日志,从而获取到任务执行的轨迹;通过连接zk 可以知晓任务的运行状态,以及对任务的状态进行修改;

1.2 elasticjob 工作流程:

ElasticJob 的工作流程可以分为初始化、注册和运行三个主要步骤。以下是 ElasticJob 的工作流程详细步骤:

1.2.1 初始化:

  • 定义任务:首先,需要定义要执行的任务逻辑,可以是数据处理、代码运行、脚本执行等。
  • 配置任务:配置任务的执行策略、调度规则、分片等信息,可以使用注解或配置文件进行配置。
  • 初始化作业:将任务配置信息注册到作业中心,作业中心会解析这些配置信息,并向 Zookeeper 注册任务信息。

1.2.2 注册:

  • 作业注册中心:各作业节点将通过 Zookeeper 注册到作业注册中心,注册中心负责协调和管理各个作业节点。
  • 注册作业:作业注册中心将根据配置信息注册任务,包括任务类型、分片信息、触发时间等。

1.2.3 运行:

  • 调度触发:根据配置的触发规则和调度策略,作业注册中心会触发任务执行。
  • 分片分配:作业节点接收到任务执行指令后,根据分片算法自动分配分片,并启动对应的作业实例。
  • 任务执行:作业节点根据分配的分片,执行相应的任务逻辑,处理数据、执行代码等。
  • 监控日志:作业节点会记录执行日志,并通过监控中心提供运行状态、执行结果等信息。
  • 弹性扩缩容:根据负载情况,作业注册中心会动态调整作业分片的分配,实现弹性扩容和缩容。

1.2.4 zk 运行 时:

当任务启动后,会线连接zk;然后创建对应的zk 命名空间(如果命名空间不存在的话);创建任务节点;当任务需要被触发执行时,leader 节点会分配任务到哪些任务实例,然后任务实例接收任务并运行;

  • my-job : elasticjob 注册zk 时的命名空间(永久节点);
  • myjob-param: 改zk 命名空间下的 job 任务(永久节点);
  • config: 注册任务的参数信息(包括任务名称,任务分片参数,任务触发的cron 等),以 YAML 格式存储;
  • leader 节点: 作业服务器主节点信息,分为 election,sharding 和 failover 三个子节点。 分别用于主节点选举,分片和失效转移处理;只有主节点可以可以进行任务的分配;
  • servers 节点: 作业服务器信息,子节点是作业服务器的 IP 地址。 可在 IP 地址节点写入 DISABLED 表示该服务器禁用。 在新的云原生架构下,servers 节点大幅弱化,仅包含控制服务器是否可以禁用这一功能。 为了更加纯粹的实现作业核心,servers 功能未来可能删除,控制服务器是否禁用的能力应该下放至自动化部署系统;
  • instances 节点 :作业运行实例信息,子节点是当前作业运行实例的主键。 作业运行实例主键由作业运行服务器的 IP 地址和 PID 构成。 作业运行实例主键均为临时节点,当作业实例上线时注册,下线时自动清理。注册中心监控这些节点的变化来协调分布式作业的分片以及高可用。 可在作业运行实例节点写入 TRIGGER 表示该实例立即执行一次;
  • sharding 节点 :作业分片信息,子节点是分片项序号,从零开始,至分片总数减一。 分片项序号的子节点存储详细信息。每个分片项下的子节点用于控制和记录分片运行状态;

1.2.5 job 执行:

在 ElasticJob 中,任务的触发执行过程主要包括以下详细流程:

  • 触发条件满足:根据任务的触发规则(如定时触发、手动触发等),当触发条件满足时,主节点会向作业节点发送触发任务执行的指令。

  • 任务分片分配:作业节点接收到触发指令后,根据分片算法将任务分配给各个作业实例执行。每个作业实例负责执行其中一个或多个分片的任务数据。

  • 任务执行:作业实例在接收到分片后,开始执行具体的任务逻辑。任务逻辑可以是数据处理、代码执行、脚本执行等,根据任务的配置和处理逻辑进行具体的执行操作。

  • 监控日志记录:作业实例在执行任务过程中会记录执行日志,包括任务的执行情况、运行状态、执行结果等信息。这些日志可以帮助监控中心跟踪任务的执行情况。

  • 弹性扩缩容:在任务执行过程中,如果系统负载增加或减少,主节点会根据配置的策略动态调整任务分片的分配情况,实现任务的弹性扩容和缩容。

  • 结果处理:任务执行完成后,作业实例会将执行结果上报给主节点,并根据结果进行相应的处理,如通知用户、触发后续操作等。

总体来说,ElasticJob 的任务触发执行流程非常灵活和可靠,能够根据配置的规则和策略准确地触发、分配和执行任务。

1.3 elasticjob 高可用:

当作业服务器在运行中宕机时,注册中心同样会通过临时节点感知,并将在下次运行时将分片转移至仍存活的服务器,以达到作业高可用的效果。 本次由于服务器宕机而未执行完的作业,则可以通过失效转移的方式继续执行。如下图所示

将分片总数设置为 1,并使用多于 1 台的服务器执行作业,作业将会以 1 主 n 从的方式执行。 一旦执行作业的服务器宕机,等待执行的服务器将会在下次作业启动时替补执行。开启失效转移功能效果更好,如果本次作业在执行过程中宕机,备机会立即替补执行。

二、elasticjob zk 选举:

2.1 elasticjob zk 选举过程:

每个Elastic-Job的任务执行实例作为ZooKeeper的客户端来操作ZooKeeper的znode

  • 任意一个实例启动时首先创建一个 /server 的PERSISTENT节点;
  • 多个实例同时创建 /server/eader EPHEMERAL子节点3)/server/leader子节点
  • 只能创建一个,后创建的会失败。创建成功的实例被选为leader节点,用来执行任务
  • 所有任务实例监听 /server/leader 的变化,一旦节点被删除,就重新进行选举,抢占式地创建 /server/leader节点,谁创建成功谁就是leader。

2.2 elasticjob 主节点的作用:

在 ElasticJob 中,主节点的作用主要包括以下几个方面:

  • 协调任务调度:主节点负责协调任务的调度和执行,通过与 Zookeeper 交互实现任务的分配和调度。

  • 分片调度:主节点会根据任务的配置信息和分片策略,将任务分配给不同的作业节点执行,确保任务能够顺利地分片执行。

  • 监控和管理:主节点负责监控整个任务系统的运行状态,包括作业节点的健康状态、任务执行情况、运行日志等,并提供管理界面供用户查看和管理任务。

  • 弹性扩缩容:主节点会根据任务的负载情况和配置的策略,动态调整任务的分片大小,实现任务的弹性扩容和缩容。

  • 故障处理:主节点还负责处理作业节点的故障情况,例如重新分配故障节点上的任务分片,确保任务能够正常运行并保证数据处理的准确性。

三、elasticjob 分片:

3.1 分片理解:

作业分片是指任务的分布式执行,需要将一个任务拆分为多个独立的任务项,然后由分布式的应用实例分别执行某一个或几个分片项。

例如:Elastic-Job快速入门中文件备份的例子,现有2台服务器,每台服务器分别跑一个应用实例。为了快速的执行作业,那么可以将作业分成4片,每个应用实例个执行2片。作业遍历数据的逻辑应为:实例1查找text和image类型文件执行备份;

实例2查找radio和vedio类型文件执行备份。

如果由于服务器扩容应用实例数量增加为4,则作业遍历数据的逻辑应为:4个实例分别处理text、image、radio、video类型的文件。

可以看到,通过对任务合理的分片化,从而达到任务并行处理的效果,最大限度的提高执行作业的吞吐量。

3.2 分片项与业务处理解耦:

分片项与业务处理解耦:

Elastic-job并不直接提供数据处理的功能,框架只会将分片项分配至各个运行中的作业服务器,开发者需要自行处理分片项与真实数据的对应关系。

最大限度利用资源:

将分片项设置为大于服务器的数量,最好是大于服务器倍数的数量,作业将会合理的利用分布式资源,动态的分配分片项。

3.3 分片参数:

分片的数量大于机器的数量,这样多个分片的任务,被分配到某个服务器,在执行任务的时候,可以获取到该分片对应的分片参数,就可以利用多线程进行任务的执行;

可以通过 shardingItemParameters 设置分片参数格式:key=value:

java 复制代码
shardingItemParameters("0=Beijing,1=Shanghai,2=Guangzhou")

任务执行端 通过 ShardingContext getShardingParameter 获取当前分片参数:

java 复制代码
String  shardingParameter= shardingContext.getShardingParameter();

总结

本文对elasticjob 的工作流程,zk 注册节点,elasticjob 的分片 进行介绍;

相关推荐
苹果醋339 分钟前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
Wx-bishekaifayuan1 小时前
django电商易购系统-计算机设计毕业源码61059
java·spring boot·spring·spring cloud·django·sqlite·guava
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
Yaml42 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理
WX187021128732 小时前
在分布式光伏电站如何进行电能质量的治理?
分布式
LuckyLay2 小时前
Spring学习笔记_27——@EnableLoadTimeWeaving
java·spring boot·spring
小码编匠3 小时前
一款 C# 编写的神经网络计算图框架
后端·神经网络·c#
AskHarries3 小时前
Java字节码增强库ByteBuddy
java·后端