Как масштабировать хостинг / обслуживание изображений?

Я задал этот вопрос на stackoverflow, и было предложено попробовать это здесь:

Я создаю веб-сайт, где пользователи могут загружать фотографии, и я бы также конвертировал загруженные фотографии в миниатюры.

Планирование заранее, если веб-сайт станет популярным, как мне его масштабировать, чтобы изображения (как оригинальные, так и миниатюры) сохранялись и обслуживались с нескольких серверов? Может быть, кластер? Есть ли какое-нибудь программное обеспечение с открытым исходным кодом, которое поможет мне в этом?

Благодарю.

1 ответ

Решение

Самое простое, что вы можете сделать, чтобы иметь хорошие варианты позже, - это написать свое программное обеспечение таким образом, чтобы изображения никогда не сохраняли одно и то же имя файла при изменении - изменение изображения всегда должно изменять имя файла. Это означает, что вы можете установить очень длительное время жизни кэша, либо через собственные кэши, либо через сеть доставки контента, что значительно сократит количество операций чтения с диска, которые вам нужны. (Возможно, вам понадобится какой-то механизм для немедленной очистки определенного файла из кэша или CDN, если могут возникнуть обстоятельства, когда изображение должно быть полностью удалено.)

Чтобы разрешить горизонтальное масштабирование, разбейте изображения на большое количество групп (100 или более) и добавьте к каждому изображению префикс пути к группе, в которой он находится. Вы можете обслуживать все группы с одного и того же сервера сейчас, но позже На сегодняшний день будет довольно легко использовать балансировщик нагрузки для направления трафика на разные серверы в зависимости от группы изображений. Я бы не использовал кластеризованную файловую систему для изображений, потому что она добавляет дополнительный уровень сложности, и, вероятно, проще использовать несколько серверов и некоторые правила балансировки нагрузки для распределения нагрузки.

Другие вопросы по тегам