¿Por qué el compromiso en dos fases es mejor que la replicación ingenua maestro-esclavo?

cs.stackexchange https://cs.stackexchange.com/questions/123681

  •  29-09-2020
  •  | 
  •  

Pregunta

En el contexto de una base de datos distribuida, estoy tratando de entender por qué 2PC (como se describe, por ejemplo, en https://www.cs.princeton.edu/courses/archive/fall16/cos418/docs/L6-2pc.pdf) es mejor que el siguiente protocolo hipotético entre un cliente, un maestro y un esclavo:

  • El cliente le dice al maestro que se comprometa.
  • el maestro lo comete
  • el maestro le dice al cliente que la confirmación fue exitosa
  • El maestro le dice al esclavo que replique la confirmación.Si el esclavo falla, el maestro continúa intentándolo hasta que lo logra y logra que el esclavo se ponga al día con todas las ediciones.

Me parece que esto satisface las mismas propiedades que 2PC:

  • Seguridad:Si el maestro se compromete, el esclavo también se comprometerá eventualmente.Si el esclavo se compromete, el maestro debe haberlo cometido primero.Supongo que una ventaja de 2PC es que si un participante falla antes de comenzar la confirmación, la transacción fallará en lugar de comprometerse únicamente en el TC.Sin embargo, en el protocolo propuesto, la confirmación del maestro eventualmente llega al esclavo.
  • Vivencia:Este protocolo no se bloquea.
  • Ambos dependen de que el maestro/TC registre de forma duradera la decisión de comprometerse.Ambos suponen que los esclavos/participantes fallidos eventualmente se despiertan y alcanzan al maestro/TC.
  • Ambos fallan si el maestro/TC falla.
  • En ambos protocolos, es posible tener inconsistencias temporales en las que el maestro/TC haya finalizado una decisión, pero los esclavos/participantes aún no se hayan comprometido.

Me parece que la diferencia teórica clave en 2PC es que el participante (esclavo) puede votar "no" al compromiso, en lugar de fallar simplemente temporalmente.Eso rompería la conclusión anterior de que el esclavo eventualmente lo alcanza.Sin embargo, no veo por qué el esclavo tendría que votar "no" en primer lugar.Dada la suposición de que el esclavo/participante no falla permanentemente, parece que debería votar "sí" o no responder.(A diferencia del ejemplo de la cuenta bancaria, espero que el esclavo reproduzca ciegamente al maestro).

Resumiendo todo esto, me parece que la suposición de 2PC de que los participantes no fracasan permanentemente hace innecesario darles a los participantes la oportunidad de votar "no" en la fase de "preparación".

¿Que me estoy perdiendo aqui?Presumiblemente, 2PC tiene alguna ventaja sobre lo anterior que no entiendo, ya que 2PC en realidad se usa para crear bases de datos distribuidas.

  • ¿Me equivoco al concluir que un esclavo no debería necesitar votar explícitamente "no", en lugar de fallar temporalmente?(Solo me refiero al caso de uso de replicación de datos, en lugar del ejemplo de la cuenta bancaria).
  • Dadas las mismas suposiciones que 2PC, y suponiendo que los esclavos solo digan "éxito" o "inténtelo de nuevo", ¿existe alguna garantía que ofrece 2PC que la ingenua replicación anterior no ofrece?

A los efectos de la pregunta, me gustaría ignorar los aspectos prácticos, a menos que sean fundamentales para la respuesta.En particular, me gustaría ignorar cosas que podrían interpretarse como no permitidas por la suposición de que no hay falla permanente, como disco lleno, esclavo mal configurado, esclavo corrupto, error del operador, software con errores, etc.

¿Fue útil?

Solución

Usted está confundiendo el propósito de los algoritmos.El 2PC es un algoritmo de votación donde las dos partes tienen datos diferentes y diferentes criterios para elegir un voto.El maestro-esclavo es un algoritmo de redundancia que tiene como objetivo tener copias idénticas en dos lugares.

Además, su maestro-esclavo es asíncrono donde regrese al cliente antes de la replicación.El cliente ve la finalización, pero el maestro aún puede volverse irrecuperable antes de la replicación, en qué punto tiene la pérdida de datos.2pc no está sujeto a esto.

Dicho esto, las organizaciones pueden usar 2pc en para implementar maestro-esclavo, haciendo que el "esclavo" siempre vote sí.Esto es esencialmente maestro-esclavo en modo síncrono, con un mensaje innecesario de arriba.

Lo que desea defender es probablemente el maestro-esclavo sincrónico, donde regrese al cliente después de que lo confirme el esclavo.Es más rápido que 2pc porque solo necesita un intercambio de mensajes para cada esclavo, en lugar de los dos intercambios requeridos para 2pc.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a cs.stackexchange
scroll top