Изучите Aether-Core — CRDT-движок на Python для офлайн-синхронизации. Узнайте, как LWW-карты и метки времени обеспечивают конвергенцию реплик без конфликтов. Попробуйте демо.
Представьте: вы пишете заметки в браузере, теряете интернет, а данные не пропадают. Или двое правят одну доску задач — без конфликтов и ручного слияния. Aether-Core — это CRDT-движок на Python, который даёт офлайн-синхронизацию и конвергенцию данных между репликами. В этой статье разберём его архитектуру, код и реальные бенчмарки.
Основная структура — LWW Map (Last-Writer-Wins Map). Каждой записи присваивается метка времени (Hybrid Logical Clock), которая образует строгий полный порядок. Если два клиента одновременно пишут один ключ, побеждает запись с большей меткой. Удаление — это tombstone (маркер удаления) с высокой меткой, поэтому устаревшие записи не могут воскресить удалённые данные.
Математика CRDT гарантирует коммутативность, ассоциативность и идемпотентность операций. В тестах 1000 случайных конкурентных операций на трёх узлах сходятся побайтово.
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 отправляет дельту.
Тесты на Linux VM, Python 3.12, fsync ON:
Подходит: внутренние инструменты, прототипы, редакторы для 5–50 человек, многокладочные веб-приложения.
Не подходит: данные с миллионами ключей, тонкая авторизация, построчное редактирование, сильная согласованность, публичные приложения с тысячами пользователей.
Попробуйте Aether-Core прямо сейчас: клонируйте репозиторий, запустите демо и убедитесь, что приложение работает без сервера. Если вы строили Express + Postgres для простой синхронизации — эта библиотека сэкономит вам 90% кода.
Хочешь закрепить знания на практике?
Решай задачи на Algolit — интерактивная платформа для обучения
Начать бесплатно →