Tiempo de espera de visibilidad de Amazon SQS
Cuando recibe un mensaje de una cola de Amazon SQS, este permanece en la cola, pero pasa a ser invisible temporalmente para los demás consumidores. Esta invisibilidad se controla mediante el tiempo de espera de visibilidad, que garantiza que otros consumidores no puedan procesar el mismo mensaje mientras usted está trabajando en él. Amazon SQS ofrece dos opciones para eliminar los mensajes después del procesamiento:
-
Eliminación manual: los mensajes se eliminan de forma explícita mediante la acción
DeleteMessage. -
Eliminación automática: compatible con determinados AWS SDK, los mensajes se eliminan de forma automática cuando se procesan correctamente, lo que simplifica los flujos de trabajo.
Casos de uso del tiempo de espera de visibilidad
Administración de tareas de larga duración: utilice el tiempo de espera de visibilidad para gestionar las tareas que requieren tiempos de procesamiento prolongados. Establezca un tiempo de espera de visibilidad adecuado para los mensajes que requieren un tiempo de procesamiento prolongado. Esto garantiza que otros consumidores no obtengan el mismo mensaje mientras se está procesando, lo que evita la duplicación de trabajo y mantiene la eficiencia del sistema.
Implementación de mecanismos de reintento: amplíe el tiempo de espera de visibilidad mediante programación para las tareas que no se completen dentro del tiempo de espera inicial. Si una tarea no se completa dentro del tiempo de espera de visibilidad inicial, puede ampliar el tiempo de espera mediante programación. Esto permite que el sistema vuelva a intentar procesar el mensaje sin que sea visible para otros consumidores, lo que mejora la tolerancia a errores y la fiabilidad. Combínelo con colas de mensajes fallidos (DLQ) para administrar los fallos persistentes.
Coordinación de sistemas distribuidos: utilice el tiempo de espera de visibilidad de SQS para coordinar tareas en sistemas distribuidos. Establezca tiempos de espera de visibilidad que se ajusten a los tiempos de procesamiento previstos para los diferentes componentes. Esto ayuda a mantener la coherencia y evita condiciones de carrera en arquitecturas distribuidas complejas.
Optimización de la utilización de recursos: ajuste los tiempos de espera de visibilidad de SQS para optimizar la utilización de los recursos en su aplicación. Al establecer tiempos de espera adecuados, puede garantizar que los mensajes se procesen de manera eficiente sin consumir recursos innecesariamente. Esto conduce a un mejor rendimiento general del sistema y a una mayor rentabilidad.
Configuración y ajuste del tiempo de espera de visibilidad
El tiempo de espera de visibilidad comienza cuando se le entrega un mensaje. Durante este periodo, se espera que procese y elimine el mensaje. Si no lo elimina antes de que se agote el tiempo de espera, el mensaje volverá a estar visible en la cola y otro consumidor podrá recuperarlo. El tiempo de espera de visibilidad predeterminado de una cola es de 30 segundos, pero puede ajustarlo para que coincida con el tiempo que necesita la aplicación para procesar y eliminar un mensaje. También puede establecer un tiempo de espera de visibilidad específico para mensajes individuales sin cambiar la configuración general de la cola. Utilice la acción ChangeMessageVisibility para ampliar o acortar el tiempo de espera mediante programación, según sea necesario.
Mensajes y cuotas en tránsito
En Amazon SQS, los mensajes en tránsito son aquellos que un consumidor ha recibido pero que aún no se han eliminado. En las colas estándar, hay un límite de aproximadamente 120 000 mensajes en tránsito, en función del tráfico de la cola y las tareas pendientes de mensajes. Si se alcanza este límite, Amazon SQS devuelve un error OverLimit, que indica que no se pueden recibir más mensajes hasta que se eliminen algunos mensajes en tránsito. En el caso de las colas FIFO, los límites dependen de los grupos de mensajes activos.
-
Si se utiliza un sondeo corto: si se alcanza este límite mientras se utiliza un sondeo corto, Amazon SQS devolverá un error
OverLimit, que indica que no se pueden recibir más mensajes hasta que se eliminen algunos mensajes en tránsito. -
Si se utiliza un sondeo largo: si utiliza un sondeo largo, Amazon SQS no devuelve ningún error cuando se alcanza el límite de mensajes en tránsito. En su lugar, no devolverá ningún mensaje nuevo hasta que el número de mensajes en tránsito caiga por debajo del límite.
Para administrar los mensajes en tránsito de forma eficaz, siga estos pasos:
-
Eliminación inmediata: elimine los mensajes (manual o automáticamente) después del procesamiento para reducir el número de mensajes en tránsito.
-
Supervisión con CloudWatch: configure alarmas para un número elevado de mensajes en tránsito a fin de evitar alcanzar el límite.
-
Distribución de la carga: si procesa un gran volumen de mensajes, utilice colas o consumidores adicionales para equilibrar la carga y evitar cuellos de botella.
-
Solicitud de un aumento de cuota: envíe una solicitud a AWSSupport si necesita límites más altos.
Descripción del tiempo de espera de visibilidad en colas estándar y FIFO
Tanto en las colas estándar como en las colas FIFO (primero en entrar, primero en salir), el tiempo de espera de visibilidad ayuda a evitar que varios consumidores procesen el mismo mensaje simultáneamente. Sin embargo, debido al modelo de entrega “al menos una vez” de Amazon SQS, no hay garantía absoluta de que un mensaje no se entregue más de una vez durante el periodo de tiempo de espera de visibilidad.
-
Colas estándar: en las colas estándar, el tiempo de espera de visibilidad evita que varios consumidores procesen el mismo mensaje simultáneamente. Sin embargo, debido al modelo de entrega “al menos una vez”, Amazon SQS no garantiza que un mensaje no se entregue más de una vez durante el periodo de tiempo de espera de visibilidad.
-
Colas FIFO: en el caso de las colas FIFO, los mensajes con el mismo ID de grupo de mensajes se procesan siguiendo una secuencia estricta. Cuando un mensaje con un ID de grupo de mensajes está en tránsito, los mensajes posteriores de ese grupo no están disponibles hasta que se elimina el mensaje en tránsito o se agota el tiempo de espera de visibilidad. Sin embargo, esto no “bloquea” el grupo de forma indefinida: cada mensaje se procesa en secuencia y los consumidores solo podrán acceder al siguiente mensaje de ese grupo cuando se elimine cada uno de los mensajes o vuelvan a estar visibles. Este enfoque garantiza el procesamiento ordenado dentro del grupo sin impedir innecesariamente que el grupo entregue los mensajes.
Administración de errores
Si no procesa y elimina un mensaje antes de que se agote el tiempo de espera de visibilidad, debido a errores de la aplicación, bloqueos o problemas de conectividad, el mensaje volverá a estar visible en la cola. Entonces, el mismo consumidor u otro diferente podrá recuperarlo para intentar procesarlo de nuevo. Esto garantiza que los mensajes no se pierdan aunque se produzca un error en el procesamiento inicial. Sin embargo, establecer un tiempo de espera de visibilidad demasiado alto puede retrasar la reaparición de los mensajes sin procesar, lo que podría ralentizar los reintentos. Establecer un tiempo de espera de visibilidad adecuado en función del tiempo de procesamiento previsto es crucial para administrar los mensajes a tiempo.
Cambio y finalización del tiempo de espera de visibilidad
Puede cambiar o finalizar el tiempo de espera de visibilidad mediante la acción ChangeMessageVisibility:
-
Cambio del tiempo de espera: ajuste el tiempo de espera de visibilidad de forma dinámica mediante
ChangeMessageVisibility. Esto le permite ampliar o reducir la duración del tiempo de espera para adaptarse a las necesidades de procesamiento. -
Finalización del tiempo de espera: si decide no procesar un mensaje recibido, finalice su tiempo de espera de visibilidad configurando
VisibilityTimeouten 0 segundos mediante la acciónChangeMessageVisibility. Esto hace que el mensaje esté inmediatamente disponible para que otros consumidores lo procesen.
Prácticas recomendadas
Utilice las siguientes prácticas recomendadas para administrar los tiempos de espera de visibilidad en Amazon SQS, incluida la configuración, el ajuste y la ampliación de los tiempos de espera, así como la administración de los mensajes no procesados mediante colas de mensajes fallidos (DLQ).
-
Configurar y ajustar el tiempo de espera. Comience configurando el tiempo de espera de visibilidad para que coincida con el tiempo máximo que normalmente necesita la aplicación para procesar y eliminar un mensaje. Si no tiene claro cuál es el tiempo de procesamiento exacto, comience con un tiempo de espera más corto (por ejemplo, 2 minutos) y amplíelo según sea necesario. Implemente un mecanismo de latido para ampliar periódicamente el tiempo de espera de visibilidad y garantizar que el mensaje permanezca invisible hasta que se complete el procesamiento. Esto minimiza los retrasos en el reprocesamiento de los mensajes no administrados y evita una visibilidad prematura.
-
Ampliar el tiempo de espera y administrar el límite de 12 horas. Si el tiempo de procesamiento varía o puede superar el tiempo de espera establecido inicialmente, utilice la acción
ChangeMessageVisibilitypara ampliar el tiempo de espera de visibilidad mientras se procesa el mensaje. Tenga en cuenta que el tiempo de espera de visibilidad tiene un límite máximo de 12 horas a partir de la recepción del mensaje por primera vez. Ampliar el tiempo de espera no restablece este límite de 12 horas. Si el procesamiento requiere más tiempo que este límite, considere usar AWS Step Functions o dividir la tarea en pasos más pequeños. -
Gestión de mensajes no procesados. Para administrar los mensajes que fallan en varios intentos de procesamiento, configure una cola de mensajes fallidos (DLQ). Esto garantiza que los mensajes que no se puedan procesar tras varios reintentos se capturen por separado para su posterior análisis o tratamiento, lo que evita que circulen repetidamente en la cola principal.