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