前言
目前组内分布式任务调度分别使用了elastic-job 与easyScheduler,不是很统一,现在想调研此两种分布式任务,基于框架,运维,使用(代码使用与控制台对任务调度)等方面做一下对比。
ElasticJob-Lite
ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。 它通过弹性调度、资源管控、以及作业治理的功能,打造一个适用于互联网场景的分布式调度解决方案,并通过开放的架构设计,提供多元化的作业生态。 它的各个产品使用统一的作业 API,开发者仅需一次开发,即可随意部署。本文主要以springboot启动为例,介绍ElasticJob-Lite(版本3.0.0)。
特别说明:
ElasticJob 已于 2020 年 5 月 28 日成为 [Apache ShardingSphere](https://shardingsphere.apache.org/) 的子项目
- 架构
定位为轻量级无中心化解决方案,使用 jar 的形式提供分布式任务的协调服务。引入jar包后,应用在各自的节点执行任务,通过 ZK 注册中心协调。节点注册、节点选举、任务分片、监听都在 Elastic-Job-Lite 的代码中完成。下图是官网提供得架构图。
elastic-job-lite 的特性:
1. 用 ZK 实现注册中心 分布式调度协调
2. 支持并行调度(任务分片)
3. 作业分片一致性,保证同一分片在分布式环境中仅一个执行实例
4. 弹性扩容缩容:将任务拆分为 n 个任务项后,各个服务器分别执行各自分配到的任务项。一旦有新的服务器加入集
群,或现有服务器下线,elastic-job 将在保留本次任务执行不变的情况下,下次任务开始前触发任务重分片。
5. 失效转移 failover:弹性扩容缩容在下次作业运行前重分片,但本次作业执行的过程中,下线的服务器所分配
的作业将不会重新被分配。失效转移功能可以在本次作业运行中用空闲服务器抓取孤儿作业分片执行。
同样失效转移功能也会牺牲部分性能。
6. 支持作业生命周期操作(Listener)
7. 丰富的作业类型(Simple、DataFlow、Script、http ps:3.0.0以上 )
8. 运维平台
9. Spring 整合以及命名空间提供
....
- 运维平台以及使用姿势
elastic-job提供了可视化界面 elastic-job-lite-console 框架,我们可以下载并部署,从而管理具体job官网下载地址 https://shardingsphere.apache.org/elasticjob/current/cn/downloads/
我们可以对状态为正常的作业进行修改/查看详情/触发/失效/终止等操作,如修改:
3.开启事件追踪数据源配置后,也可以对任务历史轨迹进行监听
- 代码使用姿势
1.引入 Maven 依赖
org.apache.shardingsphere.elasticjob
elasticjob-lite-core
${latest.release.version}
2.作业开发
/**
* @author liuliang
* @date 2021/1/28 4:06 PM
*/public class FinanceHttpJobTest {
public static void main(String[] args) {
new ScheduleJobBootstrap(createRegistryCenter(), "HTTP", JobConfiguration.newBuilder("javaHttpJob", 1)
.setProperty(HttpJobProperties.URI_KEY, "http://localhost:7770/v1/test")
.setProperty(HttpJobProperties.METHOD_KEY, "POST")
.cron("0/5 * * * * ?").shardingItemParameters("0=Beijing").build()).schedule();
}
private static CoordinatorRegistryCenter createRegistryCenter() {
CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration("localhost:2181", "finance-job"));
regCenter.init();
return regCenter;
}
}
/**
* @author liuliang
* @date 2021/1/28 4:21 PM
*/@Slf4j
@RestController
@RequestMapping("/v1")
public class TestController {
@PostMapping("/test")
public String test(@RequestHeader String shardingContext) {
log.info("shardingContext:{}", shardingContext);
return "测试调用成功";
}
}
运行项目,运行FinanceHttpJobTest,可以看到日志每5s打印
021-01-28 20:55:35.056 INFO 93543 --- [nio-7770-exec-8] c.s.d.f.j.c.f.controller.TestController : shardingContext:{"jobName":"javaHttpJob","taskId":"javaHttpJob@-@0@-@READY@[email protected]@-@93484","shardingTotalCount":1,"jobParameter":"","shardingItem":0,"shardingParameter":"Beijing"}
2021-01-28 20:55:40.047 INFO 93543 --- [nio-7770-exec-9] c.s.d.f.j.c.f.controller.TestController : shardingContext:{"jobName":"javaHttpJob","taskId":"javaHttpJob@-@0@-@READY@[email protected]@-@93484","shardingTotalCount":1,"jobParameter":"","shardingItem":0,"shardingParameter":"Beijing"}
2021-01-28 20:55:45.055 INFO 93543 --- [io-7770-exec-10] c.s.d.f.j.c.f.controller.TestController : shardingContext:{"jobName":"javaHttpJob","taskId":"javaHttpJob@-@0@-@READY@[email protected]@-@93484","shardingTotalCount":1,"jobParameter":"","shardingItem":0,"shardingParameter":"Beijing"}
2021-01-28 20:55:50.052 INFO 93543 --- [nio-7770-exec-1] c.s.d.f.j.c.f.controller.TestController : shardingContext:{"jobName":"javaHttpJob","taskId":"javaHttpJob@-@0@-@READY@[email protected]@-@93484","shardingTotalCount":1,"jobParameter":"","shardingItem":0,"shardingParameter":"Beijing"}
2021-01-28 20:55:55.040 INFO 93543 --- [nio-7770-exec-2] c.s.d.f.j.c.f.controller.TestController : shardingContext:{"jobName":"javaHttpJob","taskId":"javaHttpJob@-@0@-@READY@[email protected]@-@93484","shardingTotalCount":1,"jobParameter":"","shardingItem":0,"shardingParameter":"Beijing"}
2021-01-28 20:56:00.055 INFO 93543 --- [nio-7770-exec-3] c.s.d.f.j.c.f.controller.TestController : shardingContext:{"jobName":"javaHttpJob","taskId":"javaHttpJob@-@0@-@READY@[email protected]@-@93484","shardingTotalCount":1,"jobParameter":"","shardingItem":0,"shardingParameter":"Beijing"}
2021-01-28 20:56:05.052 INFO 93543 --- [nio-7770-exec-4] c.s.d.f.j.c.f.controller.TestController : shardingContext:{"jobName":"javaHttpJob","taskId":"javaHttpJob@-@0@-@READY@[email protected]@-@93484","shardingTotalCount":1,"jobParameter":"","shardingItem":0,"shardingParameter":"Beijing"}
2021-01-28 20:56:10.037 INFO 93543 --- [nio-7770-exec-5] c.s.d.f.j.c.f.controller.TestController : shardingContext:{"jobName":"javaHttpJob","taskId":"javaHttpJob@-@0@-@READY@[email protected]@-@93484","shardingTotalCount":1,"jobParameter":"","shardingItem":0,"shardingParameter":"Beijing"}
说明调度成功