Skip to content

Модель симуляции

Параллельное сравнение Raft и Paxos

Архитектура

Симулятор использует дискретно-событийную модель (Discrete Event Simulation). Вместо непрерывного течения времени система переходит между дискретными событиями: доставка сообщения, срабатывание таймаута, запрос клиента, отказ узла.

Компоненты

КомпонентФайлНазначение
Engineengine.tsОчередь событий, виртуальные часы, диспетчер
EventHeapengine.tsБинарная min-heap с ленивой отменой — O(log n) insert/pop
NetworkModelnetwork.tsЗадержки, потери пакетов, сетевые партиции
ConsensusAlgorithmalgorithms/interface.tsИнтерфейс, который реализуют Raft, Paxos, Multi-Paxos, Zab и EPaxos

Виртуальное время

Симуляция работает в виртуальном времени (миллисекунды). Скорость виртуального времени относительно реального регулируется множителем (0.25x–10x).

Визуализация сэмплирует состояние через requestAnimationFrame: каждый кадр движок обрабатывает все события до currentVirtualTime + deltaReal * speedMultiplier.

Сеть

Модель задержек

Задержка доставки каждого сообщения — равномерное распределение в диапазоне [minDelay, maxDelay]:

delay = minDelay + random() × (maxDelay − minDelay)

Потери пакетов

Каждое сообщение теряется с вероятностью packetLossRate. При потере сообщение визуализируется, но не доставляется.

Сетевые партиции

Узлы можно разделить на группы. Сообщения между группами всегда теряются, внутри группы доставляются нормально.

Профили сети

Три предустановленных профиля моделируют различные условия развёртывания:

ПрофильЗадержкаElection timeoutHeartbeatОписание
Внутри ДЦ (LAN)1–5 мс50–100 мс20 мсУзлы в одном дата-центре
Между ДЦ (WAN)30–100 мс300–600 мс100 мсУзлы в разных ДЦ одного региона
Между регионами (Global)100–300 мс1000–2000 мс300 мсУзлы на разных континентах

Таймауты масштабируются с задержками: electionTimeout >> heartbeatInterval >> networkDelay, чтобы алгоритмы работали корректно при любом профиле.

Генератор случайных чисел

Для детерминизма используется seeded PRNG (Mulberry32-подобный алгоритм). Один и тот же seed даёт одинаковую последовательность сетевых задержек, потерь пакетов, таймаутов и внутренних backoff-механик алгоритмов.

Точность Учебной Модели

Симулятор ориентирован на учебную точность, а не на побитную совместимость с production-системами.

  • Raft, Basic Paxos, Multi-Paxos и Zab реализованы как достаточно корректные учебные модели.
  • EPaxos реализован как продвинутая учебная аппроксимация: в ней есть fast path, slow path, зависимости между instance и упрощённая dependency-aware execution model, но полная paper-level execution semantics оригинального алгоритма не воспроизводится полностью.
  • Во всех алгоритмах возможны осознанные упрощения recovery, quorum-оптимизаций и persistent state ради наглядности и сравнимости поведения.

Модель клиентов

  • Настраиваемое число клиентов (1–5)
  • Автоматическая генерация команд с заданным интервалом
  • Round-robin распределение команд между клиентами
  • Retry с переназначением узла при отказе или перенаправлении (redirect)
  • Визуализация «полёта» запроса: клиент → узел → репликация → подтверждение

Управление памятью

При продолжительной симуляции накапливаются метрики и логи. Каждые 200 шагов движок:

  • Обрезает массивы метрик до 500 последних записей
  • Обрезает логи узлов до 200 последних записей
  • Очищает отменённые события из heap
  • Удаляет устаревшие анимации сообщений

Попробуйте сами

Откройте симулятор — переключите профиль сети и наблюдайте, как меняется скорость выборов и задержка подтверждения.

Документация проекта Consensus Landscape