У меня есть приложение, которое читает сообщение из SQS (давайте вызовите очередь «p»), выполняет дорогостоящую обработку изображений (шаг № 1), загружает результат на S3 и удаляет сообщение из очереди «p», а затем отправляет уведомление в тему SNS (этот вопрос SNS направляет сообщение в другую очередь под названием «q»). Существует еще одно приложение, которое считывает из очереди «q» и выполняет второй этап обработки изображения (загружает результат шага №1 из S3 и выполняет дополнительные математические операции над этим результатом).SQS/SNS и архитектор для одноразовых вычислений (EC2 SPOT экземпляры)
У меня есть комбинация обычных экземпляров + экземпляров пятен, работающих с приложением № 1. Я знаю, что (из-за концепции тайм-аута видимости SQS), если спотовые экземпляры закрываются во время фазы обработки изображений, SQS делает сообщения снова видимыми для других потребителей, поэтому экземпляры EC2 без пятна в конечном итоге выполняют работу, случайным экземплярам не удалось завершить из-за выключения системы.
Теперь мой вопрос: что произойдет, если спотовые экземпляры будут закрыты точно после удаления, но до отправки сообщения в SNS? Как мы можем оправиться от такого события?
# PSEUDO CODE
msg = read message from queue
result = doWork(msg)
upload result to S3
delete msg
publish to sns about result
Cheers!
Считаете ли вы использование Amazon SWF?Это выглядит как вариант использования, поскольку у вас есть различные моменты принятия решений и какое-то «состояние задачи». SWF позаботится об этом, а также освободит вас от проблемы, связанной с идемпотенцией, с использованием SNS/SQS. – Pepster