熟练使用 Elastic Job系列之概念介绍(一)

简介: 熟练使用 Elastic Job系列之概念介绍(一)

Elastic-Job是一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。

Elastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供分布式任务的协调服务,外部依赖仅Zookeeper。

项目源码地址==>shardingsphere-elasticjob

运行环境要求

框架 版本
Java JDK1.7+
Zookeeper 3.4.6+
Maven 3.0.4+

目录结构说明

elastic-job
    ├──elastic-job-lite                                 lite父模块,不应直接使用
    ├      ├──elastic-job-lite-core                     Java支持模块,可直接使用
    ├      ├──elastic-job-lite-spring                   Spring命名空间支持模块,可直接使用
    ├      ├──elastic-job-lite-lifecyle                 lite作业相关操作模块,不可直接使用
    ├      ├──elastic-job-lite-console                  lite界面模块,可直接使用
    ├──elastic-job-example                              使用示例
    ├      ├──elastic-job-example-embed-zk              供示例使用的内嵌ZK模块
    ├      ├──elastic-job-example-jobs                  作业示例
    ├      ├──elastic-job-example-lite-java             基于Java的使用示例
    ├      ├──elastic-job-example-lite-spring           基于Spring的使用示例
    ├      ├──elastic-job-example-lite-springboot       基于SpringBoot的使用示例
    ├──elastic-job-doc                                  markdown生成文档的项目,使用方无需关注
    ├      ├──elastic-job-lite-doc                      lite相关文档

功能介绍

  • 分布式作业调度协调
  • 弹性的扩容缩容
  • 失效作业转移
  • 错过执行作业的重新触发
  • 作业分片一致性,保证同一分片在分布式环境中仅有一个执行实例
  • 自我诊断并修复分布式不稳定造成的问题
  • 支持作业并行调度
  • 支持作业生命周期操作
  • 丰富的作业类型
  • Spring整合以及命名空间提供
  • 运维平台管理
  • ......


Elastic-Job 的概念介绍

分片概念

任务的分布式执行,需要将一个任务拆分为多个独立的任务项,然后由分布式的服务器分别执行某一个或几个分片项。

例如:有一个遍历数据库某张表的作业,现有2台服务器。为了快速的执行作业,那么每台服务器应执行作业的50%。 为满足此需求,可将作业分成2片,每台服务器执行1片。作业遍历数据的逻辑应为:服务器A遍历ID以奇数结尾的数据;服务器B遍历ID以偶数结尾的数据。 如果分成10片,则作业遍历数据的逻辑应为:每片分到的分片项应为ID%10,而服务器A被分配到分片项0,1,2,3,4;服务器B被分配到分片项5,6,7,8,9,直接的结果就是服务器A遍历ID以0-4结尾的数据;服务器B遍历ID以5-9结尾的数据。


分片项与业务处理解耦

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


个性化参数的适用场景

个性化参数即shardingItemParameter,可以和分片项匹配对应关系,用于将分片项的数字转换为更加可读的业务代码。

例如:按照地区水平拆分数据库,数据库A是北京的数据;数据库B是上海的数据;数据库C是广州的数据。 如果仅按照分片项配置,开发者需要了解0表示北京;1表示上海;2表示广州。 合理使用个性化参数可以让代码更可读,如果配置为0=北京,1=上海,2=广州,那么代码中直接使用北京,上海,广州的枚举值即可完成分片项和业务逻辑的对应关系。


分布式调度

Elastic-Job-Lite并无作业调度中心节点,而是基于部署作业框架的程序在到达相应时间点时各自触发调度。

注册中心仅用于作业注册和监控信息存储。而主作业节点仅用于处理分片和清理等功能。


作业高可用

Elastic-Job-Lite提供最安全的方式执行作业。将分片总数设置为1,并使用多于1台的服务器执行作业,作业将会以1主n从的方式执行。

一旦执行作业的服务器崩溃,等待执行的服务器将会在下次作业启动时替补执行。开启失效转移功能效果更好,可以保证在本次作业执行时崩溃,备机立即启动替补执行。


最大限度利用资源

Elastic-Job-Lite也提供最灵活的方式,最大限度的提高执行作业的吞吐量。将分片项设置为大于服务器的数量,最好是大于服务器倍数的数量,作业将会合理的利用分布式资源,动态的分配分片项。

例如:3台服务器,分成10片,则分片项分配结果为服务器A=0,1,2;服务器B=3,4,5;服务器C=6,7,8,9。 如果服务器C崩溃,则分片项分配结果为服务器A=0,1,2,3,4;服务器B=5,6,7,8,9。在不丢失分片项的情况下,最大限度的利用现有资源提高吞吐量。


整体架构图

微信截图_20230530134641.png

作业启动的流程图

微信截图_20230530134653.png

作业执行的流程图

微信截图_20230530134704.png

相关文章
|
存储 分布式计算 Hadoop
Hadoop基础学习---6、MapReduce框架原理(一)
Hadoop基础学习---6、MapReduce框架原理(一)
|
分布式计算 Hadoop 数据处理
Hadoop基础学习---6、MapReduce框架原理(二)
Hadoop基础学习---6、MapReduce框架原理(二)
|
Java API 调度
Elastic-Job的快速入门,三分钟带你体验分布式定时任务
Elastic-Job的快速入门,三分钟带你体验分布式定时任务
Elastic-Job的快速入门,三分钟带你体验分布式定时任务
|
运维 算法 Java
|
Kubernetes 数据可视化 API
k8s学习二:学习基本概念和搭建dashboard
k8s学习二:学习基本概念和搭建dashboard
242 0
k8s学习二:学习基本概念和搭建dashboard
|
Java Shell 数据处理
熟练使用 Elastic Job系列之入门Demo(三)
Elastic-Job-Lite和Elastic-Job-Cloud提供统一作业接口,开发者仅需作业接口做自己的实现,再进行不同的配置以及部署即可完成一个分布式的Job。
|
运维 算法 Java
Elastic-Job源码解读
文章以任务初始化、任务触发、分片策略、分布式为切入点讲述Elastic Job的源码,一方面自己总结记录、另一方面希望可以帮助到其他的开发者快读理解Elastic Job工作原理。
1249 0
|
存储 JSON 监控
熟练使用 Elastic Job系列之注册中心与节点(二)
Elastic Job是使用了zookeeper做注册中心的
|
运维 安全 Java
Elastic-Job使用及原理
Elastic-Job使用及原理
|
数据处理 调度
【非广告】分布式调度框架 elastic-job 实践详解(超详细)(三)
在前几篇文章中,我们详细的介绍了 Quartz 的架构原理以及应用实践,虽然 Quartz 也可以通过集群方式来保证服务高可用,但是它也有一个的弊端,那就是服务节点数量的增加,并不能提升任务的执行效率,即不能实现水平扩展!
【非广告】分布式调度框架 elastic-job 实践详解(超详细)(三)