Osiąganie wzorców komunikatów JMS/AMQP przy użyciu Redis

To pytanie pojawia się, gdy natknąłem się na kilka wzmianek (takich jak this ), o używaniu oprogramowania do przesyłania wiadomości, takiego jak ZeroMQ wraz z Redis, ale wciąż słyszę o Redis sam używany system wiadomości. Tak więc, jeśli Redis jest używany wraz z innymi systemami komunikacyjnymi, czy oznacza to, że Redis ma poważne braki, gdy jest używany jako system komunikacyjny samodzielnie ?

Chociaż użycie Redis do buforowania i pub/sub jest dla mnie jasne, nie jest jasne, czy Redis może być użyty w miejsce z pełnowartościowym systemem komunikacyjnym, takim jak JMS, AMQP lub ZeroMQ.
Czy odchodząc od aspektu zgodności ze standardami i koncentrując się tylko na funkcjonalności/funkcjach, Redis zapewnia wsparcie dla wszystkich wzorców/modeli komunikatów wymaganych od systemu komunikacyjnego ?

Wzory wiadomości, o których mówię to:

  1. RPC / Request-reply (an przykład korzystanie z ActiveMQ / JMS i Inny za pomocą RabbitMQ/AMQP)
  2. Rurociąg / Praca queues (once and atmost once consumption of every message)
  3. Broadcast (wszyscy subskrybowali kanał)
  4. Multicast (filtrowanie wiadomości na serwerze w oparciu o selektory użytkowników)]}
  5. jakiś inny wzór wiadomości ?

Jeśli tak, Redis wydaje się rozwiązywać dwa (prawdopodobnie więcej) aspekty naraz: buforowanie i wysyłanie wiadomości.

Patrzę na to w kontekście aplikacji internetowej wspieranej przez serwer Java / Java EE. I patrzę na to nie z proof-of-concept punkt widzenia, ale z punktu widzenia rozwoju oprogramowania na dużą skalę.

Edit1:
użytkownik: 791406 zadał prawidłowe pytanie:

"kogo obchodzi, czy redis wspiera te wzorce; czy redis spełni Twoje SLA a QoS potrzebuje?"

Pomyślałem, że lepiej podać ten szczegół jako część pytania, a nie w sekcji komentarzy.

Moje obecne potrzeby są mniej związane z SLA i QOS, a Więcej z wyborem narzędzia do mojej pracy (wiadomości), które mogę używać nawet wtedy, gdy moje wymagania rosną (rozsądnie) w przyszłości. Zaczynam od uproszczonych wymagań na początku i wszyscy wiemy, że wymagania mają tendencję do wzrostu. I NIE , nie szukam jednego narzędzia, które zrobi wszystko. Chcę tylko wiedzieć, czy Redis spełnia typowe wymagania oczekiwane od systemu komunikacyjnego, jak ActiveMQ / RabbitMQ. Oczywiście, jeśli moje potrzeby SLA / QOS są ekstremalne / ekscentryczne, musiałbym uzyskać specjalne narzędzie do zaspokojenia tego. Dla ex: w niektórych przypadki ZeroMQ można wybrać zamiast RabbitMQ ze względu na specyficzne wymagania SLA. Nie mówię o takich specjalnych wymaganiach. Skupiam się na średnich wymaganiach przedsiębiorstwa.

Bałem się (opierając się na moim małym zrozumieniu), że nawet jeśli redis może być używany jako podstawowe narzędzie dla moich dzisiejszych potrzeb przesyłania wiadomości, może to być złe narzędzie do prawdziwej pracy w wiadomościach w przyszłości. Mam doświadczenia z systemami komunikacyjnymi takimi jak ActiveMQ/RabbitMQ i Wiem, że mogą być używane do prostych (racjonalnie) złożone potrzeby przesyłania wiadomości.

