From e5ae446c3aa77d87bd8e0b19efaa13a8ebdd27c5 Mon Sep 17 00:00:00 2001 From: tjq Date: Wed, 20 May 2020 18:56:57 +0800 Subject: [PATCH] [dev] modify build script --- README.md | 15 +++++++ oh-my-scheduler-worker-agent/Dockerfile | 16 +++++++ others/oms-sql.sql | 54 +++++++++++++++++----- others/script/build_server_docker.sh | 59 ++++++++++++++++++------- 4 files changed, 119 insertions(+), 25 deletions(-) create mode 100644 oh-my-scheduler-worker-agent/Dockerfile diff --git a/README.md b/README.md index 756e5808..616e8a38 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,21 @@ OhMyScheduler是基于Akka架构的一款分布式调度平台与分布式计算 * 有需要全部机器一同执行的业务场景:如日志清理。 * 有需要分布式处理的业务场景:比如需要更新一大批数据,单机执行耗时非常长,可以使用Map/MapReduce处理器完成任务的分发,调动整个集群加速计算。 +### 同类产品对比 +||QuartZ|xxl-job|SchedulerX 2.0|OhMyScheduler| +|----|----|----|----|----| +|定时类型|CRON|CRON|CRON、固定频率、固定延迟、OpenAPI|CRON、固定频率、固定延迟、OpenAPI| +|任务类型|内置Java|内置Java、GLUE Java、Shell、Python等脚本|内置Java、外置Java(FatJar)、Shell、Python等脚本|内置Java、外置Java(容器)、Shell、Python等脚本| +|分布式任务|无|静态分片|MapReduce动态分片|MapReduce动态分片| +|在线任务治理|不支持|支持|支持|支持| +|日志白屏化|不支持|支持|不支持|支持| +|调度方式及性能|基于数据库锁,有性能瓶颈|基于数据库锁,有性能瓶颈|不详|无锁化设计,性能强劲无上限| +|报警监控|无|邮件|短信|邮件,提供接口允许开发者自定义开发| +|系统依赖|MySQL|MySQL|人民币(公测期间免费,哎,帮打个广告吧)|任意Spring Data Jpa支持的关系型数据库(MySQL、Oracle...)| +|DAG工作流|不支持|不支持|支持|暂不支持,有明确开发计划| + + + # 接入流程(文档不要太详细,简单强大兼得说的就是在下~) 1. [项目部署及初始化](./others/doc/SystemInitGuide.md) 2. [处理器开发](./others/doc/ProcessorDevGuide.md) diff --git a/oh-my-scheduler-worker-agent/Dockerfile b/oh-my-scheduler-worker-agent/Dockerfile new file mode 100644 index 00000000..e7dec374 --- /dev/null +++ b/oh-my-scheduler-worker-agent/Dockerfile @@ -0,0 +1,16 @@ +# 没有 javac 需求,用 JRE 镜像 +FROM openjdk:8-jre-slim +MAINTAINER tengjiqi@gmail.com + +ENV APP_NAME=oh-my-scheduler-worker-agent +ENV PARAMS="" + +COPY oms-agent.jar /oms-agent.jar +# 暴露端口(HTTP + AKKA-Server + AKKA-Client) +EXPOSE 7700 10086 27777 +# 创建 docker 文件目录(盲猜这是用户目录) +RUN mkdir -p /root/oms-agent +# 挂载数据卷,将文件直接输出到宿主机(注意,此处挂载的是匿名卷,即在宿主机位置随机) +VOLUME /root/oms +# 启动应用 +ENTRYPOINT ["sh","-c","java -jar /oms-agent.jar $PARAMS"] \ No newline at end of file diff --git a/others/oms-sql.sql b/others/oms-sql.sql index f9abcf45..3e112600 100644 --- a/others/oms-sql.sql +++ b/others/oms-sql.sql @@ -1,3 +1,16 @@ +/* + Navicat Premium Data Transfer + + Source Server Type : MySQL + Source Server Version : 50724 + Source Schema : oms-product + + Target Server Type : MySQL + Target Server Version : 50724 + File Encoding : 65001 + + Date: 20/05/2020 16:28:20 +*/ SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; @@ -14,13 +27,32 @@ CREATE TABLE `app_info` ( `gmt_modified` datetime(6) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `appNameUK` (`app_name`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- ---------------------------- --- Table structure for instance_log +-- Table structure for container_info -- ---------------------------- -DROP TABLE IF EXISTS `instance_log`; -CREATE TABLE `instance_log` ( +DROP TABLE IF EXISTS `container_info`; +CREATE TABLE `container_info` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `app_id` bigint(20) DEFAULT NULL, + `container_name` varchar(255) DEFAULT NULL, + `gmt_create` datetime(6) DEFAULT NULL, + `gmt_modified` datetime(6) DEFAULT NULL, + `last_deploy_time` datetime(6) DEFAULT NULL, + `source_info` varchar(255) DEFAULT NULL, + `source_type` int(11) DEFAULT NULL, + `status` int(11) DEFAULT NULL, + `version` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `containerNameUK` (`container_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- ---------------------------- +-- Table structure for instance_info +-- ---------------------------- +DROP TABLE IF EXISTS `instance_info`; +CREATE TABLE `instance_info` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `actual_trigger_time` bigint(20) DEFAULT NULL, `app_id` bigint(20) DEFAULT NULL, @@ -36,9 +68,10 @@ CREATE TABLE `instance_log` ( `status` int(11) NOT NULL, `task_tracker_address` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), - KEY `IDX1ha9qjdw952k1c22gkht50unp` (`job_id`), - KEY `IDXckliwovavlr2s0uh14n94yfmc` (`app_id`) -) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8mb4; + KEY `IDX5b1nhpe5je7gc5s1ur200njr7` (`job_id`), + KEY `IDXjnji5lrr195kswk6f7mfhinrs` (`app_id`), + KEY `IDXa98hq3yu0l863wuotdjl7noum` (`instance_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- ---------------------------- -- Table structure for job_info @@ -72,7 +105,7 @@ CREATE TABLE `job_info` ( `time_expression_type` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `IDXk2xprmn3lldmlcb52i36udll1` (`app_id`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- ---------------------------- -- Table structure for oms_lock @@ -83,10 +116,11 @@ CREATE TABLE `oms_lock` ( `gmt_create` datetime(6) DEFAULT NULL, `gmt_modified` datetime(6) DEFAULT NULL, `lock_name` varchar(255) DEFAULT NULL, + `max_lock_time` bigint(20) DEFAULT NULL, `ownerip` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `lockNameUK` (`lock_name`) -) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- ---------------------------- -- Table structure for server_info @@ -99,7 +133,7 @@ CREATE TABLE `server_info` ( `ip` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `UKtk8ytgpl7mpukhnvhbl82kgvy` (`ip`) -) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4; -- ---------------------------- -- Table structure for user_info diff --git a/others/script/build_server_docker.sh b/others/script/build_server_docker.sh index 9a3cd0b9..af48b7c2 100755 --- a/others/script/build_server_docker.sh +++ b/others/script/build_server_docker.sh @@ -1,31 +1,60 @@ #!/bin/bash # -p:允许后面跟一个字符串作为提示 -r:保证读入的是原始内容,不会发生任何转义 read -r -p "请输入Dockedr镜像版本:" version -echo "即将构建的Docker镜像:oms-server:$version" +echo "即将构建的 server 镜像:oms-server:$version" +echo "即将构建的 agent 镜像:oms-agent:$version" read -r -p "任意键继续:" # 一键部署脚本,请勿挪动脚本 cd `dirname $0`/../.. || exit -echo "================== 构建 jar ==================" -mvn clean package -DskipTests -Pdev -U -e -echo "================== 拷贝 jar ==================" -/bin/cp -rf oh-my-scheduler-server/target/*.jar oh-my-scheduler-server/oms-server.jar -ls -l oh-my-scheduler-server/oms-server.jar + +read -r -p "是否进行maven构建(y/n):" needmvn +if [ "$needmvn" = "y" ] || [ "$needmvn" = "Y" ]; then + echo "================== 构建 jar ==================" + mvn clean package -DskipTests -Pdev -U -e + echo "================== 拷贝 jar ==================" + /bin/cp -rf oh-my-scheduler-server/target/*.jar oh-my-scheduler-server/oms-server.jar + /bin/cp -rf oh-my-scheduler-worker-agent/target/*.jar oh-my-scheduler-worker-agent/oms-agent.jar + ls -l oh-my-scheduler-server/oms-server.jar + ls -l oh-my-scheduler-worker-agent/oms-agent.jar +fi + echo "================== 关闭老应用 ==================" docker stop oms-server +docker stop oms-agent echo "================== 删除老容器 ==================" docker container rm oms-server +docker container rm oms-agent echo "================== 删除旧镜像 ==================" docker rmi -f tjqq/oms-server:$version +docker rmi -f tjqq/oms-agent:$version echo "================== 构建应用镜像 ==================" docker build -t tjqq/oms-server:$version oh-my-scheduler-server/. || exit +docker build -t tjqq/oms-agent:$version oh-my-scheduler-worker-agent/. || exit echo "================== 准备启动应用 ==================" -# 启动应用(端口映射、数据路径挂载) -## -d:后台运行 -## -p:指定端口映射,容器端口:宿主机端口 -## --name:指定容器名称 -## -v(--volume):挂载目录,宿主机目录:docker内目录,写入docker内路径的数据会被直接写到宿主机上,常用于日志文件 -## -net=host:容器和宿主机共享网络(容器直接使用宿主机IP,性能最好,但网络隔离较差) -docker run -d -e PARAMS="--spring.profiles.active=product" -p 7700:7700 -p 10086:10086 -p 27777:27777 --name oms-server -v ~/docker/oms-server:/root/oms-server tjqq/oms-server:$version -sleep 1 -tail --pid=$$ -f -n 1000 ~/docker/oms-server/application.log \ No newline at end of file + +read -r -p "是否正式发布该镜像(y/n):" needrelease +if [ "$needrelease" = "y" ] || [ "$needrelease" = "Y" ]; then + read -r -p "三思!请确保当前处于已发布的Master分支!(y/n):" needrelease + if [ "$needrelease" = "y" ] || [ "$needrelease" = "Y" ]; then + echo "================== 正在推送 server 镜像到中央仓库 ==================" + docker push tjqq/oms-server:$version + echo "================== 正在推送 agent 镜像到中央仓库 ==================" + docker push tjqq/oms-agent:$version + fi +fi + +read -r -p "是否启动 server & agent(y/n):" startup +if [ "$startup" = "y" ] || [ "$startup" = "Y" ]; then + # 启动应用(端口映射、数据路径挂载) + ## -d:后台运行 + ## -p:指定端口映射,容器端口:宿主机端口 + ## --name:指定容器名称 + ## -v(--volume):挂载目录,宿主机目录:docker内目录,写入docker内路径的数据会被直接写到宿主机上,常用于日志文件 + ## -net=host:容器和宿主机共享网络(容器直接使用宿主机IP,性能最好,但网络隔离较差) + docker run -d -e PARAMS="--spring.profiles.active=product" -p 7700:7700 -p 10086:10086 -p 27777:27777 --name oms-server -v ~/docker/oms-server:/root/oms-server tjqq/oms-server:$version + sleep 1 + tail --pid=$$ -f -n 1000 ~/docker/oms-server/application.log + + docker run -d -e PARAMS="--app oms-agent-test" +fi \ No newline at end of file