Los 6 principales sistemas de colas para desarrolladores de backend

¿Estás buscando un sistema de colas? ¿O tal vez estás buscando una mejor? Aquí está toda la información que necesitas!


Los sistemas de colas son el secreto mejor guardado del desarrollo de backend.

Sin tratar de escribir un poema en elogio de los sistemas de colas, diría que un desarrollador backend junior se convierte en un desarrollador backend de nivel medio después de que aprende a integrar las colas en el sistema. Las colas mejoran la experiencia del cliente (veremos cómo), reducen la complejidad y mejoran la confiabilidad en un sistema.

Claro, para aplicaciones web muy simples con tráfico casi cero y sitios web de folletos, las colas pueden ser generales (o incluso imposibles de instalar si se encuentra en un entorno de alojamiento compartido típico), pero todas las aplicaciones no triviales se beneficiarán de las colas sistemas y aplicaciones grandes son imposibles sin hacer cola.

Antes de comenzar, un descargo de responsabilidad: si ya se siente cómodo con los sistemas de colas y desea comparar las diferentes opciones, las próximas secciones introductorias inducirán un sueño profundo. �� Así que siéntete libre de saltar adelante. Las secciones introductorias están pensadas para aquellos que solo tienen una idea confusa de los sistemas de colas o simplemente escuchan el nombre al pasar.

¿Qué es un sistema de colas??

Comencemos por entender qué es una cola.

Una cola es una estructura de datos en informática que imita, bueno, las colas del mundo real que vemos a nuestro alrededor. Si va a un mostrador de boletos, por ejemplo, notará que tendrá que pararse al final de la cola, mientras que la persona al comienzo de la cola recibirá primero el boleto. Esto es lo que también llamamos el fenómeno de “primer llegado, primer servido”. En ciencias de la computación, es posible escribir programas que almacenen sus tareas de esta manera en una cola, procesándolas una por una en el mismo orden de llegada..

Tenga en cuenta que la cola no realiza ningún procesamiento real. Es solo una especie de almacenamiento temporal en el que las tareas esperan hasta que algo las recoja. Si todo esto suena demasiado abstracto, no se preocupe. Es un concepto abstracto, pero veremos ejemplos claros en la siguiente sección. ��

¿Por qué necesitas sistemas de colas??

Sin entrar en una descripción muy extensa, diría que la necesidad principal de los sistemas de colas es debido al procesamiento en segundo plano, la ejecución paralela y la recuperación de una falla. Veamos estos con la ayuda de ejemplos:

Procesamiento en segundo plano

Supongamos que está ejecutando una campaña de marketing de comercio electrónico en la que el tiempo es esencial y que su aplicación está diseñada para que envíe un correo electrónico de confirmación justo antes de que el cliente complete el pago y se muestre la página de “agradecimiento”. Si el servidor de correo al que se está conectando está caído, la página web simplemente morirá, rompiendo la experiencia del usuario.

¡Imagina la gran cantidad de solicitudes de asistencia que recibirías! En este caso, es mejor llevar esta tarea de envío de correo electrónico a una cola de trabajos y mostrar al cliente la página de éxito.

Ejecución paralela

Muchos desarrolladores, especialmente aquellos que codifican principalmente aplicaciones más simples y de poco tráfico, tienen la costumbre de usar trabajos cron para el procesamiento en segundo plano. Esto está bien hasta que el tamaño de la entrada crece tanto que no se puede borrar. Por ejemplo, suponga que tiene un trabajo cron que compila informes analíticos y los envía por correo electrónico a los usuarios y que su sistema puede procesar 100 informes por minuto.

Tan pronto como su aplicación crezca y comience a recibir más de 100 solicitudes por minuto en promedio, comenzará a retrasarse cada vez más y nunca podrá completar todos los trabajos.

En un sistema de colas, esta situación se puede evitar mediante la creación de varios trabajadores, que pueden elegir un trabajo (que contiene 100 informes para hacer cada uno) y trabajar en paralelo para terminar la tarea mucho, mucho antes.

Recuperación del fracaso

Por lo general, no pensamos en el fracaso como desarrolladores web. Como que damos por sentado que nuestros servidores y las API que utilizamos siempre estarán en línea. Pero la realidad es diferente: las interrupciones de la red son muy comunes, y las excelentes API en las que confía pueden estar caídas debido a problemas de infraestructura (antes de decir “¡no a mí!”, No olvide el interrupción masiva de Amazon S3) Entonces, volviendo al ejemplo de los informes, si parte de la generación de su informe requiere que se conecte a la API de pagos y esa conexión está inactiva durante 2 minutos, ¿qué sucede con los 200 informes que fallaron??

