Elastic-job分布式调度系统

简介: Elastic-job分布式调度系统

一、定时任务实现方式

1、Thread方式

final int timeInterval = 1000;
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                while (true){
                    try {
                        //每一秒执行一次
                        Thread.sleep(timeInterval);
                        System.out.println("run...");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
        thread.start();

2、timer方式

 //timer方式
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println("run1...");
            }
        },1000,2000);//1s后执行 每2s执行一次

3、线程池方式

ScheduledExecutorService scheduled = Executors.newScheduledThreadPool(10);
        scheduled.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                System.out.println("run3....");
            }
        }, 1, 3, TimeUnit.SECONDS);

4、quarzt

Springboot整合定时任务_程序三两行的博客-CSDN博客

二、分布式调用服务elastic-job

分布式环境下运行定时任务就是分布式调度,同一个任务可能会执行多次,可以通过分布式锁或者zk选举执行解决,对于这种分布式调度出现了调度框架xxl-job,elastic-job等

1、elastic-job概述

Elastic-Job是当当网开源的一个分布式调度解决方案,基于Quartz二次开发的,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成。

Elastic-Job-Lite,它定位为轻量级无中心 化解决方案,使用Jar包的形式提供分布式任务的协调服务,而Elastic-Job-Cloud子项目需要结合Mesos以及Docker在云环境下使用。

最新版本是 3.0.1

主要功能介绍

  • 分布式调度协调:在分布式环境中,任务能够按指定的调度策略执行,并且能够避免同一任务多实例重复执行
  • 丰富的调度策略:基于成熟的定时任务作业框架Quartz cron表达式执行定时任务
  • 弹性扩容缩容:当集群中增加某一个实例,它应当也能够被选举并执行任务;当集群减少一个实例时,它所执行的任务能被转移到别的实例来执行。
  • 失效转移:某实例在任务执行失败后,会被转移到其他实例执行
  • 错过执行作业重触发:若因某种原因导致作业错过执行,自动记录错过执行的作业,并在上次作业 完成后自动触发。
  • 支持并行调度:支持任务分片,任务分片是指将一个任务分为多个小任务项在多个实例同时执行。 作业分片一致性 当任务被分片后,保证同一分片在分布式环境中仅一个执行实例。

2、本地部署web界面

下载仓库代码,这里版本是2.1.5,cmd进入D:\idea_workspace\shardingsphere-elasticjob-2.1.5\elastic-job-lite

打包

mvn clean install -Dmaven.test.skip=true

进入

D:\idea_workspace\shardingsphere-elasticjob-2.1.5\elastic-job-lite\elastic-job-lite-console\target

解压刚才打包的压缩包,解压后进入bin目录执行start.bat即可部署

3、入门程序

这里还是使用2版本

首先本地搭建zk环境,zk3.4.6以上版本,查看zk文章 ZooKeeper_程序三两行的博客-CSDN博客_zookeeper版本选择

创建maven项目 导入依赖

<dependency>
      <groupId>com.dangdang</groupId>
      <artifactId>elastic-job-lite-core</artifactId>
      <version>2.1.5</version>
    </dependency>

测试业务方法

/**
 * 定义任务类实现SimpleJob即可,实现execute方法
 */
public class MyTask implements SimpleJob {
    @Override
    public void execute(ShardingContext shardingContext) {
        System.out.println("业务方法开始执行===============");
    }
}

执行

public class App {
    //zk
    private final static String ZK = "localhost:2181";
    //调度任务命名空间 zk中会自动创建的节点
    private final static String NAME_SPACE = "my_job";
 
    public static void main(String[] args) {
        startJob(zkConfig());
    }
 
    //任务启动和配置
    public static void startJob(CoordinatorRegistryCenter registryCenter) {
        //参数String jobName job名称, String cron job表达式, int shardingTotalCount分片数
        JobCoreConfiguration jobCoreConfiguration = JobCoreConfiguration.newBuilder("test-job", "0/3 * * * * ?", 3).build();
        SimpleJobConfiguration jobConfiguration = new SimpleJobConfiguration(jobCoreConfiguration, MyTask.class.getCanonicalName());
        //启动任务 注册中心
        new JobScheduler(registryCenter, LiteJobConfiguration.newBuilder(jobConfiguration).overwrite(true).build()).init();
 
    }
 
    //zk配置以及创建注册中心
    public static CoordinatorRegistryCenter zkConfig() {
        //注册中心zk配置
        ZookeeperConfiguration zookeeperConfiguration = new ZookeeperConfiguration(ZK, NAME_SPACE);
        //减少zk超时时间
        zookeeperConfiguration.setSessionTimeoutMilliseconds(100);
        //创建注册中心
        ZookeeperRegistryCenter registryCenter = new ZookeeperRegistryCenter(zookeeperConfiguration);
        registryCenter.init();
        return registryCenter;
    }
 
}

