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

Utilizzo di Celery per query API esterne sincrone in tempo reale con Gevent

Cercherò di rispondere a quante più domande possibile.

Si può (e dovrebbe) essere fatto usando il sedano?

Sì, puoi

Sto usando django. Dovrei provare a usare il sedano django sul sedano semplice?

Django ha un buon supporto per il sedano e renderebbe la vita molto più facile durante lo sviluppo

Ognuna di queste attività potrebbe generare altre attività, come la registrazione di ciò che è appena accaduto o altri tipi di ramificazioni. È possibile?

Puoi avviare le attività secondarie all'interno di un'attività con ignore_result =true solo per gli effetti collaterali

Le attività potrebbero restituire i dati che ottengono, ovvero potenzialmente Kb di dati tramite sedano (redis come sottostante in questo caso) o dovrebbero scrivere nel DB e semplicemente passare i puntatori a quei dati in giro?

Suggerirei di mettere i risultati in db e quindi passare l'id in giro renderebbe felici il tuo broker e i tuoi lavoratori. Meno trasferimento dati/decapaggio ecc.

Ogni attività è per lo più legata all'I/O e inizialmente doveva semplicemente utilizzaregevent dal thread Web per aprire a ventaglio le richieste e saltare l'intero progetto di accodamento, ma si scopre che sarebbe stato riutilizzato per un componente diverso. Cercare di mantenere l'intero viaggio di andata e ritorno attraverso theQs in tempo reale richiederà probabilmente che molti lavoratori si assicurino che le code siano per lo più vuote. O è? L'esecuzione di gevent workerpool aiuterebbe in questo?

Poiché il processo è legato a io, gevent sarà sicuramente di aiuto qui. Tuttavia, quanto dovrebbe essere la concorrenza per gevent pool'd worker, è qualcosa a cui sto cercando una risposta anche io.

Devo scrivere attività specifiche per gevent o utilizzerò il pool di gevent per gestire automaticamente l'IO di rete?

Gevent esegue automaticamente la patch della scimmia quando la usi in piscina. Ma le librerie che usi dovrebbero giocare bene con gevent. Altrimenti, se analizzi alcuni dati con simplejson (che è scritto in c), ciò bloccherebbe altri greenlet di gevent.

È possibile assegnare priorità a determinate attività?

Non è possibile assegnare priorità specifiche a determinate attività, ma indirizzarle a code diverse e farle ascoltare da un numero variabile di lavoratori. Maggiore è il numero di lavoratori per una particolare coda, maggiore sarà la priorità di tali attività su quella coda.

Che ne dici di tenerli in ordine?

La catena è un modo per mantenere l'ordine. L'accordo è un buon modo per riassumere. Il sedano se ne prende cura, quindi non devi preoccuparti di questo. Anche utilizzando gevent pool, alla fine sarebbe possibile ragionare sull'ordine di esecuzione delle attività.

Dovrei saltare il sedano e usare solo il kombu?

Puoi, se il tuo caso d'uso non cambierà in qualcosa di più complesso nel tempo e anche se sei disposto a gestire i tuoi processi tramite celeryd + supervisionato da solo. Inoltre, se non ti interessa il monitoraggio delle attività fornito con strumenti come celerymon, flower, ecc.

Sembra che il sedano sia più orientato verso "compiti" che possono essere posticipati e non sono sensibili al tempo.

Il sedano supporta anche le attività pianificate. Se è questo che intendevi con quella affermazione.

Sono pazzo per cercare di mantenere questo tempo reale?

Non credo. Finché i tuoi consumatori saranno abbastanza veloci, sarà buono come il tempo reale.

Quali altre tecnologie dovrei guardare?

Per quanto riguarda il sedano, dovresti scegliere saggiamente il salvataggio dei risultati. Il mio consiglio sarebbe quello di utilizzare la cassandra. È utile per i dati in tempo reale (sia in scrittura che in query). Puoi anche usare redis o mongodb. Vengono forniti con la propria serie di problemi come archivio dei risultati. Ma poi un piccolo ritocco alla configurazione può fare molto.

Se intendi qualcosa di completamente diverso dal sedano, puoi guardare asyncio (python3.5) e zeromq per ottenere lo stesso. Non posso commentare di più su questo però.