2013-05-13 10 views
15

to powstaje pytanie, natknąłem niektórych wspomina (takich jak this), na temat korzystania z oprogramowania, takich jak wiadomości ZeroMQ alongwith Redis, ale ciągle słyszę o Redis sam użył messaging- system. 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?Osiągnięcie JMS/AMQP wzory wykorzystujące wiadomości Redis

Chociaż zastosowanie Redis do buforowania i pub/sub jest dla mnie jasne, że nie jest jasne, czy Redis można stosować w miejscu z pełnoprawnym systemem przesyłania wiadomości, takie jak JMS, AMQP lub ZeroMQ.
Czy w ramach usługi Redis, obsługującej wyłącznie standardy i koncentrując się wyłącznie na funkcjach/funkcjach, obsługiwane są wszystkie modele/modele wiadomości wymagane w systemie przesyłania wiadomości?

Wzory wiadomości mówię to:

  1. RPC/Request-odpowiedź (an example używając ActiveMQ/JMS i another użyciu RabbitMQ/AMQP)
  2. kolejki Pipeline/pracy (raz i na bieżąco po zużyciu każdej wiadomości)
  3. Emisja (wszyscy subskrybowali kanał)
  4. Multicast (filtrowanie wiadomości pod adresem s erver w oparciu o selektory konsumentów)
  5. Jakikolwiek inny wzorzec przesyłania wiadomości?

Jeśli tak, to wydaje się, że Redis rozwiązuje dwa (być może więcej) aspekty naraz: buforowanie i przesyłanie wiadomości.

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

Edit1:
użytkownik: 791406 zadał ważne pytanie:

"? Kogo to obchodzi, jeśli Redis obsługuje tych wzorców; Redis będzie spełniać swoją SLA i QoS potrzebuje"

Pomyślałem, że lepiej jest podać ten szczegół w ramach pytania zamiast w sekcji komentarzy.

Moje bieżące potrzeby są mniej związane z SLA i QOS, a więcej z wyborem narzędzia do mojej pracy (wiadomości), z którego mogę korzystać nawet wtedy, gdy moje wymagania będą rosły (rozsądnie) w przyszłości. Na początku rozpoczynam od uproszczonych wymagań i wszyscy wiemy, że wymagania zwykle rosną. I NO, Nie szukam jednego narzędzia, które to wszystko. Chcę tylko wiedzieć, czy Redis spełnia zwykłe wymagania, jakich oczekuje się od systemu przesyłania wiadomości, np. ActiveMQ/RabbitMQ. Oczywiście, jeśli moje potrzeby związane z SLA/QOS będą ekstremalne/ekscentryczne, potrzebuję specjalnego narzędzia, aby to zaspokoić. Na przykład: W niektórych przypadkach ZeroMQ można było wybrać na RabbitMQ ze względu na specyficzne wymagania SLA. Nie mówię o takich specjalnych wymaganiach. Koncentruję się na średnich wymaganiach przedsiębiorstw.

Obawiałem się (w oparciu o moje małe zrozumienie), że mimo iż redis może być podstawowym narzędziem do dzisiejszych potrzeb komunikacyjnych, może to być niewłaściwe narzędzie do prawdziwej pracy z wiadomościami w przyszłości. Mam doświadczenie z systemami przesyłania wiadomości, takimi jak ActiveMQ/RabbitMQ i wiem, że mogą one być używane do prostych (rozsądnie) złożonych potrzeb komunikacyjnych.

Edit2:

  1. Witryna Redis wspomina "Redis is often used as a messaging server" ale jak osiągnąć wzory wiadomości nie jest jasne.

  2. Salvatore sanfilippo wymienia Redis users tend to use it as a database, as a messaging bus, or as a cache. W jakim stopniu może służyć jako "autobus komunikacyjny" nie jest jasne.

  3. Kiedy próbuje dowiedzieć się, jakie wymagania wiadomości JMS że Redis doesnt wsparcia, natknąłem się na coś, Redis obsługuje ale JMS doesnt: subskrypcje wzorca dopasowania tj Klienci mogą zapisać się do wzorców glob stylu w celu aby odbierać wszystkie wiadomości wysłane do nazw kanałów pasujących do danego wzorca.

Wnioski:

zdecydowałem się użyć JMS dla moich potrzeb komunikacji i Redis używać do buforowania.

Odpowiedz

15

Czego potrzebujesz?

