elasticJob 源碼解析之自診斷恢復

什么叫做自診斷恢復蝗碎?善绎?
在分布式的場景下由于網(wǎng)絡、時鐘等原因捎谨,可能導致 Zookeeper 的數(shù)據(jù)與真實運行的作業(yè)產(chǎn)生不一致民效,這種不一致通過正向的校驗無法完全避免隘击。需要另外啟動一個線程定時校驗注冊中心數(shù)據(jù)與真實作業(yè)狀態(tài)的一致性,即維持 Elastic-Job 的最終一致性研铆。

public final class ReconcileService extends AbstractScheduledService

AbstractScheduledService是什么埋同??這里是guava實現(xiàn)的接口棵红⌒琢蓿看該接口的描述:
? AbstractScheduledService類用于在運行時處理一些周期性的任務。子類可以實現(xiàn) runOneIteration()方法定義一個周期執(zhí)行的任務逆甜,以及相應的startUp()和shutDown()方法虱肄。為了能夠描述執(zhí)行周期,你需要實現(xiàn)scheduler()方法交煞。通常情況下咏窿,你可以使用AbstractScheduledService.Scheduler類提供的兩種調(diào)度器:newFixedRateSchedule(initialDelay, delay, TimeUnit) 和newFixedDelaySchedule(initialDelay, delay, TimeUnit)。

懂了素征,就是一個周期性任務集嵌。接著往下看。

@Override
protected void runOneIteration() throws Exception {
  LiteJobConfiguration config = configService.load(true);
  int reconcileIntervalMinutes = null == config ? -1 : config.getReconcileIntervalMinutes();
  if (reconcileIntervalMinutes > 0 && (System.currentTimeMillis() - lastReconcileTime >= reconcileIntervalMinutes * 60 * 1000)) {
    lastReconcileTime = System.currentTimeMillis();
    if (leaderService.isLeaderUntilBlock() && !shardingService.isNeedSharding() && shardingService.hasShardingInfoInOfflineServers()) {
      log.warn("Elastic Job: job status node has inconsistent value,start reconciling...");
      shardingService.setReshardingFlag();
    }
  }
}

@Override
protected Scheduler scheduler() {
  return Scheduler.newFixedDelaySchedule(0, 1, TimeUnit.MINUTES);
}

在runOneIteration中獲取配置項reconcile-interval-minutes,默認十分鐘,當有主節(jié)點御毅,且不需要分片根欧,且分片項中有下線的機器的時候,需要重設分片標記端蛆,在下次執(zhí)行的時候重新分片凤粗。

/**
     * 查詢是包含有分片節(jié)點的不在線服務器.
     * 
     * @return 是包含有分片節(jié)點的不在線服務器
     */
public boolean hasShardingInfoInOfflineServers() {
  List<String> onlineInstances = jobNodeStorage.getJobNodeChildrenKeys(InstanceNode.ROOT);
  int shardingTotalCount = configService.load(true).getTypeConfig().getCoreConfig().getShardingTotalCount();
  for (int i = 0; i < shardingTotalCount; i++) {
    //如果上線的機器列表中沒有分片參數(shù)的節(jié)點,則返回true今豆,需要重新分片嫌拣。
    if (!onlineInstances.contains(jobNodeStorage.getJobNodeData(ShardingNode.getInstanceNode(i)))) {
      return true;
    }
  }
  return false;
}

fyi 這章比較水。呆躲。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末异逐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子歼秽,更是在濱河造成了極大的恐慌应役,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件燥筷,死亡現(xiàn)場離奇詭異箩祥,居然都是意外死亡,警方通過查閱死者的電腦和手機肆氓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門袍祖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人谢揪,你說我怎么就攤上這事蕉陋【杵荆” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵凳鬓,是天一觀的道長茁肠。 經(jīng)常有香客問我,道長缩举,這世上最難降的妖魔是什么垦梆? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮仅孩,結(jié)果婚禮上托猩,老公的妹妹穿的比我還像新娘。我一直安慰自己辽慕,他們只是感情好京腥,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著溅蛉,像睡著了一般公浪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上温艇,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天因悲,我揣著相機與錄音,去河邊找鬼勺爱。 笑死,一個胖子當著我的面吹牛讯检,可吹牛的內(nèi)容都是我干的琐鲁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼人灼,長吁一口氣:“原來是場噩夢啊……” “哼围段!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起投放,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤奈泪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后灸芳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涝桅,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年烙样,在試婚紗的時候發(fā)現(xiàn)自己被綠了冯遂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡谒获,死狀恐怖蛤肌,靈堂內(nèi)的尸體忽然破棺而出壁却,到底是詐尸還是另有隱情,我是刑警寧澤裸准,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布展东,位于F島的核電站,受9級特大地震影響炒俱,放射性物質(zhì)發(fā)生泄漏盐肃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一向胡、第九天 我趴在偏房一處隱蔽的房頂上張望恼蓬。 院中可真熱鬧,春花似錦僵芹、人聲如沸处硬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽荷辕。三九已至,卻和暖如春件豌,著一層夾襖步出監(jiān)牢的瞬間疮方,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工茧彤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留骡显,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓曾掂,卻偏偏與公主長得像惫谤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子珠洗,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理溜歪,服務發(fā)現(xiàn),斷路器许蓖,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 作者:徐佳文為原創(chuàng)文章蝴猪,轉(zhuǎn)載請注明作者及出處 在介紹Juice之前,我想先聊一聊Mesos膊爪,Mesos被稱為2層調(diào)...
    滬江技術(shù)學院閱讀 1,483評論 0 5
  • 《分布式任務調(diào)度平臺XXL-JOB》 一自阱、簡介 1.1 概述 XXL-JOB是一個輕量級分布式任務調(diào)度框架,其核心...
    許雪里閱讀 16,791評論 3 29
  • N 中等算不上蚁飒,偏下吧动壤,角度不同噢。聯(lián)系車的時候淮逻,司機說琼懊,他要帶個朋友阁簸,并不是幫咱們湊個伙伴,而且從一開始哼丈,她就表...
    殘劍閱讀 354評論 0 1
  • 原文 https://www.raywenderlich.com/148448/introducing-proto...
    清無閱讀 265評論 0 0