PowerJob/README.md
2020-04-20 21:14:55 +08:00

69 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 简介
### 产品介绍
OhMyScheduler是一个分布式调度平台和分布式计算框架具有以下特性
* 支持CRON、固定频率、固定延迟和API四种调度策略。
* 支持单机、广播、**MapReduce**三种执行模式。
* 支持任意的水平扩展,性能强劲无上限。
* 具有强大的故障转移与恢复能力,只要保证集群可用节点数足够,任务就能顺利完成。
* 仅依赖数据库,部署简单,上手容易,开发高效,仅需几行代码即可获得整个集群的分布式计算能力。
* 支持SpringBean、普通Java类内置/外置、Shell、Python等处理器。
# 部署
### 环境要求
* 运行环境JDK8+
* 编译环境Maven3+
* 数据库Spring Data JPA支持的关系型数据库理论上都可以MySQL/Oracle/MS SQLServer...
### 依赖坐标
>最新依赖版本请参考Maven中央仓库[推荐地址](https://search.maven.org/search?q=com.github.kfcfans)&[备用地址](https://mvnrepository.com/search?q=com.github.kfcfans)。
Worker依赖包需要接入分布式计算能力的应用需要依赖该jar包
```xml
<dependency>
<groupId>com.github.kfcfans</groupId>
<artifactId>oh-my-scheduler-worker</artifactId>
<version>${oms.worker.latest.version}</version>
</dependency>
```
Client依赖包需要接入OpenAPI的应用需要依赖该Jar包使用代码调用控制台功能
```xml
<dependency>
<groupId>com.github.kfcfans</groupId>
<artifactId>oh-my-scheduler-client</artifactId>
<version>${oms.client.latest.version}</version>
</dependency>
```
### 项目部署
1. 部署数据库由于调度Server数据持久化层基于Spring Data Jpa实现**开发者仅需完成数据库的创建**即运行SQL`CREATE database if NOT EXISTS oms default character set utf8mb4 collate utf8mb4_unicode_ci;`
2. 部署调度服务器oh-my-scheduler-server修改配置文件application.properties按需修改之后maven打包部署运行一条龙。
3. 部署前端页面可选server多实例部署时需要单Server已经继承在SpringBoot中自行使用[源码](https://github.com/KFCFans/OhMyScheduler-Console)打包部署即可。
4. 被调度任务集成`oh-my-scheduler-worker`依赖,并完成处理器的开发,详细教程见[开发文档](https://github.com/KFCFans/OhMyScheduler/blob/master/others/doc/DevelopmentGuide.md)。
# 开发日志
### 已完成
* 定时调度功能支持CRON表达式、固定时间间隔、固定频率和API四种方式。
* 任务执行功能支持单机、广播和MapReduce三种执行方式。
* 执行处理器支持SpringBean、普通Java对象、Shell脚本、Python脚本的执行
* 高可用与水平扩展:调度服务器可以部署任意数量的节点,不存在调度的性能瓶颈。
* 不怎么美观但可以用的前端界面
* OpenAPI通过OpenAPI可以允许开发者在自己的应用上对OhMyScheduler进行二次开发比如开发自己的定时调度策略通过API的调度模式触发任务执行。
### 下阶段目标
* 工作流任务编排当前版本勉强可以用MapReduce代替不过工作流挺酷的等框架稳定后进行开发。
* [应用级别资源管理和任务优先级](https://yq.aliyun.com/articles/753141?spm=a2c4e.11153959.teamhomeleft.1.696d60c9vt9lLx)没有机器资源时进入排队队列。不过我觉得SchedulerX的方案不太行SchedulerX无抢占一旦低优先级任务开始运行那么只能等他执行完成才能开始高优先级任务这明显不合理。可是考虑抢占的话又要多考虑很多东西...先放在TODO列表吧。
* 保护性判断(这个太繁琐了且意义不大,毕竟面向开发者,大家不会乱填参数对不对~)
# 参考
>Alibaba SchedulerX 2.0
* [Akka 框架](https://yq.aliyun.com/articles/709946?spm=a2c4e.11153959.teamhomeleft.67.6a0560c9bZEnZq)不得不说akka-remote简化了相当大一部分的网络通讯代码。
* [执行器架构设计](https://yq.aliyun.com/articles/704121?spm=a2c4e.11153959.teamhomeleft.97.371960c9qhB1mB)这篇文章反而不太认同感觉我个人的设计更符合Yarn的“架构”。
* [MapReduce模型](https://yq.aliyun.com/articles/706820?spm=a2c4e.11153959.teamhomeleft.83.6a0560c9bZEnZq)想法很Cool大数据处理框架都是处理器向数据移动但对于传统Java应用来说数据向处理器移动也未尝不可这样还能使框架的实现变得简单很多。
* [广播执行](https://yq.aliyun.com/articles/716203?spm=a2c4e.11153959.teamhomeleft.40.371960c9qhB1mB)运行清理日志脚本什么的也太实用了8
# 后记
* 产品永久开源Apache License, Version 2.0),免费使用,且目前开发者@KFCFans有充足的时间进行项目维护和提供无偿技术支持All In 了解一下),欢迎各位试用!
* 欢迎共同参与本项目的贡献PR和Issue都大大滴欢迎求求了
* 觉得还不错的话可以点个Star支持一下哦 = ̄ω ̄=
* 联系肥宅兄@KFCFans -> `tengjiqi@gmail.com`