如何控制Dolphinscheduler同一任务不能同时执行多个

本文介绍了Dolphinscheduler的架构,重点讨论了如何防止周期任务在同一时刻并发执行。Dolphinscheduler使用Quartz框架,但@DisallowConcurrentExecution注解无法完全解决问题。解决思路在于,在任务执行前检查流程实例状态,若任务仍在运行,则阻止新任务的插入,以此控制并发。
摘要由CSDN通过智能技术生成

Dolphinscheduler架构

架构说明

  • MasterServer

    MasterServer采用分布式无中心设计理念,MasterServer主要负责 DAG 任务切分、任务提交监控,并同时监听其它MasterServer和WorkerServer的健康状态。 MasterServer服务启动时向Zookeeper注册临时节点,通过监听Zookeeper临时节点变化来进行容错处理。(有点类似于hbase master)

    该服务内主要包含:
    • Distributed Quartz分布式调度组件,主要负责定时任务的启停操作,当quartz调起任务后,Master内部会有线程池具体负责处理任务的后续操作

    • MasterSchedulerThread是一个扫描线程,定时扫描数据库中的 command 表,根据不同的命令类型进行不同的业务操作
       

          @Override
          public void run() {
              logger.info("master scheduler started");
              while (Stopper.isRunning()){
                  InterProcessMutex mutex = null;
                  try {
                      boolean runCheckFlag = OSUtils.checkResource(masterConfig.getMasterMaxCpuloadAvg(), masterConfig.getMasterReservedMemory());
                      if(!runCheckFlag) {
                          Thread.sleep(Constants.SLEEP_TIME_MILLIS);
                          continue;
                      }
                      if (zkMasterClient.getZkClient().getState() == CuratorFrameworkState.STARTED) {
      
                          mutex = zkMasterClient.blockAcquireMutex();
      
                          int activeCount = masterExecService.getActiveCount();
                          // make sure to scan and delete command  table in one transaction
                          Command command = processService.findOneCommand();
                          if (command != null) {
                              logger.info("find one command: id: {}, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码出天空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值