概述
SkySchedule发布之后(详见《分布式任务调度框架--SkySchedule介绍》),已有部分用户在使用,收到一些反馈意见。比如iteye网友sxp2558发现的.properties配置文件使用了“user.name”作为key,会被系统变量“user.name”覆盖,实际取到的是“主机名”,目前该问题已经修复。
目前反馈最多的问题是SkySchedule没有管理界面,不方便查看当前的任务分配情况。今天抽时间写了一个简单的管理页面,由于前端技术水平有限,比较简陋。下面简单展示下,如果还不了解SkySchedule工作原理的朋友请移步上一篇介绍文章《分布式任务调度框架--SkySchedule介绍》。
准备阶段
首先从github:https://github.com/gantianxing/skySchedule.git获取最新代码;
使用jdk1.8 +maven编译打包;
然后把SkySchedule服务端sky-server子工程对应的war包sky-server-1.0-SNAPSHOT.war部署到tomcat8,启动程序;
访问服务端管理页面http://localhost:8080/,初始界面如下:
由于还没有接入客户端,这里客户端列表为空。
添加一个客户端
这里还是以sky-test工程模拟客户端工程(实际工作中请在自己需要做“分布式任务调度”的工程里引入sky-client工程对应的客户端jar包:sky-client-1.0-SNAPSHOT.jar)。
修改客户端配置文件SkySchedule-client.properties中的server.ip.port和group.id对应的值:
server.ip.port为服务端netty的ip和端口,ip为刚才启动的服务端对应的ip,端口默认为9991。如果有多个服务端实例,请以”,”间隔。
group.id可以理解为客户端分组,每个系统对应一个分组id,每个分组id下有多个客户端,分布式任务调度就是把一批任务平均分配给这些客户端执行,我这里配置的第一个group.id=1000,首先启动一个sky-test实例,刷新服务端管理页面http://localhost:8080/(每隔15秒自动刷新),页面内容如下:
现在只有1个客户端节点,获取任务的sql语句为select * from xxx where id%1=0,改客户端将执行xxx任务表里所有的任务。这里客户端id是由客户端ip:uuid组成(192.168.21.1为ip,数据uuid为1590479018)。
添加多个客户端
现在再加一个group.id为1000的客户端实例(在ip为10.14.140.6的机器上启动一个tomcat实例),再次刷新服务端管理页面http://localhost:8080/,页面内容如下:
现在有两个客户端节点,其中ip为192.168.21.1客户端将执行任务表中id尾数为偶数的任务,ip为10.14.140.6的客户端将执行任务表中id尾数为奇数的任务。
以此类推,如果再启动一个实例,任务表中任务将被分为3份分别由不同的客户端执行。如果任务多,添加更多个客户端实例即可,注意这些客户端实例的group.id要相同,才能执行同一个任务表中的任务。
减少客户端
由于业务量减少,任务表中的任务数相应的会减少,这时可能更少的客户端就可以满足业务需求。这时直接对部分客户端下线即可,SkySchedule会自动感知客户端个数的变化,对任务进行重新分配。
同样的场景还有某一个客户端突然出现故障down掉,这时SkySchedule会自动感知,并重新进行任务分配。如果这个客户端故障解除,客户端重启后,SkySchedule也会自动感知,再次对任务进行重新分配。
比如这里停止ip为10.14.140.6的客户端,刷新服务端管理页面http://localhost:8080/,页面内容如下:
这时所有的任务会分布到192.168.21.1上(原理依然是id%1=0)。
如果有多个系统、或者多个任务表要实现分布式调度怎么办呢,可以通过添加不同的group.id实现,如下:
添加多个客户端分组
假设现在有另外一个系统也需要接入“分布式任务调度”,可以把这个系统的配置文件SkySchedule-client.properties中的group.id配置为另一个值(不要和已有的重复)。
比如,这里测试还是用sky-test,只是把group.id设为2000,再次启动一个tomcat实例,刷新服务端管理页面http://localhost:8080/,页面内容如下:
以此类推,可以接入更多的客户端系统,进行互不干涉的分布式任务调度。
最后
服务端的管理页面http://localhost:8080/,会每隔15秒自动刷新,获取最新的客户端列表。如果需要调整这个时间间隔,可以自行修改sky-server子工程中的hello.jsp中的相关代码:
//循环执行,每隔15秒钟执行一次check window.setInterval(check, 15000);
关于SkySchedule管理页面的使用介绍就到次为止,如有问题、意见或者建议,欢迎留言交流,谢谢。
转载请注明出处:
相关推荐
LTS是一个轻量级分布式任务调度框架。有三种角色, JobClient, JobTracker, TaskTracker。 4. uncode-schedule 基于zookeeper+spring task的分布式任务调度组件,非常小巧,无需任何修改就可以使spring task具备...
本源码项目是基于Java的分布式任务调度框架设计,包含1201个文件,主要使用Java、CSS、JavaScript和Shell编程语言。该项目是一个分布式任务调度框架,旨在帮助开发者更高效地管理和调度任务。系统提供了实时任务、...
分布式任务调度框架 ElasticJob 中文文档 PDF 带目录
elastic-job-lite是一款当当网开源的分布式任务调度demo,idea导入亲测可用
任务者 基于golang的分布式任务调度框架 基于Leader-Listener模式 使用redis作为存储和分配任务 支持任务失败自动重试
改分布式任务调度特性如下: 1、简单:支持通过Web页面对任务进行CRUD操作,操作简单,一分钟上手; 2、动态:支持动态修改任务状态、暂停/恢复任务,以及终止运行中任务,即时生效; 3、调度中心HA(中心式):调度...
earth-frost是一个轻量级分布式任务调度框架。调度模块和执行模块分离。使用redis作为数据库。基于订阅模式实现服务注册和发现
一个高可用的,专门针对定时任务的分布式任务调度框架-niubi-job
niubi-job, 一个高可用的,专门针对定时任务的分布式任务调度框架
分布式任务调度平台XXL-JOB
XXL-JOB是一个轻量级分布式任务调度框架,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
有了任务调度即可解放更多的人力由系统自动去执行任务,Elastic-job是当当网基于quartz 二次开发的弹性分布式任务调度系统,功能丰富强大,采用zookeeper实现分布式协调,实现任务高可用以及分片。2、课程价值本着从...
某电信运营商生产系统的实时处理系统分布式任务调度技术解决方案
这里分享自己已经跑起来的Oracle版本分布式任务调度平台XXL-JOB资源。 官方只有Mysql版本的DEMO,由于近期单位项目需要,将原来DEMO稍作修改后改成了oracle版本,主要修改工作包括修改配置文件,数据库连接方式,pom...
XXL-JOB,一个分布式任务调度框架。 介绍 XXL-JOB是一个分布式任务调度框架。 它的核心设计目标是快速发展,学习简单,轻巧且易于扩展的内容。 现在,它已经是开源的,许多公司在生产环境中使用它,真正的“开箱即...
灵活,可靠和快速的分布式任务重试和分布式任务调度平台。可重放,可管控、为提高分布式业务系统一致性的分布式任务重试平台。支持秒级、可中断、可编排的高性能分布式任务调度平台。EasyRetry是一款致力提高分布式...
ELasticJob分布式任务调度从基础到工作的实际开发中都可以用到的技术,但是技术是学不完的,需要在看完视频后多练习才能更好的成功
LTS分布式任务调度
schedule-job, 基于Spring Boot Quartz 的分布式任务调度系统
这个xmind文档,非常详细的从如何保证job运行的唯一性出发,到定时任务实现方式,传统定时job特征,到传统定时任务和分布式任务的区别,各方面都给出了具体的解释和解决方案,推荐下载。