2015-02-24 16 views
31

Potrzebuję utworzyć kolejkę do przetworzenia. Sama kolejka jest stosunkowo niewielka. Może być około 1000 zapisów na godzinę. Wykonanie każdego zadania może zająć około minuty i jest przetwarzane niemal natychmiast po dodaniu elementu do kolejki.SQS vs RabbitMQ

Czy istnieje jakikolwiek powód, dla którego mogę chcieć zaimplementować RabbitMQ zamiast czegoś z półki, tak jak Amazon SQS? Jakie są powody, dla których aplikacja potrzebowałaby własnego systemu kolejkowania zamiast czegoś takiego jak SQS?

+0

1000 zapisów na godzinę jest w porządku. Jeśli masz czas i wystarczającą wiedzę, uruchom instancję RabbitMq samodzielnie, to oszczędza również pieniądze, jeśli porównać je z usługą Amazon SQS. W przypadku SQS właśnie tam był. Było to wygodne, proste i dość szybkie do kodowania. – BMW

Odpowiedz

42

Amazon SQS na początek jest pseudo kolejką, co oznacza, że ​​dostarczenie każdej wiadomości (jeśli dotrze do kolejki) jest gwarantowane, ale nie w trybie FIFO, co zwykle dzieje się w kolejce.

Jeśli kolejność wiadomości jest dla ciebie ważna i chcesz, aby kolejka działała w sposób FIFO, dokumentacja Amazon SQS stwierdza, że ​​obsługuje to w logice aplikacji, ponieważ wiadomości z Amazon SQS docierają do ciebie poza kolejnością .

W porównaniu do tego, o ile wiem, można wdrożyć kolejek roboczych w RabbitMQ. Jeśli to zmusi Cię do wdrożenia sekwencjonowania komunikatów kolejkowania na poziomie aplikacji, byłoby to bardziej preferowaną opcją.

Oto kilka czynników, które pomogą Ci podjąć decyzję, który z nich, aby przejść do: sekwencja wiadomość

  1. Kolejka jak wspomniano powyżej.

  2. Możesz skonfigurować swój własny serwer za pomocą RabbitMQ, ale nie w przypadku Amazon SQS, więc koszty zostaną tutaj uwzględnione.

  3. Skonfigurowanie własnego serwera wymaga dobrej znajomości tematu, dzięki czemu nie pozostawisz żadnego rogu nietkniętego. Tak nie jest w przypadku Amazon SQS, ponieważ dość szybko można zacząć.

  4. Własny serwer RabbitMQ oznacza koszty utrzymania w dół, co nie ma miejsca w przypadku Amazon SQS.

Aktualizacje:

  1. Amazon SQS obsługuje kolejki FIFO.
+4

Co masz na myśli mówiąc: "Amazon SQS ma szeroką przenośność z prawie wszystkimi głównymi platformami, nie jest pewne, czy tak jest w przypadku RabbitMQ". RabbitMQ działa na wszystkich głównych platformach (Windows, Linux i Mac), a także we wszystkich głównych językach (Java, .Net, PHP, Python, Ruby, itp.) –

+1

@old_sound Dziękujemy za wskazanie tego. Zaktualizowałem swoją odpowiedź, aby pominąć tę część. –

+0

fajne. Wspomniałeś również o kosztach obsługi RabbitMQ, AFAIK SQS ma również koszt, za operację lub coś w tym stylu, prawda? –

31

SQS będzie moją preferencją w stosunku do RabbitMQ, oto dlaczego.

  1. SQS jest usługą zarządzaną. Nie musisz więc martwić się o operacyjne aspekty systemu komunikacyjnego, w tym administrowanie, bezpieczeństwo, monitorowanie itp. Amazon zrobi to za Ciebie i zapewni wsparcie, jeśli coś pójdzie nie tak.
  2. SQS jest elastyczny i można skalować do bardzo duża szybkość/objętości (nieograniczony zgodnie z AWS;))
  3. Dostępność SQS ma dużo 9 w niej i jest wspierany przez Amazon, który jest jeden mniej rzeczy się martwić w twojej aplikacji.

Jednak RabbitMQ może zapewnić szybsze czasy odpowiedzi dla puts i dostaje, zazwyczaj w 10 tysięcy TPS z mojego testowania. Aby SQS zapewniał taką przepustowość, będziesz musiał skalować poziomo z wieloma instancjami.Więc jeśli szukasz mniej niż 5 ms, RabbitMQ może być opcją do rozważenia, ponieważ widziałem blisko 20ms-30ms czasu od mojego testu SQS na 1000s TPS, który jest nieco wyższy niż RabbitMQ.

Po prostu przenieśliśmy naszą infrastrukturę przesyłania wiadomości z ActiveMQ do SQS i nie możemy być bardziej zadowoleni. Stwierdziliśmy, że jest tańszy niż utrzymywanie własnego klastra ActiveMQ w chmurze.

Mam nadzieję, że to pomoże! Daj nam znać, jak to działa.

+6

cloudamqp.com to dobra hostowana usługa RabbitMQ –

+0

@ssekhar Planujemy również przeprowadzić migrację activemq do SES. Jak duże są zmiany na końcu klienta? Jesteśmy na java i najnowszej wersji activemq. – Deepak