No description
- TeX 64.2%
- Rust 35.8%
| docs | ||
| src | ||
| tests | ||
| thesis | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| gost.sty | ||
| README.md | ||
ECS Distributed System Simulator
Дипломный проект по теме «Архитектура ECS для моделирования распределённых систем». Репозиторий содержит интерактивный симулятор отказоустойчивого распределённого key-value кластера на Rust + Bevy 0.18.1, а также текст автореферата и сопроводительную документацию.
Что моделируется
Симулятор показывает упрощённый, но предметно осмысленный кластер, в котором есть:
- клиенты, генерирующие
GET,PUTиDELETE; - маршрутизаторы запросов;
- узлы хранения со состояниями
Alive,Slow,Partitioned,Failed,Recovering; - шардирование пространства ключей;
- leader/follower-реплики с фактором репликации;
- сообщения в полёте, heartbeat и timeout-механика;
- задержки сети, деградация каналов, потери сообщений и partition-сценарии;
- очереди обработки на узлах;
- упрощённое переизбрание лидера;
- панель метрик в реальном времени.
Это не реализация реальной СУБД и не протокол уровня Raft. Цель проекта — исследовать поведение распределённой системы и показать, что ECS-подход хорошо подходит для моделирования большого числа взаимодействующих сущностей.
Почему ECS
В модели много однотипных и слабо связанных объектов: узлы, реплики, сообщения, каналы, таймеры, клиенты, визуальные представления. ECS позволяет:
- хранить состояние как композицию независимых компонентов;
- разбить поведение на короткие системы: генерация запросов, доставка сообщений, heartbeat, обработка очередей, сбор метрик, визуальное обновление;
- отделить доменную модель от UI и визуализации;
- расширять сценарии без переписывания монолитного объекта «кластера».
Возможности приложения
- 2D-визуализация кластера, состояний узлов, каналов и сообщений.
- Запуск, пауза, пошаговое выполнение и сброс симуляции.
- Настройка числа клиентов, узлов, шардов, replication factor, интенсивности нагрузки, таймаутов и сетевых параметров.
- Preset-сценарии:
Normal Operation,High Load,Leader Failure,Multi Node Failure,Network Partition,Recovery. - Интерактивные воздействия:
- клик по узлу переводит его в сбой или восстановление;
- в панели управления можно выделить шард;
- можно деградировать или отключать связь между двумя выбранными узлами;
- можно скрывать или показывать сообщения в полёте.
- Метрики:
- throughput;
- средняя и p95 latency;
- timeouts;
- потерянные сообщения;
- число смен лидера;
- длины очередей;
- загрузка узлов;
- replica lag;
- доля успешных чтений и записей.
Ограничения модели
- Используется дискретное модельное время, а не реальные сокеты и потоки.
- Выбор лидера упрощён и детерминирован.
- Репликация лидерная и quorum-like, без полного консенсусного протокола.
GETможет выполняться либо через лидера, либо через выбранную реплику в режимеPreferReplica.- Сценарии отказов заданы как исследовательские эксперименты, а не как точная эмуляция продакшн-кластера.
Сборка и запуск
Требования:
- стабильный Rust;
- системные зависимости для
winit/wgpuпод вашу платформу.
Команды:
cargo fmt
cargo clippy --all-targets --all-features -- -D warnings
cargo test
cargo run
Как работать с приложением
- Левая панель: управление симуляцией, выбор сценария, параметры модели и интерактивные действия.
- Правая панель: метрики и инспектор выделенного узла/шарда.
- Клик по узлу на сцене:
- живой узел переводится в
Failed; FailedилиPartitionedузел переводится вRecovering.
- живой узел переводится в
- Выделение шарда подсвечивает его реплики на узлах.
Структура репозитория
src/app/— сборка приложения и headless-конфигурация для тестов.src/domain/— чистая предметная логика: шардирование, выбор лидера, percentiles и базовые типы.src/simulation/— компоненты, ресурсы, сообщения, системы и плагины симуляционного ядра.src/visualization/— 2D-сцена, визуальные сущности, отрисовка связей и клики по узлам.src/ui/— панели управления и метрик наbevy_egui.docs/— описание модели и её соответствия ECS-структуре.thesis/abstract/— LaTeX-автореферат.
Документация
- Подробная модель распределённой системы: docs/distributed_model.md
- Автореферат: thesis/abstract/abstract.tex