SHA256
2.0 KiB
2.0 KiB
Постоянный server-to-server WS и DM sync
Зачем
Текущий production-режим SHiNE рассчитан на один основной сервер. Межсерверная синхронизация относится к будущей децентрализации и не должна блокировать выкладку односерверной production-версии.
Сейчас синхронизация между серверами работает в основном как periodic sync и one-shot push. Для нормальной репликации в будущем ещё нужен постоянный межсерверный канал:
- живое подключение к партнёру;
- push новых блоков;
- push DM;
- ACK на доставку;
- backoff/reconnect;
- стартовый backfill.
Что сделать
- Поднять постоянное WebSocket-соединение между партнёрскими серверами.
- Сделать push новых блоков сразу после
AddBlock. - Сделать push DM-блоков между серверами.
- Добавить ACK и повторную отправку при сбое.
- Ввести стартовый обмен курсорами и добор хвоста.
Что уже есть
ListBlockchainHeads;GetBlockchainBlock;GetSyncUserProfile;- базовый periodic sync;
- базовый backfill хвоста;
- базовый full resync при divergence.
Откуда продолжать
- от текущего
sync_serversbootstrap иPeriodicBlockchainSyncService; - дальше выделить отдельный межсерверный transport layer.
Какие документы потом обновить
docs/Blockchain/sync-between-servers.md;docs/Personal_Messages/Протокол_DM_v1.md;docs/Personal_Messages/Формат_DM_v1.md;docs/API/.