分布式任务调度(TBSchedule分析)

分布式任务调度框架,主要是为了协调多节点处理相同任务的避免数据被重复处理的框架,处理方式主要分为“抢占式”和“协同分配式”,通过集群的节点分担大批量任务的处理,提高批量任务的处理效率。

不同处理方式的任务的侧重点不同:

“抢占式”:没法把单个任务的数据,让其它节点协同处理,所以一般来说抢占式任务处理方式一般用于处理数据量比较小,任务比较多的场景;

“协同分配式”:处理可以把单个任务处理的数据均分到多个jvm中进行处理的,提高数据的并行处理能力。

常用解决方案:

“抢占式”:Quartz集群

Quartz主要以job为单位,默认的job存储使用RAMJobStore作为此存储一旦,此种job存储方式,当把job加载到内存中当jvm挂掉或者容器关闭所有存储的job也随之消失,此种方式依赖单个jvm,存在单点,扩展差,容错差等问题,所以Quartz集群一般使用JobStoreTX通过jdbc把job存储在数据库中。Quartz集群通过访问数据库,以抢占的方式,由唯一节点获取到需要执行job,完成job执行。

“协同分配式”:TBSchedule

tbschedule的目的是让一种批量任务或者不断变化的任务,能够被动态的分配到多个主机的JVM中,不同的线程组中并行执行。所有的任务能够被不重复,不遗漏的快速处理。这种框架item的分配实现了数据的不重复,又通过架构中lead的选择,存活的自我保证,完成了可用性和伸缩性的保障。

使用TBSchedule的经验分享

1、了解TBSchedule的主要结构

TBScheduleManager:

管理一组处理线程,是任务分配中作为一个分配单元存在,在不同的JVM中可以存在处理相同处理任务的Manager。

向注册中心更新服务状态,通过心跳的方式。向注册中心获取所有服务的状态重新计算分配任务,避免单点。没批次任务执行完成后重新获取执行任务的范围。

ScheduleTaskType

任务类型,任务心跳频率,一次任务执行完后的休眠时间,执行线程数等,任务相关的信息

ScheduleStrategy

任务的调度策略,指定要执行此任务的节点数,执行任务的节点ip列表

ITScheduleProcessor

在TBScheduleManager的管理下实现消费线程的多线程协同处理

ITScheduleTaskDeal

任务处理的最小单元包括任务的查询和处理,由ITScheduleProcessor调用线程组空闲的一个线程方法selectTasks获取到需要消费的任务列表。然后所有线程根据领用消费方式处理列表中任务。

2、TBSchedule启动流程,以及在中心的注册数据


3、TBSchedule正常使用

可以通过http://code.taobao.org/p/tbschedule/src/官方给出的代码查看

4、TBSchedule扩展开发

tbSchedule除了作为分布式任务架构解决动态的批量任务的分布式执行,同时可以通过一定的修改取代crontab等定时任务工具,达到定时任务的执行的高可用性和不重复性,从而加强小任务的执行效率,和可用性扩大整个框架的适用范围。

此处就是关于自己的一些修改经验,同时可以根据需要重写部分代码,完成针对不同数据源,不同分组的任务。

扩展1:相同任务规则,部分属性不同

1、从之前的启动流程可以看出,一个处理单元主要由分配策略(ScheduleStrategy

),任务类型(ScheduleTaskType)组成,以及处理单元(ITScheduleTaskDeal),

长期使用来看,大多数配置都是重复的,所以首先想到的是做一个抽象的处理单元,包括功能的分配策略和任务类型再在此基础上进行个性设置。

所以创建类:

2、在配置中进行通用的配置


3、并在后续具体配置中实现个性化


如何在不同的数据源或者分组中使用相同的处理逻辑,例如多地点部署,统一汇总报表的仓储系统。

因为处理的任务基本相同只有部分属性不同,如果正常需要配置大量的task不便于管理。所以在原有的代码的基础上通过cglib重写任务类,重新在调度中心注册任务。

工作中每天统计工作kpi等效率报表等用到过:

1)根据上面自定扩展的方式定义了多个执行任务


2)具体任务类定义(获取需要处理的任务列表,执行单个任务)


扩展2:分布式定时任务

详细了解tb流程后知道ITScheduleTaskDeal作为最小处理单元,在processor中获取任务列表时只有一个 ITScheduleTaskDeal被调用。符合不重复调用的要求,并且拥有框架数据分片的特性,所以可以作为定时任务的执行单元加以利用。

因此进行了如下改造:


实际应用:每十秒去缓存中得到最新的位置信息,比对后发送相应通知。


本文作者:刘凯毅(点融黑帮),就职于点融成都团队,workflow/crc team,主要从事j2ee方向的开发工作,对代码优化,和分布式的一些处理方案有了一定的了解。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,246评论 11 349
  • ** 版本:2.2.1 ** Hello world: 调度器: 任务详情:任务体实现Job接口 触发器: 执行调...
    Coselding阅读 10,159评论 12 38
  • Tags:定时作业调度 分布式定时任务调度 Quartz TBSchedule Elastic-job 基于给定...
    killpekka阅读 5,793评论 1 17
  • 本文作为近三个月来产品突击的小结,和大家分享做法。 在新入职这家公司三个月内,设计构思了六款产品,虽然并非体量特别...
    liouu阅读 457评论 0 5
  • 鸡蛋,从外打破是食物,从内打破是生命。人生亦是,从外打破是压力,从内打破是成长。如果你等待别八打破你,那么你注定成...
    6115ed4405eb阅读 221评论 0 0