Esecuzione di Celery con RabbitMQ

C’è stata un’esplosione di interesse nell’elaborazione distribuita.attività più lunghe in esecuzione su molti lavoratori diversi. Gli intermediari di messaggiocome RabbitMQ forniscono la comunicazione tra i nodi. L’esecuzione di clienti Celeryclients, lavoratori e broker correlati nel cloud offre al tuo team il potere di gestire e ridimensionare facilmente processi di back-end, lavori e attività amministrative di base.

Che cos’è il sedano?

Celeryè una coda di lavoro distribuita che semplifica la gestione della distribuzione delle attività.Gli sviluppatori suddividono i set di dati in batch più piccoli per l’elaborazione di Celery in un lavoro noto come lavoro.

Si distribuiscono uno o più processi di lavoro che si connettono a una coda di messaggi (broker basato su anAMQP o SQS). I client inviano i lavori al broker di messaggi e la coda è in ascolto per le richieste di lavoro utilizzando Celery. Il broker di messaggi distribuisce quindi le richieste di lavoro ai lavoratori.I lavoratori aspettano lavori da Celery ed eseguono le attività.Al termine, il lavoratore invia un risultato a un’altra coda per il client toprocess.

In Celery, i client e i lavoratori non comunicano direttamente tra loro ma attraverso le code di messaggi.I client inviano messaggi utilizzando le attività nel sistema tanto quanto una procedura remota avvia una funzione. I client non hanno bisogno di comprendere il formato attuale ma annotare le funzioni e registrarle con il framework:

@app.task def send_hello(x, y): return ‘Hello’ # overrides the broker from your configuration app = Celery('app_name', broker='...') app.tasks 

Usando il binding Python ufficiale, abbiamo creato un’attività e l’abbiamo registrata conil sistema. È possibile utilizzare il metodoapply_async(function, args, kwargs,...)per inviare l’attività alla coda appropriata. Il client chiama get sul futuro restituito da apply_asyncper bloccare e recuperare la risposta o utilizza il metodo state per avviare una chiamata al broker controllando lo stato della richiesta.

Un messaggio indirizzato a una coda attende nella coda fino a quando qualcuno lo consuma e il messaggio viene eliminato dalla coda quando è stato riconosciuto.

Risultati in Sedano

È possibile tenere traccia degli stati di un task. Il sedano può ancheportare o inviare gli stati. Quindi, invece di usare la funzione get, è possibileper spingere i risultati su un backend diverso. Ci sono diversi resultbackends incorporati per choosefrom includingSQLAlchemy, specificdatabasesandRPC (RabbitMQ).

Per impostazione predefinita, Celery è configurato per non consumare i risultati delle attività. L’impostazione dell’opzione di configurazioneresult_backend = 'rpc'indica al sistema di inviare una risposta a una coda univoca per il consumo. Non è consigliabile utilizzare il backend ampq. Potrebbe causare una perdita di memoria.

Ulteriori informazioni sui risultati possono essere trovatiqui.

Cosa sono gli scambi in Celery?

Celery funziona attraverso ilmessage routerand thepublish-subscribe patterns.Gli editori spingono i messaggi a uno scambio che utilizza direct orwildcard che corrisponde a una o più code di lavoro nel broker. Il tipo di scambio definisce comei messaggi vengono instradati attraverso lo scambio.Si configurano i tipi di exchange nella configurazione:

