2010-02-17 27 views
63

W pracy, musimy zbudować serwer Praca na takie rzeczy jak wysyłanie e-maili, budowanie PDF, skrzypienie niektórych danych, itd. Oczywiście, chcielibyśmy budować na jakimś generycznego kolejkowanie system. Jestem zaznajomiony z Gearmanem i to jest dokładny problem, który próbuje rozwiązać: umieszczanie zadań w kolejce, w której przychodzą pracownicy, aby je odebrać. Jednak widzę wiele wzmianek o Rabbitmq i jestem niejasny jak to jest używane w tym scenariuszu.RabbitMQ lub Gearman - Wybór pracy kolejce

Czy RabbitMQ dobre ramy do budowy rozproszonego systemu zadania na górze?

+4

w następstwie tego skończyło się na wyborze RabbitMQ wraz z doskonałych pakietów Marchew/seler i jestem bardzo zadowolony z mojego wyboru. Seler jest dość niesamowity i niezwykle prosty, gdy tylko odkryjesz, jak potrzebujesz lub chcesz skonfigurować system. AMQP może początkowo trochę się zginać, ale Seler świetnie radzi sobie z wieloma złożonymi zagadnieniami, dopóki nie będziesz gotowy zanurzyć się głęboko. – brianz

+1

@alexis Łącze do przetwarzania pdf jest zepsute. Czy możesz to naprawić? – ihsan

+1

Wydaje się, że [publikacja artykułu] (http://seancribbs.com/tech/2009/12/23/generating-thousands-of-pdfs-on-ec2-with-ruby/) na temat Seana Crubbs'a własna strona. –

Odpowiedz

68

powiedziałbym, że lepiej jest dla Gearman kolejkowanie „pracy” i RabbitMQ jest lepsze dla kolejkowanie „dane”. Oczywiście, obie są naprawdę tym samym, ale sposób, w jaki to działa, polega na tym, że jeśli próbujesz "rozniecać" pracę do wykonania, a pracownicy mogą pracować niezależnie, Gearman to lepszy sposób na zrobienie tego. . Ale jeśli próbujesz przekazać dane z wielu źródeł do mniejszej liczby konsumentów, RabbitMQ jest lepszym rozwiązaniem.

Historia RabbitMQ, jako czegoś, co pozwoliło Twitterowi wziąć mnóstwo wiadomości i przekazać je do starych starych bramek SMS, które utrzymywałyby tylko jedno połączenie otwarte, były ograniczone i nie miały prób, są ilustracją rodzaju problemów, które RabbitMQ dobrze rozwiązuje.

30

Wszystko zależy od tego, co semantyka chcesz narażać. Naprawdę łatwo jest zrobić to, co Gearman robi na RabbitMQ, który z pewnością może "rozsiewać" wiadomości do niezależnych pracowników.

Ale Gearman jest zbudowany specjalnie. IIUC, Gearman to framework do przetwarzania zadań, a nie jako system przesyłania wiadomości jako taki. Istnieją inne takie ramy, takie jak Celery, które wykorzystują RabbitMQ pod maską. Oto article about Celery, które warto przeczytać.

+7

Nie tylko my, ale tylko w Pythonie, ale w rzeczywistości mamy całą strukturę Django jako zależność. Z mojego doświadczenia wynika, że ​​autor napisał to specjalnie dla swojego środowiska, aby wypełnić swoje specyficzne potrzeby. Co nie jest złą rzeczą, ale nie jest to uczciwe porównanie z Gearmanem czy RabbitMQ, z których oba są bardzo elastyczne. – jamieb

+16

Trzymając urazę? :) Seler nie jest w Pythonie, może pracować za pośrednictwem protokołu HTTP, który to IMHO jest lepszym modelem niż ten, który używa gearman do obsługi wielu języków (wdrażaj pracowników w językach, które chcesz wspierać). Łatwo byłoby wdrożyć selerów również w innych językach, ponieważ seler jest w rzeczywistości protokołem komunikacyjnym, w którym celeryd jest właśnie jego implementacją w Pythonie. Nie wiem, skąd bierze się pomysł, że porównywanie Selera z Gearmanem nie jest sprawiedliwe, ale powinieneś przeczytać FAQ - zwłaszcza http://bit.ly/cSh6Ys + http://bit.ly/cANwUg - i dostarczyć nas z kilkoma nowymi argumentami – asksol

+1

Gdyby "naprawdę" było o lepszych modelach, wszyscy używalibyśmy Gopher'a ... nie HTTP :) – Vangel