Вот в чем проблема. Я настроил свое приложение (на EC2) для хранения загруженных изображений непосредственно на Amazon S3. Я хотел бы иметь возможность обслуживать статические файлы (cdn) с моего «домашнего» сервера, поэтому я написал сценарий, который выполняет синхронизацию с S3. Но есть окно (минимум) одной минуты синхронизации.
Теперь я вижу два решения проблемы с фотографиями, недоступными на «домашнем» сервере: 1. Я пишу сценарий на EC2 (где находится приложение) для извлечения из базы данных фотографий, которые имеют статус «еще не синхронизированы», это состояние по умолчанию, когда пользователь загружает изображение. Затем сценарий выполняет эхо-запрос к изображению и, если он получает ответ «ОК», обновляет DB с «еще не синхронизировано» на «синхронизируется».
2. Предпочтительным решением было бы разрешить apache (в данном случае) перенаправить запрос изображения, если он видит 404 (например, запрашиваемое изображение для поиска) на S3. Таким образом, мне не понадобится сценарий из решения 1.
Итак, какой подход вы предлагаете мне использовать для решения этой проблемы избыточности? Или какова практика в производственной среде?
Для дальнейшего уточнения; Я бы хотел, чтобы изображения сначала передавались с «домашнего» сервера, если это не удается, обслужить их с S3.
TNx, Алан
То, как я справился с этим несколько лет назад (возможно, не лучшим способом), заключалось в том, чтобы не передавать изображения напрямую из Apache, а использовать скрипт php (используйте .htaccess, чтобы переписать URL-адреса, если хотите).
Сценарий php проверит, существует ли изображение локально, и, если нет, извлечет его с другого сервера (S3 в вашем случае), а затем вернет его в браузер - веб-браузер никогда не увидит, что S3 используется. Последующие запросы могли бы просто отправить локальную копию, не запрашивая копию у S3. Дополнительным преимуществом этого является то, что вы храните локально только те изображения, которые действительно были запрошены.
Одна вещь, которую вы должны учитывать, - это то, что происходит, когда версия изображения S3 изменяется. Как это определить?