Масштабирование GIF-хостинга
Мой друг управляет популярным сайтом конвертации Youtube-GIF. Прямо сейчас он конвертировал 250 000 видео на Youtube в GIF-файлы (каждое видео получает 6 миниатюр для 1,5-миллиметровых файлов GIF) и обслуживает около 80 ТБ полосы пропускания в месяц.
Его сервер блокирует ввод-вывод - я не гуру-администратор, но, похоже, настало время поиска жесткого диска для непоследовательных GIF-файлов, которые засоряют все. У него есть сервер с 100tb.com за 300 долларов в месяц, и он имеет пропускную способность 100 ТБ. Сначала я посоветовал ему получить CDN для решения своих проблем, потому что затем GIF обслуживаются без использования ресурсов сервера, а его основной блок мог просто обрабатывать кодировку - мы нашли один CDN за 600 долл. / Мес., Который был слишком медленным / ненадежный, а остальные хотели по крайней мере $2000/ мес для 80 ТБ пропускной способности. Сейчас мы пытаемся сохранить весь проект под 900 долл. / Мес.
Таким образом, самая дешевая полоса пропускания, которую мы можем найти, составляет 100 ТБ, но мы перерастаем один сервер. Мы могли бы добавить еще один сервер, но я не знаю, как разделить хранилище GIF, чтобы нагрузка была равномерно распределена между двумя блоками. Наш хост рекомендовал использовать программное обеспечение, такое как Aflexi.net, но я уверен, что должно быть более дешевое решение.
Кто-нибудь может помочь? Я по профессии программист, а не сисадмин, но пытаюсь научиться работать. Спасибо!
4 ответа
S3 не альтернатива, счет за 80 ТБайт будет более 8 тысяч долларов в месяц.
Похоже, вы обслуживаете GIF-файлы прямо из файловой системы. Почему бы вам не поместить все GIF-файлы на 2 машины, использовать хэш-алгоритм, отображающий имя на одну из двух машин, и доставить их таким образом? Это будет легко масштабироваться на большее количество машин, пока ваш балансировочный груз выдерживает...
Если это всего 2 машины, вы можете использовать DRBD для синхронизации между двумя машинами. Затем просто используйте PHP, чтобы случайным или алгоритмическим образом решить, какой сервер использовать во время запроса. Простое, но работоспособное решение.
Я не могу комментировать другие комментарии, но они звучат хорошо. Я хотел бы снять часть нагрузки с файловых серверов, сохраняя ваши наиболее часто используемые (то есть наиболее популярные) файлы в кэш-памяти, то есть иметь обработчик http, который делает что-то вроде этого:
- Получить запрос GIF
- Проверьте, если это в памяти, если так, служить клиенту
- Если нет, получите с одного из файловых серверов (сделайте несколько циклических перебора) и добавьте в кеш памяти
- Вернуть GIF клиенту
Если вы можете получить машину с чрезмерной загрузкой ОЗУ, вы будете смеяться, поскольку вполне вероятно, что вы сможете разместить большой процент ваших популярных файлов в памяти.
И когда вы насытите это, добавьте еще один сервер обработки изображений и выполните циклический перебор. Продолжайте делать это до тех пор, пока что-то не сломается, например, пропускная способность, масштабируемость, экономия.
Я сделал что-то подобное раньше, чтобы получить хороший эффект.
Скопируйте файлы на S3 и подайте их оттуда. CDN бедняка:)
Если вам требуется больше вычислительной мощности, вы можете выполнять преобразования из экземпляров EC2 и также выгружать данные непосредственно в ваш "CDN".