Enrutado manual

Clase 25 de 36Curso de Celery 4

Resumen

¿Cómo trabajar con múltiples workers en Celery?

El trabajo con múltiples workers en Celery no solo es eficiente, sino necesario para manejar tareas de diferente naturaleza o prioridad. Esta estrategia permite a los desarrolladores gestionar efectivamente distintas colas de mensaje, asignando workers específicos para cada tipo de tarea.

¿Por qué usar múltiples workers?

El uso de diversos workers está recomendado para:

  • Tareas encapsuladas: Para tareas relacionadas con contenedores o que requieran procesamiento específico.
  • Diferentes prioridades: Assignar mayores recursos a tareas de alta prioridad mientras se distribuyen de manera equitativa las de menor prioridad.
  • Arquitectura de sistemas robustos: Seguir prácticas recomendadas en herramientas como RabbitMQ y Celery para maximizar el rendimiento y eficiencia.

¿Cómo configurar workers específicos por tipo de tarea?

Los workers pueden configurarse para escuchar mensajes o colas específicas. Aquí se describe un ejemplo básico para entender cómo funcionan las configuraciones de cola:

from celery import Celery

app = Celery('tasks', broker='pyamqp://guest@localhost//')

@app.task
def add(x, y):
    return x + y

@app.task
def multiply(x, y):
    return x * y

app.conf.task_routes = {
    'tasks.add': {'queue': 'default'},
    'tasks.multiply': {'queue': 'priority'}
}

¿Cómo enrutar tareas manualmente?

El manejo manual de colas ofrece un control adicional sobre el flujo de tareas. Aquí, el ejemplo ilustra cómo enrutar manualmente eventos entre diferentes colas utilizando Celery:

from some_module import process_command

def process_event(event):
    if event['type'] == 'message' and not event.get('subtype'):
        process_command.apply_async((event['text'],), queue='commands')

¿Cómo iniciar y ejecutar múltiples workers?

Una vez que se han configurado las colas y los workers, se pueden crear procesos específicos para manejar dichas tareas:

  • Iniciar el worker default: celery -A tasks worker --queue=default
  • Iniciar el worker de prioridad: celery -A tasks worker --queue=priority

¿Cuál es la ventaja de la ejecución distribuida de tareas?

El principal beneficio de la ejecución distribuida reside en la capacidad para manejar múltiples tareas de manera concurrente, optimizando el uso de recursos y aumentando la resiliencia del sistema. Además, permite escalabilidad, tanto en servidores locales como en servidores en la nube.

Ejemplo en la vida real: Implementaciones a gran escala

Imagina que en una aplicación en la nube, donde el procesamiento de datos es crítico, se implementan 20 workers distribuidos geográfica y funcionalmente. Esta arquitectura no solo mejora la eficiencia, sino que también minimiza el riesgo de pérdida de datos o mensajes, aprovechando la infraestructura a niveles antes inalcanzables con arquitecturas tradicionales no distribuídas.

Anímate a seguir explorando las capacidades de Celery en próximas lecciones, donde se cubrirán más soluciones avanzadas de enrutamiento y otras estrategias arquitectónicas. 🎉