python消息队列celery_消息队列(kafka/nsq等)与任务队列(celery/ytask等)到底有什么不同?...
寫這篇博文的起因是,我在論壇宣傳我開源的新項(xiàng)目YTask(go語(yǔ)言異步任務(wù)隊(duì)列)時(shí),有小伙伴在下面回了一句“為什么不用nsq?”。這使我想起,我在和同事介紹celery時(shí)同事說(shuō)了一句“這不就是kafka嗎?”。
那么YTask和nsq,celery和kafka?他們之間到底有什么不同呢?下面我結(jié)合自己的理解。簡(jiǎn)單的分析一下,如有不足請(qǐng)指出。
首先,nsq和kafka它們屬于消息隊(duì)列;YTask和celery它們屬于任務(wù)隊(duì)列。
消息隊(duì)列和任務(wù)隊(duì)列,最大的不同之處就在于理念的不同 -- 消息隊(duì)列傳遞的是“消息”,任務(wù)隊(duì)列傳遞的是“任務(wù)”。
這句話何解呢?
我們可以放到具體的應(yīng)用場(chǎng)景上:
消息隊(duì)列用來(lái)快速消費(fèi)隊(duì)列中的消息。比如日志處理場(chǎng)景,我們需要把不同服務(wù)器上的日志合并到一起,這時(shí)就需要用到消息隊(duì)列。
任務(wù)隊(duì)列是用來(lái)執(zhí)行一個(gè)耗時(shí)任務(wù)。比如用戶在購(gòu)買的一件物品后,通常需要計(jì)算用戶的積分以及等級(jí),并把它們保存到數(shù)據(jù)庫(kù)。這時(shí)就需要用到任務(wù)隊(duì)列。
從上面的例子可看出:
消息隊(duì)列更側(cè)重于消息的吞吐、處理,具有有處理海量信息的能力。另外利用消息隊(duì)列的生長(zhǎng)者和消費(fèi)者的概念,也可以實(shí)現(xiàn)任務(wù)隊(duì)列的功能,但是還需要進(jìn)行額外的開發(fā)。
任務(wù)隊(duì)列則提供了執(zhí)行任務(wù)所需的功能,比如任務(wù)的重試,結(jié)果的返回,任務(wù)狀態(tài)記錄等。雖然也有并發(fā)的處理能力,但一般不適用于高吞吐量快速消費(fèi)的場(chǎng)景。
任務(wù)隊(duì)列其實(shí)和遠(yuǎn)程函數(shù)調(diào)用差不多,但和thrift、grpc什么不同,它不需要定義描述文件,調(diào)用的方式也不是網(wǎng)絡(luò)請(qǐng)求方式,而是利用消息隊(duì)列傳遞任務(wù)信息。
因此可以簡(jiǎn)單認(rèn)為任務(wù)隊(duì)列就是消息隊(duì)列在異步任務(wù)場(chǎng)景下的深度化定制開發(fā)。
總結(jié)
以上是生活随笔為你收集整理的python消息队列celery_消息队列(kafka/nsq等)与任务队列(celery/ytask等)到底有什么不同?...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: fvdm 跟驰模型 matlab仿真_【
- 下一篇: python dataframe创建_p