2010-02-17 14 views
63

Al lavoro, abbiamo bisogno di costruire un server di lavoro per cose come l'invio di e-mail, la costruzione di PDF, lo scricchiolio di alcuni dati, ecc. Ovviamente, vorremmo costruire su una sorta di coda generica sistema. Ho familiarità con Gearman e questo è il problema esatto che cerca di risolvere: mettere i lavori in fila dove i lavoratori vengono a prenderli. Tuttavia, sto vedendo molte menzioni di Rabbitmq e non sono chiaro come sia usato in questo scenario.Rabbitmq o Gearman - scegliere una coda di lavori

Rabbitmq è un buon framework per costruire un sistema di lavoro distribuito in aggiunta?

+4

A seguito di questo ho finito per scegliere RabbitMQ insieme agli ottimi pacchetti di carote/sedano e sono molto felice della mia scelta. Il sedano è piuttosto sorprendente e straordinariamente semplice una volta capito come hai bisogno o vuoi configurare il tuo sistema. All'inizio AMQP può essere un po 'maldestro, ma Celery fa un ottimo lavoro di astrazione di molte delle complessità fino a quando non sei pronto per immergerti in profondità. – brianz

+1

@alexis Il collegamento per l'elaborazione pdf è rotto. Potresti correggerlo per favore? – ihsan

+1

Sembra esserci un [ripubblicazione dell'articolo] (http://seancribbs.com/tech/2009/12/23/generating-thousands-of-pdfs-on-ec2-with-ruby/) su Sean Crubbs ' propria pagina. –

risposta

68

Direi che Gearman è migliore per mettere in coda i "lavori" e RabbitMQ è meglio per mettere in coda i "dati". Certo, sono entrambi la stessa cosa, ma il modo in cui funziona è che se si sta cercando di "sfornare" il lavoro da fare, e gli operai possono lavorare indipendentemente, Gearman è il modo migliore per farlo . Ma se stai cercando di alimentare i dati da molte fonti in un numero inferiore di consumatori di dati, RabbitMQ è la soluzione migliore.

La storia di RabbitMQ, come qualcosa che ha permesso Twitter per prendere i carichi impulsivi di messaggi, e li alimentano in gateway SMS vecchi croccante che potrebbe tenere solo una connessione aperta, erano rate limitata, e abbiamo mangiato tentativi, è illustrativo del tipo di problemi che RabbitMQ è bravo a risolvere.

30

Tutto dipende dalla semantica che si desidera esporre. È davvero facile fare ciò che Gearman fa su RabbitMQ, che può certamente "smascherare" i messaggi ai lavoratori indipendenti.

Ma Gearman è stato progettato appositamente. IIUC, Gearman è un framework per l'elaborazione dei lavori e non un sistema di messaggistica in quanto tale. Ci sono altre strutture come Celery che usano RabbitMQ per questo. Ecco uno article about Celery che vale la pena leggere.

+7

Non solo noi solo per Celery Python, ma in realtà ha l'intero framework Django come dipendenza. Nella mia esperienza, sembra che l'autore abbia scritto specificamente per il suo ambiente per soddisfare i suoi bisogni specifici. Quale non è necessariamente una cosa cattiva, ma non è un confronto equo con Gearman o RabbitMQ stesso, che sono entrambi molto flessibili. – jamieb

+16

In possesso di un rancore? :) Celery non è solo Python, può funzionare su HTTP, che IMHO è un modello migliore di quello che gearman usa per il supporto di più lingue (implementa i lavoratori nelle lingue che vuoi supportare). Sarebbe facile implementare i lavoratori del sedano anche in altre lingue, dato che il sedano è in realtà un protocollo di messaggi, in cui il celeryd è l'implementazione di Python. Non so dove ti venga l'idea che non è giusto confrontare Celery con Gearman, ma dovresti leggere le FAQ - specialmente http://bit.ly/cSh6Ys + http://bit.ly/cANwUg - e fornire noi con alcuni nuovi argomenti – asksol

+1

Se fosse "veramente" su modelli migliori useremmo tutti Gopher ... non HTTP :) – Vangel