Ejecución de apio con RabbitMQ

Ha habido una explosión de interés en el procesamiento distribuido.tareas de ejecución más largas en muchos trabajadores diferentes. Los intermediarios de mensajes, como RabbitMQ, proporcionan comunicación entre nodos. Ejecutar sus clientes de Celer, trabajadores y agentes relacionados en la nube le da a su equipo el poder de administrar y escalar fácilmente procesos de backend, trabajos y tareas administrativas básicas.

¿Qué es el apio?

Celeryes una cola de trabajos distribuidos que simplifica la gestión de la distribución de tareas.Los desarrolladores dividen los conjuntos de datos en lotes más pequeños para que el apio los procese en un solo trabajo conocido como trabajo.

Implementa uno o más procesos de trabajo que se conectan a una cola de mensajes (agente basado en anAMQP o SQS). Los clientes envían trabajos al agente de mensajes, y la cola está escuchando solicitudes de trabajo utilizando Celery. A continuación, el agente de mensajes distribuye las solicitudes de trabajo a los trabajadores.Los trabajadores esperan los trabajos de Apio y ejecutan las tareas.Una vez terminado, el trabajador envía un resultado a otra cola para el proceso final del cliente.

En Apio, los clientes y los trabajadores no se comunican directamente entre sí, sino a través de colas de mensajes.Los clientes envían mensajes utilizando tareas en el sistema de la misma manera que una llamada de procedimiento remota inicia una función. Los clientes no necesitan entender el formato actual, sino anotar funciones y registrarlas con el framework:

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

Usando el enlace oficial de Python, creamos una tarea y la registramos con el sistema. Puede usar el métodoapply_async(function, args, kwargs,...) para enviar la tarea a la cola adecuada. El cliente llama aget en el futuro devuelto porapply_async para bloquear y recuperar la respuesta o utiliza el método state para iniciar una llamada al agente comprobando el estado de la solicitud.

Un mensaje enrutado a una cola espera en la cola hasta que alguien lo consume, y el mensaje se elimina de la cola cuando se ha reconocido.

Resultados en Apio

Es posible realizar un seguimiento de los estados de una tarea. El apio también puede comprar o enviar a los Estados Unidos. Por lo tanto, en lugar de usar la función get, es posible enviar resultados a un backend diferente. Hay varios componentes de respaldo de resultados integrados para elegir,entre los que se incluyen Qlalchemy, bases de datos específicas y RPC (RabbitMQ).

De forma predeterminada, Apio está configurado para no consumir resultados de tareas. Establecer la opción de configuraciónresult_backend = 'rpc' le dice al sistema que envíe una respuesta a una cola única para su consumo. No se recomienda utilizar el motor ampq. Podría resultar en una pérdida de memoria.

Se puede encontrar más información sobre los resultados aquí.

¿Qué son los intercambios en Apio?

Apio funciona a través del enrutador de mensajes y los patrones de suscripción de publicación.Los editores envían mensajes a un intercambio que utiliza la coincidencia directa o de tarjetas azules para enviarlos a una o más colas de trabajo en el corredor. El tipo de intercambio define cómo se enrutan los mensajes a través del intercambio.Configure los tipos de intercambio en la configuración:

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”

En este ejemplo, declare una cola predeterminada como la única cola conocida con el intercambio predeterminado, pero anule el tipo al tema con la clave de enrutamiento all_tasks.tipo de tarea. El intercambio de temas le permite usar coincidencias de comodines para que las tareas se envíen a todas las tareas.* se siguen recibiendo. Esta configuración puede ocurrir en el mismo módulo donde inicia su aplicación.

Tipos de intercambios

Los tipos de intercambio estándar son directo, tema, fanout y encabezados. Estesedicta cómo pasan los mensajes a los suscriptores. Las claves de enrutamiento deben coincidir exactamente en un intercambio directo. Los intercambios de Fanout envían mensajes a todas las colas adjuntas.Los temas permiten la coincidencia de comodines. Los intercambios de encabezados solo pasan metadatos.

Más información sobre los intercambios y las claves de enrutamiento de Trabbitmq

¿Cuándo debo usar Apio?

