中心化-去中心化调度设计

在综合解读xxl-job和elastic-Job的源码,记录一下自己的一些体会。


中心化/去中心化.jpg

xxl-job是中心化设计,在xxl-job中,所有定时任务的执行是在调度中心执行,调度中心判断作业到了执行的时间,然后通知业务系统去执行,也就是说,作业与业务系统没有直接关系,相当于业务系统接收到调度中心请求,然后处理自己的业务。


中心化例子.jpg

中心化设计举例,假如我们开发一个系统(xx宝项目),这个项目有一个系统owner,这个系统owner负责好几个项目,xx宝项目只是其中一个,在xx宝项目中,又有三个开发,开发A,开发B,开发C负责开发任务,当有需求要开发的时候,开发ABC三个人是不会知道自己要做什么的,这个时候,真正知道需求的人是系统owner,系统owner接收到需求,会告诉开发ABC其中一个,让开发ABC某一个人去做,开发ABC分别负责一个需求,然后分别去做自己的功能,开发ABC之间是不知道自己要做什么的,需求任务的拆分是由系统owner去统一管理的。开发ABC三个人,每个人能力是不一样的,有的人能力强,做事快,接收到需求能够很快做完,有的能力差一点,做事慢,当有任务要求高,或者任务量比较大的时候,交给一个开发(假设开发A)去做这件事情,可能会花更多的时间去处理这件事情,在这个时候,其他开发(开发B,开发C)一直出于没事做的状态,这个时候,系统owner会想,要不要把这个任务分成多份,三个开发分别负责一部分,能力强的多分几份任务。
xxl-job架构图.jpg

将这个例子的系统owner改为调度中心,将三个开发看作是三个执行器。
首先,系统开发、运维会在调度中心配置调度任务(架构师告诉系统owner要做哪些需求),业务系统在启动的时候,会通过注册线程往注册中心注册,这个时候,调度中心就会知道执行器要监听哪几个任务,(新增了一个开发,首先向系统owner报道,系统owner下次分配开发需求就会告诉开发),然后调度中心在作业到时间该执行的时候,通过RPC或者http请求通知其中一个业务系统去执行job任务(系统owner会告诉某个开发做哪个需求),等作业执行完成之后,会将任务完成状态和任务日志通过http请求或者是rpc方式回传给调度中心(开发将需求开发完成,会告诉系统owner完成情况和文档产出交付给系统owner)。当调度系统发现任务过多时,会将一个任务分成好几份任务,然后通知多个执行器各自执行一部分,也就是任务分片功能(系统owner将一个大任务拆分为几个小任务),然后各自执行一部分任务(多个开发完成一个需求任务的一部分)。


去中心化设计举例.jpg

去中心化举例,还是开发XX宝项目,这个时候没有系统owner了,这个时候,有一个需求到了,三个开发ABC都知道这个需求任务,那么谁来做??
开发A说:我刚来,不适合。
开发B说:以前都是我做的,要不开发C来。
开发C说:这个活我没做过,你们两来。
这个时候,尴尬了,没人干活了。怎么办呢,大家都不干活。
领导一看,不行啊,没人干活了,三个人得选一个临时领导,来负责分配一下以后的需求任务,活要人干啊。然后就将开发ABC三个人召集在一起,说,这个活要有人干,你们三个选一个临时负责人吧,负责分一下任务。
然后三个开发一合计,要不猜拳定临时负责人,然后分配任务。

再然后,三个开发就选了一个临时负责人(开发X)来分配工作。
开发X然后说,就一个需求需求来吧,第一个任务A来做,第二个任务B来做,第三个任务C来做,以此类推。
就这样做了两个月,没矛盾,这个时候,突然来了一个大的需求,一个人开发需要很久,然后临时负责人(开发X)会根据任务的大小,分配给这几个开发,然后分配做这件事情。

elasticJob设计.jpg

看elasticJob架构设计图中,在elastic-job-Lite中,作业随着业务系统的启动而启动,在启动的时候,首先会往注册中心zookeeper注册作业(有点像入职员工需要入职报道一样),在作业要执行的时候,各自执行(APP1,app2)都开始执行,发现一个任务两个app不知道哪个系统执行(几个开发不知道哪一个做这个任务),会选举出一个主节点,(几个开发选一个负责人),主节点负责分配任务,将任务分片(开发负责人会将需求任务分解),在主节点分配任务的时候,其他从节点等待(在开发负责人负责拆解任务的时候,其他开发等着分配工作给自己),等到主节点任务分配完成,各节点(app1,app2)各自执行自己的作业,然后执行结束之后,判断有没有其他失败的作业需要执行(其他开发任务不会做),如果有,则将失败的作业再执行一次,没有结束(有没有其他开发需要帮忙的,有的话就帮忙,没有就结束),然后将作业的执行日志写到文件里,将作业的执行状态记录推送Event事件推送出去。
fyi

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

推荐阅读更多精彩内容