MRQ分布式 worker 任務(wù)隊(duì)列
MRQ(MR.Queue)是一個(gè)使用 Redis&gevent 的分布式 worker 任務(wù)隊(duì)列。
MRQ 是一個(gè)獨(dú)特的任務(wù)隊(duì)列,它一方面旨在像 RQ 一樣簡(jiǎn)單,另一方面要求有接近 Celery 的性能。MRQ最早在 Pricing Assistant 上被開發(fā),它最初的功能設(shè)計(jì)是為了滿足任務(wù)隊(duì)列的各種任務(wù)需求(IO密集&CPU密集,很多小任務(wù)&幾個(gè)大任務(wù))。
特性
代碼簡(jiǎn)單:MRQ 和 RQ 一樣容易理解并且更容易擴(kuò)展。
強(qiáng)大的用戶面板:具有可視界面,可以控制一切,包括隊(duì)列中的任務(wù)、當(dāng)前任務(wù)、worker 的狀態(tài)等等。
按任務(wù)區(qū)分的日志:在面板中單獨(dú)獲得每個(gè)任務(wù)的輸出日志。
Gevent worker:IO 密集型任務(wù)可以并行在同一個(gè) Unix 進(jìn)程中執(zhí)行,以實(shí)現(xiàn)最大吞吐量。
管理集成:CPU 密集型的任務(wù)可以通過(guò)單個(gè)命令行參數(shù)在多個(gè) UNIX 進(jìn)程之間拆分。
任務(wù)管理:可以利用代碼或者用戶面板重試、重新入隊(duì)和取消任務(wù)等。
性能:批量作業(yè)排隊(duì),輕松作業(yè)分析。
容易配置:MRQ 的每個(gè)參數(shù)都可以通過(guò)命令行參數(shù)或者配置文件進(jìn)行配置。
任務(wù)路由:和 Celery 一樣,任務(wù)可以有默認(rèn)的隊(duì)列、過(guò)期時(shí)間和 ttl 值。
內(nèi)置的調(diào)度器:可以按照時(shí)間間隔和時(shí)間點(diǎn)對(duì)任務(wù)進(jìn)行調(diào)度。
策略:支持串行或者并行的處理隊(duì)列,同時(shí)也支持一次性或者周期性的批量任務(wù)。
子隊(duì)列:簡(jiǎn)單的命令行來(lái)生成多個(gè)子隊(duì)列,從 worker 的角度使用自動(dòng)發(fā)現(xiàn)的方式。
完備的測(cè)試體系:邊界情況比如 worker 中斷、Redis 失敗等都在一個(gè) docker 容器中測(cè)試。
線程跟蹤:可以調(diào)試查看每個(gè) CPU 敏感的任務(wù)在每個(gè)線程消耗的時(shí)間。
完備的內(nèi)存泄露調(diào)試器:監(jiān)視任務(wù)的內(nèi)存泄露并且使用 objgraph 發(fā)現(xiàn)內(nèi)存泄露。


