分布式任务调度实现方式

背景

  分布式任务调度是非常常见的一种应用场景,一般对可用性和性能要求不高的任务,采用单点即可,例如linux的crontab,spring的quarz,但是如果要求部署多个节点,达到高可用的效果,上面的方案就不适用了。

实际上任务调度的实现有两种情况,第一种是通过mq来实现,mq做好了数据切分,负载均衡的效果,本文说的是另一种情况。

要求

  一、不重复

如果只达到这个要求,有很多方法,假设任务处理的是一张表中的数据,那可以根据某个字段取模达到不重复的效果。

二、不遗漏

如果用上面的方案解决了重复的问题,有一个节点挂掉,需要其他节点接管挂掉节点的任务,这就要求分布式任务调度必须有指挥中心,否则很容易造成重复或者遗漏。

tbschedule

  上图是tbschedule的架构图,基本满足了分布式任务调度的要求,zookeeper有两个功能,一个是配置数据存储,另一个是作为调度中心,管理界面直接连接zookeeper取得配置信息,并且修改配置,通过zookeeper通知任务修改配置项。

要求不高的话可以直接拿来用,虽然文档少,但是代码量很少,可以直接通过读代码了解功能。

tbschedule已经满足了大多数需求,代码写的也非常优秀,但是有几个地方是可以改进的,

1、前面提到的,一般情况下,我们是不需要多个节点同时工作的,只要有一个节点工作,挂掉其他节点能接替就可以了。因为取数据通常不是性能瓶颈,瓶颈在处理数据,多个节点的目的无非是为了高可用。如果通过sql取模进行分片,sql的性能非常低,走不了索引。如果表数据已经做了水平拆分,那可以直接根据数据源切分任务项。

2、tbschedule是把所有任务都处理完才算结束,但是有些场景要求只执行一次,哪怕还有任务要处理,tbschedule需要增加一个配置项;

3、执行时间修改必须在每个执行周期后才能生效,这个经常在调试的时候出现麻烦,这样做确实是最简单的做法,避免了很多问题,但是如果开发人员要配置任务每分钟执行一次,结果写错了配置成每天执行一次,就完美的落入陷阱,等半天也看不到执行,还以为配置错了,重启可以解决;

4、没有负载均衡效果,tbschedule认为每台机器的配置都是一样的,就算配置一样,数据项不一样也容易引起其中一个节点压力特别大。需要根据机器的负载情况、程序的繁忙情况做一个加权平均来做负载。

更多精彩内容,请关注本人公众号

时间: 2024-07-31 13:14:18

分布式任务调度实现方式的相关文章

分布式任务调度框架xxl-job

github地址:https://github.com/xuxueli/xxl-job git.osc地址:http://git.oschina.net/xuxueli0323/xxl-job 博客地址(内附使用教程):http://www.cnblogs.com/xuxueli/p/4845111.html [最迅速的熟悉该项目的方式:执行Job库初始化SQL:Eclipse中导入xxl-job-admin项目,启动项目访问:即可:] 一.简介:<分布式任务调度框架xxl-job> 基于qu

新一代分布式任务调度框架:当当elastic-job开源项目的10项特性

作者简介: 张亮,当当网架构师.当当技术委员会成员.消息中间件组负责人.对架构设计.分布式.优雅代码等领域兴趣浓厚.目前主导当当应用框架ddframe研发,并负责推广及撰写技术白皮书. 一.为什么需要作业(定时任务)? 作业即定时任务.一般来说,系统可使用消息传递代替部分使用作业的场景.两者确有相似之处.可互相替换的场景,如队列表.将待处理的数据放入队列表,然后使用频率极短的定时任务拉取队列表的数据并处理.这种情况使用消息中间件的推送模式可更好的处理实时性数据.而且基于数据库的消息存储吞吐量远远

clover分布式任务调度系统

