Los 6 mejores sistemas de cola para desarrolladores de backend

¿Está buscando un sistema de colas? ¿O tal vez estás buscando uno mejor? ¡Aquí está toda la información que necesita!
Los sistemas de cola son el secreto mejor guardado del desarrollo backend.
Sin intentar 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 aprender a integrarate colas en el sistema. Las colas mejoran la experiencia del cliente (veremos cómo), reducen la complejidad y mejoran la confiabilidad de un sistema.
Claro, para aplicaciones web muy simples con casizero tráfico y sitios web de folletos, las colas pueden ser un problema general (o incluso imposible de instalar si estás en un típico entorno de alojamiento compartido), pero las aplicaciones no triviales se beneficiarán de los sistemas de cola, y las aplicaciones grandes son imposibles sin las colas involucradas.
Antes de comenzar, un descargo de responsabilidad: si ya se siente cómodo con los sistemas de colas y desea comparar las diversas opciones, las siguientes secciones introductorias le inducirán a dormir mucho. 🙂 Así que siéntete libre de adelantarte. Las secciones introductorias están destinadas a aquellos que solo tienen una idea confusa de los sistemas de cola o que simplemente han escuchado el nombre de pasada.
¿Qué es un sistema de colas?
Comencemos por comprender 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 vas a una taquilla, por ejemplo, te darás cuenta de que tendrás que pararte al final de la cola, mientras que la persona que esté al principio de la cola obtendrá la entrada primero. Esto es lo que también llamamos el fenómeno del “primero en llegar, primero en ser atendido”. En informática, es posible escribir programas que almacenen sus tareas de esta manera en una cola, processdistribuyéndolos uno por uno siguiendo el mismo criterio de orden de llegada.
Tenga en cuenta que la cola no realiza ninguna acción real. processingiriéndoloself. It’s just temporary storage of sorts where tasks wait until they get picked up by something. If this all sounds a bit demasiado abstract, no te preocupes. Él is an abstract concepto, pero veremos ejemplos claros en la siguiente sección. 🙂
¿Por qué necesita sistemas de colas?
Sin entrar en una extensión muy larga description, yo diría que la principal necesidad de sistemas de colas se debe a los antecedentes processing, ejecución paralela y recuperación de fallas. Veámoslos con la ayuda de ejemplos:
Antecedentes processIng.
Supongamos que está ejecutando un marketing de comercio electrónico campaña 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 le muestre la página de "gracias". Si el servidor de correo al que se está conectando no funciona, la página web simplemente morirá, rompiendo la experiencia del usuario.
¡Imagínese la gran cantidad de solicitudes de soporte que recibiría! En este caso, es mejor enviar esta tarea de envío de correo electrónico a una cola de trabajos y mostrarle al cliente la página de éxito.
Ejecución paralela
Muchos desarrolladores, especialmenteally aquellos que en su mayoría codifican aplicaciones más simples y de poco tráfico, están en la jabit de uso trabajos cron para el fondo processEn g. Esto está bien hasta que el tamaño de la entrada growEs tan grande que no se puede limpiar. Por ejemplo, suponga que tiene una tarea cron que compila informes analíticos y los envía por correo electrónico a los usuarios y que su sistema puede process 100 informes por minuto.
Tan pronto como su aplicación grows y comienza a recibir más de 100 solicitudes por minuto en promedio, comenzará a quedarse atrás cada vez más y nunca podrá completar todos los trabajos.
En un sistema de colas, esta situación se puede evitar configurando varios trabajadores, cada uno de los cuales puede elegir un trabajo (que contiene 100 informes para realizar cada uno) y trabajar en paralelo para terminar la tarea mucho, mucho antes.
Recuperación de fallas
nosotros generamosally No piensen en el fracaso como desarrolladores web. 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 inactivas debido a problemas de infraestructura (antes de decir "¡yo no!", no olvide la interrupción masiva de Amazon S3). Entonces, volviendo al ejemplo de informes, si parte de la generación de su informe requiere que se conecte a la API de pagos y esa conexión no funciona 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 empinada a medida que ingresa a un dominio completamente nuevo, la complejidad de su aplicación y la implementación aumenta 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 backends / sistemas de cola de hoy.
Redis
Redis se conoce como un almacén de valor clave que solo almacena, actualizaates, 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.
- Muy eficiente: puede admitir fácilmente más de 100,000 operaciones de lectura / escritura por segundo.
- Esquema de persistencia altamente flexible. Puede optar por un rendimiento máximo a costa de una posible pérdida de datos en caso de fallas o configurarlo en modo totalmente conservador para sacrificar el rendimiento por la coherencia.
- Clústeres apoyados fuera del box
Tenga en cuenta que Redis no tiene ningún tipo de mensajería/cola/recuperación. abstractions, so you either need to use a package or build a lightweight system yourself. An example is that Redis is the default queue backend for the Laravel Framework PHP, donde los autores del marco han implementado un planificador.
Aprendiendo Redis es fácil.
RabbitMQ
Hay algunas diferencias sutiles entre Redis y RabbitMQ, así que primero sacámoslos del camino.
En primer lugar, RabbitMQ tiene una función más especializada y bien definida, por lo que se creó para reflejar eso: la mensajería. En otras palabras, su punto óptimo es actuar como intermediario entre dos sistemas, lo 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 programador, los trabajadores y los "remitentes" de trabajos pueden considerarse entidades que participan en el paso de mensajes.
RabbitMQ tiene las siguientes ventajas:
- mejores abstractiones para el paso de mensajes, lo que reduce el trabajo a nivel de aplicación si lo que necesita es el paso de mensajes.
- Más resistente a fallas y cortes de energía (que Redis, al menos por defecto).
- Soporte de agrupación y federación para implementaciones distribuidas.
- Helpful tools for managing and monitoring your deployments.
- Apoyo a la practicaally todos los lenguajes de programación no triviales que existen.
- Implementación con la herramienta que elijas (Docker, Chef, Puppet, etc.).
Cuando usar RabbitMQ? I’d say it’s a great choice when you know you need to use asynchronous message passing but are not ready to tackle the towering complexity of some of the other queuing options on this list (see below).
ActiveMQ
Si te gusta el mundo empresarialrise espacio (o crear una aplicación altamente distribuida y a gran escala), y no querrás tener que reinventar la rueda todo el tiempo (y cometer errores en el camino), ActiveMQ vale la pena mirar.
Aquí es donde sobresale ActiveMQ:
- Está implementado en Java y también lo ha hecho.ally Integración ordenada de Java (sigue el estándar JMS).
- Soporta múltiples protocolos: AMQP, MQTT, STOMP, OpenWire, etc.
- Maneja la seguridad, enrutamiento, caducidad de mensajes, análisis, etc., fuera del box.
- Soporte integrado para patrones de mensajería distribuida populares, lo que le ahorra tiempo y errores costosos.
That is not to say that ActiveMQ is available only for Java. It has clients for Python, C/C++, Node, .Net, and other ecosystems, so there should be no concerns for a possible collapse in the future. Besides, ActiveMQ is built on completely open standards and building your own lightweight clients should be easy.
Todo lo dicho y hecho, tenga en cuenta que ActiveMQ es solo un corredor y no incluye un backend. 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 deserves a quick but important mention here. If you think that ActiveMQ is the ideal solution for your needs but don’t want to deal with building and to maintain the infrastructure yourself, Amazon MQ offers a managed service to do that. It supports all the protocols ActiveMQ does — there is no difference in features at all — since it uses ActiveMQ itself bajo la superficie.
La ventaja es que es un servicio gestionado, por lo que no tendrás que preocuparte por nada más que utilizarlo. Tiene aún más sentido para aquellas implementaciones que están en AWS, como puede leverObtenga otros servicios y ofertas directamente desde su implementación (transferencias de datos más rápidas, por ejemplo).
AmazonSQS
No podemos esperar que Amazon se quede callado cuando se trata de piezas de infraestructura críticas, ¿verdad? 🙂
Y asi tenemos AmazonSQS, que es un servicio de cola simple y totalmente alojado (bastante litroally) del conocido gigante AWS. Una vez más, las diferencias sutiles son importantes, así que tenga en cuenta que SQS no tiene el concepto de transmisión de mensajes. Al igual que Redis, es un backend simple para aceptar y distribuir trabajos en colas.
Entonces, ¿cuándo le gustaría utilizar Amazon SQS? He aquí algunas razones:
- Eres un fanático de AWS y no tocarás nada más (honestamente, hay mucha gente así, y creo que no hay nada de malo en eso).
- Necesita una solución alojada para asegurarse de que el error se produzca.ate is zero y ninguno de los puestos de trabajo se pierde.
- You don’t want to build out a cluster and have to monitor es tuyoself. Or worse, have to build monitoring tools when you could be using that time to do productive desarrollo.
- You already have substantial investments in the AWS platform and staying locked in makes business sense.
- Quiere un sistema de colas simple y enfocado sin ninguna tontería asociada.ated con paso de mensajes, protocolos y todo eso.
Considerándolo todo, Amazon SQS es una opción sólida para cualquiera que quiera incorporarate job queues into their system and not having to worry about installing/monitoring things by themselves.
habichuelas mágicas
habichuelas mágicas ha existido durante mucho tiempo y es un backend rápido, fácil y probado en la batalla para la cola de trabajos. Hay algunas características de Beanstalkd que lo diferencian considerablemente de Redis:
- It’s strictly a job queuing system and nothing else. You push jobs to it, which get pulled by job workers later on. So if your application has even a tiny need for message passing, you’d want to avoid Beanstalkd.
- No hay estructuras de datos avanzadas como conjuntos, colas de prioridad, etc.
- Beanstalkd es lo que se denomina cola de primero en entrar, primero en salir (FIFO). No hay forma de organizar los trabajos por prioridad.
- No hay opciones para la agrupación en clústeres.
Dicho todo esto, Beanstalkd lo convierte en 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 estable que Redis. Así que 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 ha leído hasta aquí (o ha llegado aquí con una lectura rápida,), es muy probable que esté interesado en sistemas de cola o necesite uno. Si es así, la lista en esta página le será de gran utilidad, a menos que esté buscando un sistema de cola específico para el lenguaje / marco.
Ojalá pudiera decirte que hacer cola es simple y 100% confiable, pero no lo es. Es complicado, y como todo está en 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 cierto punto, y descubrirás que son un arma poderosa (quizás incluso la más poderosa) en tu arsenal. ¡Buena suerte! 🙂