Я думаю, что вы точно определили компромиссы между DynamoDB и S3.
Я думаю, что самое простое решение - использовать S3.Синхронизация между S3 и MySQL не так сложна или подвержена ошибкам, как вы думаете.Одно из приложений, над которыми я профессионально работаю, использует эту стратегию (для другого варианта использования), и у нас никогда не было никакого операционного бремени, связанного с несинхронизацией данных S3 из нашей основной базы данных.
Да, задержка от S3 выше, чем у DynamoDB.Вы можете ожидать <10 мс от DynamoDB против десятков до нескольких сотен миллисекунд от S3 (при условии, что объект <= 400 кБ, предел размера элемента DynamoDB).Однако S3 не требует от вас предоставления емкости, и практически не существует ограничений на размеры файлов.(Технически, один файл не может быть больше 5 ТБ, но вы вряд ли достигнете этого в этом случае.) </p>
Если вы не знаете, что вам нужно задержка в одну цифру миллисекунды , вы должны использовать S3.Он предназначен именно для этого.
S3 гарантирует строгую согласованность при создании объекта, но только возможную согласованность при его обновлении.Если это вас беспокоит, убедитесь, что вы просто создаете новый объект каждый раз, когда вы обычно его обновляете.Так как вы храните ключ в своей базе данных, вы не привязаны к определенному имени файла, и каждый раз, когда вы изменяете html, легко генерировать новый ключ.
Если вы строите его с S3, и задержка оказывается слишком высокой, вы можете поместить кеш перед S3 или вы можете попробовать перейти на модель без сервера, используя Lambda @ Edge с CloudFront для обслуживания статическогоресурсы от S3.