Рост популярности платформы Mastodon и увеличение международной аудитории сервиса metalhead.club привели к необходимости решить проблему высокой задержки при загрузке медиа-контента пользователями из разных уголков мира. Основной сервер проекта расположен во Франкфурте, Германия, что обеспечивает низкие задержки для европейских пользователей, однако пользователи из США, Канады, Австралии и Азии сталкивались с заметными задержками. Особенно критично это проявлялось при воспроизведении видео и загрузке изображений, что отрицательно сказывалось на опыте взаимодействия с платформой. Проблема латентности, обусловленная географической удаленностью и физическими ограничениям передачи данных по оптоволоконным линиям, подтолкнула к решению создать собственную небольшой CDN (Content Delivery Network) — сеть доставки контента, призванную уменьшить задержки, разместив копии данных ближе к конечным пользователям.
CDN за счет дистрибуции данных по нескольким географически распределенным серверам сокращает время отклика и улучшает скорость загрузки контента. Содержание копируется на эти сервера, и пользователи автоматически получают данные с ближайшего узла, что значительно уменьшает время передачи, особенно при больших расстояниях. Таким образом, появление самостоятельно управляемой CDN было приоритетом для проекта metalhead.club в переходе к улучшению обслуживания международной аудитории. Выбор технологии распределения трафика — Anycast или GeoIP — определял всю архитектуру решения.
Anycast считается золотым стандартом для CDN, когда один и тот же IP-адрес присваивается нескольким физическим серверам по всему миру. Балансировка выполняется с помощью протокола BGP, который направляет запросы пользователя на сервер с наименьшей сетевой задержкой. Такой подход обеспечивает максимальную эффективность, автоматическую маршрутизацию и устойчивость. Однако его развертывание требует прямого управления IP-адресным пространством и наличия возможностей настройки BGP, что неподъемно для небольших проектов или частных лиц. Поэтому автор проекта решил остановиться на альтернативном и более доступном варианте — CDN, построенном на основе GeoIP.
Принцип работы GeoIP-решения заключается в определении географического местоположения пользователя по его IP-адресу с помощью специальной базы данных и последующей маршрутизации на соответствующий сервер. Здесь ключевую роль занимает система DNS, которая на основании определения региона пользователя возвращает IP-адрес оптимального сервера. Процесс определения локации по IP опирается на базы данных GeoIP, где каждому IP-адресу сопоставляется страна или регион, что достаточно точно работает на уровне страны. Поскольку IP-адрес пользователя напрямую не виден DNS-серверам (запросы идут через резолверы), для повышения точности применяется технология EDNS Client Subnet (ECS), которая передает подсеть клиента в DNS-запросе. ECS позволяет более точно сопоставлять запросы с географическим регионом и значительно улучшает эффект распределения нагрузки.
Автор проекта принял решение построить собственный GeoIP CDN на базе облачных серверов Hetzner, расположенных в Германии, США и Сингапуре. Эти локации обеспечивают покрытие Европы, Америки и Азии с ориентировочным временем отклика около 100 миллисекунд, что значительно лучше, чем при попадании пользователей на единственный сервер в Германии. Hetzner соответствует требованиям конфиденциальности и использует исключительно возобновляемую электроэнергию, что совпадает с приоритетами проекта. На каждом сервере запущен экземпляр Nginx, настроенный в режиме кэш-прокси. Он перехватывает запросы к поддомену media.
metalhead.club, проверяет наличие необходимого файла в локальном кеше и, при его отсутствии, загружает медиа-контент из основного S3-хранилища. После загрузки данные кэшируются для дальнейшего быстрого доступа. Такая схема позволяет минимизировать задержки доступа и нагрузку на основной сервер. Для организации географически зависимого распределения трафика был выбран DNS-сервис Scaleway с поддержкой GeoIP и ECS.
Данный сервис позволяет направлять DNS-запросы на конкретные IP-адреса в зависимости от региона пользователя, обеспечивая эффективный баланс и прозрачность для пользователей. В дополнение, для удобства управления была создана отдельная DNS-зона cdn.650thz.de, что позволило сохранить независимость корневой зоны и усилить безопасность при верификации. Переадресация на CDN была настроена через изменение записи CNAME для media.
metalhead.club, которая теперь указывает на metalheadclub-media.cdn.650thz.de — распределенную по регионам зону хранения и отдачи медиафайлов.
Это позволило добиться динамического выбора ближайшего сервера при запросе, а благодаря добавленному HTTP-заголовку X-Served-By можно легко отследить, с какого сервера пришел тот или иной файл. Результаты тестирования и отзывы пользователей показали значительное снижение задержек для американских и австралийских участников. Например, среднее время отклика для пользователей из Австралии снизилось с примерно 400 мс до 150 мс и даже до 108 мс в некоторых случаях. Американский пользователь впервые смог без прерываний просматривать видео на платформе, что подтверждает успешность выбранного подхода. Некоторые ограничения при использовании GeoIP базы оказались очевидны.
Точность определения города не всегда высокая, и иногда пользователи попадали не на оптимальный сервер, что связано с особенностями распределения IP-адресов и обновлением баз данных. Тем не менее, регулярные апдейты и использование ECS минимизируют эти ошибки. Также важно понимать, что GeoIP CDN требует, чтобы контент уже был запрошен и кэширован на соответствующем регионе, иначе первоначальный запрос может возвращать данные с основного сервера с задержкой. Кроме того, только медиа-контент обслуживается через GeoIP CDN, а основная инфраструктура, включая API и веб-интерфейс, продолжает работать с центрального сервера в Европе, что обеспечивает более стабильную работу системы и упрощает управление. В перспективе автор планирует продолжать оптимизацию, следить за точностью GeoIP и рассматривать возможность перехода на профессиональный Anycast CDN, если будет доступен провайдер с поддержкой 100% зелёной энергии, что крайне важно для философии проекта и его пользователей.
Также выявилась необходимость в оптимизации DNS-запросов для сокращения общего времени загрузки страниц, поскольку в удалённых регионах задержки часто вызваны не столько самой доставкой контента, сколько временем отклика DNS. Уже разработаны методы устранения дополнительных CNAME-записей и улучшения разрешения имен для повышения производительности. Опыт metalhead.club показывает, что самостоятельное развертывание небольшого GeoIP CDN с разумными затратами и использованием облачных сервисов возможно и целесообразно для малых и средних проектов, которые стремятся улучшить пользовательский опыт без отказа от принципов прозрачности и экологичности. Эксперимент демонстрирует, как правильный выбор архитектуры, использование современных технологий DNS и кэширования может помочь решить классические проблемы распределённого web-сервиса, ориентированного на глобальную аудиторию.
Важна готовность к компромиссам и внимание к деталям, а успех зависит от регулярного мониторинга и гибкости в развитии инфраструктуры. В итоге, внедрение собственного GeoIP CDN позволило metalhead.club заметно улучшить условия доступа для международных пользователей, сохранить контроль над данными, поддерживать экологичность инфраструктуры и заложить фундамент для дальнейшего роста и улучшений. Такой подход станет полезным примером для других операторов малых сообществ, стремящихся повысить качество обслуживания без значительных финансовых вложений и зависимости от крупных коммерческих поставщиков.