欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

分布式任务调度框架—SkySchedule介绍(二)

程序员文章站 2022-07-13 16:47:18
...

概述

 

SkySchedule发布之后(详见《分布式任务调度框架--SkySchedule介绍》),已有部分用户在使用,收到一些反馈意见。比如iteye网友sxp2558发现的.properties配置文件使用了“user.name”作为key,会被系统变量“user.name”覆盖,实际取到的是主机名,目前该问题已经修复。

 

目前反馈最多的问题是SkySchedule没有管理界面,不方便查看当前的任务分配情况。今天抽时间写了一个简单的管理页面,由于前端技术水平有限,比较简陋。下面简单展示下,如果还不了解SkySchedule工作原理的朋友请移步上一篇介绍文章《分布式任务调度框架--SkySchedule介绍》

 

准备阶段

 

首先从githubhttps://github.com/gantianxing/skySchedule.git获取最新代码;

使用jdk1.8 +maven编译打包;

然后把SkySchedule服务端sky-server子工程对应的warsky-server-1.0-SNAPSHOT.war部署到tomcat8,启动程序;

 

访问服务端管理页面http://localhost:8080/,初始界面如下:


分布式任务调度框架—SkySchedule介绍(二)
            
    
    博客分类: netty SkySchedulenetty分布式任务调度 
 

 

由于还没有接入客户端,这里客户端列表为空。

 

添加一个客户端

 

这里还是以sky-test工程模拟客户端工程(实际工作中请在自己需要做分布式任务调度的工程里引入sky-client工程对应的客户端jar包:sky-client-1.0-SNAPSHOT.jar)

 

修改客户端配置文件SkySchedule-client.properties中的server.ip.portgroup.id对应的值:

server.ip.port为服务端nettyip和端口,ip为刚才启动的服务端对应的ip,端口默认为9991。如果有多个服务端实例,请以”,”间隔。

 

group.id可以理解为客户端分组,每个系统对应一个分组id,每个分组id下有多个客户端,分布式任务调度就是把一批任务平均分配给这些客户端执行,我这里配置的第一个group.id=1000,首先启动一个sky-test实例,刷新服务端管理页面http://localhost:8080/(每隔15秒自动刷新),页面内容如下:


分布式任务调度框架—SkySchedule介绍(二)
            
    
    博客分类: netty SkySchedulenetty分布式任务调度 
 

 

现在只有1个客户端节点,获取任务的sql语句为select * from xxx where id%1=0,改客户端将执行xxx任务表里所有的任务。这里客户端id是由客户端ip:uuid组成(192.168.21.1ip,数据uuid1590479018)。

 

添加多个客户端

 

现在再加一个group.id1000的客户端实例(在ip10.14.140.6的机器上启动一个tomcat实例),再次刷新服务端管理页面http://localhost:8080/,页面内容如下:


分布式任务调度框架—SkySchedule介绍(二)
            
    
    博客分类: netty SkySchedulenetty分布式任务调度 
 

 

现在有两个客户端节点,其中ip192.168.21.1客户端将执行任务表中id尾数为偶数的任务,ip10.14.140.6的客户端将执行任务表中id尾数为奇数的任务。

 

以此类推,如果再启动一个实例,任务表中任务将被分为3份分别由不同的客户端执行。如果任务多,添加更多个客户端实例即可,注意这些客户端实例的group.id要相同,才能执行同一个任务表中的任务。

 

减少客户端

 

由于业务量减少,任务表中的任务数相应的会减少,这时可能更少的客户端就可以满足业务需求。这时直接对部分客户端下线即可,SkySchedule会自动感知客户端个数的变化,对任务进行重新分配。

 

同样的场景还有某一个客户端突然出现故障down掉,这时SkySchedule会自动感知,并重新进行任务分配。如果这个客户端故障解除,客户端重启后,SkySchedule也会自动感知,再次对任务进行重新分配。

 

比如这里停止ip10.14.140.6的客户端,刷新服务端管理页面http://localhost:8080/,页面内容如下:


分布式任务调度框架—SkySchedule介绍(二)
            
    
    博客分类: netty SkySchedulenetty分布式任务调度 
 

 

这时所有的任务会分布到192.168.21.1(原理依然是id%1=0)

 

如果有多个系统、或者多个任务表要实现分布式调度怎么办呢,可以通过添加不同的group.id实现,如下:

 

 

添加多个客户端分组

 

假设现在有另外一个系统也需要接入“分布式任务调度”,可以把这个系统的配置文件SkySchedule-client.properties中的group.id配置为另一个值(不要和已有的重复)。

 

比如,这里测试还是用sky-test,只是把group.id设为2000,再次启动一个tomcat实例,刷新服务端管理页面http://localhost:8080/,页面内容如下:


分布式任务调度框架—SkySchedule介绍(二)
            
    
    博客分类: netty SkySchedulenetty分布式任务调度 

 

 

以此类推,可以接入更多的客户端系统,进行互不干涉的分布式任务调度。

 

最后

 

服务端的管理页面http://localhost:8080/每隔15秒自动刷新,获取最新的客户端列表。如果需要调整这个时间间隔,可以自行修改sky-server子工程中的hello.jsp中的相关代码:

//循环执行,每隔15秒钟执行一次check
window.setInterval(check, 15000);

 

关于SkySchedule管理页面的使用介绍就到次为止,如有问题、意见或者建议,欢迎留言交流,谢谢。

 

转载请注明出处:

http://moon-walker.iteye.com/blog/2391954

  • 分布式任务调度框架—SkySchedule介绍(二)
            
    
    博客分类: netty SkySchedulenetty分布式任务调度 
  • 大小: 7.8 KB
  • 分布式任务调度框架—SkySchedule介绍(二)
            
    
    博客分类: netty SkySchedulenetty分布式任务调度 
  • 大小: 17.5 KB
  • 分布式任务调度框架—SkySchedule介绍(二)
            
    
    博客分类: netty SkySchedulenetty分布式任务调度 
  • 大小: 23.5 KB
  • 分布式任务调度框架—SkySchedule介绍(二)
            
    
    博客分类: netty SkySchedulenetty分布式任务调度 
  • 大小: 11.4 KB
  • 分布式任务调度框架—SkySchedule介绍(二)
            
    
    博客分类: netty SkySchedulenetty分布式任务调度 
  • 大小: 34.3 KB