自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

拆解一下消息隊列、任務(wù)隊列、任務(wù)調(diào)度系統(tǒng)

開發(fā) 架構(gòu)
本文通過多個維度來進(jìn)行拆解,試著分析 任務(wù)隊列、消息隊列、任務(wù)調(diào)度系統(tǒng) 這三類中間件 究竟有哪些不同,究竟誰更適合什么場景。

最近調(diào)研了下任務(wù)調(diào)度系統(tǒng)中間件,包括xxl-job、elastic-job等,發(fā)現(xiàn)跟任務(wù)隊列有一些類似的能力,比如通過API(事件)觸發(fā)任務(wù)執(zhí)行。

隨即想到,能否用任務(wù)調(diào)度系統(tǒng)覆蓋任務(wù)隊列的場景呢?

另外,一直以來,很多同學(xué)也經(jīng)常會產(chǎn)生困惑,任務(wù)隊列和消息隊列究竟有什么區(qū)別?

因此,本文通過多個維度來進(jìn)行拆解,試著分析 任務(wù)隊列、消息隊列、任務(wù)調(diào)度系統(tǒng) 這三類中間件 究竟有哪些不同,究竟誰更適合什么場景。

  • 從基本功能說起
  • 對比系統(tǒng)角色
  • 本質(zhì)區(qū)別
  • 總結(jié)

1、從基本功能說起

什么是消息隊列?

消息隊列大家基本是耳熟能詳,不管是經(jīng)典的kafka、rocketmq,還是新興的pulsar。
雖然它們在架構(gòu)上都有所區(qū)別,但是本質(zhì)上都是一種 應(yīng)用 對 應(yīng)用的 「通信方式」。

應(yīng)用程序通過讀寫出入隊列的「消息」來通信,而無需點對點直接連接應(yīng)用。主要解決應(yīng)用耦合、異步消息、流量削峰等問題,用來實現(xiàn)高性能,高可用,可伸縮和最終一致性架構(gòu)。

什么是任務(wù)調(diào)度系統(tǒng)?

任務(wù)調(diào)度系統(tǒng)也是大家比較熟悉的,從quartz到xxl-job,到elastic-job。主要解決的問題是,解決分布式場景下的 離線任務(wù)、定時任務(wù) 的調(diào)度問題,具備高可用、可視化、可運(yùn)維、低延時等能力。

一些復(fù)雜場景,可能還需要進(jìn)行任務(wù)編排(DAG)執(zhí)行。

什么是任務(wù)隊列?

任務(wù)隊列可能聽過的人會少一點,沒有特別出名的java開源框架,相對活躍一點的包括Celery、Resque等。

它解決的問題是比較經(jīng)典的,在線業(yè)務(wù)如何 實時 處理 長耗時 任務(wù)。

任務(wù)隊列通過封裝 異步任務(wù)發(fā)送、任務(wù)處理、任務(wù)狀態(tài)存儲、異常處理 等環(huán)節(jié),提供了一套完整的處理長耗時任務(wù)的編程框架,實現(xiàn)了 隔離性、容錯性 的應(yīng)用架構(gòu)。

2、對比系統(tǒng)角色

(1)任務(wù)隊列 VS 消息隊列

認(rèn)識一個系統(tǒng),除了通過文字簡單了解基本功能外,最直接的方式是看看整體系統(tǒng)架構(gòu)的角色。

先看下消息隊列的系統(tǒng)角色。

圖片

主要包括:

  • 生產(chǎn)者 Producer發(fā)布消息的角色。Producer通過 MQ 的負(fù)載均衡模塊選擇相應(yīng)的 Broker 集群隊列進(jìn)行消息投遞,投遞的過程支持快速失敗和重試。
  • 消費者 Consumer消息消費的角色。
  • 代理服務(wù)器 BrokerBroker主要負(fù)責(zé)消息的存儲、投遞和查詢以及服務(wù)高可用保證。?

然后,我們看看任務(wù)隊列的系統(tǒng)角色包括哪些。

圖片

