Ответ вслух Senior Офлайн и синхронизация обновлено

Конфликты синхронизации между устройствами

Вопрос

Пользователь редактирует одни и те же данные на телефоне и планшете, оба иногда офлайн. Как разрешать конфликты?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Начинаю с вопроса, чем грозит потеря изменения. Для настроек и флагов достаточно last write wins по отдельным полям с серверным временем или версией.

Что должно прозвучать в ответе

  • Определить тип данных и цену потери изменения

  • Версионирование записей и оптимистичная блокировка (409 на устаревшую версию)

  • Слияние по полям вместо перезаписи объекта

  • Ручное разрешение для важных данных

  • CRDT для совместного редактирования текста и списков

  • Не доверять часам устройства

Что могут спросить следом

  • Как реализовать слияние по полям?
  • Что хранить, чтобы показать пользователю обе версии?

Разбор

Начинаю с вопроса, чем грозит потеря изменения. Для настроек и флагов достаточно last write wins по отдельным полям с серверным временем или версией. Для сущностей вроде задачи у каждой записи есть версия: клиент отправляет изменение с версией, на основе которой его сделал, и если сервер видит более новую, отвечает 409. Тогда клиент скачивает актуальную запись и пытается слить по полям: если менялись разные поля, конфликта нет. Если одно и то же поле, для важных данных показываю пользователю обе версии и даю выбрать. Для совместного редактирования текста и упорядоченных списков беру CRDT, например Automerge или Yjs, они сходятся без арбитра. Часам устройства не доверяю никогда.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.