¿Qué son los vectores de versión?

Sep 12 2020

Amigos, actualmente estoy aprendiendo sobre sistemas de datos distribuidos a través del libro "Diseño de aplicaciones intensivas en datos".

Creo que tengo un conocimiento bastante sólido sobre cómo los números de versión en un único sistema de réplica permiten que el servidor detecte escrituras simultáneas *. El autor comienza con este ejemplo porque una vez que comprendes el sistema de réplica única, se supone que es obvio expandir esa comprensión a un sistema replicado sin líderes o sin líderes, pero no lo es para mí en absoluto.

¿Cómo funciona el número de versión en un sistema donde varias réplicas pueden manejar solicitudes de escritura? En otras palabras, ¿qué son los vectores de versión ?

*En un único sistema de réplica, cada escritura va acompañada de un número de versión. Este número de versión es la versión de los datos en los que se basa la escritura. Si una escritura se basa en la Versión 1 de los datos para esa clave, y la Versión 2 ya existe, sabemos que la escritura entrante es concurrente con la Versión 2. La escritura entrante solo puede sobrescribir datos que estaban en la Versión 1, ya que no conozca los datos de la Versión 2. Por ejemplo, la Versión 1 es [huevos], la Versión 2 es [huevos] y [leche]. La escritura entrante quiere actualizar esta clave a [huevos, tocino]. La versión 3 de esta clave se convertirá en [huevos, tocino] y [leche]. La escritura entrante no puede sobrescribir [leche] ya que ni siquiera sabía que [leche] era un valor en la clave.

Respuestas

1 MichaelGreen Sep 13 2020 at 23:32

Los vectores de versión son una forma en que cada nodo de un clúster comunica su número de versión local a todos los demás nodos de un clúster. También se conocen como relojes vectoriales.

En esencia, cuando un nodo A pasa un mensaje a otro nodo B, A incluye en ese mensaje lo que sabe sobre el número de versión de todos los nodos del clúster. Debido a que contiene valores para todos los demás nodos, es una matriz o vector de números de versión. El nodo B usa esta información para actualizar lo que sabe sobre los números de versión en todo el clúster. Puede utilizar esta información para elaborar un orden global de eventos de todo el clúster.

A su vez, el nodo B incluye esta información actualizada en los mensajes que envía a otros nodos, incluido el nodo A.

Busque el reloj vectorial. Hay muchas explicaciones, tanto académicas como prácticas.