Un vector de versiones es un mecanismo para rastrear los cambios en los datos de un sistema distribuido , donde múltiples agentes pueden actualizar los datos en diferentes momentos. El vector de versiones permite a los participantes determinar si una actualización precedió a otra ( sucedió antes ), la siguió o si ambas se produjeron simultáneamente (y, por lo tanto, podrían entrar en conflicto). De esta forma, los vectores de versiones permiten rastrear la causalidad entre las réplicas de datos y constituyen un mecanismo básico para la replicación optimista . En términos matemáticos, el vector de versiones genera un preorden que registra los eventos que preceden a las actualizaciones posteriores y que, por consiguiente, pueden influir en ellas.
Los vectores de versión mantienen un estado idéntico al de un reloj vectorial , pero las reglas de actualización difieren ligeramente; en este ejemplo, las réplicas pueden experimentar actualizaciones locales (por ejemplo, cuando el usuario edita un archivo en el nodo local) o pueden sincronizarse con otra réplica:
- Inicialmente, todos los contadores vectoriales son cero.
- Cada vez que una réplica experimenta un evento de actualización local, incrementa su propio contador en el vector en uno.
- Cada vez que dos réplicas a y b se sincronizan, ambas establecen los elementos de su copia del vector al valor máximo del elemento en ambos contadores: Tras la sincronización, las dos réplicas tienen vectores de versión idénticos.
Los pares de réplicas, a , b , se pueden comparar inspeccionando sus vectores de versión y determinar si son: idénticos (), concurrente (), o ordenado (o). La relación ordenada se define como: Vectorsi y solo si cada elemento dees menor o igual que su elemento correspondiente eny al menos uno de los elementos es estrictamente menor que. Si ningunoo, pero los vectores no son idénticos, entonces los dos vectores deben ser concurrentes.
Los vectores de versión [ 1 ] o variantes se utilizan para rastrear las actualizaciones en muchos sistemas de archivos distribuidos, como Coda (sistema de archivos) y Ficus, y son la principal estructura de datos detrás de la replicación optimista. [ 2 ]
Otros mecanismos
- Los historiales hash [ 3 ] evitan el uso de contadores al mantener un conjunto de hashes de cada versión actualizada y comparar esos conjuntos por inclusión de conjuntos. Sin embargo, este mecanismo solo puede brindar garantías probabilísticas.
- Los vectores de versión concisos [ 4 ] permiten un ahorro de espacio significativo al manejar múltiples elementos replicados, como en las estructuras de directorios en los sistemas de archivos.
- Los sellos de versión [ 5 ] permiten el seguimiento de un número variable de réplicas y no utilizan contadores. Este mecanismo puede presentar problemas de escalabilidad en algunos casos, pero puede sustituirse por relojes de árbol de intervalos .
- Los relojes de árbol de intervalo [ 6 ] generalizan los vectores de versión y los relojes vectoriales y permiten números dinámicos de réplicas/procesos.
- Los vectores de versión acotados [ 7 ] permiten una implementación acotada, con contadores de tamaño acotado, siempre que los pares de réplicas puedan sincronizarse atómicamente.
- Los vectores de versión punteados [ 8 ] abordan la escalabilidad con un pequeño conjunto de servidores que median el acceso de réplica por parte de un gran número de clientes concurrentes.
Referencias
- ↑ Douglas Parker, Gerald Popek, Gerard Rudisin, Allen Stoughton, Bruce Walker, Evelyn Walton, Johanna Chow, David Edwards, Stephen Kiser y Charles Kline . Detección de inconsistencia mutua en sistemas distribuidos. Transactions on Software Engineering. 1983
- ↑ David Ratner, Peter Reiher y Gerald Popek. Mantenimiento dinámico de vectores de versión. Informe técnico CSD-970022, Departamento de Ciencias de la Computación, Universidad de California, Los Ángeles, 1997.
- ↑ ByungHoon Kang, Robert Wilensky y John Kubiatowicz. El enfoque del historial hash para la conciliación de inconsistencias mutuas. ICDCS, págs. 670-677, IEEE Computer Society, 2003.
- ↑ Dahlia Malkhi y Doug Terry. Vectores de versión concisos en WinFS. Distributed Computing, vol. 20, 2007.
- ↑ Paulo Almeida, Carlos Baquero y Victor Fonte. Sellos de versión: Vectores de versión descentralizados. ICDCS, págs. 544-551, 2002.
- ↑ Paulo Almeida, Carlos Baquero y Victor Fonte. Relojes de árbol de intervalos. OPODIS, Lecture Notes in Computer Science, Vol. 5401, pp. 259-274, Springer, 2008.
- ↑ José Almeida, Paulo Almeida y Carlos Baquero. Vectores de versión acotada. DISC: Simposio Internacional sobre Computación Distribuida, LNCS, 2004.
- ↑ Nuno Preguiça, Carlos Baquero, Paulo Almeida, Victor Fonte y Ricardo Gonçalves. Breve anuncio: Seguimiento eficiente de la causalidad en sistemas de almacenamiento distribuido con vectores de versión punteada. ACM PODC, págs. 335-336, 2012.
Enlaces externos
- Por qué los relojes lógicos son fáciles (Comparación de historias causales, relojes vectoriales y vectores de versión)
- Sincronización de datos
- Algoritmos de reloj lógico
- Problemas de computación distribuida