1.clover分布式调度介绍 clover分布式任务调度是完全使用Java技术自主开发 特点如下: 1.防单点故障 2.job可部署多台,但任务调度时,只有一台参执行.如果一台下线, clover选择其他已在zookeeper注册job来执行. 3.可管理监控程序 ,相关负责人的job不可用会发送邮件通知 4.提供管理后台,可手动停止任务,设置任务执行频率.恢复策 略.人工干预指定哪些job来工作,可查看任务执行进度.任务执行失败时会收到报警并记录日志. 5.执行中的任务,但未执行完成,不会再

分布式任务调度平台SIA-TASK的架构设计与运行流程

一.分布式任务调度的背景 无论是互联网应用或者企业级应用,都充斥着大量的批处理任务.我们常常需要一些任务调度系统来帮助解决问题.随着微服务化架构的逐步演进,单体架构逐渐演变为分布式.微服务架构.在此背景下,很多原先的任务调度平台已经不能满足业务系统的需求,于是出现了一些基于分布式的任务调度平台. 1.1 分布式任务调度的演进 在实际业务开发过程中,很多时候我们无可避免地需要使用一些定时任务来解决问题.通常我们会有多种解决方案:使用 Crontab 或 SpringCron (当然这种情况可能机器

宜信开源|分布式任务调度平台SIA-TASK的架构设计与运行流程

一.分布式任务调度的背景 无论是互联网应用或者企业级应用,都充斥着大量的批处理任务.我们常常需要一些任务调度系统来帮助解决问题.随着微服务化架构的逐步演进,单体架构逐渐演变为分布式.微服务架构.在此背景下,很多原先的任务调度平台已经不能满足业务系统的需求,于是出现了一些基于分布式的任务调度平台. 1.1 分布式任务调度的演进 在实际业务开发过程中,很多时候我们无可避免地需要使用一些定时任务来解决问题.通常我们会有多种解决方案:使用 Crontab 或 SpringCron (当然这种情况可能机器

分布式任务调度平台XXL-JOB

为获得更好的阅读体验,请访问原文:传送门 一.分布式任务调度概述 什么是任务调度平台 任务调度是指基于给定的时间点,给定的时间间隔又或者给定执行次数自动的执行任务.我们可以思考一下在以下场景中,我们应该怎么实现: 支付系统每天凌晨 1 点,进行一天清算,每月 1 号进行上个月清算: 电商整点抢购,商品价格8点整开始优惠 12306 购票系统,超过 30 分钟没有成功支付订单的,进行回收处理 为什么需要任务调度平台 定时任务是程序员不可避免的话题,很多业务场景需要我们某一特定的时刻去做某件任务.一

分布式任务调度的解决方案

简介 随着系统规模的发展,定时任务数量日益增多,任务也变得越来越复杂,尤其是在分布式环境下,存在多个业务系统,每个业务系统都有定时任务的需求,如果都在自身系统中调度,一方面增加业务系统的复杂度,另一方面也不方便管理,因此需要有一个任务平台对分散的任务进行统一管理调度,基于目前的情况,任务平台需要支持以下几个方面: 1.任务统一管理,提供图形化界面对任务进行配置和调度. 2.任务并发控制,同一个任务在同一时间只能允许一个执行. 3.任务弹性扩容,可根据繁忙情况动态增减服务器分摊压力,对大任务进行分

分布式任务调度平台XXL-JOB搭建

分布式任务调度平台XXL-JOB,作者许雪里1.源码下载地址①.GitHub:https://github.com/xuxueli/xxl-job②.码云:https://gitee.com/xuxueli0323/xxl-job 2.文档地址①.中文文档:http://www.xuxueli.com/xxl-job/#/②.英文文档:http://www.xuxueli.com/xxl-job/en/#/ 3.源码结构通过上面给出的源码下载地址,我们将源码clone到IDEA中,如下:tabl

Gleasy的分布式任务调度中间件CloudJob | Gleasy团队博客

Gleasy的分布式任务调度中间件CloudJob | Gleasy团队博客