Edit2 :

  1. Strona redis wspomina "Redis jest często używany jako serwer wiadomości", ale jak osiągnąć wzorce wiadomości nie jest jasne.

  2. Salvatore sanfilippo wspomina użytkownicy Redis zwykle używają go jako bazy danych, jako magistrali wiadomości lub jako pamięci podręcznej. W jakim stopniu może służyć jako "magistrala komunikacyjna" nie jest jasne.

  3. Kiedy próbowałem dowiedzieć się, co wymagania dotyczące wiadomości JMS, które nie obsługuje redis, natknąłem się na coś, co obsługuje Redis, ale nie obsługuje JMS: pasujące do wzorców subskrypcje czyli klienci mogą subskrybować wzorce w stylu glob, aby otrzymywać wszystkie wiadomości wysyłane do nazw kanałów pasujących do danego wzorca.

Wniosek :

Zdecydowałem się użyć JMS dla moich potrzeb wiadomości i używać Redis do buforowania.

Author: brainOverflow, 2013-05-14

1 answers

Czego potrzebujesz?

Myślę, że pytanie, które powinieneś sobie zadać, brzmi: "jakiej jakości wiadomości potrzebuję, aby wesprzeć moją aplikację?"przed podjęciem decyzji o platformie komunikacyjnej. Kogo obchodzi, czy redis wspiera te wzorce; czy redis spełni Twoje potrzeby SLA i QoS? Najpierw skup się na tym, a następnie podejmij decyzję technologiczną na podstawie tej oceny.

Powiedziawszy to, zaoferuję mój wkład w to, jak możesz to zrobić decyzja...

Wysoce Niezawodne/Trwałe / Trwałe Wiadomości
Weźmy skrajny przypadek: powiedzmy, że budujesz aplikację handlową lub finansową. Takie aplikacje wymagają ścisłych umów SLA, w których najważniejsza jest trwałość, niezawodność, dokładnie-po dostarczeniu i trwałość. Używanie redis jako szkieletu wiadomości w tym przypadku jest prawdopodobnie złym wyborem, z wielu powodów...

  • message redelivery (when the sh * t hits the fan)
  • message store replikacja gdy redis schodzi w dół
  • message transactions (redis can ' t do XA)
  • tolerancja błędów producenta/abonenta i odporność na rozłączenie
  • sekwencjonowanie kolejności wiadomości
  • wysyłanie wiadomości, gdy broker jest wyłączony (store-and-forward)
  • redis jednowątkowy może stać się wąskim gardłem

Jeśli Twój system ma ścisłe umowy SLA, niektóre lub wszystkie z tych problemów z pewnością się pojawią, więc jak poradzisz sobie z tymi ograniczeniami? Możesz wdrożyć niestandardowy kod wokół redis, aby rozwiązać niektóre problemy, ale po co się martwić, gdy Dojrzałe platformy komunikatorów, takie jak ActiveMq, WebsphereMQ i WebLogic JMS oferują trwałość, niezawodność i odporność na błędy? Powiedziałeś, że jesteś na stosie Java / Java EE, więc jesteś w stanie korzystać z jednych z najbardziej solidnych frameworków komunikatorów dostępnych, open source lub komercyjnych. Jeśli dokonujesz transakcji finansowych, musisz rozważyć te opcje.

Wysoka Wydajność / Duże Systemy Rozproszone Wiadomości
Jeśli budujesz sieć społecznościową lub platformę do gier, w której oczekujesz wydajności ponad niezawodność, ZeroMq jest prawdopodobnie dobrym rozwiązaniem. Jest to biblioteka komunikacyjna socket owinięta w komunikatorowe API. Jest zdecentralizowany( bez brokera), bardzo szybki, wysoce odporny i odporny na błędy. Jeśli potrzebujesz robić rzeczy takie jak N-to-N pub/sub z pośrednikami brokerskimi, kontrola przepływu, trwałość wiadomości lub synchronizacja punkt-punkt, ZeroMq oferuje niezbędne udogodnienia i Kod próbki, aby zrobić to wszystko przy minimalnym kodzie, unikając budowania rozwiązań od podstaw. Jest napisany w języku C, ale posiada biblioteki klienckie dla prawie każdego popularnego języka.

Mam nadzieję, że to pomoże...

 16
Author: raffian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-23 18:50:49