主要包括4類角色:

  • ?任務(wù)生產(chǎn)者 Producer發(fā)布任務(wù)的角色。Producer通過 MQ 的負(fù)載均衡模塊選擇相應(yīng)的 Broker 集群隊列進(jìn)行消息投遞,投遞的過程支持快速失敗和重試。
  • 消費者 Consumer消費任務(wù)的角色。
  • 隊列queueBroker主要負(fù)責(zé)任務(wù)的存儲、投遞和查詢以及服務(wù)高可用保證。
  • 任務(wù)狀態(tài)持久化storagestorage主要負(fù)責(zé)任務(wù)的狀態(tài)持久化、查詢等能力??梢赃x擇獨立的DB,也可以直接復(fù)用queue。?

通過系統(tǒng)角色對比,我們可以看到,消息隊列是任務(wù)隊列的其中一個角色,任務(wù)隊列中queue的選型可以是消息隊列kafka、rocketmq,甚至可以是能提供類似能力的redis。

除了queue之外,任務(wù)隊列的一個顯著特點是,一般還需要一個storage系統(tǒng)角色來持久化任務(wù)的狀態(tài)。

(2)任務(wù)隊列 VS 任務(wù)調(diào)度系統(tǒng)

任務(wù)調(diào)度系統(tǒng)比較有代表性的開源產(chǎn)品包括Quartz、Elastic-job、XXL-JOB。

我們以XXL-JOB為例,來看下系統(tǒng)角色。

圖片

包括2個角色:

  • ?調(diào)度模塊(調(diào)度中心):負(fù)責(zé)管理調(diào)度信息,按照調(diào)度配置發(fā)出調(diào)度請求,自身不承擔(dān)業(yè)務(wù)代碼。調(diào)度系統(tǒng)與任務(wù)解耦,提高了系統(tǒng)可用性和穩(wěn)定性,同時調(diào)度系統(tǒng)性能不再受限于任務(wù)模塊。
  • 執(zhí)行模塊(執(zhí)行器):負(fù)責(zé)接收調(diào)度請求并執(zhí)行任務(wù)邏輯。任務(wù)模塊專注于任務(wù)的執(zhí)行等操作,開發(fā)和維護(hù)更加簡單和高效。接收“調(diào)度中心”的執(zhí)行請求、終止請求和日志請求等。?

從這里能看出,XXL-JOB是一個典型的「中心化」系統(tǒng),任務(wù)都是根據(jù)預(yù)設(shè)規(guī)則從 調(diào)度中心 發(fā)起,然后由執(zhí)行器來執(zhí)行。當(dāng)然,Elastic-job中的ElasticJob-lite也有「去中心化」方案,但是從邏輯模型的角度來說,仍然是一個需要調(diào)度中心進(jìn)行調(diào)度的。

而任務(wù)隊列的整個模型就是一個「去中心化」、「應(yīng)用 對 應(yīng)用 生產(chǎn)消費」系統(tǒng),任務(wù)由producer發(fā)起,由consumer消費。

3、本質(zhì)區(qū)別

結(jié)合前面的基本功能和系統(tǒng)角色,我們可以更好地體會三個中間件的本質(zhì)區(qū)別。

消息隊列 本質(zhì)上都是一種 應(yīng)用 對 應(yīng)用 的 「通信方式」,主要解決應(yīng)用耦合、異步消息、流量削鋒等問題。

任務(wù)隊列 本質(zhì)上是一種封裝好的 應(yīng)用 對 應(yīng)用 異步任務(wù) 「編程框架」,它封裝了對異步任務(wù)的如何重試、如何消費、如何獲取任務(wù)結(jié)果、如何監(jiān)控任務(wù)的運(yùn)行情況 等等問題,讓業(yè)務(wù)開發(fā)只關(guān)心業(yè)務(wù)邏輯。

