Решили мы попробовать для хранения видео файлов использовать Garage. Он казалось бы, идеально подходит для наших целей — запускается на древнем консьюмерском железе, требований к латенси сети у него нет, к ошибкам администрирования устойчив. А ещё файлы отдает с низкой задержкой, причем даже если запросить кусок из середины файла. Вроде бы красота, но мы ошиблись.
Никогда не пытайтесь сделать домашний интернет своей опорной инфраструктурой.
Что мы вообще делаем?
И так, я начну с начала. Ютуб замедлили, работать было скучно, хотелось навести суеты. И возникла гениальная идея — сделать свой видеохостинг, на который можно импортировать видео из ютуба. Проблема конечно решается другими, более популярными способами, и необязательно делать свой видеохостинг, но в них есть фатальный недостаток, который двигал нас вперёд.
Идея простая — пользователь заходит на страницу, вводит url видео которое он хочет посмотреть, и ему либо выводится готовое к просмотру видео, либо страница с ожиданием импорта.
Про трудности парсинга ютуба и генерирования hls манифеста напишу как нибудь в другой статье, а пока — мы сходили за видео файлом в источник, конвертировали его в удобный формат, и нам как то надо отдать его пользователю. Как?
Первое, что приходит на ум, это раздавать оттуда, куда скачали. Но вариант сразу отметается, как минимум потому что у нас очень быстро закончится место на жёстком диске. Да и вообще хранение файлов и обработка это разные вещи, для обработки нужен быстрый диск, процессор и возможно видеокарта. А для хранения и раздачи нужна быстрая сеть, средний по скорости диск и, желательно, избыточность данных.
Вторая мысль это положить файл в s3! Не в амазоновский, конечно, но в s3 совместимое хранилище на территории России. И решение, в общем, довольно правильное. Если не считать маленького косяка со стороны Яндекса, когда на 20тб у нас скорость закачки упала до 50кб/с (решили созданием нового бакета, а через сутки ребята из Яндекса и старый починили) проблем больше не было. Кроме одной — счета за потребление. Ух, он рос каждый день. Даже не так — скорость роста росла каждый день! Наверно для компаний с большим бюджетом допустимо, но для нас это pet‑project, в который мы не готовы много инвестировать.
Третий вариант — сделать s3 самим. И сервера сделать самим (собрать из старого железа). Расчет был не плох — наша пиковая скорость раздачи к тому моменту это 2Gbit/s. Раздавать столько через s3 это много сотен тысяч рублей в месяц. Через Yandex CDN это несколько сотен тысяч рублей в месяц. А раздавать столько с домашнего интернета для провайдера не тяжелее торрентов, это две тысячи рублей в месяц — аж в сто раз дешевле. И сервер особо мощный не нужен, справится любой старый комп.
Garage
Если поискать способы сделать self hosted s3, то сразу всплывает minio. Его постоянно используют для интеграционных тестов к большому s3, но в кластерном режиме его готовить сложно и где то в доках я видел серьезные требования к надёжности сети между узлами.
Есть ещё китайский seaweedfs. Отпугнуло большое количество компонентов. На каждый слой абстракции — свой компонент. S3 это самый высокий уровень абстракции, для него нужно много писать конфигов и продумывать схему деплоя — отпугнуло сложностью.
Garage. Своим названием он показывает, что это то что нам нужно. Один бинарник, он сразу и gateway, он и хранит/синхронизирует метаданные, он отдает/принимает файлы, он периодически проверяет их на консистентность, связывается с другими нодами и т. д.
Garage просит вас запустить его на всех серверах которые будут участвовать в хранении /передачи файлов и указать сколько у вас места, на каких серверах и сгруппировать их по зонам доступности, чтобы распихать копии блоков максимально в разные зоны.
А ещё выставить в конфиге желаемый уровень репликации и требование наличия кворума для доступа к файлам и всё, можно пользоваться! Гараж делит ваше место на 256 партиций, а потом каждую партицию закрепляет за несколькими нодами. Отсюда кстати ограничение, что больше 256 нод в одной зоне доступности держать нельзя.
Если добавить новую ноду, то он бережно перераспределит партиции на нее и в фоновом режиме перенесёт туда данные, а со старой ноды уберёт. Мы уже раз 5 добавляли и убирали ноды (а для кластера из трёх нод это прям под кластера надо переместить) — все проходит успешно.
Отдавать файлы напрямую гараж кстати почему то не умеет, анонимный доступ запрещен, пришлось прикручивать s3-proxy. А ещё медленно синхронизирует ноды, если кластер нагружен, а параметр «спокойствие» стоит по умолчанию. Надо его опускать в 0, тогда нормально. Ну и ещё lmdb которая под капотом хранит метаданные, во время периодического снятия снапшотов внезапно начинает жрать память (на диске) и убивает свободное место. Пришлось отключить эту фичу.
Документации маловато, но она достаточна. Например про параметр tranquility (спокойствие) нигде описания нет, даже в help'e консольной утилиты. И только в презентации выступления разработчиков на какой то конфе, которая лежит у них в репозитории, в списке действий для повышения производительности есть пункт «поиграйтесь с tranquility и workers»).
Ладно, от гаража в целом положительные впечатления, по крайней мере на таких небольших объемах как у нас (весь кластер до 100тб сырого места). Так в чем проблема?
Домашний интернет
Ох, мы же распихали свои сервера куда только можно — в пике их было 5. Накупили дорогих тарифов у провайдеров, услугу статический IP и думали что щас заживём, но не тут то было.
Скорость нам никто не гарантирует. И тем более не симметричную. На графиках видно, как в 9 часов вечера весь наш кластер просаживается из‑за того, что один из провайдеров снижает скорость отдачи до 10 мбит из 500, которые идут по тарифу.
Связанность. Подняли новую ноду, подключили к кластеру, ее все видят. Но она не видит одну из нод — находящуюся в соседнем доме. Техподдержка провайдеров, кстати, честно пыталась решить проблему. Воронежскому фридому респект. Хотя бы не стали посылать перезагружать роутер, а запросили трассировку и даже сами убедились, что связанности с соседним домом нет. Но дальше решать не стали, отправили к провайдеру на другой стороне, там тоже помочь не смогли. Вывернулись поднятием туннеля, но через неделю пропала связанность ещё двух нод. Теперь уже не односторонняя, а в обе стороны. Не пингуется и всё. Опять подняли туннель, кое как работоспособность восстановили.
Подозрительный трафик. Мы, все таки, слегка злоупотребляем провайдером. Скорость мы использовали не больше чем типичный пользователь торрентов, точно не на тарифный максимум. Но вот когда мы пустили трафик внешних пользователей, провайдеры начали что то замечать. Один из них просто вырубил нам интернет. Решилось звонком, интернет включили, посоветовали убрать ответ на ping check'и, сказали что какие то хакеры вас пытаются ddos'ить. Ок, с этой ноды видео мы больше не раздавали.
Латенси на ответ. Когда видео лежит в дата центре рядом с точкой обмена трафиком, то туда относительно быстрый доступ есть у всех. Но когда из Санкт Петербурга кто то хочет посмотреть видео, которое лежит на домашнем сервере у кого то в Воронеже, то он сталкивается с большими проблемами. Чаще плеер просто отваливался по таймауту.
Жалобы домашних. Когда сервер в пустой квартире, то это в целом никому не мешает. Но когда он выжирает 100% трафика, а кто то хочет поработать удаленно, или просто посидеть в интернете, то становится совсем неудобно.
Выводы
Мы пошли на компромиссное решение. Физический железный сервер в селектеле с 22тб hdd стоит 25 000р. Дороже чем домашний интернет, конечно, но сильно стабильнее. Все ещё в процессе миграции, все ещё используем garage, но видим как сильно выросла скорость загрузки и отдачи. Теперь мы начинаем упираться в скорость HDD. Видимо следующий шаг — поднятие кеширующих прокси для самых просматриваемых видео.
Комментарии (13)
PereslavlFoto
06.12.2024 09:59пропала связанность ещё двух нод
Удалось найти причину?
когда мы пустили трафик внешних пользователей,
провайдеры начали что то замечатьТо есть этот трафик запрещён в договоре?
он выжирает 100% трафика
Не для этого ли придуман шейпинг?
dilap54 Автор
06.12.2024 09:59Удалось найти причину?
Нет, второй раз даже не стали обращаться к провайдерам, приняли решение отказываться от такой схемы. Дебажить сеть на стыке двух домашних провайдеров очень сложно - трассировка показывает, что пакеты пропадают где то на маршрутизаторе одного из них, но техподдержка клянётся, что никаких ограничений на нем нет и отправляет к другому провайдеру.
То есть этот трафик запрещён в договоре?
Да, провайдер считает это предпринимательской деятельностью и отправляет на бизнес тариф.
Не для этого ли придуман шейпинг?
Да, шейпинг кстати применяли и он помогал. В keenetic giga оказывается очень легко и ограничить скорость и даже выставить приоритет трафика. Но по вечерам, когда весь подъезд сидит в интернете, падала общая скорость и приходилось выбирать - сидеть в интернете через 4g или приостанавливать обслуживание посетителей сайта. Выбирали первое.
PereslavlFoto
06.12.2024 09:59Как интересно! Провайдер считает дармовую деятельность физлица предпринимательской. Этак мы придём к тому, что любая домашняя страничка любого дружеского клуба станет у этого провайдера предпринимательской.
Обычно провайдер борется с этим, шейпя трафик у себя до того уровня, какой покажется провайдеру оплаченным. Очень странно, что ваш провайдер решил просто отказаться от клиента. Конечно, если это не Ростелеком — ибо для Ростелекома отказываться от клиента стало традицией.
StepanovAlex
06.12.2024 09:59Вот интересно, сколько электричества такой гараж потребляет?
dilap54 Автор
06.12.2024 09:59Не много. Вот график потребления двух домашних серверов, один из которых постоянно под нагрузкой, второй с видеокартой в режиме ожидания - 250Вт
Furriest
06.12.2024 09:59Ой. Ну Garage тут ни при чем, просто не надо строить продуктивное решение на домашних тарифах интернета. Они именно потому так дешевы, что их расчетное усредненное потребление - 3-4 Mbps на пользователя (и это не ограничение, это реальная загрузка, даже когда вы используете тариф на 500Mbps и в консьюмерской модели иногда генерите такой трафик). Переподписка там достигает огромных значений.
Не зря тарифы для юрлиц, где полоса хотя бы условно гарантирована, существенно дороже.slavius
06.12.2024 09:59тариф на 500Mbps
Ну так и нефиг провайдерам столько обещать и прятать под звёздочками что столько только иногда, и только тем кому столько и не нужно.
Но да, с ростом объёма трафика такое уже и не очень правильно - они мешают остальным соседям клиентам провайдера.
Furriest
06.12.2024 09:59Почему нефиг? Это нормальная практика. Тариф не "на 500Mbps", а "до 500Mbps".
Провайдер покупает оптом трафик за единицы-десятки тысяч рублей за гигабит, в зависимости от множества факторов. Почему вы можете рассчитывать на получение выделенной полосы от него в розницу на 1-2 порядка дешевле?
MountainGoat
Простите, а вы - это RuTube?
dilap54 Автор
Возможно RuTube начинал также. Но думаю сейчас они могут себе позволить не хоститься в подвале :)
Нет, к сожалению, мы не RuTube
anonymous
НЛО прилетело и опубликовало эту надпись здесь
PereslavlFoto
Они тот молодой сервер, что сотрёт рутуб с лица земли!