sql >> Databasteknik >  >> NoSQL >> Redis

Använder selleri för realtid, synkron extern API-fråga med Gevent

Jag ska försöka svara på så många av frågorna som möjligt.

Kan detta (och bör detta) göras med selleri?

Ja det kan du

Jag använder django. Ska jag försöka använda django-selleri framför vanlig selleri?

Django har ett bra stöd för selleri och skulle göra livet mycket lättare under utvecklingen

Var och en av dessa uppgifter kan leda till andra uppgifter - som att logga vad som just hände eller andra typer av förgrening. Är detta möjligt?

Du kan starta deluppgifter från en uppgift med ignore_result =true för endast biverkningar

Kan uppgifter vara att returnera den data de får - det vill säga potentiellt Kb data via selleri (återges som underliggande i det här fallet) eller ska de skriva till DB och bara skicka pekare till den informationen?

Jag skulle föreslå att du lägger resultaten i db och sedan skickar id runt skulle göra din mäklare och arbetare nöjda. Mindre dataöverföring/betning etc.

Varje uppgift är mestadels I/O-bunden, och skulle till en början bara använda uppgifter från webbtråden för att fläkta ut förfrågningarna och hoppa över hela ködesignen, men det visar sig att den skulle återanvändas för en annan komponent. Att försöka hålla hela rundresan genom Qs i realtid kommer förmodligen att kräva att många arbetare ser till att kön för det mesta är tomma. Eller är det? Skulle körning av gevent workerpool hjälpa till med detta?

Eftersom processen är io bunden kommer gevent definitivt att hjälpa här. Men hur mycket samtidigheten bör vara för en arbetstagare med pool, är något som jag också letar efter svar.

Måste jag skriva givna specifika uppgifter eller kommer jag att använda gevent pool deal med nätverks-IO automatiskt?

Gevent lappar apan automatiskt när du använder den i poolen. Men de bibliotek som du använder bör spela bra med gevent. Annars, om du analyserar vissa data med simplejson (som är skrivet i c) så skulle det blockera andra givna greenlets.

Är det möjligt att prioritera vissa uppgifter?

Du kan inte tilldela specifika prioriteringar till vissa uppgifter, utan dirigera dem till olika köer och sedan få dessa köer att lyssna på av olika antal arbetare. Ju fler arbetare för en viss kö, desto högre prioritet skulle de uppgifterna ha i den kön.

Vad sägs om att hålla dem i ordning?

Kedja är ett sätt att upprätthålla ordning. Ackord är ett bra sätt att sammanfatta. Selleri tar hand om det, så du behöver inte oroa dig för det. Även när man använder gevent pool, skulle det i slutet vara möjligt att resonera kring ordningen för utförandet av uppgifterna.

Ska jag skippa selleri och bara använda kombu?

Du kan, om ditt användningsfall inte kommer att förändras till något mer komplext med tiden och även om du är villig att hantera dina processer genom celeryd + supervisord själv. Dessutom, om du inte bryr dig om uppgiftsövervakningen som kommer med verktyg som selleri, blomma, etc.

Det verkar som att selleri är mer inriktat på "uppgifter" som kan skjutas upp och som inte är tidskänsliga.

Selleri stöder också schemalagda uppgifter. Om det var det du menade med det påståendet.

Är jag galen för att försöka hålla detta i realtid?

Jag tror inte det. Så länge dina konsumenter är tillräckligt snabba kommer det att vara lika bra som realtid.

Vilka andra tekniker ska jag titta på?

När det gäller selleri, bör du välja resultat butik klokt. Mitt förslag skulle vara att använda Cassandra. Det är bra för realtidsdata (både skriv- och frågemässigt). Du kan också använda redis eller mongodb. De kommer med sin egen uppsättning problem som resultatbutik. Men då kan lite justeringar i konfigurationen räcka långt.

Om du menar något helt annat än selleri, kan du titta på asyncio (python3.5) och zeromq för att uppnå detsamma. Jag kan dock inte kommentera det mer.




  1. MongoDB $dateFromParts

  2. Relationellt DB i minnet?

  3. MongoDB-servern kan fortfarande nås utan inloggningsuppgifter

  4. Finns det något sätt att flushall på ett kluster så att alla nycklar från master och slavar raderas från db