sql >> Databáze >  >> NoSQL >> Redis

Použití Celery pro Realtime, Synchronní externí API dotazování s Gevent

Pokusím se odpovědět na co nejvíce otázek.

Lze to (a mělo by to) provést pomocí celeru?

Ano, můžete

Používám django. Mám zkusit použít django-celer přes obyčejný celer?

Django má dobrou oporu pro celer a během vývoje by výrazně usnadnil život

Každý z těchto úkolů může vést k dalším úkolům – jako je protokolování toho, co se právě stalo, nebo jiné typy rozvětvení. Je to možné?

Dílčí úkoly můžete spustit v rámci úkolu s ignore_result =true pouze pro vedlejší efekty

Mohly by úlohy vracet data, která získají – tj. potenciálně Kb dat přes celer (redis jako podklad v tomto případě), nebo by měly zapisovat do DB a pouze předávat ukazatele na tato data?

Navrhoval bych umístit výsledky do db a pak předávání id kolem by udělalo vašemu makléři a pracovníkům radost. Menší přenos dat/výběr atd.

Každá úloha je většinou vázána na I/O a původně se chystala pouze použít gevent z webového vlákna k rozvětvení požadavků a přeskočení celého návrhu řazení do fronty, ale ukázalo se, že by byla znovu použita pro jinou komponentu. Snaha udržet celou zpáteční cestu přes Qs v reálném čase bude pravděpodobně vyžadovat mnoho pracovníků, aby se ujistili, že fronta je většinou prázdná. Nebo je to? Pomohlo by s tím spuštění gevent workerpool?

Vzhledem k tomu, že proces je io vázán, gevent zde určitě pomůže. Odpověď však hledám také, jak velká by měla být souběžnost pro pracovníka gevent pool'd.

Musím psát úkoly specifické pro gevent nebo se pomocí gevent pooldeal se síťovým IO automaticky?

Gevent provádí opravy opice automaticky, když ji používáte v bazénu. Ale knihovny, které používáte, by si s geventem měly hrát dobře. V opačném případě, pokud analyzujete některá data pomocí simplejson (který je napsán v c), pak by to zablokovalo další gevent greenlets.

Je možné přiřadit prioritu určitým úkolům?

Určitým úkolům nemůžete přiřadit konkrétní priority, ale nasměrovat je do jiné fronty a pak nechat tyto fronty poslouchat různý počet pracovníků. Čím více pracovníků pro konkrétní frontu, tím vyšší bude priorita těchto úkolů v této frontě.

A co v nich udržovat pořádek?

Řetěz je jedním ze způsobů, jak udržet pořádek. Akord je dobrý způsob, jak to shrnout. Celer se o to postará, takže se o něj nemusíte starat. I při použití fondu gevent by bylo nakonec možné uvažovat o pořadí provádění úloh.

Mám vynechat celer a použít jen kombu?

Můžete, pokud se váš případ použití časem nezmění na něco složitějšího a také pokud jste ochotni řídit své procesy prostřednictvím celeryd + supervizorem sami. Také, pokud se nestaráte o monitorování úkolů, které přichází s nástroji, jako je celerymon, květina atd.

Zdá se, že celer je zaměřen spíše na „úkoly“, které lze odložit a nejsou časově citlivé.

Celer podporuje také naplánované úkoly. Pokud jste to tímto prohlášením mysleli.

Jsem blázen, že se snažím udržet tento skutečný čas?

Myslím, že ne. Dokud budou vaši zákazníci dostatečně rychlí, bude to stejně dobré jako v reálném čase.

Na jaké další technologie bych se měl podívat?

Pokud jde o celer, měli byste si obchod s výsledky vybrat moudře. Můj návrh by byl použít cassandru. Je to dobré pro data v reálném čase (jak pro zápis, tak pro dotazy). Můžete také použít redis nebo mongodb. Přicházejí s vlastní sadou problémů jako výsledek úložiště. Ale pak může malé vyladění konfigurace znamenat dlouhou cestu.

Pokud máte na mysli něco úplně jiného než celer, pak se můžete podívat na asyncio (python3.5) a zeromq, abyste toho dosáhli. Více se k tomu ale nemohu vyjádřit.




  1. mangoose jedinečný:pravda, nefunguje

  2. Špatný výkon agregace vyhledávání

  3. ScaleGrid oznamuje sdílený hosting MongoDB na Amazon AWS

  4. Redis Stack Exchange, jak odstranit nebo získat klíče podle vzoru