08-Zookeeper实战-ElasticJob详解

ElasticJob入门->实现原理->源码分析

简介

Elastic-Job-Lite定位为轻量级无中心化解决方案,使用jar包的形式提供最轻量级的分布式任务的协调服务,外部依赖仅Zookeeper。

核心概念

1.分布式调度

Elastic-Job-Lite并无作业调度中心节点,而是基于部署作业框架的程序在到达相应时间点时各自触发调度。
注册中心仅用于作业注册和监控信息存储。而主作业节点仅用于处理分片和清理等功能。

2.作业高可用

Elastic-Job-Lite提供最安全的方式执行作业。将分片总数设置为1,并使用多于1台的服务器执行作业,作业将会以1主n从的方式执行。
一旦执行作业的服务器崩溃,等待执行的服务器将会在下次作业启动时替补执行。开启失效转移功能效果更好,可以保证在本次作业执行时崩溃,备机立即启动替补执行。

3.最大限度利用资源

Elastic-Job-Lite也提供最灵活的方式,最大限度的提高执行作业的吞吐量。将分片项设置为大于服务器的数量,最好是大于服务器倍数的数量,作业将会合理的利用分布式资源,动态的分配分片项。
例如:3台服务器,分成10片,则分片项分配结果为服务器A=0,1,2;服务器B=3,4,5;服务器C=6,7,8,9。 如果服务器C崩溃,则分片项分配结果为服务器A=0,1,2,3,4;服务器B=5,6,7,8,9。在不丢失分片项的情况下,最大限度的利用现有资源提高吞吐量。

快速入门

  • 1.导入依赖
  • 2.开发作业
  • 3.作业配置
  • 4.启动作业
作业开发

Elastic-Job提供Simple、Dataflow和Script 3种作业类型。 方法参数shardingContext包含作业配置、片和运行时信息。可通过getShardingTotalCount(), getShardingItem()等方法分别获取分片总数,运行在本作业服务器的分片序列号等。

  • 具体实例参考我写的代码实例
部署运维平台
  • 解压缩elastic-job-lite-console-${version}.tar.gz并执行bin\start.sh
  • 打开浏览器访问http://localhost:8899/即可访问控制台。8899为默认端口号,可通过启动脚本输入-p自定义端口号。
  • 访问RESTFul API方法同控制台。
  • elastic-job-lite-console-${version}.tar.gz可通过mvn install编译获取。

旧的job如何改造接入ElasticJob

分析久的job任务实现方式,套用新的ElasticJob

ElasticJob源码分析

启动

    public static void main(String[] args) {
        //创建定时任务配置信息
        JobCoreConfiguration simpleCoreConfig = JobCoreConfiguration.newBuilder("MySimpleJob", "0 0/1 * * * ?", 1).build();
        //使用简单任务包装上面创建的定时任务配置信息。除了SimpleJob还有两种定时任务类型
        SimpleJobConfiguration simpleJobConfig = new SimpleJobConfiguration(simpleCoreConfig, MySimpleJob.class.getCanonicalName());
        //定义Lite作业根配置
        LiteJobConfiguration simpleJobRootConfig = LiteJobConfiguration.newBuilder(simpleJobConfig).overwrite(true).build();
        //定义配置中心,zookeeper
        CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration("127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183", "elastic-job-demo"));
        regCenter.init();
        //将所有信息整合到JobScheduler
        new JobScheduler(regCenter,simpleJobRootConfig).init();
    }

JobCoreConfiguration类记录了作业的基本配置数据,采用了设计模式中的构建模式通过内部类Builder创建。作业的核心数据有:

    private final String jobName;
    private final String cron;
    private final int shardingTotalCount;
    private final String shardingItemParameters;
    private final String jobParameter; //作业执行的参数
    private final boolean failover; //是否开启失效转移
    private final boolean misfire;
    private final String description;
    private final JobProperties jobProperties;  //作业配置参数

JobScheduler核心的调度类

private JobScheduler(final CoordinatorRegistryCenter regCenter, final LiteJobConfiguration liteJobConfig, final JobEventBus jobEventBus, final ElasticJobListener... elasticJobListeners) {
        //job Name和job的实例放到Map里面 单例模式,意味着,多个任务都会放在Map里面
        //JobInstance实例仅仅只有一个Job的实例的名字
        JobRegistry.getInstance().addJobInstance(liteJobConfig.getJobName(), new JobInstance());
        this.liteJobConfig = liteJobConfig;
        this.regCenter = regCenter;

        //可以在任务执行完毕后做一下处理。可以自定义一些job的监听
        List<ElasticJobListener> elasticJobListenerList = Arrays.asList(elasticJobListeners);
        setGuaranteeServiceForElasticJobListeners(regCenter, elasticJobListenerList);

        //门面模式:提供一个facade类,facade里面持有各种子系统的实例,对外提供统一的方法操作子系统的实例
        //SchedulerFacade持有Elastic job里面创建的所有实例。提供的方法主要是操作zookeeper来重启任务,暂停任务,更新配置
        schedulerFacade = new SchedulerFacade(regCenter, liteJobConfig.getJobName(), elasticJobListenerList);

        //同样采用门面模式,facade持有任务的注册中,
        jobFacade = new LiteJobFacade(regCenter, liteJobConfig.getJobName(), Arra
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值