Как работает синхронизация?

Что можно почитать по теме? Какие есть принципы и бестпрактикс?

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

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

Пока идея такая - сделать отдельную таблицы экшенов и любое действие над item'ом заносить в эту таблицу как экшен (тем более что историю изменений надо хранить) и обмениваться только экшенами. У каждого экшена будет время его создания а значит их можно будет выстроить в непротиворечивую последовательность и применить каждом клиенте (и на сервере разумеется) последовательно.

Смущает то, что появляется два источника истины - сама последовательность экшенов и список (финальное состояние) айтемов. Кроме того пусть клиент A создал экшен 100, а клиент Б создал экшен 97. Последовательность применения экшенов на клиенте Б будет "нормальной" - сначала выполнится 97, потом 100, а последовательность на клиенте A будет анормальной - 100, потом 97.
Предположим оба экшена связаны со сменой статуса, тогда у клиента А и у клиента Б айтемы окажутся в разном статусе - нужен способ переупорядочивания экшенов...

Выходит что нужно обмениваться только экшенами, а список вычислять как их результирующую последовательность, что может стать проблемой когда экшенов будет много.
  • Вопрос задан
  • 136 просмотров
Пригласить эксперта
Ответы на вопрос 1
@dmtrrr
Backend developer
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы