Celery es una biblioteca en Python para gestionar colas de tareas distribuidas. Es software libre y está liberado con una licencia BSD. Cuenta con con más de diez mil commits en este momento en Github.
No es la única. Tiene ciertos equivalentes en otros lenguajes, pero no hay ninguna que sea igual
Ventajas
Escabilidad
Eficiencia
Orden de transacciones garantizado
Resistencia a fallos
Aguantar picos de mensajes
Sirve para
Dividir el Backed de una aplicación en receptor y realizadores de tareas
Uniformizar la respuestas del backend
Crear arquitecturas de microservicios
Obtén respuestas inmediatas¿Dudas?Profundiza lo que acabas de ver
Celery es una gran biblioteca, sin embargo, en mi experiencia, hay casos en los que perjudica más de lo que ayuda, si bien empresas grandes lo ocupan porque tienen los recursos, a veces hay proyectos pequeños que intentan usarlo y terminan por consumir muchos de los recursos del servidor. Hay que usarla con cuidado si de un proyecto pequeño se trata.
Interesante observación @imbrianstorm.
¿Tuviste oportunidad de usar Celery en alguno de tus proyectos?
¿Qué recursos son los que más pudiera consumir Celery?
Siempre depende de lo que quieras hacer. Celery es una biblioteca compleja, pero por eso precisamente a un plazo medio o largo siempre va a beneficiar a la empresa. Evidentemente, por el cambio de concepto respecto a una arquitectura monolítica puede que al principio el diseño y la implantación tarden algo de tiempo.
Es un librería para encolar tareas, un uso muy común es por ejemplo cuando tienes que hacer procesos largos luego de una acción del usuario, entonces mandas esos procesos a la cola de tareas y no detienes a tu usuario esperando a que todo el bloque de tareas se termine.
Con lo que llevo aprendiendo. Ambos se pueden trabajar juntos. Django y Celery. Yo he usado Celery para tareas asíncronas. Por ejemplo. En un sistema que trabajé se necesitaba subir una importación de un archivo que era muy pesado. Usando solo dijango la petición moría a los 15 segs. Así que con Celery podía subir ese archivo pesado, además de ello no bloqueaba el trabajo del usuario.
node-celery funciona perfectamente, tanto para repartir como para ejecutar tareas. https://github.com/mher/node-celery
Sin embargo, en un entorno de microservicios distribuidos puedes usar diferentes lenguajes, siempre el más adecuado para cada cosa. Te animo a que eches un vistazo a Python; aunque fuera solo por este framework, merece la pena.
<!DOCTYPE html><html><head><title>Tu peso en distintos planetas</title><styletype="text/css"> body
{ background-color:rgb(218,104,59); font-family:Georgia; font-size: large;color: black;}</style></head><body><h2>Tu peso puede cambiar en otros planetas!!!🤪</h2><p>En la tierra pesas distinto que en Marte, para ello con <strong> tu peso en la Tierra</strong> podemos descrifrar dichos pesos </p><scripttype="text/javascript">var g_mercurio =3.7;var g_venus =8.87;var g_tierra =9.8;var g_marte =3.7;var g_jupiter =24.8;var g_saturno =10.44;var g_urano =8.7;var g_neptuno =11.15;var g_pluton =0.62;var peso_tierra =prompt("Escribe tu peso en la tierra: ")var peso_mercurio =parseInt(peso_tierra*g_mercurio/g_tierra);var peso_marte =parseInt(peso_tierra*g_marte/g_tierra);var peso_venus =parseInt(peso_tierra*g_venus/g_tierra);var peso_jupiter =parseInt(peso_tierra*g_jupiter/g_tierra);var peso_saturno =parseInt(peso_tierra*g_saturno/g_tierra);var peso_urano =parseInt(peso_tierra*g_urano/g_tierra);var peso_neptuno =parseInt(peso_tierra*g_neptuno/g_tierra);var peso_pluton =parseInt(peso_tierra*g_pluton/g_tierra);document.write("Tu peso en Mercurio es de aproximadamente: "+ peso_mercurio +", ");document.write("Tu peso en Venus es de aproximadamente: "+ peso_venus +", ");document.write("Tu peso en Marte es de aproximadamente: "+ peso_marte +", ");document.write("Tu peso en jupiter es de aproximadamente: "+ peso_jupiter +", ");document.write("Tu peso en Saturno es de aproximadamente: "+ peso_saturno +", ");document.write("Tu peso en Urano es de aproximadamente: "+ peso_urano +", ");document.write("Tu peso en Neptuno es de aproximadamente: "+ peso_neptuno +", ");document.write("Tu peso en pluton es de aproximadamente: "+ peso_pluton +", ");</script></body></html>
Celery es sobre todo necesario cuando quieres procesar tareas que tarden mucho, que no sea necesario responder inmediatemente y en un proyeco que probablemente necesites escalar.
spring cloud para spring boot permite gestionar rabbitMQ o los demas MQ ademas tiene spring gateway como receptor de tareas y administrador de microservicios con Zuul como gateway Spring Oauth para JWT auth etc etc registry , balanceador de carga etc etc en resume todo lo que son micro servicios.