Общие сведения

Ретрекер написан на языке Perl с использованием следующих модулей:
  • Digest::SHA1 — позволяет создать уникальные идентификаторы пиров;
  • EV — предоставляет интерфейс для регистрации обработчиков различных событий (срабатывание таймера, получение сигнала, появление доступных для чтения данных в сокете);
  • IO::Socket::INET — предоставляет интерфейс для создания сокетов;
  • POSIX — упрощает вывод даты в необходимом формате.

Ретрекер работает в бесконечном цикле, последовательно обрабатывая поступающие от клиентов запросы. На каждый сеанс связи отводится до 3 мс, так как для абсолютного большинства (99.99%) этого достаточно. Последовательная обработка исключает необходимость синхронизации и блокировки данных. В ретрекере присутствуют задачи по расписанию (cron), заключающиеся в удалении пиров и раздач, по которым долго (пятикратное время анонса) не поступали данные.

Он может быть запущен на любых платформах, где есть язык Perl. Запуск можно осуществить как на всех сетевых интерфейсах сервера (0.0.0.0), так и на определенном (чаще всего — локальном).

Ретрекер держит все данные в памяти. Было решено не хранить их в базе данных или файлах, так как в случае аварийного завершения работы ретрекер вернётся в прежнее состояние в течение 10 минут (при интервале анонса равном 5 минутам).

Ретрекер умеет сохранять логи подключений клиентов и показывать краткую статистику о данных, хранящихся в его памяти.

В случае аварийного завершения работы приложения предусморен мониторинг состояния. При отсутствии отклика от ретрекера будет произведен его перезапуск в течение пяти минут с оповещением администратора.

Особенности ретрекера

  • чрезвычайно быстр;
  • стабилен;
  • расходует очень малое количество памяти — хранит только самую необходимую информацию о пирах и раздачах.

Потребляемые ресурсы

Измерение проводилось после непрерывной работы ретрекера в течение недели. Занимаемый объем оперативной памяти составил 5 976 КБ при 1 050 пирах на 1 097 раздачах. К тому моменту было обслужено 1 705 680 подключений.

Структура проекта

Проект состоит из 3 файлов:
  • btrt.pl (11 534 байт) — основная логика приложения;
  • functions.plib (6 046 байт) — вспомогательные функции;
  • run (1 598 байт) — файл запуска приложения.

Скачать исходный код ретрекера

Варианты запросов к ретрекеру

  • http://localhost:2790/ann — запрос списка пиров;
  • http://localhost:2790/ping — проверка состояния трекера;
  • http://localhost:2790/stats — просмотр краткой статистики (количества пиров и раздач, о которых знает ретрекер).

Хранимые данные пиров

  • mtime — время последнего обращения к ретрекеру;
  • seeder — является ли пир сидом.

Хранимые данные раздач

  • complete_count — сколько раз полностью скачали раздачу;
  • leechers — количество личеров;
  • mtime — время последнего обращения за списком пиров по этой раздаче;
  • peers — данные пиров:
    • address — упакованные IP и порт клиента.
  • seeders — количество сидеров.