ГлавнаяБлогAether-Core: CRDT-движок для офлайн-синхронизации на Python
Алгоритмы

Aether-Core: CRDT-движок для офлайн-синхронизации на Python

Изучите Aether-Core — CRDT-движок на Python для офлайн-синхронизации. Узнайте, как LWW-карты и метки времени обеспечивают конвергенцию реплик без конфликтов. Попробуйте демо.

Al
Редакция Algolitalgolit.ru
8 мин чтения27 июня 2026 г.

Что такое Aether-Core и зачем он нужен?

Представьте: вы пишете заметки в браузере, теряете интернет, а данные не пропадают. Или двое правят одну доску задач — без конфликтов и ручного слияния. Aether-Core — это CRDT-движок на Python, который даёт офлайн-синхронизацию и конвергенцию данных между репликами. В этой статье разберём его архитектуру, код и реальные бенчмарки.

Как работают CRDT в Aether-Core

Основная структура — LWW Map (Last-Writer-Wins Map). Каждой записи присваивается метка времени (Hybrid Logical Clock), которая образует строгий полный порядок. Если два клиента одновременно пишут один ключ, побеждает запись с большей меткой. Удаление — это tombstone (маркер удаления) с высокой меткой, поэтому устаревшие записи не могут воскресить удалённые данные.

Математика CRDT гарантирует коммутативность, ассоциативность и идемпотентность операций. В тестах 1000 случайных конкурентных операций на трёх узлах сходятся побайтово.

Пример кода: базовое использование LWW Map

from crdt import LWWMap, HLC

# Создаём часы и карту
hlc = HLC(node_id="node1")
map = LWWMap()

# Записываем значение
map.set("key1", "value1", hlc.now())

# Конкурентная запись (другой узел)
map.set("key1", "value2", hlc.now())  # победит большее время

# Чтение
print(map.get("key1"))  # value2

# Удаление
map.delete("key1", hlc.now())
print(map.get("key1"))  # None (tombstone)

Офлайн-режим: браузерный кеш

Клиент на JavaScript хранит snapshot в localStorage. При загрузке страницы данные читаются синхронно из кеша, до подключения WebSocket. Если кеш горячий, UI рендерится за 1 мс. При восстановлении соединения gateway отправляет дельту.

Архитектура движка

  • CRDT слой: Hybrid Logical Clock + LWW Map (crdt.py)
  • Mesh слой: WebSocket gossip между узлами (mesh.py)
  • Хранилище: append-only JSON-логи с crash recovery (storage.py)
  • Gateway: WebSocket для браузера с rate limiting (gateway.py)
  • Безопасность: token bucket, защита от slow-loris (_security.py)
  • Browser SDK: 700 строк ванильного JS без сборки (aether.js)

Бенчмарки: реальные цифры

Тесты на Linux VM, Python 3.12, fsync ON:

  • Gateway round-trip (loopback, p50): 0.21 ms
  • Gateway round-trip (loopback, p99): 0.68 ms
  • Ledger replay throughput: ~86,000 ops/sec
  • Snapshot-boot speedup: 1.6–1.8×
  • Mesh convergence (5 узлов, 100 записей): 63 ms
  • Ledger write throughput (с fsync): ~1,400 ops/sec

Где это применимо и где нет

Подходит: внутренние инструменты, прототипы, редакторы для 5–50 человек, многокладочные веб-приложения.

Не подходит: данные с миллионами ключей, тонкая авторизация, построчное редактирование, сильная согласованность, публичные приложения с тысячами пользователей.

Практический вывод

Попробуйте Aether-Core прямо сейчас: клонируйте репозиторий, запустите демо и убедитесь, что приложение работает без сервера. Если вы строили Express + Postgres для простой синхронизации — эта библиотека сэкономит вам 90% кода.

#CRDT#синхронизация#офлайн#LWW Map#Python
Al
Редакция Algolit

Пишем про алгоритмы, подготовку к собеседованиям и карьеру в IT — так, чтобы было понятно и полезно.

Хочешь закрепить знания на практике?

Решай задачи на Algolit — интерактивная платформа для обучения

Начать бесплатно →