Ejemplo de resolución de conflicto de mezcla basada en el tipo de suscripción y las prioridades asignadas
Para comprender cómo se resuelven los conflictos de acuerdo con los valores de prioridad asignados y si una suscripción es de servidor o de cliente, considere el ejemplo siguiente, en el que se describen una serie de actualizaciones en una fila en varias sincronizaciones de mezcla.
Éstos son los valores de prioridad iniciales para cuatro sitios en una topología básica de replicación de mezcla (un publicador, dos suscriptores con suscripciones de servidor y un suscriptor con suscripción de cliente).
Sitio |
Tipo |
Valor de prioridad |
---|---|---|
A |
Publisher |
100 |
B |
Server Subscription |
75,00 (asignado) |
C |
Server Subscription |
50,00 (asignado) |
D |
Client Subscription |
0,00 (valor predeterminado) |
Fase 1: Valores iniciales
Inicialmente, el sitio A (el publicador) crea la versión uno de la fila, que contiene el valor 'Nebraska', que se replica en los sitios B, C y D durante la siguiente sincronización de mezcla. Después de la sincronización, los valores de la fila son los siguientes.
Sitio |
Valor de prioridad |
Valor de fila |
---|---|---|
A (publicador) |
100 |
Nebraska |
B (Suscripción de servidor) |
75 |
Nebraska |
C (Suscripción de servidor) |
50 |
Nebraska |
D (Suscripción de cliente) |
0 |
Nebraska |
Fase 2: tanto el publicador como el suscriptor con suscripción de servidor actualizan la fila.
El sitio A actualiza el valor de la fila a Texas y el sitio B lo actualiza a New Jersey. Cuando se produce la siguiente sincronización de mezcla, se produce un conflicto entre los sitios A y B. El sitio A gana el conflicto. El valor del ganador del conflicto del sitio A se propaga a los sitios B, C y D.
Sitio |
Valor de prioridad |
Valor de fila |
---|---|---|
A (publicador) |
100 |
Texas |
B (Suscripción de servidor) |
75 |
Texas |
C (Suscripción de servidor) |
50 |
Texas |
D (Suscripción de cliente) |
0 |
Texas |
Fase 3: se realizan varios cambios en la misma fila.
Suponga que el sitio C actualiza la fila (la cambia a North Carolina) y se sincroniza con el publicador. Esto no es un conflicto, porque C ya mezcló correctamente la actualización más reciente de A (con el valor de fila ='Texas' correctamente mezclado). Suponga a continuación que el sitio B actualiza la fila (la cambia a Idaho).
Sitio |
Valor de prioridad |
Valor de fila |
---|---|---|
A (publicador) |
100 |
North Carolina |
B (Suscripción de servidor) |
75 |
Idaho |
C (Suscripción de servidor) |
50 |
North Carolina |
D (Suscripción de cliente) |
0 |
Texas |
Cuando el sitio B se sincroniza con el publicador, se produce un conflicto de actualización. Dado que B y C son suscripciones de servidor y que la prioridad de B es mayor que la de C, el sitio B gana el conflicto. Una vez se mezclan también los otros dos sitios, el valor de B se propaga a los demás suscriptores.
Sitio |
Valor de prioridad |
Valor de fila |
---|---|---|
A (publicador) |
100 |
Idaho |
B (Suscripción de servidor) |
75 |
Idaho |
C (Suscripción de servidor) |
50 |
Idaho |
D (Suscripción de cliente) |
0 |
Idaho |
Fase 4: tanto los suscriptores con suscripción de servidor como los suscriptores con suscripción de cliente actualizan la fila.
Suponga que el sitio D actualiza la fila (la cambia a New Mexico) y se sincroniza con el publicador. Suponga ahora que el sitio B actualiza la fila (la cambia a California).
Sitio |
Valor de prioridad |
Valor de fila |
---|---|---|
A (publicador) |
100 |
New Mexico |
B (Suscripción de servidor) |
75 |
California |
C (Suscripción de servidor) |
50 |
Idaho |
D (Suscripción de cliente) |
0 |
New Mexico |
Cuando el sitio B se sincroniza con el publicador, se produce un conflicto de actualización. A diferencia del ejemplo anterior, puesto que D es un suscriptor con suscripción de cliente, asumirá el valor de prioridad del publicador (sitio A) después de la sincronización. Como la prioridad de A es mayor que la de B, B pierde el conflicto; el valor que se introdujo inicialmente en D gana. Si se hubiera sincronizado el suscriptor B con A antes de que lo hiciera el suscriptor D, el sitio B habría ganado el conflicto. El sitio D ganador del conflicto confía en que el publicador no ha hecho ningún cambio ni ha recibido otro cambio desde que se sincronizó por última vez la versión de la fila actualizada en el sitio D. Si un suscriptor con suscripción de servidor u otro suscriptor con suscripción cliente se sincroniza primero, se sigue la regla de mayor prioridad o del primero que entra en el publicador.
A continuación se muestran los valores finales, después de la sincronización de todos los sitios.
Sitio |
Valor de prioridad |
Valor de fila |
---|---|---|
A (publicador) |
100 |
New Mexico |
B (Suscripción de servidor) |
75 |
New Mexico |
C (Suscripción de servidor) |
50 |
New Mexico |
D (Suscripción de cliente) |
0 |
New Mexico |
El orden de sincronización y el valor de prioridad determinan el resultado de los conflictos que se producen al mezclar suscriptores de servidor y de cliente en el mismo nivel de la topología. En este último conjunto de actualizaciones se ilustra por qué es necesario actuar con precaución. Aunque el suscriptor tenía el valor de prioridad más bajo de los tres suscriptores, ganó el conflicto al sincronizarse primero con el publicador (asumiendo de este modo el valor de prioridad del publicador: 100,00). Si el sitio C (suscriptor de servidor con un valor de prioridad de 50,00) hubiera introducido New Mexico en lugar de hacerlo el sitio D, el sitio B (suscriptor de servidor con un valor de prioridad de 75,00) habría ganado el conflicto y el resultado hubiera sitio California.