Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Bezpieczne nadawanie wiadomości do wykorzystania przez określonego odbiorcę za pomocą redis i python

Na podstawie podanego przykładu i pseudokodu wyobraźmy sobie, że:

  • recipient.user1 otrzymuje 60 wiadomości na minutę
  • i perform_task() wykonanie tej metody zajmuje 2 sekundy.

To, co się tutaj wydarzy, jest oczywiste:opóźnienie między przybyciem nowej wiadomości a jej przetworzeniem będzie tylko rosło z czasem, oddalając się od „przetwarzania w czasie rzeczywistym”.

system throughput = 30 messages/minute

Aby obejść ten problem, możesz utworzyć grupę konsumentów dla user1 . Tutaj możesz mieć 4 różne procesy Pythona działające równolegle ze wszystkimi 4 dołączonymi do tej samej grupy dla user1 . Teraz, gdy przychodzi wiadomość dla user1 jeden z 4 pracowników odbierze go i perform_task() .

system throughput = 120 message/minute

W twoim przykładzie message.acknowledge() tak naprawdę nie istnieje, ponieważ twój czytnik strumienia jest sam (polecenia XREAD).

Gdyby to była grupa, potwierdzenie wiadomości staje się niezbędne, dzięki czemu redis wie, że jeden z członków grupy faktycznie obsłużył tę wiadomość, więc może „ruszyć” (może zapomnieć o fakcie, że ta wiadomość czekała na potwierdzenie) . Podczas korzystania z grup istnieje trochę logiki po stronie serwera, aby zapewnić, że każda wiadomość zostanie dostarczona do jednego z pracowników grup konsumentów raz (polecenia XGROUPREAD). Kiedy klient skończy, wydaje potwierdzenie tej wiadomości (polecenia XACK), aby po stronie serwera „bufor grupy konsumentów” mógł ją usunąć i przejść dalej.

Wyobraź sobie, że pracownik zmarł i nigdy nie potwierdził wiadomości. Dzięki grupie konsumentów możesz uważać na tę sytuację (używając poleceń XPENDING) i działać na nią, na przykład próbując ponownie przetworzyć tę samą wiadomość u innego konsumenta.

Gdy nie używasz grup, serwer redis nie musi „przejść dalej”, „potwierdzenie” staje się w 100% logiką po stronie klienta/biznesu.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Odinstaluj Redis na Mac OSX. Starsza wersja działa po zainstalowaniu aktualizacji

  2. Używanie memcached lub Redis na aws-elasticache

  3. Redis publikuj/subskrybuj:zobacz, jakie kanały są obecnie subskrybowane

  4. Czy biblioteka Hiredis Redis tworzy własny wątek dla asynchronicznych wywołań zwrotnych?

  5. Alternatywy dla struktur zagnieżdżonych w Redis?