Upload
sebastian-ramirez-montano
View
90
Download
0
Embed Size (px)
Citation preview
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
¿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
¿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
¿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
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
“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
“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