Поделиться через


Пример разрешения конфликтов слияния на основе типа подписки и назначенных приоритетов

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

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

Место Тип Значение приоритета
А Издатель 100.00
Б Подписка на сервер 75.00 (назначено)
С Серверная подписка 50.00 (назначено)
Д Клиентская подписка 0.00 (по умолчанию)

Этап 1. Начальные значения

Изначально узел A (издатель) создает первую версию строки, со значением 'Nebraska', которая реплицируется на узлы B, C и D при следующей синхронизации слиянием. После синхронизации ниже приведены значения для строки.

Место Тип Значение строки
A (издатель) 100.00 Небраска
B (сервисная подписка) 75,00 Небраска
C (серверная подписка) 50,00 Небраска
D (клиентская подписка) 0.00 Небраска

Этап 2: Издатель и подписчик с подпиской на сервер обновляют строку

Сайт A обновляет значение строки на Техас, а сайт B обновляет значение строки на Нью-Джерси. При следующей синхронизации слиянием возникает конфликт между сайтами A и B. Сайт A выигрывает конфликт. Значение победителя конфликта с сайта A передается на сайты B, C и D.

Место Значение приоритета Значение строки
A (издатель) 100.00 Техас
B (сервисная подписка) 75,00 Техас
C (серверная подписка) 50,00 Техас
D (клиентская подписка) 0.00 Техас

Этап 3. Несколько изменений, внесенных в одну строку

Предположим, сайт C обновляет строку (меняет ее на Северную Каролину) и синхронизируется с издателем. Это не конфликт, так как C уже успешно объединил последнее обновление из A (со значением строки ='Техас' успешно объединены). Затем предположим, сайт B обновляет строку (изменяет ее на Idaho).

Место Значение приоритета Значение строки
A (издатель) 100.00 Северная Каролина
B (сервисная подписка) 75,00 Айдахо
C (серверная подписка) 50,00 Северная Каролина
D (клиентская подписка) 0.00 Техас

Когда сайт B синхронизируется с издателем, возникает конфликт обновлений. Так как обе подписки на B и C являются подписками на сервер, а приоритет B больше, чем C, сайт B выигрывает конфликт. После объединения двух других сайтов значение B распространяется на других подписчиков.

Место Значение приоритета Значение строки
A (издатель) 100.00 Айдахо
B (сервисная подписка) 75,00 Айдахо
C (серверная подписка) 50,00 Айдахо
D (клиентская подписка) 0.00 Айдахо

Этап 4. Подписчики с серверными и клиентскими подписками обновляют строку.

Предположим, сайт D обновляет строку (изменяя её на Нью-Мексико) и синхронизируется с издателем. Затем предположим, сайт B обновляет строку (изменяет ее в Калифорнию).

Место Значение приоритета Значение строки
A (издатель) 100.00 Нью-Мексико
B (серверная подписка) 75,00 Калифорния
C (подписка сервера) 50,00 Айдахо
D (клиентская подписка) 0.00 Нью-Мексико

Когда сайт B синхронизируется с издателем, возникает конфликт обновлений. В отличие от предыдущего примера, потому что у D есть клиентская подписка, он принимает значение приоритета издателя (сайта A) при синхронизации. Поскольку приоритет A выше, чем у B, B проигрывает спор; первоначально введенное в D значение оказывается успешным. (Если бы подписчик B был синхронизирован с A до того, как это сделал подписчик D, сайт B выиграл бы конфликт.) Победа сайта D в конфликте зависит от того, что издатель не вносил изменений и не получал других изменений с момента последней синхронизации версии строки, обновленной на сайте D. Если какой-либо подписчик с подпиской на сервер или любой другой подписчик с клиентской подпиской синхронизируется первым, применяется правило наивысшего приоритета или "первый, кто подключился к издателю, выигрывает".

Окончательные значения после синхронизации всех сайтов отображаются здесь.

Место Значение приоритета Значение строки
A (издатель) 100.00 Нью-Мексико
B (сервисная подписка) 75,00 Нью-Мексико
C (серверная подписка) 50,00 Нью-Мексико
D (клиентская подписка) 0.00 Нью-Мексико

Порядок синхронизации и значение приоритета определяют результаты конфликтов при смешивании серверов и клиентских подписок на одном уровне в топологии. Этот последний набор обновлений иллюстрирует, почему необходимо соблюдать осторожность. Хотя абонент имел наименьшее значение приоритета из трех абонентов, он выиграл конфликт, потому что первым синхронизировался с издателем, таким образом приняв значение приоритета издателя 100,00. Если бы сайт C (подписка на сервер с приоритетом 50,00) вошел в Нью-Мексику, а не сайт D, сайт B (подписка на сервер с приоритетом 75,00) выиграл бы конфликт, и результат был бы Калифорнией.