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>

        分布式定時任務框架選型,寫得太好了!

        共 3497字,需瀏覽 7分鐘

         ·

        2022-01-24 01:49


        • 我們先思考下面幾個業(yè)務場景的解決方案:
        • 為什么我們需要定時任務
        • java有哪些定時任務的框架
          • 單機
          • 分布
        • 分布式任務調(diào)度系統(tǒng)對比
          • 1. 什么是分布式定時任務
          • 2. 常見開源方案
          • 4. 比較
        • 附 定時任務的其他方案

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

        • 支付系統(tǒng)每天凌晨1點跑批,進行一天清算,每月1號進行上個月清算

        • 電商整點搶購,商品價格8點整開始優(yōu)惠

        • 12306購票系統(tǒng),超過30分鐘沒有成功支付訂單的,進行回收處理

        • 商品成功發(fā)貨后,需要向客戶發(fā)送短信提醒

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

        為什么我們需要定時任務

        很多業(yè)務場景需要我們某一特定的時刻去做某件任務,定時任務解決的就是這種業(yè)務場景。一般來說,系統(tǒng)可以使用消息傳遞代替部分定時任務,兩者有很多相似之處,可以相互替換場景。如,上面發(fā)貨成功發(fā)短信通知客戶的業(yè)務場景,我們可以在發(fā)貨成功后發(fā)送MQ消息到隊列,然后去消費mq消息,發(fā)送短信。

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

        a)時間驅(qū)動/事件驅(qū)動:內(nèi)部系統(tǒng)一般可以通過時間來驅(qū)動,但涉及到外部系統(tǒng),則只能使用時間驅(qū)動。如怕取外部網(wǎng)站價格,每小時爬一次 b)批量處理/逐條處理:批量處理堆積的數(shù)據(jù)更加高效,在不需要實時性的情況下比消息中間件更有優(yōu)勢。而且有的業(yè)務邏輯只能批量處理。如移動每個月結(jié)算我們的話費 c)實時性/非實時性:消息中間件能夠做到實時處理數(shù)據(jù),但是有些情況下并不需要實時,比如:vip升級 d)系統(tǒng)內(nèi)部/系統(tǒng)解耦:定時任務調(diào)度一般是在系統(tǒng)內(nèi)部,而消息中間件可用于兩個系統(tǒng)間

        java有哪些定時任務的框架

        單機

        • timer:是一個定時器類,通過該類可以為指定的定時任務進行配置。TimerTask類是一個定時任務類,該類實現(xiàn)了Runnable接口,缺點異常未檢查會中止線程
        • ScheduledExecutorService:相對延遲或者周期作為定時任務調(diào)度,缺點沒有絕對的日期或者時間
        • spring定時框架:配置簡單功能較多,如果系統(tǒng)使用單機的話可以優(yōu)先考慮spring定時器

        分布

        • Quartz:Java事實上的定時任務標準。但Quartz關(guān)注點在于定時任務而非數(shù)據(jù),并無一套根據(jù)數(shù)據(jù)處理而定制化的流程。雖然Quartz可以基于數(shù)據(jù)庫實現(xiàn)作業(yè)的高可用,但缺少分布式并行調(diào)度的功能
        • TBSchedule:阿里早期開源的分布式任務調(diào)度系統(tǒng)。代碼略陳舊,使用timer而非線程池執(zhí)行任務調(diào)度。眾所周知,timer在處理異常狀況時是有缺陷的。而且TBSchedule作業(yè)類型較為單一,只能是獲取/處理數(shù)據(jù)一種模式。還有就是文檔缺失比較嚴重
        • elastic-job:當當開發(fā)的彈性分布式任務調(diào)度系統(tǒng),功能豐富強大,采用zookeeper實現(xiàn)分布式協(xié)調(diào),實現(xiàn)任務高可用以及分片,目前是版本2.15,并且可以支持云開發(fā)
        • Saturn:是唯品會自主研發(fā)的分布式的定時任務的調(diào)度平臺,基于當當?shù)膃lastic-job 版本1開發(fā),并且可以很好的部署到docker容器上。
        • xxl-job: 是大眾點評員工徐雪里于2015年發(fā)布的分布式任務調(diào)度平臺,是一個輕量級分布式任務調(diào)度框架,其核心設計目標是開發(fā)迅速、學習簡單、輕量級、易擴展。

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

        1. 什么是分布式定時任務

        把分散的,可靠性差的計劃任務納入統(tǒng)一的平臺,并實現(xiàn)集群管理調(diào)度和分布式部署的一種定時任務的管理方式。叫做分布式定時任務。

        2. 常見開源方案

        • elastic-job
        • xxl-job
        • quartz
        • saturn
        • opencron
        • antares

        elastic-job

        elastic-job 是由當當網(wǎng)基于quartz 二次開發(fā)之后的分布式調(diào)度解決方案 , 由兩個相對獨立的子項目Elastic-Job-Lite和Elastic-Job-Cloud組成 。

        Elastic-Job-Lite定位為輕量級無中心化解決方案,使用jar包的形式提供分布式任務的協(xié)調(diào)服務。

        Elastic-Job-Cloud使用Mesos + Docker(TBD)的解決方案,額外提供資源治理、應用分發(fā)以及進程隔離等服務

        亮點?:

        基于quartz 定時任務框架為基礎的,因此具備quartz的大部分功能

        使用zookeeper做協(xié)調(diào),調(diào)度中心,更加輕量級

        持任務的分片

        支持彈性擴容 , 可以水平擴展 , 當任務再次運行時,會檢查當前的服務器數(shù)量,重新分片,分片結(jié)束之后才會繼續(xù)執(zhí)行任務

        失效轉(zhuǎn)移,容錯處理,當一臺調(diào)度服務器宕機或者跟zookeeper斷開連接之后,會立即停止作業(yè),然后再去尋找其他空閑的調(diào)度服務器,來運行剩余的任務

        提供運維界面,可以管理作業(yè)和注冊中心。

        elastic-job結(jié)合了quartz非常優(yōu)秀的時間調(diào)度功能,并且利用ZooKeeper實現(xiàn)了靈活的分片策略。除此之外,還加入了大量實用的監(jiān)控和管理功能,

        以及其開源社區(qū)活躍、文檔齊全、代碼優(yōu)雅等優(yōu)點,是分布式任務調(diào)度框架的推薦選擇。

        由于elastic-job-lite 不支持動態(tài)添加作業(yè),此處僅貼上elastic-job-Cloud架構(gòu)圖

        xxl-job

        由個人開源的一個輕量級分布式任務調(diào)度框架 ,主要分為 調(diào)度中心和執(zhí)行器兩部分 , 調(diào)度中心在啟動初始化的時候,會默認生成執(zhí)行器的RPC代理

        對象(http協(xié)議調(diào)用), 執(zhí)行器項目啟動之后, 調(diào)度中心在觸發(fā)定時器之后通過jobHandle 來調(diào)用執(zhí)行器項目里面的代碼,核心功能和elastic-job差不多,同時技術(shù)文檔比較完善

        系統(tǒng)架構(gòu)圖?:

        quartz

        quartz 的常見集群方案如下,通過在數(shù)據(jù)庫中配置定時器信息, 以數(shù)據(jù)庫悲觀鎖的方式達到同一個任務始終只有一個節(jié)點在運行,

        優(yōu)點?:

        保證節(jié)點高可用 (HA), 如果某一個幾點掛了, 其他節(jié)點可以頂上

        缺點?:

        同一個任務只能有一個節(jié)點運行,其他節(jié)點將不執(zhí)行任務,性能低,資源浪費

        當碰到大量短任務時,各個節(jié)點頻繁的競爭數(shù)據(jù)庫鎖,節(jié)點越多這種情況越嚴重。性能會很低下

        quartz 的分布式僅解決了集群高可用的問題,并沒有解決任務分片的問題,不能實現(xiàn)水平擴展

        Saturn

        Saturn是唯品會在github開源的一款分布式任務調(diào)度產(chǎn)品。它是基于當當elastic-job 1.0版本來開發(fā)的,其上完善了一些功能和添加了一些新的feature。

        亮點?:

        支持多語言開發(fā) python、Go、Shell、Java、Php。

        管理控制臺和數(shù)據(jù)統(tǒng)計分析更加完善

        缺點?:

        技術(shù)文檔較少 , 該框架是2016年由唯品會的研發(fā)團隊基于elastic-job開發(fā)而來

        opencron

        一個功能完善真正通用的linux定時任務調(diào)度定系統(tǒng),滿足多種場景下各種復雜的定時任務調(diào)度,同時集成了linux實時監(jiān)控,webssh,提供一個方便管理定時任務的平臺

        缺點:僅支持 kill任務, 現(xiàn)場執(zhí)行,查詢?nèi)蝿者\行狀態(tài) 等, 主要功能是著重于任務的修改和查詢上。不能動態(tài)的添加任務以及任務分片。

        antares

        優(yōu)點?:

        1. 一個任務僅會被服務器集群中的某個節(jié)點調(diào)度,調(diào)度機制基于成熟的 quartz
        2. 并行執(zhí)行 , 用戶可通過對任務預分片,有效提升任務執(zhí)行效率
        3. 失效轉(zhuǎn)移
        4. 彈性擴容,在任務運行時,可以動態(tài)的加機器
        5. 友好的管理控制臺

        缺點?:

        1. 不能動態(tài)的添加任務,僅能在控制臺對任務進行觸發(fā),暫停,刪除等操作
        2. 文檔不多,開源社區(qū)不夠活躍

        系統(tǒng)架構(gòu)圖如下?:

        4. 比較

        此處列出了幾個代表性的開源產(chǎn)品

        附 定時任務的其他方案

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

        每天定時半夜篩選第二天 可以自動確認收貨的訂單,然后第二天 每10分鐘 執(zhí)行一次確認收貨 開銷不會太大吧 時間也相對精確

        自動確認收貨這個狀態(tài)如果僅僅是讓客戶端看的話,等用戶下一次上線的時間,做一次運算就可以了。

        延遲和定時消息投遞

        • ActiveMQ提供了一種broker端消息定時調(diào)度機制。適用于:1、不希望消息馬上被broker投遞出去,而是想要消息60秒以后發(fā)給消費者,2、想讓消息沒隔一定時間投遞一次,一共投遞指定的次數(shù)
        • RabbitMQ可以針對Queue和Message設置 x-message-tt,來控制消息的生存時間,如果超時,則消息變?yōu)閐ead letter。利用DLX,當消息在一個隊列中變成死信后,它能被重新publish到另一個Exchange。這時候消息就可以重新被消費。

        關(guān)注不迷路

        瀏覽 98
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        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>
            大香蕉国产在线看 | 性俄罗斯熟白嫩hd | 国产精品无圣光一区二区 | 一级A片处破外女粉红女郎 | 91你懂得 | 大胸纲手雏田被羞羞视频 | 国产无码福利在线 | 国产精品18久久久久白浆软件 | 俺也色在线视频 | 秋霞电影院午夜伦A片欧美 |