您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
ElasticJob 概览与快速入门
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
ElasticJob 概览与快速入门
Apache ShardingSphere
2021-01-26
IP归属:未知
22080浏览
# 概览 ElasticJob 是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目 ElasticJob-Lite 和 ElasticJob-Cloud 组成。 它通过弹性调度、资源管控、以及作业治理的功能,打造一个适用于互联网场景的分布式调度解决方案,并通过开放的架构设计,提供多元化的作业生态。 它的各个产品使用统一的作业 API,开发者仅需一次开发,即可随意部署。 ElasticJob 已于 2020 年 5 月 28 日成为 [Apache ShardingSphere](https://shardingsphere.apache.org/) 的子项目。 欢迎通过[邮件列表](mailto:dev@shardingsphere.apache.org)参与讨论。 ## 简介 使用 ElasticJob 能够让开发工程师不再担心任务的线性吞吐量提升等非功能需求,使他们能够更加专注于面向业务编码设计; 同时,它也能够解放运维工程师,使他们不必再担心任务的可用性和相关管理需求,只通过轻松的增加服务节点即可达到自动化运维的目的。 ### ElasticJob-Lite 定位为轻量级无中心化解决方案,使用 jar 的形式提供分布式任务的协调服务。 ![ElasticJob-Lite Architecture](https://shardingsphere.apache.org/elasticjob/current/img/architecture/elasticjob_lite.png) ### ElasticJob-Cloud 采用自研 Mesos Framework 的解决方案,额外提供资源治理、应用分发以及进程隔离等功能。 ![ElasticJob-Cloud Architecture](https://shardingsphere.apache.org/elasticjob/current/img/architecture/elasticjob_cloud.png) | | *ElasticJob-Lite* | *ElasticJob-Cloud* | | --------- | ----------------- | ------------------ | | 无中心化 | 是 | 否 | | 资源分配 | 不支持 | 支持 | | 作业模式 | 常驻 | 常驻 + 瞬时 | | 部署依赖 | ZooKeeper | ZooKeeper + Mesos | ## 功能列表 - 弹性调度 - 支持任务在分布式场景下的分片和高可用 - 能够水平扩展任务的吞吐量和执行效率 - 任务处理能力随资源配备弹性伸缩 - 资源分配 - 在适合的时间将适合的资源分配给任务并使其生效 - 相同任务聚合至相同的执行器统一处理 - 动态调配追加资源至新分配的任务 - 作业治理 - 失效转移 - 错过作业重新执行 - 自诊断修复 - 作业依赖(TODO) - 基于有向无环图(DAG)的作业间依赖 - 基于有向无环图(DAG)的作业分片间依赖 - 作业开放生态 - 可扩展的作业类型统一接口 - 丰富的作业类型库,如数据流、脚本、HTTP、文件、大数据等 - 易于对接业务作业,能够与 Spring 依赖注入无缝整合 - 可视化管控端 - 作业管控端 - 作业执行历史数据追踪 - 注册中心管理 ## 环境要求 ### Java 请使用 Java 8 及其以上版本。 ### Maven 请使用 Maven 3.5.0 及其以上版本。 ### ZooKeeper 请使用 ZooKeeper 3.6.0 及其以上版本。[详情参见](https://zookeeper.apache.org/) ### Mesos(仅 ElasticJob-Cloud 使用) 请使用 Mesos 1.1.0 及其兼容版本。[详情参见](https://mesos.apache.org/) # 快速入门 本章节以尽量短的时间,为使用者提供最简单的 ElasticJob 的快速入门。 ## ElasticJob-Cloud ### 引入 Maven 依赖 ```xml <dependency> <groupId>org.apache.shardingsphere.elasticjob</groupId> <artifactId>elasticjob-cloud-executor</artifactId> <version>${latest.release.version}</version> </dependency> ``` ### 作业开发 ```java public class MyJob implements SimpleJob { @Override public void execute(ShardingContext context) { switch (context.getShardingItem()) { case 0: // do something by sharding item 0 break; case 1: // do something by sharding item 1 break; case 2: // do something by sharding item 2 break; // case n: ... } } } ``` ### 作业启动 需定义 `main` 方法并调用 `JobBootstrap.execute()`,例子如下: ```java public class MyJobDemo { public static void main(final String[] args) { JobBootstrap.execute(new MyJob()); } } ``` ### 作业打包 ```bash tar -cvf my-job.tar.gz my-job ``` ### API 鉴权 ```bash curl -H "Content-Type: application/json" -X POST http://elasticjob_cloud_host:8899/api/login -d '{"username": "root", "password": "pwd"}' ``` 响应体: ```json {"accessToken":"some_token"} ``` ### 作业发布 ```bash curl -l -H "Content-type: application/json" -H "accessToken: some_token" -X POST -d '{"appName":"my_app","appURL":"http://app_host:8080/my-job.tar.gz","cpuCount":0.1,"memoryMB":64.0,"bootstrapScript":"bin/start.sh","appCacheEnable":true,"eventTraceSamplingCount":0}' http://elasticjob_cloud_host:8899/api/app ``` ### 作业调度 ```bash curl -l -H "Content-type: application/json" -H "accessToken: some_token" -X POST -d '{"jobName":"my_job","appName":"my_app","jobExecutionType":"TRANSIENT","cron":"0/5 * * * * ?","shardingTotalCount":3,"cpuCount":0.1,"memoryMB":64.0}' http://elasticjob_cloud_host:8899/api/job/register ``` ## ElasticJob-Lite ### 引入 Maven 依赖 ```xml <dependency> <groupId>org.apache.shardingsphere.elasticjob</groupId> <artifactId>elasticjob-lite-core</artifactId> <version>${latest.release.version}</version> </dependency> ``` ### 作业开发 ```java public class MyJob implements SimpleJob { @Override public void execute(ShardingContext context) { switch (context.getShardingItem()) { case 0: // do something by sharding item 0 break; case 1: // do something by sharding item 1 break; case 2: // do something by sharding item 2 break; // case n: ... } } } ``` ### 作业配置 ```java JobConfiguration jobConfig = JobConfiguration.newBuilder("MyJob", 3).cron("0/5 * * * * ?").build(); ``` ### 作业调度 ```java public class MyJobDemo { public static void main(String[] args) { new ScheduleJobBootstrap(createRegistryCenter(), new MyJob(), createJobConfiguration()).schedule(); } private static CoordinatorRegistryCenter createRegistryCenter() { CoordinatorRegistryCenter regCenter = new ZookeeperRegistryCenter(new ZookeeperConfiguration("zk_host:2181", "my-job")); regCenter.init(); return regCenter; } private static JobConfiguration createJobConfiguration() { // 创建作业配置 // ... } } ```
原创文章,需联系作者,授权转载
上一篇:ElasticJob概览与功能——分片
下一篇:UE Design | 学会这6点,设计助力平台产品转化提升(中)
Apache ShardingSphere
文章数
96
阅读量
231327
作者其他文章
01
突破关系型数据库桎梏:云原生数据库中间件核心剖析
数据库技术的发展与变革方兴未艾,NewSQL的出现,只是将各种所需技术组合在一起,而这些技术组合在一起所实现的核心功能,推动着云原生数据库的发展。 NewSQL的三种分类中,新架构和云数据库涉及了太多与数据库相关的底层实现,为了保证本文的范围不至太过发散,我们重点介绍透明化分片数据库中间件的核心功能与实现原理,另外两种类型的NewSQL在核心功能上类似,但实现原理会有所差别。
01
Apache ShardingSphere数据脱敏全解决方案详解(上)
Apache ShardingSphere针对新业务上线、旧业务改造分别提供了相应的全套脱敏解决方案。
01
Shardingsphere整合Narayana对XA分布式事务的支持(4)
ShardingSphere对于XA方案,提供了一套SPI解决方案,对Narayana进行了整合,Narayana初始化流程,开始事务流程,获取连接流程,提交事务流程,回滚事务流程。
01
从中间件到分布式数据库生态,ShardingSphere 5.x革新变旧
5.x 是 Apache ShardingSphere从分库分表中间件向分布式数据库生态转化的里程碑,从 4.x 版本后期开始打磨的可插拔架构在 5.x 版本已逐渐成型,项目的设计理念和 API 都进行了大幅提升。欢迎大家测试使用!
最新回复
丨
点赞排行
共0条评论
Apache ShardingSphere
文章数
96
阅读量
231327
作者其他文章
01
突破关系型数据库桎梏:云原生数据库中间件核心剖析
01
Apache ShardingSphere数据脱敏全解决方案详解(上)
01
Shardingsphere整合Narayana对XA分布式事务的支持(4)
01
从中间件到分布式数据库生态,ShardingSphere 5.x革新变旧
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号