CELERY_QUEUES = { "my_queue”:{ "exchange”: "my_exchange”, "exchange_type”: "topic”, "binding_key”: "all_tasks.task_type” } } CELERY_DEFUALT_EXCHANGE=”my_exchange” CELERY_DEFAULT_EXCHANGE_TYPE=”direct” CELERY_DEFAULT_ROUTING_KEY=”all_tasks”

In questo esempio, si dichiara una coda predefinita come unica coda nota con lo scambio predefinito, ma si sovrascrive il tipo a topic con la chiave di routing all_tasks._tipo di attività. Lo scambio di argomenti consente di utilizzare la corrispondenza jolly in modo che le attività inviate a all_tasks.* sono ancora ricevuti. Questa configurazionepuò verificarsi nello stesso modulo in cui si avvia l’applicazione.

Tipi di scambi

I tipi di scambio standard sono direct, topic, fanout e intestazioni. Thesedictate come i messaggi passano agli abbonati. Le chiavi di routing devono corrispondere esattamente inun cambio diretto. Gli scambi di fanout inviano messaggi a tutte le code collegate.Gli argomenti consentono la corrispondenza dei caratteri jolly. Gli scambi di intestazione passano solo metadati.

Per saperne di più aboutRabbitMQ scambi e chiavi di routing

Quando devo usare Celery?

Come sistema di accodamento delle attività, Celery funziona bene con processi di lunga durata o piccole attività ripetibili che lavorano su batch.I tipi di problemi maniglie Sedano sono attività asincrone comuni. Imagescaling, codifica video, ETL, invio di e-mail o altre pipeline beneficiano di questo framework pre-costruito che gestisce gran parte del lavoro coinvolto nella loro costruzione.

Quali sono i vantaggi dell’uso del sedano?

Celery funziona con qualsiasi lingua attraverso il protocollo di messaggi standardizzato.Oltre alla versione ufficiale di Python, altre API sono in sviluppo per e.g.Java, RustandNode.È possibile creare un sistema centralizzato utilizzando qualsiasi lingua con ANAMQP o SQS API.

Altri vantaggi includono la riduzione al minimo della quantità di codice richiesto per distributetasks e la possibilità di pianificare i lavori periodicamente throughcelerybeat.Celerybeat è uno scheduler che prende il via le attività a intervalli regolari.Un monitoraggio standalone in tempo reale per i lavoratori Celery è disponibile anche attraverso celerymon.

Perché dovrei usare un broker di messaggi cloud?

In qualità di intermediario predefinito, Celery semplifica lo sviluppo e la gestione della pipeline.CloudAMQP elimina le esigenze amministrative del backend con ready-madeclusters.

“Stiamo usando CloudAMQP – RabbitMQ come broker per le nostre attività asincrone attraverso Celery. Lo stiamo usando come servizio asincrono basato su eventi. CloudAMQP supportsour progetto attraverso il monitoraggio corretto e alta disponibilità e code scalabile.”Shivam Arora,Delhivery

Non è più necessario preoccuparsi di ridimensionare il sistema per soddisfare la crescente domanda.Le nostre istanze vengono fornite con la console di gestione già in esecuzione.

Impostazione di RabbitMQ con CloudAMQP

CloudAMQP esegue il provisioning delle istanze rabbitmqnell’immediato.Creare un account e eseguire il provisioning di un’istanza direttamente da web managementinterface. Il ridimensionamento automatico integrato consente ai tuoi broker di lavorare rapidamente.CloudAMQP basa il costo interamente sulla potenza del provisionedinstance sottostante e puoi scalare su e giù tra diversi piani whenneeded. Il nostro livello gratuito,little lemur, è un’opzione eccellente per i test.

Come posso usare CloudAMQP come broker di messaggi Celery?

Una volta eseguito il provisioning, il tuo broker CloudAMQP funziona allo stesso modo del tuo sistema locale. Tutto ciò che serve è un URL, nome utente e password per stabilire una connessione con il broker. Celery gestisce il resto:

app = Celery('app_name', broker='amqps://user:password@host:port/host’)print(app.conf.broker_url)

Il framework Celery memorizza l’URL nella configurazione. Dal momento che Sedano runsseparately dal broker, si guadagna lo stesso grado di controllo come se runningyour intero sistema on-premise.

Posso eseguire i miei lavoratori Celery nel cloud?

Mentre CloudAMQP fornisce un broker di messaggi, è anche possibile distribuire i lavoratori di Selery su AWS o un altro servizio cloud. I lavoratori devono solo sapere dove risiede il broker per diventare parte del sistema. Celery mantiene aqueue per eventi e notifiche senza un nodo di registro comune.

A causa dell’uso di un broker per la gestione del sistema, è possibile eseguire le attività contenitori inDocker overKubernetes.I contenitori si ridimensionano automaticamente in base alle proprie esigenze, mentre Kubernetes consente di definire criteri di ridimensionamento e Flower offre funzionalità di monitoraggio.Un contenitore Celery ufficiale può essere trovato qui:https://hub.docker.com/_/celery.Celery è anche completamente supportato onHeroku.

L’esecuzione di clienti e lavoratori celery nel cloud riduce al minimo i costi di sviluppo e distribuzione delle pipeline.

Perché CloudAMQP sponsorizza il progetto Celery

Abbiamo molti clienti che eseguono applicazioni che si fidano di Celery e quindi sosteniamo attivamente e mensilmente lo sviluppo del progetto Celery (AMQP). Si prega di farci sapere se c ‘ è qualcosa nel Celerythat si desidera noi per mettere maggiore attenzione su.

Visita la nostrapagina del pianoper ulteriori informazioni su come iniziare con la distribuzione di un cluster RabbitMQ.Ti consigliamo inoltre di leggere le nostre impostazioni consigliate per Celery su CloudAMQP prima di iniziare una pipeline di produzione e di apprezzare il framework di Celery.

Goditi questo articolo? Non dimenticare di condividerlo con gli altri. 😉

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.