Do czego używacie Redisa i message brokerów?

0

Do czego używacie Redisa i message brokerów w pracy albo w domu?
Mając do wyboru MySQL i PostgreSQL oraz bazy nierelacyjne typu MongoDB nie wiem gdzie moglbym uzywac Redisa z korzyścią.
Brokery już bardziej ale też nie do końca kapuję ich wykorzystanie. Zazwyczaj to działa tak, że się stawia serwer brokera i on może przetwarzać jedną wiadomość naraz. Wiem że są szybkie, ale jeśli np tysiąc użytkowników coś zechce w jednej sekundzie to chyba ten ostatni dostanie z opóźnieniem.

Pozdrawiam!

1

Message brokera używamy w pracy do przetwarzania ciągów operacji zdefiniowanych przez użytkownika, mamy coś w stylu:

(filter profiles) |----> (send email) |-- wait 2d --> (opened?) |- yes --> (do something)
                                                                |- no ---> (do something else)

Edit:
Dodam jak w zarysie wygląda przetwarzanie takiego "flow" przez broker:

Ogólnie mamy kilka(naście) różnych kolejek i workerów na nich operujących, w uproszczeniu przykład wygląda tak:

  1. do piewszej kolejki trafiają pary profil-zapytanie, jak spełnia warunek to worker bierze pierwszą akcję i wpycha ją do kolejnej kolejki,
  2. kolejny worker sprawdza typ akcji i pakuje ją do wyspecjalizowanej kolejki (z delayem jeśli jest),
  3. wyspecjalizowany worker robi co ma robić (w tym przypadku wysyła maila) i pakuje kolejną akcję (jeśli istnieje) do poprzedniej kolejki,
  4. analogicznie jak w pkt 2
  5. wyspecjalizowany worker robi co ma robić (w tym przypadku podejmuje decyzję) i pakuje jedno z rozgałęzień do kolejki obsługiwanej przez worker z pkt 2
  6. wyspecjalizowany worker robi co ma robić (do something lub do something else)
0

Message broker (RabbitMQ):

  1. Generowanie Exceli. Użytkownik chce wygenerować jakiś raport za dany miesiąc, więc sobie klika generuj -> my tworzymy wiadomość i wpychamy ją do kolejki -> użytkownik zostaje poinformowany, że jak sie raport wygeneruje to dostanie na email powiadomienie, że gotowe -> worker jak jest wolny zdejmuje z kolejki naszą wiadomość -> generuje sobie raport -> 15 min później wysyła email, że raport jest gotowy.
  2. Wysyłanie emaili.
  3. Użytkownik może odpisać na SMS, który jest do niego wysyłany. W oparciu o to co odpisze dzieją się jakieś czary, które mogłą trochę zająć (w sensie przetworzenie żądania). Jeżeli SMSApi pingnie nas równolegle kilka razy, to się robi problem, bo np. tylko jeden użytkownik (pierwszy, albo spełniający jakieś warunki) może coś tam zrobić. Trzeba te odpowiedzi przetwarzać pojedyńczo, więc zamiast je przetwarzać od razu jak SMSApi nas zpinguje, to wrzucamy do rabbita wiadomość, którą worker sobie zdejmuje po kolei i przetwarza jedną na raz, więc nie ma race conditions.
  4. Coś czego nie używamy, ale rabbit może być tu dobry: komunikacja między skryptami. Masz np. całą stronę w PHP i jakiś skrypt, który coś tam robi w C lub C++ czy tam node.js. Komunikację między PHP i nodejs robisz z uzyciem rabbitmq.

Redis:

  1. Leaderboardy.
  2. Sesja
  3. Countery (czyli leaderboardy)
  4. Wyświetlanie kto jest online
    I konkretny przykład: jezeli ktos nie odpisze na sms x razy to coś tam się dzieje. Liczbe wysyłanych smsów zamiast w bazie można wrzucać do redisa. Zaoszczędzasz sobie dodatkowych zapytań i inserów przy wysyłaniu każdej wiadomości, których wychodzi od zarąbania.

Więcej na temat redisa:
http://highscalability.com/blog/2011/7/6/11-common-web-use-cases-solved-in-redis.html
http://www.paperplanes.de/2010/2/16/a_collection_of_redis_use_cases.html

Znalazłem jeszcze link do prezentacji która kiedyś oglądałem

0

Widze, że próbujesz porównać Redisa do postgresa, mysqla i mongo. To nie ma żadnego sensu. Jeśli analizujemy szybkość zapisu i odczytu to Redis wygrywa z nimi wszystkim. Do mysqla i postgresa nie ma co nawet porównywać. Tutaj natomiast masz Redis vs Mongo:
http://badrit.com/blog/2013/11/18/redis-vs-mongodb-performance#.WcyjIhcwhhE

0

Dzięki Maciej Cąderek i Desu. Super opisane.
Tylko o co chodzi z tymi Leaderboardami w Redisie? Jak to wygląda?

0

Wystarczy, że wpiszesz sobie redis technologia leaderboard example np. https://joshtronic.com/2013/07/05/how-to-build-a-leaderboard-with-php-and-redis/ i masz :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1