同時,任務(wù)隊列也是一種典型的 「架構(gòu)風(fēng)格」,這個編程框架 指導(dǎo) 業(yè)務(wù)開發(fā)對 長耗時 任務(wù)從普通 在線業(yè)務(wù) 的服務(wù)中拆分出來,避免影響在線業(yè)務(wù)的穩(wěn)定性。因此,任務(wù)隊列的主要應(yīng)用場景也是 在線業(yè)務(wù)。

任務(wù)調(diào)度系統(tǒng) 設(shè)計之初就是為了解決分布式場景下的 離線任務(wù)、定時任務(wù) 的調(diào)度問題,它的設(shè)計目標(biāo)是 輕量級、可視化、易擴(kuò)展。

因此,它的設(shè)計沒有 應(yīng)用 對 應(yīng)用 的生產(chǎn)消費概念,也不具備對高流量的承受能力(削峰)。

當(dāng)然,任務(wù)調(diào)度系統(tǒng) 跟 任務(wù)隊列 最大的區(qū)別,它不具備將 長耗時 任務(wù)從普通 在線業(yè)務(wù) 的服務(wù)中拆分出來的這種架構(gòu)思想指導(dǎo)(大部分定時任務(wù)都是在夜間執(zhí)行)。

任務(wù)調(diào)度系統(tǒng)的定位還是應(yīng)用于 輕量級、離線業(yè)務(wù) 場景最為合適。

4、總結(jié)

回過頭看看一開始的兩個問題。

(1)能否用任務(wù)調(diào)度系統(tǒng)覆蓋任務(wù)隊列的場景呢?

不能。任務(wù)調(diào)度系統(tǒng)適用于 輕量級、離線業(yè)務(wù) 場景下的 定時任務(wù) 和 離線任務(wù),使用調(diào)度/執(zhí)行模式,不具備承接在線業(yè)務(wù)高流量的能力。

而任務(wù)隊列適用于 在線業(yè)務(wù) 場景下的 長耗時任務(wù),使用 生產(chǎn)消費模式,具備對高流量的承受能力(削峰)。并且指導(dǎo)業(yè)務(wù)開發(fā)將 長耗時 任務(wù)從普通 在線業(yè)務(wù) 的服務(wù)中拆分出來的架構(gòu)思想。

(2)任務(wù)隊列和消息隊列究竟有什么區(qū)別?

任務(wù)隊列是一個封裝好的 異步任務(wù)編程框架,也是一種 長耗時任務(wù) 與 普通在線業(yè)務(wù) 拆分的架構(gòu)思想。消息隊列只是任務(wù)隊列中的一個系統(tǒng)角色。

總結(jié)一下,其實三者的差異還是非常大的。

圖片

責(zé)任編輯:姜華 來源: 阿丸筆記
相關(guān)推薦

2017-10-11 15:08:28

消息隊列常見

2021-07-24 11:15:19

開發(fā)技能代碼

2023-03-01 09:39:40

調(diào)度系統(tǒng)

2023-06-30 07:22:48

新元素父節(jié)點編號

2021-02-19 09:19:11

消息隊列場景

2009-07-17 17:29:13

多任務(wù)多線程

2021-10-30 19:30:23

分布式Celery隊列

2024-10-16 15:11:58

消息隊列系統(tǒng)設(shè)計

2018-08-03 08:31:09

Linux top命令負(fù)載

2023-05-08 16:38:46

任務(wù)調(diào)度分布式任務(wù)調(diào)度

2019-08-23 12:12:49

MQ消息隊列

2025-02-04 11:45:23

2021-05-20 09:50:20

鴻蒙HarmonyOS應(yīng)用

2024-01-31 08:01:36

Go延遲隊列語言

2010-03-15 17:05:39

Java任務(wù)隊列

2024-09-23 04:00:00

java架構(gòu)分布式系統(tǒng)

2021-05-13 12:00:51

cron調(diào)度任務(wù)系統(tǒng)運(yùn)維

2024-12-25 09:32:06

2023-12-26 07:44:00

Spring定時調(diào)度

2013-12-17 10:15:19

OpenMP任務(wù)調(diào)度
點贊
收藏

51CTO技術(shù)棧公眾號