4、架构

三、Sringboot整合elastic-job

引入依赖

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>2.6.8</version>
    </dependency>
    <dependency>
      <groupId>com.dangdang</groupId>
      <artifactId>elastic-job-lite-spring</artifactId>
      <version>2.1.5</version>
    </dependency>



相关文章
|
9月前
|
机器学习/深度学习 并行计算 算法
基于目标级联法的微网群多主体分布式优化调度(Matlab代码实现)
基于目标级联法的微网群多主体分布式优化调度(Matlab代码实现)
183 0
|
Kubernetes 大数据 调度
Airflow vs Argo Workflows:分布式任务调度系统的“华山论剑”
本文对比了Apache Airflow与Argo Workflows两大分布式任务调度系统。两者均支持复杂的DAG任务编排、社区支持及任务调度功能,且具备优秀的用户界面。Airflow以Python为核心语言,适合数据科学家使用,拥有丰富的Operator库和云服务集成能力;而Argo Workflows基于Kubernetes设计,支持YAML和Python双语定义工作流,具备轻量化、高性能并发调度的优势,并通过Kubernetes的RBAC机制实现多用户隔离。在大数据和AI场景中,Airflow擅长结合云厂商服务,Argo则更适配Kubernetes生态下的深度集成。
1324 34
|
9月前
|
NoSQL Java 调度
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
分布式锁是分布式系统中用于同步多节点访问共享资源的机制,防止并发操作带来的冲突。本文介绍了基于Spring Boot和Redis实现分布式锁的技术方案,涵盖锁的获取与释放、Redis配置、服务调度及多实例运行等内容,通过Docker Compose搭建环境,验证了锁的有效性与互斥特性。
807 0
分布式锁与分布式锁使用 Redis 和 Spring Boot 进行调度锁(不带 ShedLock)
|
9月前
|
存储 算法 安全
“卧槽,系统又崩了!”——别慌,这也许是你看过最通俗易懂的分布式入门
本文深入解析分布式系统核心机制:数据分片与冗余副本实现扩展与高可用,租约、多数派及Gossip协议保障一致性与容错。探讨节点故障、网络延迟等挑战,揭示CFT/BFT容错原理,剖析规模与性能关系,为构建可靠分布式系统提供理论支撑。
411 2
|
9月前
|
机器学习/深度学习 算法 安全
新型电力系统下多分布式电源接入配电网承载力评估方法研究(Matlab代码实现)
新型电力系统下多分布式电源接入配电网承载力评估方法研究(Matlab代码实现)
290 3
|
10月前
|
边缘计算 运维 算法
含分布式电源的配电网日前两阶段优化调度模型(Matlab代码实现)
含分布式电源的配电网日前两阶段优化调度模型(Matlab代码实现)
210 1
|
11月前
|
数据采集 缓存 NoSQL
分布式新闻数据采集系统的同步效率优化实战
本文介绍了一个针对高频新闻站点的分布式爬虫系统优化方案。通过引入异步任务机制、本地缓存池、Redis pipeline 批量写入及身份池策略,系统采集效率提升近两倍,数据同步延迟显著降低,实现了分钟级热点追踪能力,为实时舆情监控与分析提供了高效、稳定的数据支持。
485 1
分布式新闻数据采集系统的同步效率优化实战
|
9月前
|
并行计算 算法 安全
【ADMM、碳排放】基于分布式ADMM算法的考虑碳排放交易的电力系统优化调度研究【IEEE6节点、IEEE30节点、IEEE118节点】(Matlab代码实现)
【ADMM、碳排放】基于分布式ADMM算法的考虑碳排放交易的电力系统优化调度研究【IEEE6节点、IEEE30节点、IEEE118节点】(Matlab代码实现)
485 0
|
存储 监控 数据可视化
常见的分布式定时任务调度框架
分布式定时任务调度框架用于在分布式系统中管理和调度定时任务,确保任务按预定时间和频率执行。其核心概念包括Job(任务)、Trigger(触发器)、Executor(执行器)和Scheduler(调度器)。这类框架应具备任务管理、任务监控、良好的可扩展性和高可用性等功能。常用的Java生态中的分布式任务调度框架有Quartz Scheduler、ElasticJob和XXL-JOB。
5917 66
|
SQL 监控 Go
新一代 Cron-Job分布式调度平台,v1.0.8版本发布,支持Go执行器SDK!
现代化的Cron-Job分布式任务调度平台,支持Go语言执行器SDK,多项核心优势优于其他调度平台。
327 8

热门文章

最新文章