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

Używanie selera do synchronicznych zapytań w zewnętrznym interfejsie API w czasie rzeczywistym za pomocą Gevent

Postaram się odpowiedzieć na jak najwięcej pytań.

Czy można to (i czy należy) zrobić przy użyciu selera?

Tak, możesz

Używam django. Czy powinienem spróbować użyć django-selery zamiast zwykłego selera?

Django ma dobre wsparcie dla selera i znacznie ułatwiłoby życie podczas rozwoju

Każde z tych zadań może wywoływać inne zadania - takie jak rejestrowanie tego, co się właśnie wydarzyło lub inne rodzaje rozgałęzień. Czy to możliwe?

Możesz rozpocząć podzadania od zadania z ignore_result =true tylko dla efektów ubocznych

Czy zadania mogą zwracać dane, które otrzymują - tj. potencjalnie Kb danych za pośrednictwem selera (w tym przypadku redis jako podstawa) czy też powinny pisać do bazy danych i po prostu przekazywać wskaźniki do tych danych?

Sugerowałbym umieszczenie wyników w db, a następnie przekazanie identyfikatora uszczęśliwiłoby twojego brokera i pracowników. Mniej transferu danych/wytrawiania itp.

Każde zadanie jest w większości związane z operacjami I/O i początkowo zamierzało użyć gevent z wątku sieciowego do rozłożenia żądań i pominięcia projektowania całej kolejki, ale okazało się, że byłoby to ponownie użyte dla innego komponentu. Próba utrzymania całej podróży w obie strony przez Q w czasie rzeczywistym będzie prawdopodobnie wymagała wielu pracowników upewnienia się, że kolejki są w większości puste. Albo to jest? Czy pomogłoby w tym uruchomienie grupy pracowników gvent?

Ponieważ proces jest związany z io, geven na pewno tu pomoże. Jednak to, jaka powinna być współbieżność dla pracownika z puli geven, też szukam odpowiedzi.

Czy muszę pisać konkretne zadania gevent, czy też użyję gevent pooldeal z IO sieci automagicznie?

Gevent robi łatanie małpy automatycznie, gdy używasz go w basenie. Ale biblioteki, których używasz, powinny dobrze współpracować z gevent. W przeciwnym razie, jeśli parsujesz jakieś dane za pomocą simplejson (który jest napisany w c), to zablokuje to inne greenlety geven.

Czy można nadać priorytet niektórym zadaniom?

Nie można przypisać określonych priorytetów do określonych zadań, ale należy skierować je do innej kolejki, a następnie nasłuchiwać tych kolejek przez różną liczbę pracowników. Im więcej pracowników w danej kolejce, tym wyższy byłby priorytet tych zadań w tej kolejce.

A co z utrzymaniem ich w porządku?

Łańcuch to jeden ze sposobów na utrzymanie porządku. Akord to dobry sposób na podsumowanie. Dba o to seler, więc nie musisz się o to martwić. Nawet korzystając z puli gevent, na końcu można by uzasadnić kolejność wykonywania zadań.

Czy powinienem pominąć seler i po prostu użyć kombu?

Możesz, jeśli Twój przypadek użycia nie zmieni się z czasem w coś bardziej złożonego, a także jeśli chcesz samodzielnie zarządzać swoimi procesami przez celeryd + supervisord. Ponadto, jeśli nie zależy Ci na monitorowaniu zadań za pomocą narzędzi takich jak seler, kwiat itp.

Wygląda na to, że seler jest bardziej nastawiony na „zadania”, które można odłożyć na później i nie są wrażliwe na czas.

Seler obsługuje również zaplanowane zadania. Jeśli to masz na myśli, mówiąc o tym stwierdzeniu.

Czy jestem szalony, że staram się zachować to w czasie rzeczywistym?

Nie sądzę. Tak długo, jak Twoi konsumenci są wystarczająco szybcy, będzie to tak dobre, jak w czasie rzeczywistym.

Na jakie inne technologie powinienem się przyjrzeć?

Jeśli chodzi o seler, należy mądrze wybierać sklep z wynikami. Moją sugestią byłoby użycie cassandry. Jest to dobre dla danych w czasie rzeczywistym (zarówno pod względem zapisu, jak i zapytań). Możesz także użyć redis lub mongodb. W rezultacie przychodzą z własnym zestawem problemów. Ale małe poprawki w konfiguracji mogą zajść daleko.

Jeśli masz na myśli coś zupełnie innego niż seler, możesz spojrzeć na asyncio (python3.5) i zeromq, aby osiągnąć to samo. Nie mogę jednak więcej komentować.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Serializacja i deserializacja Redis

  2. Redis publikuj-subskrybuj:czy Redis gwarantuje dostarczenie wiadomości nawet przy ogromnym stresie?

  3. Udostępniać sesje z redis i paszportem na subdomenie?

  4. Sortowanie dynamiczne z Redis

  5. kłopoty z ustawieniem backendu zadań selerowych w Pythonie