2023年7月21日发(作者:)
Elastic-Job什么是Elastic-JobElastic-Job是当当⽹⼤⽜基于Zookepper,Quartz开发并且开源的Java分布式定时任务,解决Quartz不⽀持分布式的弊端。它由两个相互独⽴的⼦项⽬Elastic-Job-Lite和Elastic-Job-Cloud组成。基本概念分⽚概念:任务分布式的执⾏,需要将⼀个任务拆分成多个独⽴的任务项,然后由分布式的服务器分别执⾏某⼀个或⼏个分⽚项个性化参数:shardingItemParameter,可以和分⽚项匹配对应关系。⽐如:将商品的状态分成上架,下架。那么配置0=上架,1=下架,代码中直接使⽤上架下架的枚举值即可完成分⽚项与业务逻辑的对应关系作⽤⾼可⽤:将分⽚总数设置成1,多台服务器执⾏作业将采⽤1主n从的⽅式执⾏弹性扩容:将任务拆分为n个任务项后,各个服务器分别执⾏各⾃分配到的任务项。⼀旦有新的服器加⼊集群或有服务器宕机。Elastic-Job将保留本次任务不变,下次任务开始前重新分⽚。并⾏调度:采⽤任务分⽚⽅式实现。将⼀个任务拆分为n个独⽴的任务项,由分布式的服务器并⾏执⾏各⾃分配到的分⽚项。集中管理:采⽤基于zookepper的注册中⼼,集中管理和协调分布式作业的状态,分配和监听。外部系统可直接根据Zookeeper的数据管理和监控elastic-job。定制化流程任务:作业可分为简单和数据流处理两种模式,数据流⼜分为⾼吞吐处理模式和顺序性处理模式,其中⾼吞吐处理模式可以开启⾜够多的线程快速的处理数据,⽽顺序性处理模式将每个分⽚项分配到⼀个独⽴线程,⽤于保证同⼀分⽚的顺序性,这点类似于kafka的分区顺序性。整体架构图Elastic-Job的具体模块的底层及如何实现Elastic-Job采⽤去中⼼化设计,主要分为注册中⼼、数据分⽚、分布式协调、定时任务处理和定制化流程型任务等模块。去中⼼化:指Elastic-Job没有调度中⼼这⼀概念。每个运⾏在集群中的作业服务器都是对等的,节点之间通过注册中⼼进⾏分布式协调。但elastic-job有主节点的概念,主节点⽤于处理⼀些集中式任务,如分⽚,清理运⾏时信息等,并⽆调度功能,定时调度都是由作业服务器⾃⾏触发。
实现难度部署难度触发时间统⼀控制触发延迟异构语⾔⽀持中⼼化难难可以 有容易去中⼼化易易不可以⽆困难注册中⼼:注册中⼼模块⽬前直接使⽤zookeeper,⽤于记录作业的配置,服务器信息以及作业运⾏状态。Zookeeper虽然很成熟,但原理复杂,使⽤较难,在海量数据⽀持的情况下也会有性能和⽹络问题。数据分⽚:数据分⽚是elastic-job中实现分布式的重要概念,将真实数据和逻辑分⽚对应,⽤于解耦作业框架和数据的关系。作业框架只负责将分⽚合理的分配给相关的作业服务器,⽽作业服务器需要根据所分配的分⽚匹配数据进⾏处理。服务器分⽚⽬前都存储在注册中⼼中,各个服务器根据⾃⼰的IP地址拉取分⽚。分布式协调:分布式协调模块⽤于处理作业服务器的动态扩容缩容。⼀旦集群中有服务器发⽣变化,分布式协调将⾃动监测并将变化结果通知仍存活的作业服务器。协调时将会涉及主节点选举,重分⽚等操作。⽬前使⽤的Zookeeper的临时节点和监听器实现主动检查和通知功能。定时任务处理:定时任务处理根据cron表达式定时触发任务,⽬前有防⽌任务同时触发,错过任务重出发等功能。主要还是使⽤Quartz本⾝的定时调度功能,为了便于控制,每个任务都使⽤独⽴的线程池。定制化流程型任务:定制化流程型任务将定时任务分为多种流程,有不经任何修饰的简单任务;有⽤于处理数据的fetchData/processData的数据流任务;以后还将增加消息流任务,⽂件任务,⼯作流任务等。⽤户能以插件的形式扩展并贡献代码。作业开发Elastic-Job提供Simple、Dataflow和Script 3种作业类型。⽅法参数shardingContext包含作业配置、⽚和运⾏时信息。可通过getShardingTotalCount(), getShardingItem()等⽅法分别获取分⽚总数,运⾏在本作业服务器的分⽚序列号等。1.
Simple类型的作业:该类型意为简单实现,只需实现SimpleJob接⼝,重写它的execute⽅法即可2.
Dataflow类型作业:⽤于处理数据流,实现DataflowJob接⼝,并重写两个⽅法——⽤于抓取(fetchData⽅法)和处理(processData⽅法)数据。⽐如在fetchData⽅法⾥⾯查询没有上架的商品,在processData⽅法修改该商品的状态。注意:可通过DataflowJobConfiguration配置是否流式处理。当配置成流式处理,fetchData⽅法返回值(返回值是集合)是null或长度是0,作业才停⽌抓取,否则将⼀直运⾏。⾮流式的则每次作业只执⾏⼀次这两个⽅法就结束该作业。3.
Script类型作业:意为脚本类型作业,⽀持shell、python、perl等类型脚本。只需通过控制台或代码配置scriptCommandLine即可,⽆需编码。引⼊Maven依赖
Core对应JobCoreConfiguration,⽤于提供作业核⼼配置信息,如:作业名称、分⽚总数、CRON表达式等。2.
Type对应JobTypeConfiguration,有三个⼦类分别对应SIMPLE, DATAFLOW和SCRIPT类型作业,供3种作业需要的不同配置,如:DATAFLOW类型是否流式处理或SCRIPT类型的命令⾏等。3.
Root对应JobRootConfiguration,有两个⼦类分别对应Lite和Cloud部署类型,提供不同部署类型所需的配置,如:Lite类型的是否需要覆盖本地配置或Cloud占⽤CPU或Memory数量等。与Spring结合
评论列表(0条)