Пример разрешения конфликта слияния, основанного на типе подписки и присвоенных приоритетах
Чтобы понять, как разрешаются конфликты на основе присвоенных значений приоритетов и является ли определенная подписка серверной или клиентской, рассмотрим следующий пример, в котором описана последовательность обновлений строки посредством нескольких синхронизаций слияния.
Ниже приводятся начальные значения приоритетов для четырех веб-узлов в базовой топологии репликации слиянием (один издатель, два подписчика с серверными подписками и один подписчик с клиентской подпиской).
Узел |
Тип |
Значение приоритета |
---|---|---|
A |
Publisher |
100.00 |
B |
Server Subscription |
75.00 (присвоенный) |
C |
Server Subscription |
50.00 (присвоенный) |
D |
Client Subscription |
0.00 (по умолчанию) |
Этап 1. Начальные значения
Первоначально веб-узел A (издатель) создает первую версию строки, содержащей значение «Небраска», которая затем реплицируется на веб-узлы 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 (меняет значение на «Айдахо»).
Узел |
Значение приоритета |
Значение строки |
---|---|---|
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, выигравший конфликт, полагается на то, что издатель не выполнил изменение и не получил другое изменение с момента последней синхронизации обновленной версии строки. Если первым синхронизируется подписчик с серверной подпиской или любой другой подписчик с клиентской подпиской, соблюдается правило высшего приоритета или правило «выигрывает первый, попавший на издатель».
Ниже представлены окончательные значения после синхронизации всех веб-узлов.
Узел |
Значение приоритета |
Значение строки |
---|---|---|
A (издатель) |
100.00 |
Нью-Мексико |
B (серверная подписка) |
75.00 |
Нью-Мексико |
C (Серверная подписка) |
50.00 |
Нью-Мексико |
D (клиентская подписка) |
0.00 |
Нью-Мексико |
Порядок синхронизации и значение приоритета определяют исход конфликта, если в топологии сети смешаны серверные и клиентские подписки. Этот последний набор обновлений показывает, почему нужно соблюдать осторожность. Хотя этот подписчик имел самый низкий приоритет из всех трех подписчиков, он победил в конфликте, потому что первым синхронизировался с издателем (соответственно, предполагается, что значение приоритета издателя равно 100.00). Если бы значение «Нью-Мексико» было введено на веб-узле C (серверная подписка с приоритетом, равным 50.00), а не на веб-узле D, конфликт выиграл бы веб-узел B (серверная подписка с приоритетом, равным 75.00), а результатом бы явилось значение «Калифорния».
См. также