Sin embargo, los sistemas de colas implican una sobrecarga considerable. La curva de aprendizaje es bastante pronunciada a medida que ingresa a un dominio completamente nuevo, la complejidad de su aplicación y la implementación aumentan y los trabajos en cola no siempre se pueden controlar con un 100% de precisión. Dicho esto, hay situaciones en las que crear una aplicación sin colas simplemente no es posible.

Con eso fuera del camino, echemos un vistazo a algunas de las opciones comunes entre los sistemas / backends de colas hoy.

Redis

Redis se conoce como un almacén de valores clave que solo almacena, actualiza y recupera cadenas de datos sin conocimiento de la estructura de los datos. Si bien eso podría haber sido cierto antes, hoy Redis tiene estructuras de datos eficientes y muy útiles como listas, conjuntos ordenados e incluso un sistema Pub-Sub, lo que lo hace muy deseable para implementaciones de colas.

Las ventajas de Redis son:

  • Base de datos completamente en memoria, lo que resulta en lecturas / escrituras más rápidas.
  • Altamente eficiente: puede admitir fácilmente más de 100,000 operaciones de lectura / escritura por segundo.
  • Esquema de persistencia altamente flexible. Puede obtener el máximo rendimiento a costa de la posible pérdida de datos en caso de fallas o configurarlo en modo totalmente conservador para sacrificar el rendimiento por la coherencia.
  • Clusters compatibles fuera de la caja

Tenga en cuenta que Redis no tiene abstracciones de mensajes / colas / recuperación, por lo que debe usar un paquete o crear un sistema liviano usted mismo. Un ejemplo es que Redis es el backend de cola predeterminado para el framework PHP Laravel, donde los autores del framework han implementado un planificador.

Learning Redis es fácil.

RabbitMQ

Hay algunas diferencias sutiles entre Redis y RabbitMQ, así que vamos a sacarlos del camino primero.

En primer lugar, RabbitMQ tiene un rol más especializado y bien definido, por lo que se creó para reflejar eso: la mensajería. En otras palabras, su punto óptimo es actuar como intermediario entre dos sistemas, que no es el caso de Redis, que actúa como una base de datos. Como resultado, RabbitMQ proporciona algunas funciones más que faltan en Redis: enrutamiento de mensajes, reintentos, distribución de carga, etc..

Si lo piensa, las colas de tareas también se pueden considerar como un sistema de mensajería, donde el planificador, los trabajadores y los “remitentes” del trabajo pueden considerarse entidades que participan en la transmisión de mensajes..

RabbitMQ tiene las siguientes ventajas:

  • Mejores abstracciones para pasar mensajes, reduciendo el trabajo a nivel de aplicación si lo que necesita es pasar mensajes.
  • Más resistente a fallas y cortes de energía (que Redis, al menos por defecto).
  • Soporte de clúster y federación para implementaciones distribuidas.
  • Herramientas útiles para administrar y monitorear sus implementaciones.
  • Soporte para prácticamente todos los lenguajes de programación no triviales disponibles..
  • Implementación con su herramienta de elección (Docker, Chef, Puppet, etc.).

¿Cuándo usar RabbitMQ? Diría que es una gran opción cuando sabe que necesita usar el envío de mensajes asíncrono, pero no está listo para abordar la enorme complejidad de algunas de las otras opciones de colas en esta lista (ver más abajo).

ActiveMQ

Si está en el espacio empresarial (o está construyendo una aplicación altamente distribuida y a gran escala), y no quiere tener que reinventar la rueda todo el tiempo (y cometer errores en el camino), ActiveMQ vale la pena echarle un vistazo.

Aquí es donde sobresale ActiveMQ:

  • Se implementa en Java y, por lo tanto, tiene una integración de Java realmente ordenada (sigue el estándar JMS).
  • Múltiples protocolos compatibles: AMQP, MQTT, STOMP, OpenWire, etc..
  • Maneja la seguridad, enrutamiento, caducidad de mensajes, análisis, etc., fuera de la caja.
  • Soporte integrado para patrones de mensajería distribuidos populares, lo que le ahorra tiempo y errores costosos.

Eso no quiere decir que ActiveMQ esté disponible solo para Java. Tiene clientes para Python, C / C ++, Node, .Net y otros ecosistemas, por lo que no debería preocuparse por un posible colapso en el futuro. Además, ActiveMQ se basa en estándares completamente abiertos y crear sus propios clientes livianos debería ser fácil.

