В настоящее время я создаю простую архитектуру веб-приложений на AWS, как показано ниже: Elastic Load Balancer - несколько интерфейсов - база данных RDS.
Я также настроил сервер NFS для хранения всех изображений, загруженных пользователями через веб-приложение, таких как, в основном, фотографии профилей (я не могу использовать для этого S3, я следую только спецификациям, которые получаю ...).
Внешние виртуальные машины создаются группой автомасштабирования. Когда виртуальная машина создается, она загружает исходники веб-приложения из корзины S3. Проблема в том, что у меня есть несколько огромных файлов в этих источниках (в основном статические файлы, такие как mp4 или изображения). Я также думаю о хранении этих больших статических файлов на сервере NFS, потому что загрузка с S3 занимает слишком много времени.
Итак, мой вопрос: когда уместно хранить файл в NFS, а когда лучше разместить его на каждом интерфейсе? например, если я храню mp4 в NFS, почему бы не сохранить все веб-приложение на этом NFS?
примечание: я не хочу создавать AMI, содержащий эти файлы, поскольку он недостаточно гибкий при их изменении
Все сводится к производительности. Если ваше хранилище NFS достаточно быстрое, вам ничто не мешает разместить на нем все свои веб-приложения и файлы веб-контента, чтобы они были доступны для всех ваших интерфейсных виртуальных машин.
Тем не менее, наиболее распространенная причина, по которой люди этого не делают, заключается в том, что дополнительная сетевая задержка, связанная с извлечением файлов из сетевого хранилища, преобразуется в дополнительную задержку, когда клиенты загружают ваше веб-приложение / сайт в своем браузере.
Очевидно, это зависит от базового хранилища виртуальной машины, но обычно локальное хранилище почти всегда имеет меньшую задержку и поэтому предпочтительнее для хранения статического контента. Во многих развертываниях с балансировкой нагрузки, в которых я участвовал, используется DRDB для обеспечения синхронизации статического контента, доступного для всех веб-серверов.