sql >> Database teknologi >  >> NoSQL >> Redis

Brug af selleri til realtid, synkron ekstern API-forespørgsel med Gevent

Jeg vil forsøge at besvare så mange af spørgsmålene som muligt.

Kan dette (og skal dette) gøres ved hjælp af selleri?

Ja det kan du

Jeg bruger django. Skal jeg prøve at bruge django-selleri frem for almindelig selleri?

Django har en god støtte til selleri og ville gøre livet meget lettere under udvikling

Hver enkelt af disse opgaver kan afføde andre opgaver - såsom at logge, hvad der lige er sket, eller andre former for forgrening. Er dette muligt?

Du kan starte underopgaver fra en opgave med ignore_result =true for kun bivirkninger

Kan opgaver være at returnere de data, de får - det vil sige potentielt Kb data gennem selleri (gælder som underliggende i dette tilfælde), eller skal de skrive til DB'en og bare sende pointere til disse data rundt?

Jeg vil foreslå, at du sætter resultaterne i db og derefter sender id rundt, vil gøre din mægler og dine medarbejdere glade. Mindre dataoverførsel/bejdsning osv.

Hver opgave er for det meste I/O-bundet og skulle oprindeligt bare bruge noget fra webtråden til at blæse forespørgslerne ud og springe hele kødesignet over, men det viser sig, at det ville blive genbrugt til en anden komponent. At forsøge at holde hele rundturen gennem Qs i realtid vil sandsynligvis kræve, at mange arbejdere sørger for, at køen for det meste er tomme. Eller er det? Ville kørsel af gevent workerpool hjælpe med dette?

Da processen er io bundet, vil gevent helt sikkert hjælpe her. Men hvor meget samtidigheden skal være for givet pool'd worker, er noget, jeg også leder efter svar på.

Skal jeg skrive givet-specifikke opgaver eller vil ved hjælp af gevent-poolen handle med netværks-IO automatisk?

Gevent laver aben patching automatisk, når du bruger den i poolen. Men de biblioteker, du bruger, bør spille godt med gevent. Ellers, hvis du parser nogle data med simplejson (som er skrevet i c), så ville det blokere andre gavt greenlets.

Er det muligt at prioritere bestemte opgaver?

Du kan ikke tildele specifikke prioriteter til bestemte opgaver, men dirigere dem til en anden kø og derefter få disse køer til at blive lyttet til af varierende antal arbejdere. Jo flere arbejdere for en bestemt kø, jo højere vil prioriteringen af ​​opgaverne være i den kø.

Hvad med at holde dem i orden?

Kæde er en måde at opretholde orden på. Akkord er en god måde at opsummere på. Selleri tager sig af det, så du behøver ikke bekymre dig om det. Selv når man bruger gevent pool, ville det i sidste ende være muligt at ræsonnere om rækkefølgen af ​​opgavens udførelse.

Skal jeg springe selleri over og bare bruge kombu?

Det kan du, hvis din use case ikke ændrer sig til noget mere komplekst over tid og også hvis du er villig til selv at styre dine processer gennem celeryd + supervisord. Også, hvis du er ligeglad med opgaveovervågningen, der følger med værktøjer såsom selleri, blomst osv.

Det ser ud til, at selleri er mere rettet mod "opgaver", der kan udskydes og ikke er tidsfølsomme.

Selleri understøtter også planlagte opgaver. Hvis det er det, du mente med det udsagn.

Er jeg skør, fordi jeg prøver at holde dette i realtid?

Det tror jeg ikke. Så længe dine forbrugere er hurtige nok, vil det være så godt som realtid.

Hvilke andre teknologier skal jeg se på?

Med hensyn til selleri, bør du vælge resultat butik med omhu. Mit forslag ville være at bruge cassandra. Det er godt til realtidsdata (både skrive- og forespørgselsmæssigt). Du kan også bruge redis eller mongodb. De kommer med deres eget sæt problemer som resultatbutik. Men så kan en lille justering i konfigurationen gå langt.

Hvis du mener noget helt andet end selleri, så kan du se på asyncio (python3.5) og zeromq for at opnå det samme. Jeg kan dog ikke kommentere mere på det.




  1. MongoDB $currentDate

  2. Hvordan pagineres med Mongoose i Node.js?

  3. Kan du ikke få resultater fra Redis ved hjælp af Crud Repository i Spring Boot?

  4. Meltdown Performance Impact on MongoDB:AWS, Azure &DigitalOcean