Найти в Дзене
Один Rust не п...Rust

Автоматический поиск зеркал с ML

Создать сервис для автоматического подбора зеркала crates.io обладающий следующими свойствами: Существует две реализации: TomlConfigWriter модифицирует ~/.cargo/config.toml Программа принимает параметры: Определены несколько типов ошибок:
Оглавление
nicktretyakov1/mirror_config | Gitverse

Для чего нужна данная статья? :

Создать сервис для автоматического подбора зеркала crates.io обладающий следующими свойствами:

  1. Асинхронность: Используется Tokio для параллельного измерения зеркал
  2. Потокобезопасность: Все компоненты реализуют Send + Sync
  3. Персистентность: История ML сохраняется между запусками
  4. Гибкость: Стратегии выбора, измерители и писатели конфигурации абстрагированы через трейты
  5. Инкрементальное обучение: Модель улучшается с каждым запуском

Зачем Вам это уметь? :

Позволить сервису адаптироваться к изменениям зеркал и "учиться" на основе реальных измерений ML.

Алгоритм

  1. Первый запуск:
    Модель обучается на синтетических данных
    Измеряются все зеркала
    Выбирается лучшее (на основе ML)
    Результаты сохраняются в историю
  2. Последующие запуски:
    Загружается история предыдущих измерений
    Модель переобучается на истории + синтетике
    Измеряются зеркала
    Новые данные добавляются в историю
    Выбирается лучшее зеркало

Архитектура приложения

Измерение производительности (PerformanceMeasurer)

  • HttpPerformanceMeasurer выполняет HTTP-запросы к зеркалам
  • Для каждого зеркала делает несколько попыток (по умолчанию 7)
  • Измеряет:
    Задержку (latency) - время от отправки запроса до получения ответа
    Скорость (speed) - на основе размера скачанных данных
    Успешность (success rate) - процент успешных запросов
    Дисперсию (variance) - стабильность задержки

Выбор зеркал (MirrorSelector)

Существует две реализации:

  1. LatencyMirrorSelector - простой выбор по минимальной задержке
  2. MLMirrorSelector - интеллектуальный выбор с помощью Random Forest

Запись конфигурации (ConfigWriter)

  • TomlConfigWriter модифицирует файл ~/.cargo/config.toml
  • Заменяет или добавляет источник crates-io выбранным зеркалом

Машинное обучение в MLMirrorSelector

  1. Онлайн-обучение: Модель обучается "на лету" при каждом запуске
  2. Синтетические данные: Генерируются искусственные данные для начального обучения
  3. История измерений: Реальные данные сохраняются между запусками

Используемые зеркала по умолчанию:

Параметры Random Forest:

  • 200 деревьев (n_trees: 200)
  • Максимальная глубина: 10 (max_depth: 10)
  • Минимальное количество образцов в листе: 1 (min_samples_leaf: 1)

Работа с конфигурационным файлом

TomlConfigWriter модифицирует ~/.cargo/config.toml

Аргументы командной строки

Программа принимает параметры:

  • --strategy ml|latency - выбор алгоритма
  • --config-path - путь к config.toml
  • --history-path - путь к файлу истории ML

Обработка ошибок

Определены несколько типов ошибок:

  • NoMirror - не найдено подходящее зеркало
  • Measurement - ошибки измерения
  • ConfigWrite - ошибки записи конфигурации
  • NoHomeDir - не найден домашний каталог
  • HistoryIO - ошибки чтения/записи истории ML