Dicho todo esto, tenga en cuenta que ActiveMQ es solo un intermediario y no incluye un back-end. Aún necesitaría usar uno de los backends compatibles para almacenar los mensajes. Lo incluí aquí porque no está vinculado a un lenguaje de programación en particular (como otras soluciones populares como Celery, Sidekiq, etc.)

Amazon MQ

Amazon MQ merece una mención rápida pero importante aquí. Si cree que ActiveMQ es la solución ideal para sus necesidades, pero no quiere ocuparse de construir y mantener la infraestructura usted mismo, Amazon MQ ofrece un servicio administrado para hacerlo. Es compatible con todos los protocolos que ActiveMQ admite, no hay ninguna diferencia en las características, ya que utiliza ActiveMQ bajo la superficie..

La ventaja es que es un servicio administrado, por lo que no necesita preocuparse por nada más que usarlo. Tiene aún más sentido para esas implementaciones que están en AWS, ya que puede aprovechar otros servicios y ofertas directamente desde su implementación (transferencias de datos más rápidas, por ejemplo).

Amazon SQS

No podemos esperar que Amazon se siente en silencio cuando se trata de piezas críticas de infraestructura, ¿verdad? ��

Y entonces tenemos Amazon SQS, que es un servicio de cola simple totalmente alojado (literalmente) por el conocido gigante AWS. Una vez más, las diferencias sutiles son importantes, así que tenga en cuenta que SQS no tiene el concepto de pasar mensajes. Al igual que Redis, es un backend simple para aceptar y distribuir trabajos en colas..

Entonces, ¿cuándo quieres usar Amazon SQS? Aquí hay algunas razones:

  • Eres fanático de AWS y no tocarás nada más (honestamente, hay muchas personas así, y creo que no hay nada de malo en eso).
  • Necesita una solución alojada, así que asegúrese de que la tasa de fallas sea cero y ninguno de los trabajos se pierda.
  • No desea crear un clúster y debe supervisarlo usted mismo. O peor, tener que construir herramientas de monitoreo cuando podría estar usando ese tiempo para hacer un desarrollo productivo..
  • Ya tiene importantes inversiones en la plataforma de AWS y permanecer encerrado tiene sentido comercial.
  • Desea un sistema de colas simple y enfocado sin ninguna de las dificultades asociadas con el paso de mensajes, protocolos y demás.

Con todo, Amazon SQS es una opción sólida para cualquier persona que desee incorporar colas de trabajos en su sistema y no tener que preocuparse por instalar / monitorear las cosas por sí mismos..

Beanstalkd

Beanstalkd ha existido durante mucho tiempo y es un backend probado para la batalla, rápido y fácil para la cola de trabajos. Hay algunas características de Beanstalkd que lo diferencian considerablemente de Redis:

  • Es estrictamente un sistema de colas de trabajo y nada más. Impulsa los trabajos, que son atraídos por los trabajadores más adelante. Entonces, si su aplicación tiene incluso una pequeña necesidad de pasar mensajes, querrá evitar Beanstalkd.
  • No hay estructuras de datos avanzadas como conjuntos, colas de prioridad, etc..
  • Beanstalkd es lo que se denomina una cola Primero en entrar, Primero en salir (FIFO). No hay forma de organizar trabajos por prioridad.
  • No hay opciones para agrupar.

Todo esto dijo que Beanstalkd crea un sistema de cola rápido y elegante para proyectos simples que viven en un solo servidor. Para muchos, es más rápido y más estable que Redis. Entonces, si estás teniendo cuestiones con Redis que parece que no puede resolver, pase lo que pase, y sus necesidades son simples, vale la pena probar Beanstalkd.

Conclusión

Si has leído hasta aquí (o has llegado aquí a leer con destreza ��), hay muchas posibilidades de que estés interesado en los sistemas de colas o necesites uno. Si es así, la lista en esta página le servirá bien, a menos que esté buscando un sistema de colas específico de idioma / marco.

Desearía poder decirte que hacer cola es simple y 100% confiable, pero no lo es. Es desordenado, y dado que todo está en un segundo plano y sucede muy rápido (los errores pueden pasar desapercibidos y ser muy costosos). Aún así, las colas son muy necesarias más allá de un punto, y encontrarás que son un arma poderosa (tal vez incluso la más poderosa) en tu arsenal. ¡Buena suerte! ��

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map