Позволяет балансировать нагрузку между хостами при раздаче статических файлов (jpg, gif, png, css, zip, rar...)
Скачать Static mirrorer.
#cat ReadMe.txt
Данный проект создавался для торрент трекера http://torrents.saratov-style.net,
но может быть применён для похожих задач. На даный момент nginx умеет это делать
из коробки. Но дело в том, что на большинстве зеркал стоял Windows с каким-либо
готовым дистрибутивом Apache + MySQL + php (Denver, AppServ).
Это было в 2010, когда в городе, почти повсеместно у домашних пользователей
интернета был ADSL. Сервер трекера был подключен как раз к такой линии.
ADSL линия имеет небольшую скорость на отдачу. И поэтому получалась такая
ситуация, что вечером трекер ужасно тормозил в силу того, что весь исходящий
канал занят.
Что было сделано. Незначительно изменён движок форума так, чтобы все статические
файлы скачивались с зеркал (см. example.php). На каждом зеркале размещён всего
один php скрипт. Если запрашиваемого файла не существует на зеркале, то скрипт
скачивает его с трекера и в случае удачи делает редирект сам на себя через
отправку заголовка Location.
Существовало несколько зеркал. У каждого зеркала разный канал на отдачу. У меня
был хороший - Annex M (до 3.5 Мбит/с на отдачу). Поэтому было реализован
небольшой таргетинг трафика ($mirror_cfg['ratio']). Причём некоторые из зеркал
работали только вечером и под Windows (Apache, php). Поэтому был написал скрипт
мониторинга зеркал (heartbeat.php), который работал в screen`е. Этот скрипт
писал результаты работы в файл mirror_stat_serialize.txt. Данные из этого файла
использовались каждый раз для выбора зеркала при формировании страницы трекера.
Удачным решением было "спрятывание" реальных доменных имён зеркал через CNAME.
Т.к. зеркала - это по сути домашние компьютеры пользователей с динамичким IP,
то пользователи использовали службы dyndns. И в итоге доменные имена компьютеров
были очень разнообразными и порой весёлыми и забавными. В итоге для в DNS для
трекера были сделаны записи. Для моей это было примерно так:
s1.saratov-style.net. CNAME sofree...
|