ElasticJob详解

1.ElasticJob的意义

         设想,现在有一批量很大的数据,要对这些数据进行逐条推送,普通的思路是同步将这些数据逐条推送,从第一条推送到第n条;进阶思路,起若干个线程,每个线程分别执行一部分数据的推送,比如有10个线程,则每个线程执行十分之一数据的推送;

           进阶思路的优点:异步并行,提高推送效率;

      进阶思路的缺点:如何对数据进行分块;异步线程中如果有一个或多个失效怎么办,这部分失效线程的推送任务如何保证正确推送;

          ElasticJob的实际就是基于上述进阶思路的一种保全措施;同样的,使用异步并行推送,并提出了任务分片机制和失效转移机制;

2.elasticjob的节点注册:

  使用基于ZK的节点机制,每个实例在启动的时候,会调用elasticjob框架内的注册方法去zk上注册一个节点;这与大部分中间件将zk作为路由管理工具相似;

  在代码中,需要对elasticjob的作业进行配置;elasticjob独享一份关于zk的配置,包括zk的地址和命名空间,命名空间就是当前作业的名字;一个作业独享一个命名空间,当实例需要使用elasticjob时,需要制定这个实例进行什么作业以及注册管理zk在哪个地址;所有进行同一个作业的实例均会在启动时,在对应作业节点下建立子节点:

  -作业名

  -服务1

  -服务2

  -服务3

  实例建立的节点为改实例中具体进行作业的类名;

  实例节点结构:

  -实例1

  -config

  -instance

  -sharding

  -servers

  -leader

  config节点存储的是配置文件的信息,以json串存储,包括当前作业的分片数,是否开启失效转移;

instance节点存储的是实例的信息,包括实例的ip和id;一个服务下可以有多个实例,比如同一个SERVICEA,我起3个实例,则instance下会有三个节点:

  -instance

  -ip1@id1

  -ip2@id2

  -ip3@id3

  instance节点下的子节点均为临时节点,当实例消失时消失,实例上线时注册;


  sharding节点存储的是作业的分片信息,分片信息下有对应分片数个子节点:

  -sharding

  -分片0

  -分片1

  -分片2

  在子节点下有节点instance,这个节点表示当前运行这个作业分片的服务:

  -分片0

  -instance(ip1@id1)

  服务通过抢锁来获取分片号,然后根据分片号来筛选作业进行操作;

  若当前分片正在被执行,则会有running节点;

servers节点存储的是执行作业的服务所处的服务器ip


  leader节点用户存储主节点的信息,包含election,sharding和failover三个子节点;

  election节点用于选主,包含子节点instance和latch(主节点ip@id,锁),

  sharding节点用于分片;

  failover节点用于失效转移,失效转移可在配置中配置是否开启,若未开启失效转移,则该节点不会注册;

 3.elasticJob的选主机制和分片机制:

  首先,elasticJob的主从关系,在执行作业上来讲,是完全没有区别的,主从节点唯一的区别在于,主节点需要对作业进行分片;

  分片动作:

  原生elasticJob除了支持配置定义分片数以外,还支持通过对zk的写来更改config内的内容以达到更改分片数的目的;

  主节点需要根据当前分片节点的内容来定义分片节点,其实现是通过监听zk特定目录,当分片数发生变化,作业不在被执行时对sharding节点下的分片节点进行一个实例的分配;

  实现步骤:

  1.获取可用实例节点;

  2.如果正在选主,则阻塞至选主结束;

  3.如果sharding节点下有runnig节点(正在执行作业),则等待作业结束;

  4.重置分片节点下的proccessing节点,这个节点标识正在进行分片;

  5.清除分片节点下的instance节点,这个节点标识这个分片被分配到哪个实例执行;

  6.根据实例id和分片id按算法进行匹配;

  7.删除分片节点下多余的实例节点(一个作业分片只能被分配到一个执行实例);

选主机制:

  所有实例在启动时在zk上注册自己节点并监听leader节点;

  所有实例依次获取latch锁并建立排序节点,并监听上一个节点的节点删除时间,这一过程是阻塞的(比如实例A的排序节点为2,实例B的排序节点为1,则A监听B的节点直到发生节点删除事件);

  若排序节点是最小,则判断leader节点下instance节点是否存在;

  若存在则说明已有未失效的主节点,删除latch下的排序节点,放弃该次选举,这个动作会触发一次节点删除事件;

  若不存在,则说明未失效的主节点不存在,成为主节点;

  发生节点删除事件之后,继续判断当前节点是否是最小的排序节点,并循环以上操作;

  4.elasticJob的失效转移机制

  首先,需要配置开启失效转移;

  在作业执行过程中,如果发生实例宕机,则其他实例会监听到实例删除时间;

  此时,在leader节点failover节点下会生产对应宕机实例的分片节点;

  所有正在执行同一个命名空间的作业的实例都可以来抢这个节点的锁,谁先抢到归谁,这个竞争流程类似于选主流程;

  若有多个分片下实例宕机,则每个存活实例,每次失效转移只能竞争一个分片的作业;

  失效转移的这一部分作业将在抢到这个分片的实例在完成当前作业后执行;

  具体实现:

  1.获取第一个失效的分片信息,并创建失效节点;

  2.直接抢锁,若抢到,将当前抢到的分片在sharding节点下对应的分片节点的instance改为自己的数据并生成failover节点,标识这个分片需要失效转移;

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

推荐阅读更多精彩内容