Todo lo que necesita saber para comenzar con Amazon SQS
SQS significa Servicio de cola simple (en español).
SQS es un servicio de “Cola de mensajes” completamente administrado proporcionado por AWS para microservicios, sistemas distribuidos y aplicaciones sin servidor.
En las arquitecturas de software modernas, las aplicaciones se desacoplan en bloques más pequeños para que sea más fácil desarrollarlas, implementarlas y mantenerlas a largo plazo. El desacoplamiento es necesario porque un componente afectado no debería afectar el rendimiento de otros componentes independientes.
Las colas de mensajes permiten que diferentes partes de un sistema se comuniquen y procesen sus tareas de forma asíncrona.
En un nivel muy alto, un componente productor agrega un mensaje a la cola y permanece en la cola hasta que un consumidor lo consume y lo elimina.
Amazon SQS
SQS le permite enviar, almacenar y recibir mensajes entre componentes de software en cualquier volumen sin perder mensajes ni requerir que otros servicios estén disponibles. Permite el acoplamiento débil entre servicios en un sistema.
SQS ofrece dos tipos de colas, a saber, colas estándar y colas FIFO.
- Cola estándar: ofrece un rendimiento ilimitado, al menos una vez entregado (ocasionalmente, un mensaje se puede entregar varias veces) y orden de mejor esfuerzo (ocasionalmente, los mensajes se pueden entregar en un orden diferente al que se enviaron).
- Cola FIFO: Soporta hasta 300 mensajes por segundo por operación, exactamente una vez entregados, First In First Out Delivery.
Hay muchas más funciones proporcionadas por SQS, puede leer sobre ellas aquí.
Elegir una cola apropiada según el escenario:
Estándar
- Las colas estándar deben usarse cuando necesita un rendimiento extremadamente alto, pero en este caso, su aplicación debe manejar duplicados.
- Asigne tareas a varios nodos trabajadores: procese una gran cantidad de solicitudes de validación de tarjetas de crédito.
- Mensajes por lotes para procesamiento futuro: programe múltiples entradas para que se agreguen a una base de datos.
- Separe las solicitudes de los usuarios en vivo del trabajo intensivo en segundo plano: permita que los usuarios carguen medios mientras los redimensionan o los codifican.
FIFO
- Las colas FIFO están diseñadas para mejorar la mensajería entre aplicaciones cuando el orden de las operaciones y los eventos es crítico, o cuando no se toleran los duplicados.
- Asegúrese de que los comandos ingresados por el usuario se ejecuten en el orden correcto.
- Muestre el precio correcto del producto enviando las modificaciones de precios en el orden correcto.
Cola de mensajes fallidos
Amazon SQS admite colas de mensajes fallidos (DLQ), a las que otras colas (colas de origen) pueden dirigirse para mensajes que no se pueden procesar (consumir) correctamente.
A veces, los mensajes no se pueden procesar debido a una variedad de posibles problemas, como condiciones erróneas dentro de la aplicación del productor o del consumidor o un cambio de estado inesperado que causa un problema con el código de la aplicación.
Por ejemplo, si un usuario realiza un pedido web con una identificación de producto en particular, pero la identificación del producto se elimina, el código de la tienda web falla y muestra un error, y el mensaje con la solicitud de pedido se envía a una cola de mensajes fallidos.
Usé SQS para crear un servicio de análisis de alto rendimiento en AWS lambda
Recientemente, estaba trabajando en un proyecto en el que tenía que crear un servicio que pudiera recopilar datos analíticos de tres aplicaciones diferentes y enviarlos a una herramienta de participación del cliente para que la herramienta pueda procesar por lotes los datos en función de la identidad del cliente y la empresa pueda proporcionar asistencia personalizada a los consumidores.
En este escenario, no fue posible predecir el tráfico porque las tres plataformas son plataformas de aprendizaje en línea (LMS para alojar cursos, plataforma de serie de pruebas).
El tráfico recibido por el servicio de análisis es directamente proporcional al tráfico en las plataformas de aprendizaje.
Quería hacer que el sistema fuera escalable para que no fallara al recibir mucho tráfico.
No quería hacer que este servicio estuviera estrechamente asociado con las plataformas orientadas al cliente por múltiples razones, como el retraso en el rendimiento, etc.
En los sistemas de análisis, no se requiere una respuesta inmediata, por lo que preferí mantener una forma de comunicación asíncrona en lugar de hacer una llamada directa a la API.
Además…
quería que fuera bastante rentable para evitar pagar horas sin tráfico.
Decidí usarlo con AWS lambda (compartiré sobre AWS lambda en un próximo blog).
AWS Lambda es un servicio informático basado en eventos y sin servidor que le permite ejecutar código para prácticamente cualquier tipo de aplicación o servicio de backend sin aprovisionar ni administrar servidores. Se escala automáticamente al recibir tráfico.
El siguiente es el HLD del sistema:
Aquí, P1, P2 y P3 son tres plataformas diferentes que envían datos a la cola de análisis (SQS FIFO Queue) que activa una función lambda donde se realiza un procesamiento de los datos y se envía a la herramienta de participación del cliente.
También podría haber elegido una cola estándar, pero no quería manejar los casos de duplicación de mensajes yo mismo y podía soportar el rendimiento proporcionado por la cola FIFO. Por lo tanto, decidió ir con el FIFO.
Gracias por llegar hasta aquí, si encuentras esto útil no olvides dejar un👍🏼y suscribirse para recibir más contenido.
Si le interesa, puede echar un vistazo a algunos de los otros artículos que he escrito recientemente sobre AWS y Laravel: