sql >> Database >  >> NoSQL >> Redis

Celery gebruiken voor realtime, synchrone externe API-query's met Gevent

Ik zal proberen zoveel mogelijk vragen te beantwoorden.

Kan (en moet) dit met bleekselderij?

Ja dat kan

Ik gebruik django. Moet ik django-selderij proberen te gebruiken over gewone bleekselderij?

Django heeft een goede ondersteuning voor selderij en zou het leven veel gemakkelijker maken tijdens de ontwikkeling

Elk van die taken kan leiden tot andere taken - zoals het loggen van wat er net is gebeurd of andere soorten vertakkingen. Is dit mogelijk?

U kunt subtaken starten vanuit een taak met negeer_result =true voor alleen bijwerkingen

Zouden taken de gegevens kunnen retourneren die ze krijgen - d.w.z. mogelijk Kb aan gegevens via selderij (in dit geval opnieuw als onderliggende waarde) of moeten ze naar de DB schrijven en gewoon verwijzingen naar die gegevens doorgeven?

Ik zou willen voorstellen om de resultaten in db te zetten en vervolgens het doorgeven van de id om uw makelaar en werknemers blij te maken. Minder gegevensoverdracht/beitsen enz.

Elke taak is grotendeels I/O-gebonden en zou aanvankelijk alleen maar gebruik maken van de webthread om de verzoeken uit te waaieren en het hele wachtrijontwerp over te slaan, maar het bleek dat het opnieuw zou worden gebruikt voor een ander onderdeel. Als u probeert de hele rondreis door de Q's in realtime te houden, zullen waarschijnlijk veel werknemers nodig zijn om ervoor te zorgen dat de wachtrijen grotendeels leeg zijn. Of is het? Zou het uitvoeren van de gevent workerpool hierbij helpen?

Aangezien het proces io-gebonden is, zal gevent hier zeker helpen. Echter, hoeveel de gelijktijdigheid zou moeten zijn voor de gevent pool'd worker, is iets waar ik ook naar op zoek ben.

Moet ik gevent specifieke taken schrijven of gebruik ik de gevent pooldeal automatisch met netwerk IO?

Gevent patcht de aap automatisch als je hem in het zwembad gebruikt. Maar de bibliotheken die u gebruikt, zouden goed moeten spelen met gevent. Anders, als je sommige gegevens ontleden met simplejson (die is geschreven in c), dan zou dat andere gevent greenlets blokkeren.

Is het mogelijk om prioriteit toe te kennen aan bepaalde taken?

U kunt aan bepaalde taken geen specifieke prioriteiten toewijzen, maar ze naar een andere wachtrij leiden en vervolgens naar die wachtrijen laten luisteren door een variërend aantal werknemers. Hoe meer werkers voor een bepaalde wachtrij, hoe hoger de prioriteit van die taken in die wachtrij.

Hoe zit het met het op orde houden ervan?

Ketting is een manier om de orde te handhaven. Akkoord is een goede manier om samen te vatten. Selderij zorgt ervoor, dus u heeft er geen omkijken naar. Zelfs wanneer gevent pool wordt gebruikt, zou het uiteindelijk mogelijk zijn om te redeneren over de volgorde van de uitvoering van de taken.

Moet ik bleekselderij overslaan en alleen kombu gebruiken?

Dat kan, als uw use case in de loop van de tijd niet verandert in iets complexer en ook als u bereid bent om uw processen door celeryd + zelf te beheren. Ook als u niet geïnteresseerd bent in de taakbewaking die wordt geleverd met hulpmiddelen zoals bleekselderij, bloem, enz.

Het lijkt erop dat selderij meer gericht is op "taken" die kunnen worden uitgesteld en niet tijdgevoelig zijn.

Celery ondersteunt ook geplande taken. Als dat is wat je bedoelde met die uitspraak.

Ben ik gek omdat ik probeer deze realtime bij te houden?

Ik denk het niet. Zolang uw consumenten snel genoeg zijn, zal het zo goed zijn als realtime.

Naar welke andere technologieën moet ik kijken?

Met betrekking tot selderij, moet u verstandig de resultatenwinkel kiezen. Mijn suggestie zou zijn om cassandra te gebruiken. Het is goed voor realtime gegevens (zowel voor schrijven als voor query's). Je kunt ook redis of mongodb gebruiken. Ze komen met hun eigen reeks problemen als resultaatopslag. Maar dan kan een kleine aanpassing in de configuratie een lange weg gaan.

Als je iets heel anders bedoelt dan bleekselderij, dan kun je kijken naar asyncio (python3.5) en nulomq om hetzelfde te bereiken. Ik kan daar echter geen commentaar meer op geven.




  1. De snelste MongoDB op Azure!

  2. Hoe de uitvoer van een redis-abonnement om te leiden?

  3. Botsingskans van ObjectId versus UUID in een groot gedistribueerd systeem

  4. Redis Vue-bureaublad