rabbitmq與gearman有什麼不同之處?

rabbitmq與gearman都是做消息隊列的,那麼兩者之間有什麼區別,或者說優點與缺點的比較各在哪裡?


正如樓上回復的一樣,Gearman 偏重任務分發(也有調度),基本工作模式,是由 Client (多個)向 Server 去註冊一些函數,當然 Server 接受到任務後,分發到這些函數上。

RabbitMQ 則是很多消息模型的實現,比如簡單的生產者消費者、發布訂閱、廣播,甚至可以模擬 RPC 等等,Gearman 的功能,簡單的生產者消費者模型就可以實現,只是思路上稍微換一下,需要消費消息來實現,官方也有類似參考例子:RabbitMQ - RabbitMQ tutorial - Work queues

建議看下 RabbitMQ 官方這個例子教程 RabbitMQ - Getting started with RabbitMQ ,裡面包含了幾種模型的實例,很容易結合我們現實中場景。

至於優缺點,仁者見仁。

大概三年前吧,我給一家某行業內比較知名公司優化過 Gearman 到 RabbitMQ 的方案,高峰時候一小時消息量在 x 千萬以上,優化前 Gearman Server 負載較重,包括 Client(Worker)也會經常掛掉,很多消息會丟失,後來遷移到 RabbitMQ 上面,Server 只有一台(備份一台基本從來就沒用過),Client 採用 ACK 確認消息成功消費掉,後來就沒有然後了。。。這裡故事不在描述。

推薦使用 RabbitMQ,不僅僅是作為消息模型,還可以改善系統架構設計。


Gearman是分散式任務分發系統,重點是job

RabbitMQ是分散式消息隊列,重在message/data

Gearman要實現Message的priority、order、filter、persistence..都比較麻煩(或者說不夠直接),而這些都是典型的MQ系統要考慮的。


Gearman有個特點就是可以同步返回結果,那個消息隊列有支持這個功能?gm一開始研發的目的其實就是圖片裁剪,上用戶上傳一張圖片,程序傳到gm進行裁剪,返回結果。


推薦閱讀:

寫了個基於 PHP 的 Linux 圖形化性能監視器 Holy Lance

TAG:Python | PHP | RabbitMQ |