elasticjob分布式任务调度中间件 墨蓝 2022-06-06 21:05 386阅读 0赞 ## 1.elasticjob ## elasticjob是当当开源的分布式定时任务调度方案,其可用于替代quartz-db的分布式定时调度框架,并且支持单个任务的分片处理。其中分布式集群定时调度框架,需要解决的主要问题是:如何保证当个任务只会在集群中一台机器上执行。 quartz-db是通过对QRTZ\_LOCKS表中的trigger记录进行加互斥锁(select for update),从而保证集群中只有一个jvm程序会得到改锁,从而进行任务的执行。并且在每批次任务执行完之后,该jvm会释放数据库记录的锁,然后集群再重新申请数据库锁,保证了任务随机的分配到集群中不同机器中执行。 elasticjob是通过zookeeper来进行多进程之间的协同作用。其通过zookeeper提供的LeaderLatch,从集群中选择一个组织者,然后组织者执行quartz的job任务,在任务执行中会进行任务的分片,将不同的分片放到不同的机器上,并且触发该分片机器的执行。因此elasticjob可以理解为quartz-memory+zookeeper的形式。 其中elasticjob和quartz-db的使用quartz是不太一样的: * quartz-db在集群的机器上只有一个主线程QuartzSchedulerThread,该主线程负责进行竞争锁,然后将任务提交给线程池使用,然后释放锁。并且前后两次的加锁结果并不一样,可以保证任务随机分配到机器上执行。 * elasticjob实现方式是每一个任务对应一个QuartzSchedulerThread的主线程和一个线程的线程池。每个主线程在启动的时候都会使用zookeeper的LeaderLatch进行加锁,其他没有得到锁的机器wait状态。这样就实现了不同的任务其组织者(或者得到锁的机器)是不一样的,保证了任务可以随机分配到不同的机器中(即使只有一个分片的任务,默认一个分片的任务会在组织者上运行)。最终达到了单个任务只会在集群中一台机器上执行的目的,并且集群是负载均衡的。 ## 2.elasticjob设计理念 ## 可以简单理解为 1. quartz-memory模式解决任务的定时调度问题 2. zookeeper来解决任务执行服务器间的信息同步和任务执行唯一性问题 3. zookeeper来实现控制任务服务器的任务实时调度功能 ![image][] ## 3.elasticjob的任务执行流程 ## ### 3.1 整体执行流程 ### ![image][image 1] ### 3.2 任务分片 ### elasticjob除了支持常规的一个任务在一个服务器进行运行以外,还支持任务的分片执行。其中每个分片是对应处理什么逻辑需要用户自己定义。 举个例子:加入需要插入1000条记录到数据库中,我们可以通过将任务分为10片,1、3、5、7、9对应100-200、300-400、500-600、700-800、900-1000的记录的插入在服务器1上进行,而0、2、4、6、8对应0-100、200-300、400-500、600-700、800-900的记录的插入在服务器2上进行。 elasticjob的分片是,通过主服务(leader服务器)的定时执行时,去zookeeper上获取每个分片对应的机器,然后通过模拟调度端的调度命令,发送到各个分片对应的job服务器上,然后开始进行任务的执行。最终实现了任务分片执行的目的 ### 3.3 DataFlowJob ### DataFlowJob与SimpleJob相比,其在处理每个分片分为了两步,第一步fetchData获取待处理的数据,第二步processData根据获取的数据进行处理。其中如果将streamingProcess=true,则会重新执行fetchData和processData直到fetchData范围结果为空为止。 ### 3.4 相关文档 ### [http://elasticjob.io/docs/elastic-job-lite/00-overview][http_elasticjob.io_docs_elastic-job-lite_00-overview] 微信号:架构点滴 [image]: /images/20220607/58b3ede9f7b24c08a0c298011074a24e.png [image 1]: http://note.youdao.com/yws/api/personal/file/WEB8090c08002d57aad3cc1bfb6c69795b7?method=download&shareKey=b4b8b14f6fae7c0fa8885d02be205c59 [http_elasticjob.io_docs_elastic-job-lite_00-overview]: http://elasticjob.io/docs/elastic-job-lite/00-overview
还没有评论,来说两句吧...