Каковы общие подводные камни синхронизации на основе временных меток?

Я реализую свой первый код синхронизации. В моем случае у меня будет 2 типа клиентов iOS для каждого пользователя, которые будут синхронизировать записи с сервером, используя lastSyncTimestamp , 64-битное целое число, представляющее эпоху Unix в миллисекундах последней синхронизации. Записи могут быть созданы на сервере или клиентах в любое время, и обмен записями осуществляется как JSON через HTTP.

Конфликты меня не беспокоят, так как обновлений мало, и они всегда от одного и того же пользователя. Однако мне интересно, есть ли общие вещи, о которых мне нужно знать, которые могут пойти не так с подходом, основанным на отметках времени, например синхронизация в летнее время, синхронизация, конфликтующая с другим, или другие ошибки.

Я знаю, что git и некоторые другие системы управления версиями избегают синхронизации с временными метками для подхода синхронизации согласования контента. Я мог бы представить такой подход и для своих приложений, где с помощью uuid или хэша объектов оба одноранговых узла объявляют, какие объекты им принадлежат, а затем обмениваются ими, пока оба одноранговых узла не получат одинаковые наборы.

Если кто-нибудь знает какие-либо преимущества или недостатки синхронизации на основе содержимого по сравнению с синхронизацией на основе временных меток в целом, это тоже будет полезно.

Изменить - Вот некоторые из преимуществ / недостатков, которые я обнаружил для синхронизации на основе меток времени и контента. Пожалуйста, оспорите / исправьте.

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

  • Джонни - «Я получил эту карту».
  • Дэйви - «Я получил эту пачку карт. Дай мне ту карту».
  • Джонни - «Вот твоя карта. Дай мне эту пачку карт»
  • Джонни - «Вот твоя карта. 12127] Дэйви - «Вот твоя связка карточек».
  • ....
  • Оба - «Мы закончили»

Преимущества синхронизации на основе временных меток

  • Простота реализации
  • Одно свойство, используемое для синхронизации.

Недостатки синхронизации на основе временных меток

  • Время - понятие относительное для наблюдателя, и часы разных машин могут быть не синхронизировано. Есть несколько способов решить эту проблему. Создавайте метку времени на одной машине, которая плохо масштабируется и представляет собой единую точку отказа. Или используйте логические часы, такие как векторные часы. Для среднестатистического разработчика, создающего свою собственную систему, векторные часы могут быть слишком сложными для реализации.
  • Синхронизация на основе меток времени работает для клиента, чтобы управлять синхронизацией, но не работает также для одноранговой синхронизации или там, где синхронизация может происходить с двумя мастерами .
  • Единая точка отказа, независимо от того, что генерирует метку времени.
  • Время на самом деле не связано с содержимым того, что синхронизируется.

Преимущества синхронизации на основе содержимого

  • Нет необходимости поддерживать временную метку для каждого однорангового узла. 2 узла могут начать сеанс синхронизации и начать синхронизацию на основе содержимого.
  • Четко определенная конечная точка для синхронизации - когда обе стороны имеют идентичные наборы.
  • Разрешает одноранговую архитектуру, где любой одноранговый узел может действовать как клиент или сервер , при условии, что они могут размещать HTTP-сервер.
  • Синхронизация работает с содержимым наборов, а не с абстрактным концептуальным временем.
  • Поскольку синхронизация построена вокруг содержимого, при желании можно использовать синхронизацию для проверки содержимого. Например, хэш SHA-1 может быть вычислен для содержимого и использован в качестве uuid. Это можно сравнить с тем, что отправляется во время синхронизации.
  • Более того, хэши SHA-1 могут быть основаны на предыдущих хэшах для поддержания согласованной истории содержимого.

Недостатки синхронизации на основе содержимого

  • Для реализации могут потребоваться дополнительные свойства ваших объектов.
  • Больше логики с обеих сторон по сравнению с синхронизацией на основе временных меток.
  • Немного более болтливый протокол (это можно настроить с помощью синхронизация содержимого в кластерах).
13
задан John Wright 16 November 2010 в 15:33
поделиться