Myślę, że pytanie, które należy sobie zadać, brzmi: "jakiej jakości wiadomości potrzebuję, aby wesprzeć moją aplikację?" przed podjęciem decyzji o platformie przesyłania wiadomości. Kogo to obchodzi, jeśli redis wspiera te wzorce; czy redis spełni twoje wymagania SLA i QoS? Najpierw skup się na tym, a następnie podejmij decyzję techniczną w oparciu o tę ocenę.

Mimo, że będę oferować moje wejście, w jaki sposób można dokonać tej decyzji ...

Wysoko Niezawodna/Trwały/Durable Messaging
Weźmy skrajny przypadek: mówią, że jesteś tworzenie aplikacji handlowej lub finansowej. Takie aplikacje wymagają ścisłych umów SLA, w których ważna jest trwałość wiadomości, niezawodność, dokładność jednorazowej dostawy i trwałość. Korzystanie Redis jako kręgosłup wiadomości w tym przypadku, to chyba zły wybór, wiele powodów ...

  • wiadomość ponownej dostawy (gdy sh * t uderza Fan)
  • wiadomość sklepu replikację gdy Redis idzie w dół
  • transakcje wiadomość (Redis nie może zrobić XA)
  • producent/abonent odporność na uszkodzenia i odłączenie sprężystość
  • kolejność wiadomość sekwencjonowanie
  • wysyłania wiadomości, gdy pośrednik jest w dół (store-and-forward)
  • jednowątkowy Redis może stać się wąskim gardłem

Jeśli system ma ścisły SLA, niektóre lub wszystkie z tych kwestii będzie zdecydowanie powstać, tak jak będzie obsługiwać te ograniczenia?Możesz zaimplementować niestandardowy kod wokół redis, aby rozwiązać niektóre problemy, ale po co martwić się, gdy platformy obsługujące dojrzałe wiadomości, takie jak ActiveMq, WebsphereMQ i WebLogic JMS, zapewniają trwałość, niezawodność i odporność na awarie? Powiedziałeś, że jesteś na stosie EE Java/Java, więc możesz korzystać z najbardziej odpornych frameworków komunikacyjnych, zarówno open source, jak i komercyjnych. Jeśli robisz transakcje finansowe, musisz rozważyć te opcje.

High Performance/Large rozproszonych systemów Messaging
Jeśli budujesz sieć społeczną lub platformę do gier, w którym chcesz wydajności ponad niezawodności ZeroMq jest chyba dobrym rozwiązaniem. Jest to biblioteka komunikacyjna gniazda zapakowana w podobny do komunikatora interfejs API. Jest zdecentralizowany (bez brokera), bardzo szybki, odporny i odporny na błędy. Jeśli chcesz robić takie rzeczy jak pub/sub-N-to-N z pośrednikami pośredniczącymi, kontrolą przepływu, trwałością wiadomości lub synchronizacją punkt-punkt, ZeroMq oferuje niezbędne urządzenia i próbki kodu, aby zrobić to wszystko przy minimalnym kodzie, unikając jednocześnie budowanie rozwiązań od podstaw. Jest napisany w języku C, ale posiada biblioteki klienta dla niemal każdego popularnego języka.

nadzieję, że pomoże ...

+1

+1 dla „Mimo, że będę oferować moje wejście w jaki sposób można uczynić tę decyzję”! To było naprawdę pomocne. Dodam więcej szczegółów do mojego pytania na podstawie twoich komentarzy. – brainOverflow

+0

IMHO, punkty, o których wspomniałeś w punkcie "Wysoce niezawodne/trwałe/trwałe wiadomości" to wszystkie wymagania, które powinien zapewniać prawdziwy system przesyłania wiadomości. To, czy użytkownik tego systemu umożliwia to, czy nie, jest innym pytaniem. Dzisiaj mogę wybrać nietrwały komunikat. Jutro mogę potrzebować trwałych wiadomości w niektórych kolejkach. Nie chcę wtedy być zmuszonym do innego rozwiązania do przesyłania wiadomości. Właśnie dlatego eksploruję komunikaty Redis w.r.t. – brainOverflow

+0

Właśnie o to mi chodziło. Wszystkie te funkcje są standardowymi ofertami od dojrzałych platform komunikacyjnych, ale nie z redis, więc jeśli potrzebujesz niezawodności, trwałości, trwałości itp., Redis może nie być najlepszym wyborem, ale znowu jest oparty na twoich potrzebach. PS: Nie ma czegoś takiego jak "średnie" wymagania przedsiębiorstw, wszystkie wymagania, duże i małe, są specyficzne :-) – raffian