stringtranslate.com

Оптимистичная репликация

Оптимистическая репликация , также известная как ленивая репликация , [1] [2] представляет собой стратегию репликации , при которой репликам разрешено расходиться. [3]

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

Алгоритмы

Алгоритм оптимистичной репликации состоит из пяти элементов:

  1. Отправка операций : пользователи отправляют операции на независимых сайтах.
  2. Распространение : каждый сайт делится известными ему операциями с остальной частью системы.
  3. Планирование : каждый участок определяет порядок выполнения известных ему операций.
  4. Разрешение конфликтов : если между запланированными на объекте операциями возникают какие-либо конфликты, их необходимо каким-то образом изменить.
  5. Обязательство : Стороны согласовывают окончательный график и результат разрешения конфликта, и операции становятся постоянными.

Существует две стратегии распространения: передача состояния, когда сайты распространяют представление текущего состояния, и передача операций, когда сайты распространяют выполненные операции (по сути, список инструкций о том, как достичь нового состояния).

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

Примеры

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

  1. Отправка операции: пользователи редактируют локальные версии файлов.
  2. Распространение: пользователи вручную извлекают обновления с центрального сервера или отправляют изменения, когда считают, что они готовы.
  3. Планирование: Операции планируются в том порядке, в котором они поступают на центральный сервер.
  4. Разрешение конфликтов: когда пользователь отправляет данные в центральный репозиторий или извлекает их из него, любые конфликты будут отмечены для пользователя, чтобы он мог исправить их вручную.
  5. Фиксация: как только центральный сервер принимает изменения, внесенные пользователем, они фиксируются навсегда.

Частным случаем репликации является синхронизация , когда есть только две реплики. Например, персональные цифровые помощники (КПК) позволяют пользователям редактировать данные либо на КПК, либо на компьютере, а затем объединять эти два набора данных вместе. Однако следует отметить, что репликация — более широкая проблема, чем синхронизация, поскольку реплик может быть больше двух.

Другие примеры включают в себя:

Подразумеваемое

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

В качестве простого примера, если приложение содержит способ просмотра некоторой части состояния базы данных и способ ее редактирования, то пользователи могут редактировать это состояние, но затем не видеть его изменения в средстве просмотра. Встревоженные тем, что их редактирование «не сработало», они могут попробовать сделать это снова, потенциально больше одного раза. Если обновления не идемпотентны (например, они увеличивают значение), это может привести к катастрофе. Даже если они идемпотентны, ложные обновления базы данных могут привести к узким местам производительности, особенно когда системы баз данных обрабатывают большие нагрузки; это может стать порочным кругом.

Тестирование приложений часто выполняется в тестовой среде, меньшей по размеру (возможно, всего один сервер) и менее загруженной, чем «живая» среда. Поведение репликации такой установки может отличаться от реальной среды способами, которые означают, что задержка репликации вряд ли будет наблюдаться при тестировании, маскируя ошибки, чувствительные к репликации. Разработчики приложений должны быть очень осторожны в своих предположениях относительно эффекта обновления базы данных и должны быть уверены, что моделируют задержку в своих тестовых средах.

Оптимистично реплицированные базы данных должны быть очень осторожны в отношении предоставления таких функций, как ограничения достоверности данных. Если любое данное обновление может быть принято или не принято на основе текущего состояния записи, то два обновления (A и B) могут быть индивидуально законными относительно начального состояния системы, но одно или несколько обновлений могут быть незаконными относительно состояния системы после другого обновления (например, A и B оба законны, но AB или BA незаконны). Если A и B оба инициированы примерно в одно и то же время в базе данных, то A может быть успешно применено на некоторых узлах, а B — на других, но как только A и B «встретятся» и одно будет предпринято на узле, который уже применил другое, будет обнаружен конфликт. В этом случае система должна решить, какое обновление в конечном итоге «выиграет», и организовать отмену его для всех узлов, которые уже применили проигравшее обновление. Однако некоторые узлы могут временно раскрывать состояние с отмененным обновлением, и может не быть способа сообщить пользователю, инициировавшем обновление, о его сбое, не требуя от него ожидания (потенциально вечно) подтверждения принятия на каждом узле.

Ссылки

  1. ^ Ладин, Р.; Лисков, Б.; Шрира, Л.; Гемават, С. (1992). «Обеспечение высокой доступности с помощью ленивой репликации». ACM Transactions on Computer Systems . 10 (4): 360–391. CiteSeerX  10.1.1.586.7749 . doi :10.1145/138873.138877. S2CID  2219840.
  2. ^ Ладин, Р.; Лисков, Б.; Шрира, Л. (1990). Ленивая репликация: эксплуатация семантики распределенных сервисов . Труды девятого ежегодного симпозиума ACM по принципам распределенных вычислений . стр. 43–57. doi : 10.1145/93385.93399 .
  3. ^ Сайто, Ясуши; Шапиро, Марк (2005). «Оптимистическая репликация». ACM Computing Surveys . 37 (1): 42–81. CiteSeerX 10.1.1.324.3599 . doi :10.1145/1057977.1057980. S2CID  1503367.  
  4. ^ Грей, Дж .; Хелланд, П.; О'Нил, П.; Шаша , Д. (1996). Опасности репликации и решение (PDF) . Труды Международной конференции ACM SIGMOD 1996 года по управлению данными . стр. 173–182. doi :10.1145/233269.233330.[ постоянная мертвая ссылка ]
  5. ^ Терри, ДБ; Таймер, ММ; Петерсен, К.; Демерс, А.Дж.; Шпрейтцер, М.Дж.; Хаузер, Ч.Х. (1995). Управление конфликтами обновлений в Bayou, слабосвязанной реплицированной системе хранения данных . Труды пятнадцатого симпозиума ACM по принципам операционных систем. стр. 172–182. doi : 10.1145/224056.224070 .
  6. ^ Kermarrec, AM; Rowstron, A.; Shapiro, M.; Druschel, P. (2001). Подход IceCube к согласованию расходящихся реплик . Труды двадцатого ежегодного симпозиума ACM по принципам распределенных вычислений . стр. 210–218. doi :10.1145/383962.384020.

Внешние ссылки