Como sistema de colas de tareas, Apio funciona bien con procesos de larga ejecución o con pequeñas tareas repetibles que trabajan en lotes.Los tipos de problemas con los mangos de apio son tareas asíncronas comunes. El escalado de imágenes, la codificación de video, ETL, el envío de correo electrónico u otros canales se benefician de este marco pre-construido que maneja gran parte del trabajo involucrado en su construcción.

¿Cuáles son los beneficios de usar apio?

El apio funciona con cualquier idioma a través del protocolo de mensajes estandarizado.Además de la versión oficial de Python, se están desarrollando otras API para e.g.Java, RustandNode.Es posible crear un sistema centralizado utilizando cualquier lenguaje con ANAMQP o SQS API.

Otros beneficios incluyen minimizar la cantidad de código necesaria para distribuir tareas y la capacidad de programar trabajos periódicamente a través de celerybeat.Celerybeat es un programador que inicia tareas a intervalos regulares.Un monitoreo independiente en tiempo real para los trabajadores del apio también está disponible a través de celerymon.

¿Por qué debo usar un agente de mensajes en la nube?

Como intermediario prediseñado, Apio simplifica el desarrollo y la gestión de tuberías.CloudAMQP elimina las necesidades administrativas de su backend con listas para usar.

» Estamos utilizando CloudAMQP-RabbitMQ como agente para nuestras tareas asincrónicas a través de Celery. Lo estamos utilizando como el servicio asincrónico basado en eventos. CloudAMQP apoya nuestro proyecto a través de una monitorización adecuada y colas de roker escalables y de alta disponibilidad.»Shivam Arora, Delhivery

Ya no tiene que preocuparse por escalar su sistema para satisfacer la creciente demanda.Nuestras instancias vienen con la consola de administración ya en ejecución.

Configurar RabbitMQ con CloudAMQP

CloudAMQP aprovisiona sus instancias de RabbitMQ casi instantáneamente.Cree una cuenta y aprovisione una instancia directamente desde la interfaz de administración web. El escalado automático incorporado permite a sus corredores trabajar rápidamente.CloudAMQP basa el costo completamente en la potencia de la instancia provisoria subyacente, y puede escalar hacia arriba y hacia abajo entre diferentes planes cuando sea necesario. Nuestro nivel gratuito,little lemur, es una excelente opción para probar.

¿Cómo uso CloudAMQP como mi agente de mensajes de Apio?

Una vez aprovisionado, su agente CloudAMQP funciona de la misma manera que su sistema local. Todo lo que necesita es una URL, un nombre de usuario y una contraseña para establecer una conexión con el corredor. Apio maneja el resto:

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

El framework de Apio almacena la URL en la configuración. Dado que Apery se ejecuta por separado del corredor, obtiene el mismo grado de control que si ejecuta todo su sistema en las instalaciones.

¿Puedo ejecutar mis trabajadores de apio en la nube?

Mientras que CloudAMQP proporciona un agente de mensajes, también es posible implementar operarios en AWS u otro servicio en la nube. Los trabajadores solo necesitan saber dónde reside el corredor para formar parte del sistema. Apio mantiene aqueue para eventos y notificaciones sin un nodo de registro común.

Debido al uso de un broker para la administración del sistema, puede ejecutar sus tareas en contenedores de inDocker overKubernetes.Los contenedores se escalan automáticamente para adaptarse a sus necesidades, mientras que Kubernetes le permite definir políticas de escalado y Flower proporciona capacidades de supervisión.Un contenedor oficial de apio se puede encontrar aquí:https://hub.docker.com/_/celery.Celery también es totalmente compatible con Heroku.

Ejecutar sus clientes y trabajadores de celery en la nube minimiza el coste de desarrollo e implementación de canalizaciones.

Por qué CloudAMQP patrocina el proyecto Apio

Tenemos muchos clientes que ejecutan aplicaciones que confían en Apio,y, por lo tanto, apoyamos activa y mensualmente el desarrollo del proyecto de Apio (AMQP). Por favor, háganos saber si hay algo en el Apio en lo que le gustaría que nos centráramos más.

Visite nuestra página de planpara obtener más información sobre cómo comenzar a implementar un clúster de RabbitMQ.También le recomendamos que lea nuestros ajustes recomendados para Apio en CloudAMQP antes de iniciar un proceso de producción, así como que aprecie el marco de productos de panadería.

¿Disfrutas de este artículo? No olvides compartirlo con otros. 😉

Deja una respuesta

Tu dirección de correo electrónico no será publicada.