computacion distribuida usando celery para python

41
Computación distribuida usando Celery para Python: Construye aplicaciones rápidas y escalables fácilmente

Upload: sebastian-ramirez-montano

Post on 21-Feb-2017

96 views

Category:

Documents


0 download

TRANSCRIPT

Computación distribuida usando Celery para Python:

Construye aplicaciones rápidas y escalables fácilmente

¿Quién les habla?

Sebastián Ramírez

CTO en: www.senseta.com

Github: github.com/tiangolo

Linkedin: linkedin.com/in/tiangolo

Twitter: twitter.com/tiangolo

Celery

@tiangolo

¿Quién lo usa?

...y muchos otros.

@tiangolo

¿Qué es Celery?

Celery is an asynchronous task queue/job queue based on distributed message passing. It is focused on real-time operation, but supports scheduling as well.

Celery es una cola (o sistema para administrar colas) de tareas o trabajos de manera asíncrona, basado en envío de mensajes. Está enfocado en operaciones

en tiempo-real, pero también soporta tareas programadas.

@tiangolo

WTF?

@tiangolo

¿Qué problemas resuelve?

● Aplicación web “lenta”

● Web que recibe datos y los procesa antes de almacenar

● Procesamiento adicional (extracción de entidades, Machine Learning...)

● Un servidor solo no alcanza a hacer todo lo que se necesita

● Coordinar múltiples dispositivos en red (e.g. coordinación de Raspberry Pi)

● Secuencias de pasos a ejecutar (e.g. procesar -> analizar -> almacenar)

@tiangolo

@tiangolo

¿Cómo resuelve problemas?

● Cada componente modularizado hace solo su parte

● Se pasan “tareas”, “trabajos” o “mensajes” entre módulos

● “Hey! Ejecuta esta función X con estos parámetros Y y Z!”

● Una aplicación principal ejecuta funciones de Celery que envían “tareas”

● “Workers” o “trabajadores” están “escuchando” tareas

● Cada “worker” va tomando tareas de una “cola” de tareas (lista de pendientes)

● Esa cola es RabbitMQ, Redis u otros

● Celery es el “pegante” que une todo, maneja la comunicación entre partes

@tiangolo

Arquitectura de Celery

@tiangolo

Arquitectura de Celery 2

@tiangolo

Desvío, atajo: ¿qué es Docker?

● Máquinas virtuales, solo que no● Virtualenv, solo que no● “Containers” mini-Linux sobre Linux● Seguridad● Dependencias● “Pero en mi laptop funciona”● “Imágenes” pre-existentes● Aprendizaje de otros sistemas● Empezar de cero más rápido● ...etc

@tiangolo

@tiangolo

Arquitectura de Celery, con Docker

@tiangolo

Arquitectura de Celery, con Docker, multi máquina

@tiangolo

Arquitectura de Celery, con Docker, multi-workers

@tiangolo

“Workers” o trabajadores en diferentes servidores

@tiangolo

@tiangolo

Código celery_app.py

@tiangolo

Código main.py

@tiangolo

Código Worker: tasks.py

$ celery worker -A tasks -l info

@tiangolo

“Queues” o “colas” especializadas por tipo de worker

@tiangolo

@tiangolo

“Colas” especializadas celery_app.py

@tiangolo

“Colas” especializadas Worker A (requests): tasks.py

$ celery worker -A tasks -l info -Q queue-a

@tiangolo

“Colas” especializadas Worker B (markdown): tasks.py

$ celery worker -A tasks -l info -Q queue-b

@tiangolo

“Colas” especializadas main.py

@tiangolo

“Chains” o “cadenas” de tareas

@tiangolo

@tiangolo

“Cadenas” de tareas celery_app.py

@tiangolo

“Cadenas” de tareas Worker A (requests): tasks.py

$ celery worker -A tasks -l info -Q queue-a

@tiangolo

“Cadenas” de tareas Worker B (markdown): tasks.py

$ celery worker -A tasks -l info -Q queue-b

@tiangolo

“Cadenas” de tareas main.py

@tiangolo

“Cadenas” de tareas main.py (con formato)

@tiangolo

Sub tareas generadas en workers (sin “cadenas”)

@tiangolo

@tiangolo

Se puede tener un back end de resultados

@tiangolo

Escribir en DB y responder luego

@tiangolo

Llamar API externo lento

@tiangolo

¿Preguntas?

@tiangolo

¡Gracias!

Sebastián Ramírez

CTO en: www.senseta.com

Github: github.com/tiangolo

Linkedin: linkedin.com/in/tiangolo

Twitter: twitter.com/tiangolo