1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        分布式定時(shí)任務(wù)框架選型,寫得太好了!

        共 4965字,需瀏覽 10分鐘

         ·

        2021-11-14 01:04

        相關(guān)閱讀

        300本計(jì)算機(jī)編程的經(jīng)典書籍下載

        AI全套:Python3+TensorFlow打造人臉識別智能小程序

        最新人工智能資料-Google工程師親授 Tensorflow-入門到進(jìn)階

        Java架構(gòu)全階段七期完整

        黑馬頭條項(xiàng)目 - Java Springboot2.0(視頻、資料、代碼和講義)14天完整版

        Spring核心編程思想


        作者:[email protected]
        來源:expectfly.com/分布式定時(shí)任務(wù)方案技術(shù)選型/

        1. 前言

        我們先思考下面幾個(gè)業(yè)務(wù)場景的解決方案:

        類似的業(yè)務(wù)場景非常多,我們怎么解決?

        很多業(yè)務(wù)場景需要我們某一特定的時(shí)刻去做某件任務(wù),定時(shí)任務(wù)解決的就是這種業(yè)務(wù)場景。一般來說,系統(tǒng)可以使用消息傳遞代替部分定時(shí)任務(wù),兩者有很多相似之處,可以相互替換場景。

        如,上面發(fā)貨成功發(fā)短信通知客戶的業(yè)務(wù)場景,我們可以在發(fā)貨成功后發(fā)送MQ消息到隊(duì)列,然后去消費(fèi)mq消息,發(fā)送短信。

        但在某些場景下不能互換:

        時(shí)間驅(qū)動(dòng)/事件驅(qū)動(dòng):內(nèi)部系統(tǒng)一般可以通過時(shí)間來驅(qū)動(dòng),但涉及到外部系統(tǒng),則只能使用時(shí)間驅(qū)動(dòng)。如怕取外部網(wǎng)站價(jià)格,每小時(shí)爬一次

        批量處理/逐條處理:批量處理堆積的數(shù)據(jù)更加高效,在不需要實(shí)時(shí)性的情況下比消息中間件更有優(yōu)勢。而且有的業(yè)務(wù)邏輯只能批量處理。如移動(dòng)每個(gè)月結(jié)算我們的話費(fèi)

        實(shí)時(shí)性/非實(shí)時(shí)性:消息中間件能夠做到實(shí)時(shí)處理數(shù)據(jù),但是有些情況下并不需要實(shí)時(shí),比如:vip升級

        系統(tǒng)內(nèi)部/系統(tǒng)解耦:定時(shí)任務(wù)調(diào)度一般是在系統(tǒng)內(nèi)部,而消息中間件可用于兩個(gè)系統(tǒng)間

        2. 定時(shí)任務(wù)框架

        單機(jī)

        分布式

        • Quartz:Java事實(shí)上的定時(shí)任務(wù)標(biāo)準(zhǔn)。但Quartz關(guān)注點(diǎn)在于定時(shí)任務(wù)而非數(shù)據(jù),并無一套根據(jù)數(shù)據(jù)處理而定制化的流程。雖然Quartz可以基于數(shù)據(jù)庫實(shí)現(xiàn)作業(yè)的高可用,但缺少分布式并行調(diào)度的功能

        • TBSchedule:阿里早期開源的分布式任務(wù)調(diào)度系統(tǒng)。代碼略陳舊,使用timer而非線程池執(zhí)行任務(wù)調(diào)度。眾所周知,timer在處理異常狀況時(shí)是有缺陷的。而且TBSchedule作業(yè)類型較為單一,只能是獲取/處理數(shù)據(jù)一種模式。還有就是文檔缺失比較嚴(yán)重

        • elastic-job:當(dāng)當(dāng)開發(fā)的彈性分布式任務(wù)調(diào)度系統(tǒng),功能豐富強(qiáng)大,采用zookeeper實(shí)現(xiàn)分布式協(xié)調(diào),實(shí)現(xiàn)任務(wù)高可用以及分片,目前是版本2.15,并且可以支持云開發(fā),這個(gè)我寫了系列教程了,在互聯(lián)網(wǎng)架構(gòu)師公從號可以搜索閱讀。

        • Saturn:是唯品會(huì)自主研發(fā)的分布式的定時(shí)任務(wù)的調(diào)度平臺,基于當(dāng)當(dāng)?shù)膃lastic-job 版本1開發(fā),并且可以很好的部署到docker容器上。

        • xxl-job是大眾點(diǎn)評員工徐雪里于2015年發(fā)布的分布式任務(wù)調(diào)度平臺,是一個(gè)輕量級分布式任務(wù)調(diào)度框架,其核心設(shè)計(jì)目標(biāo)是開發(fā)迅速、學(xué)習(xí)簡單、輕量級、易擴(kuò)展。

        3. 分布式任務(wù)調(diào)度系統(tǒng)對比

        參與對比的可選系統(tǒng)方案:elastic——job (以下簡稱E-Job)與 xxx-job(以下簡稱X-Job)

        項(xiàng)目背景及社區(qū)力量

        X-Job:
        大眾點(diǎn)評公司下員工許雪里、貢獻(xiàn)者 3人; 
        github有2470star、1015fork; 

        QQ討論群6個(gè); 
        有登記在使用的超過40家公司;

        文檔齊全

        E-Job:
        當(dāng)當(dāng)網(wǎng)開源,貢獻(xiàn)者17人; 
        github有2524star、1015fork; 
        QQ討論群1個(gè)、源碼討論群1個(gè);

        有登記在使用的超過50家公司;
        文檔齊全; 
        有明確的發(fā)展計(jì)劃

        支持集群部署

        X-Job:集群部署唯一要求為:保證每個(gè)集群節(jié)點(diǎn)配置(db和登陸賬號等)保持一致。調(diào)度中心通過db配置區(qū)分不同集群。

        執(zhí)行器支持集群部署,提升調(diào)度系統(tǒng)可用性,同時(shí)提升任務(wù)處理能力。
        集群部署唯一要求為:保證集群中每個(gè)執(zhí)行器的配置項(xiàng) xxl.job.admin.addresses/調(diào)度中心地址”保持一致,執(zhí)行器根據(jù)該配置進(jìn)行執(zhí)行器自動(dòng)注冊等操作。

        E-Job:重寫Quartz基于數(shù)據(jù)庫的分布式功能,改用Zookeeper實(shí)現(xiàn)注冊中心

        作業(yè)注冊中心:基于Zookeeper和其客戶端Curator實(shí)現(xiàn)的全局作業(yè)注冊控制中心。用于注冊,控制和協(xié)調(diào)分布式作業(yè)執(zhí)行。

        多節(jié)點(diǎn)部署時(shí)任務(wù)不能重復(fù)執(zhí)行

        X-Job:使用Quartz基于數(shù)據(jù)庫的分布式功能

        E-Job:將任務(wù)拆分為n個(gè)任務(wù)項(xiàng)后,各個(gè)服務(wù)器分別執(zhí)行各自分配到的任務(wù)項(xiàng)。一旦有新的服務(wù)器加入集群,或現(xiàn)有服務(wù)器下線,elastic-job將在保留本次任務(wù)執(zhí)行不變的情況下,下次任務(wù)開始前觸發(fā)任務(wù)重分片。

        日志可追溯

        X-Job:支持,有日志查詢界面

        E-Job:可通過事件訂閱的方式處理調(diào)度過程的重要事件,用于查詢、統(tǒng)計(jì)和監(jiān)控。Elastic-Job目前提供了基于關(guān)系型數(shù)據(jù)庫兩種事件訂閱方式記錄事件。

        監(jiān)控告警

        X-Job:調(diào)度失敗時(shí),將會(huì)觸發(fā)失敗報(bào)警,如發(fā)送報(bào)警郵件。

        任務(wù)調(diào)度失敗時(shí)郵件通知的郵箱地址,支持配置多郵箱地址,配置多個(gè)郵箱地址時(shí)用逗號分隔

        E-Job:通過事件訂閱方式可自行實(shí)現(xiàn)

        作業(yè)運(yùn)行狀態(tài)監(jiān)控、監(jiān)聽作業(yè)服務(wù)器存活、監(jiān)聽近期數(shù)據(jù)處理成功、數(shù)據(jù)流類型作業(yè)(可通過監(jiān)聽近期數(shù)據(jù)處理成功數(shù)判斷作業(yè)流量是否正常,如果小于作業(yè)正常處理的閥值,可選擇報(bào)警。)、監(jiān)聽近期數(shù)據(jù)處理失敗(可通過監(jiān)聽近期數(shù)據(jù)處理失敗數(shù)判斷作業(yè)處理結(jié)果,如果大于0,可選擇報(bào)警。)

        彈性擴(kuò)容縮容

        X-Job:使用Quartz基于數(shù)據(jù)庫的分布式功能,服務(wù)器超出一定數(shù)量會(huì)給數(shù)據(jù)庫造成一定的壓力

        搜索公眾號互聯(lián)網(wǎng)架構(gòu)師后臺回復(fù)“2T”,獲取一份驚喜禮包。

        E-Job:通過zk實(shí)現(xiàn)各服務(wù)的注冊、控制及協(xié)調(diào)

        支持并行調(diào)度

        X-Job:調(diào)度系統(tǒng)多線程(默認(rèn)10個(gè)線程)觸發(fā)調(diào)度運(yùn)行,確保調(diào)度精確執(zhí)行,不被堵塞。

        E-Job:采用任務(wù)分片方式實(shí)現(xiàn)。將一個(gè)任務(wù)拆分為n個(gè)獨(dú)立的任務(wù)項(xiàng),由分布式的服務(wù)器并行執(zhí)行各自分配到的分片項(xiàng)。

        高可用策略

        X-Job:“調(diào)度中心”通過DB鎖保證集群分布式調(diào)度的一致性, 一次任務(wù)調(diào)度只會(huì)觸發(fā)一次執(zhí)行;

        E-Job:調(diào)度器的高可用是通過運(yùn)行幾個(gè)指向同一個(gè)ZooKeeper集群的Elastic-Job-Cloud-Scheduler實(shí)例來實(shí)現(xiàn)的。ZooKeeper用于在當(dāng)前主Elastic-Job-Cloud-Scheduler實(shí)例失敗的情況下執(zhí)行領(lǐng)導(dǎo)者選舉。通過至少兩個(gè)調(diào)度器實(shí)例來構(gòu)成集群,集群中只有一個(gè)調(diào)度器實(shí)例提供服務(wù),其他實(shí)例處于”待命”狀態(tài)。當(dāng)該實(shí)例失敗時(shí),集群會(huì)選舉剩余實(shí)例中的一個(gè)來繼續(xù)提供服務(wù)。

        失敗處理策略

        X-Job:調(diào)度失敗時(shí)的處理策略,策略包括:失敗告警(默認(rèn))、失敗重試;

        E-Job:彈性擴(kuò)容縮容在下次作業(yè)運(yùn)行前重分片,但本次作業(yè)執(zhí)行的過程中,下線的服務(wù)器所分配的作業(yè)將不會(huì)重新被分配。失效轉(zhuǎn)移功能可以在本次作業(yè)運(yùn)行中用空閑服務(wù)器抓取孤兒作業(yè)分片執(zhí)行。同樣失效轉(zhuǎn)移功能也會(huì)犧牲部分性能。

        動(dòng)態(tài)分片策略

        X-Job:分片廣播任務(wù)以執(zhí)行器為維度進(jìn)行分片,支持動(dòng)態(tài)擴(kuò)容執(zhí)行器集群從而動(dòng)態(tài)增加分片數(shù)量,協(xié)同進(jìn)行業(yè)務(wù)處理;在進(jìn)行大數(shù)據(jù)量業(yè)務(wù)操作時(shí)可顯著提升任務(wù)處理能力和速度。

        執(zhí)行器集群部署時(shí),任務(wù)路由策略選擇”分片廣播”情況下,一次任務(wù)調(diào)度將會(huì)廣播觸發(fā)對應(yīng)集群中所有執(zhí)行器執(zhí)行一次任務(wù),同時(shí)傳遞分片參數(shù);可根據(jù)分片參數(shù)開發(fā)分片任務(wù);

        E-Job:支持多種分片策略,可自定義分片策略

        默認(rèn)包含三種分片策略:基于平均分配算法的分片策略、 作業(yè)名的哈希值奇偶數(shù)決定IP升降序算法的分片策略、根據(jù)作業(yè)名的哈希值對Job實(shí)例列表進(jìn)行輪轉(zhuǎn)的分片策略,支持自定義分片策略

        elastic-job的分片是通過zookeeper來實(shí)現(xiàn)的。分片的分片由主節(jié)點(diǎn)分配,如下三種情況都會(huì)觸發(fā)主節(jié)點(diǎn)上的分片算法執(zhí)行:a、新的Job實(shí)例加入集群 b、現(xiàn)有的Job實(shí)例下線(如果下線的是leader節(jié)點(diǎn),那么先選舉然后觸發(fā)分片算法的執(zhí)行) c、主節(jié)點(diǎn)選舉”

        4. 和quartz框架對比

        5. 綜合對比

        6. 總結(jié)和結(jié)論

        共同點(diǎn):

        E-Job和X-job都有廣泛的用戶基礎(chǔ)和完整的技術(shù)文檔,都能滿足定時(shí)任務(wù)的基本功能需求。

        不同點(diǎn):

        X-Job 側(cè)重的業(yè)務(wù)實(shí)現(xiàn)的簡單和管理的方便,學(xué)習(xí)成本簡單,失敗策略和路由策略豐富。推薦使用在“用戶基數(shù)相對少,服務(wù)器數(shù)量在一定范圍內(nèi)”的情景下使用。

        E-Job 關(guān)注的是數(shù)據(jù),增加了彈性擴(kuò)容和數(shù)據(jù)分片的思路,以便于更大限度的利用分布式服務(wù)器的資源。但是學(xué)習(xí)成本相對高些,推薦在“數(shù)據(jù)量龐大,且部署服務(wù)器數(shù)量較多”時(shí)使用。

        7. 附定時(shí)任務(wù)的其他方案

        發(fā)貨后超過10天未收貨時(shí)系統(tǒng)自動(dòng)確認(rèn)收貨的多種實(shí)現(xiàn)方式:

        好了,今天就分享到這里。希望對你有所幫助!



        全棧架構(gòu)社區(qū)交流群

        ?「全棧架構(gòu)社區(qū)」建立了讀者架構(gòu)師交流群,大家可以添加小編微信進(jìn)行加群。歡迎有想法、樂于分享的朋友們一起交流學(xué)習(xí)。

        掃描添加好友邀你進(jìn)架構(gòu)師群,加我時(shí)注明姓名+公司+職位】

        看完本文有收獲?請轉(zhuǎn)發(fā)分享給更多人


        往期資源:


        Flutter 移動(dòng)應(yīng)用開發(fā)實(shí)戰(zhàn) 視頻(開發(fā)你自己的抖音APP)
        Java面試進(jìn)階訓(xùn)練營 第2季(分布式篇)
        Java高級 - 分布式系統(tǒng)開發(fā)技術(shù)視頻


        瀏覽 37
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            新婚之夜初尝高潮电影 | 国产精品天天爽视频 | 大香蕉在线电影网 | 成人在线综合 | 搞逼视频软件 | 中文字幕第二页在线 | 国产操逼免费 | 毛片免费观看 | 夜夜精品视频一区二区 | 在线a视频免费观看 |