Elastic-job分布式调度系统

本文涉及的产品
云原生网关 MSE Higress,422元/月
任务调度 XXL-JOB 版免费试用,400 元额度,开发版规格
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 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>



相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
2月前
|
存储 监控 数据可视化
常见的分布式定时任务调度框架
分布式定时任务调度框架用于在分布式系统中管理和调度定时任务,确保任务按预定时间和频率执行。其核心概念包括Job(任务)、Trigger(触发器)、Executor(执行器)和Scheduler(调度器)。这类框架应具备任务管理、任务监控、良好的可扩展性和高可用性等功能。常用的Java生态中的分布式任务调度框架有Quartz Scheduler、ElasticJob和XXL-JOB。
423 66
|
14天前
|
存储 运维 安全
盘古分布式存储系统的稳定性实践
本文介绍了阿里云飞天盘古分布式存储系统的稳定性实践。盘古作为阿里云的核心组件,支撑了阿里巴巴集团的众多业务,确保数据高可靠性、系统高可用性和安全生产运维是其关键目标。文章详细探讨了数据不丢不错、系统高可用性的实现方法,以及通过故障演练、自动化发布和健康检查等手段保障生产安全。总结指出,稳定性是一项系统工程,需要持续迭代演进,盘古经过十年以上的线上锤炼,积累了丰富的实践经验。
|
17天前
|
存储 分布式计算 Hadoop
基于Java的Hadoop文件处理系统:高效分布式数据解析与存储
本文介绍了如何借鉴Hadoop的设计思想,使用Java实现其核心功能MapReduce,解决海量数据处理问题。通过类比图书馆管理系统,详细解释了Hadoop的两大组件:HDFS(分布式文件系统)和MapReduce(分布式计算模型)。具体实现了单词统计任务,并扩展支持CSV和JSON格式的数据解析。为了提升性能,引入了Combiner减少中间数据传输,以及自定义Partitioner解决数据倾斜问题。最后总结了Hadoop在大数据处理中的重要性,鼓励Java开发者学习Hadoop以拓展技术边界。
38 7
|
23天前
|
存储 监控 Java
招行面试: 分布式调度 设计,要考虑 哪些问题?
45岁资深架构师尼恩在读者交流群中分享了关于设计分布式调度框架时需考虑的关键问题。近期有小伙伴在面试招商银行时遇到了相关难题,因准备不足而失利。为此,尼恩系统化地梳理了以下几点核心内容,帮助大家在面试中脱颖而出,实现“offer直提”。
|
2月前
|
机器学习/深度学习 存储 运维
分布式机器学习系统:设计原理、优化策略与实践经验
本文详细探讨了分布式机器学习系统的发展现状与挑战,重点分析了数据并行、模型并行等核心训练范式,以及参数服务器、优化器等关键组件的设计与实现。文章还深入讨论了混合精度训练、梯度累积、ZeRO优化器等高级特性,旨在提供一套全面的技术解决方案,以应对超大规模模型训练中的计算、存储及通信挑战。
91 4
|
3月前
|
存储 运维 负载均衡
构建高可用性GraphRAG系统:分布式部署与容错机制
【10月更文挑战第28天】作为一名数据科学家和系统架构师,我在构建和维护大规模分布式系统方面有着丰富的经验。最近,我负责了一个基于GraphRAG(Graph Retrieval-Augmented Generation)模型的项目,该模型用于构建一个高可用性的问答系统。在这个过程中,我深刻体会到分布式部署和容错机制的重要性。本文将详细介绍如何在生产环境中构建一个高可用性的GraphRAG系统,包括分布式部署方案、负载均衡、故障检测与恢复机制等方面的内容。
175 4
构建高可用性GraphRAG系统:分布式部署与容错机制
|
3月前
|
存储 NoSQL Java
Java调度任务如何使用分布式锁保证相同任务在一个周期里只执行一次?
【10月更文挑战第29天】Java调度任务如何使用分布式锁保证相同任务在一个周期里只执行一次?
124 1
|
3月前
|
机器学习/深度学习 人工智能 分布式计算
【AI系统】分布式通信与 NVLink
进入大模型时代后,AI的核心转向大模型发展,训练这类模型需克服大量GPU资源及长时间的需求。面对单个GPU内存限制,跨多个GPU的分布式训练成为必要,这涉及到分布式通信和NVLink技术的应用。分布式通信允许多个节点协作完成任务,而NVLink则是一种高速、低延迟的通信技术,用于连接GPU或GPU与其它设备,以实现高性能计算。随着大模型的参数、数据规模扩大及算力需求增长,分布式并行策略,如数据并行和模型并行,变得至关重要。这些策略通过将模型或数据分割在多个GPU上处理,提高了训练效率。此外,NVLink和NVSwitch技术的持续演进,为GPU间的高效通信提供了更强的支持,推动了大模型训练的快
63 0
|
4月前
|
消息中间件 中间件 数据库
NServiceBus:打造企业级服务总线的利器——深度解析这一面向消息中间件如何革新分布式应用开发与提升系统可靠性
【10月更文挑战第9天】NServiceBus 是一个面向消息的中间件,专为构建分布式应用程序设计,特别适用于企业级服务总线(ESB)。它通过消息队列实现服务间的解耦,提高系统的可扩展性和容错性。在 .NET 生态中,NServiceBus 提供了强大的功能,支持多种传输方式如 RabbitMQ 和 Azure Service Bus。通过异步消息传递模式,各组件可以独立运作,即使某部分出现故障也不会影响整体系统。 示例代码展示了如何使用 NServiceBus 发送和接收消息,简化了系统的设计和维护。
85 3
|
4月前
|
消息中间件 存储 监控
消息队列系统中的确认机制在分布式系统中如何实现
消息队列系统中的确认机制在分布式系统中如何实现

热门文章

最新文章