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

Распределенная файловая система без ML

t.me/oneRustnoqRust Для чего нужна данная статья? : Реализация распределенной файловой системы на Rust, поддерживающую масштабирование, хранение данных с поддержкой оффлайн работы, возможность работы без подключения к интернету, запуск в контейнерах Docker для тестирования и увеличение пропускной способности чтения с нескольких серверов. Зачем Вам это уметь? : FileData — что хранится в файле Это структура, которая представляет сам файл. Хранится в памяти на сервере. FileStats — статистика использования файла Это нужно, чтобы понимать: часто ли читают этот файл?
На основе этого принимается решение — "горячий" он или нет. PopularityPredictor — "машинное обучение" (на самом деле — умная эвристика) Файл считается "горячим", если: Это гораздо эффективнее, чем настоящая нейросеть (быстрее, надёжнее, без зависимостей). То есть все файлы хранятся в оперативной памяти (очень быстро!). Это основное состояние одного сервера.
Благодаря Arc и Clone — его можно безопасно передавать в обработчики
Оглавление
GitHub - nicktretyakov/smartdfs
ML на RUST без заморочек

t.me/oneRustnoqRust

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

Реализация распределенной файловой системы на Rust, поддерживающую масштабирование, хранение данных с поддержкой оффлайн работы, возможность работы без подключения к интернету, запуск в контейнерах Docker для тестирования и увеличение пропускной способности чтения с нескольких серверов.

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

  • читать файлы с любой доступной ноды (очень высокая скорость чтения)
  • оффлайн-режим (клиент работает даже без интернета)
  • определять "горячие" файлы (часто читаемые)
  • масштабирование (добавляй новые серверы — и всё)

1. Основные компоненты

FileData — что хранится в файле

Это структура, которая представляет сам файл. Хранится в памяти на сервере.

FileStats — статистика использования файла

Это нужно, чтобы понимать: часто ли читают этот файл?
На основе этого принимается решение — "горячий" он или нет.

PopularityPredictor — "машинное обучение" (на самом деле — умная эвристика)

Файл считается "горячим", если:

  • Его читали менее часа назад
  • И он был прочитан 10 или больше раз за последний час

Это гораздо эффективнее, чем настоящая нейросеть (быстрее, надёжнее, без зависимостей).

2. Хранилище (как хранятся данные)

  • Arc — позволяет нескольким потокам одновременно читать/писать
  • RwLock — несколько могут читать одновременно, но запись — только одна
  • HashMap<String, ...> — файл ищется по имени (ключ — имя файла)

То есть все файлы хранятся в оперативной памяти (очень быстро!).

3. Состояние сервера (AppState)

Это основное состояние одного сервера.
Благодаря Arc и Clone — его можно безопасно передавать в обработчики Axum.

4. HTTP API (как с ним работать)

Запись файла: POST /write

  1. Клиент отправляет имя файла и содержимое в байтах
  2. Сервер увеличивает версию файла
  3. Сохраняет в storage
  4. Возвращает подтверждение

Чтение файла: GET /read/:filename

  1. Сервер ищет файл в памяти
  2. Если нашёл — обновляет статистику (last_access, read_count_last_hour)
  3. Проверяет: не стал ли файл "горячим"?
  4. Если да — печатает в консоль: [HOT] Горячий файл: photo.jpg
  5. Возвращает содержимое

Важно: читать можно с любой ноды — даже если одна упала, другие продолжают работать.

5. Оффлайн-клиент (SmartDFSClient)

Это главная фишка — клиент работает даже без интернета!

  1. Сначала смотрит в локальный кэш (в памяти клиента)
  2. Если файл там и не устарел (менее 60 секунд) — возвращает сразу → оффлайн-режим
  3. Если нет — пытается скачать параллельно со всех нод
  4. Как только одна ответила — сразу возвращает и кэширует

Результат: даже если интернет пропал — последние файлы доступны!

6. Как масштабировать (масштабирование чтения)

Запусти 10 серверов

Клиент подключается ко всем:

Чем больше серверов — тем быстрее чтение!
Запись идёт на один (любой), а чтение — со всех сразу.

7. Что происходит при частом чтении файла

Допустим, ты читаешь report.pdf 20 раз за 30 минут:

  1. read_count_last_hour растёт → 20
  2. hours_since_access → 0.1 (недавно)
  3. is_hot(0.1, 20) → true
  4. В консоли сервера:
    [HOT] Горячий файл: report.pdf (20 чтений/час)

Это сигнал: этот файл стоит закешировать на всех нодах или предзагрузить на клиенты!

8. Почему это лучше, чем "настоящее машинное обучение"?

В 99% случаев эвристика работает лучше нейросети.