sqs sns programa pricing example aws amazon-sqs

sns - ¿Cuál es una buena práctica para lograr el comportamiento de "entrega exacta una vez" con Amazon SQS?



aws sqs documentation (3)

La mejor solución realmente depende exactamente de lo importante que sea que no realice la acción sugerida en el mensaje más de una vez. Para algunas acciones, como eliminar un archivo o cambiar el tamaño de una imagen, en realidad no importa si sucede dos veces, por lo que está bien no hacer nada. Cuando es más crítico no hacer el trabajo una segunda vez, uso un identificador para cada mensaje (generado por el remitente) y el receptor rastrea los dups marcando los identificadores como se ve en memchachd. Está bien para muchas cosas, pero probablemente no si la vida o el dinero dependen de ello, especialmente si hay varios consumidores.

Las escrituras condicionales suenan como una solución inteligente, pero me hace preguntarme si quizás AWS no sea una solución tan buena para su problema si necesita una solución a prueba de balas exactamente una vez.

Según la documentation :

P: ¿Cuántas veces recibiré cada mensaje?

Amazon SQS está diseñado para proporcionar "al menos una vez" la entrega de todos los mensajes en sus colas. Aunque la mayor parte del tiempo cada mensaje se enviará a su aplicación exactamente una vez, debe diseñar su sistema para que el procesamiento de un mensaje más de una vez no cree errores ni incoherencias.

¿Hay alguna buena práctica para lograr la entrega exactamente una vez?

Estaba pensando en usar las " Escrituras condicionales" de DynamoDB como mecanismo de bloqueo distribuido, pero ... ¿alguna idea mejor?

Algunas referencias a este tema:



Otra alternativa para el bloqueo distribuido es el clúster de Redis, que también puede aprovisionarse con AWS ElasticCache. Redis admite transactions que garantizan que las llamadas simultáneas se ejecutarán en secuencia.

Una de las ventajas de usar la memoria caché es que puede establecer tiempos de espera de caducidad, por lo que si falla el procesamiento de su mensaje, el bloqueo obtendrá la liberación programada.