• No se han encontrado resultados

Per-Key Causal. Un modelo y algoritmo para sistemas escalables de memoria compartida distribuida

N/A
N/A
Protected

Academic year: 2020

Share "Per-Key Causal. Un modelo y algoritmo para sistemas escalables de memoria compartida distribuida"

Copied!
63
0
0

Texto completo

(1)UNIVERSIDAD POLITÉCNICA DE MADRID Escuela Técnica Superior de Ingenierı́a de Sistemas Informáticos. Máster Universitario en Ciencias y Tecnologı́as de la Computación. TRABAJO FIN DE MÁSTER. Per-Key Causal un nuevo modelo y algoritmo para sistemas escalables de memoria compartida distribuida. Rodrigo Efraı́n Tufiño Cárdenas. Tutores: Sergio Arévalo Viñuales Ma. Isabel Muñoz Fernández. Noviembre 2018.

(2)

(3) Resumen El diseño de bases de datos distribuidas para las aplicaciones actuales se enfrenta con el reto de conseguir el equilibrio entre coherencia, escalabilidad y disponibilidad en presencia de particiones de red. Buscando este objetivo, en los últimos años se han definido nuevos modelos de coherencia y diferentes implementaciones que tratan de mejorar la disponibilidad del servicio, sin comprometer demasiado la coherencia del sistema. Este trabajo está orientado dentro de esta lı́nea y presenta un nuevo modelo de coherencia para memoria compartida distribuida, denominado Per-Key Causal, como una variante al modelo de coherencia causal, donde se relaja la relación de orden de proceso. El objetivo de este modelo es disminuir las dependencias causales introducidas por la causalidad potencial y reducir la latencia en la visibilidad de la escritura de un nuevo valor a los procesos del sistema. Además, se presenta un algoritmo que implementa dicho modelo, utilizando un sistema subyacente de comunicación fiable sobre canales no FIFO.. Palabras clave: coherencia per-key causal, memoria compartida distribuida, protocolos de propagación, sistemas distribuidos.. I.

(4) Abstract The design of distributed database for current applications faces the challenge of achieving the balance between consistency, scalability and availability in the presence of network partitions. To get this objective, new consistency models and different implementations have been defined in recent years. This try to improve the availability of the service, without compromising the coherence of the system too much. This work is oriented in this line and presents a new consistency model called Per-Key Causal for distributed shared memory systems. It is a variant of the causal consistency model, where the relation of the process order is relaxed. The objective of this model is to decrease the causal dependencies introduced by the potential causality and reduce the visibility latency for the new value writing for the system process. Moreover, we introduce an algorithm that implements the presented model and uses a reliable communication underlying system on non-FIFO channels.. Keywords: per-key causal consistency, distributed shared memory, propagation protocols, distributed systems.. II.

(5) AGRADECIMIENTOS. En primer lugar quiero agradecer a mis dos tutores. A Sergio Arévalo por compartir su experiencia, las incontables horas en su despacho entendiendo y debatiendo sobre los sistemas distribuidos, por su paciencia y por enseñarme a investigar. A Isabel Muñoz por su especial interés en el proyecto, su apoyo y todas las horas que se dedicó a leer, corregir y mejorar este documento. Más que una tutora, ha sido una amiga y su colaboración en este trabajo es invaluable. También quiero agradecer a mi familia por todo su apoyo y en especial a mi esposa Mayrita, por brindarme la palabra precisa en los momentos de incertidumbre y toda su ayuda durante el desarrollo de este trabajo. A mi hijo Ariel, por toda su ternura y el tiempo que nos privamos de pasar juntos para que yo termine este proyecto. El amor de ambos ha sido mi mayor soporte. Mi agradecimiento al gobierno ecuatoriano por la beca otorgada para realizar estos estudios y a la Universidad Politécnica Salesiana por brindar todas las facilidades para culminar exitosamente esta titulación. Finalmente, y no por eso menos importante, a ese ser supremo que siempre ilumina y guı́a mi camino, para terminar con éxito todos los desafı́os académicos que se presentan en mi vida.. III.

(6) A mis padres, Rosita y Efraı́n. A mi esposa Mayrita y mi hijo Ariel.. IV.

(7) Índice general Resumen. I. Abstract. II. Agradecimientos. III. Dedicatoria. IV. 1. Introducción. 1. 1.1. Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 3. 1.2. Contribución . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 3. 1.3. Organización del documento . . . . . . . . . . . . . . . . . . . . . . . . . . .. 3. 2. Estado del Arte. 4. 2.1. Registros Seguros, Regulares y Atómicos . . . . . . . . . . . . . . . . . . . .. 5. 2.1.1. Registros seguros . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 6. 2.1.2. Registros regulares . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 7. 2.1.3. Registros atómicos . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 7. 2.2. Modelos de Coherencia en la MCD . . . . . . . . . . . . . . . . . . . . . . .. 9. 2.2.1. Modelo Atómico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.2.2. Modelo Secuencial . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2.3. Modelo Causal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.2.4. Modelo Causal+ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.2.5. Modelo pRAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 2.2.6. Modelo Per-Key Sequential . . . . . . . . . . . . . . . . . . . . . . . 18 2.2.7. Modelo Eventual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.3. Trabajos relacionados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.3.1. Teorema de CAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.3.2. Algoritmo de Baldoni . . . . . . . . . . . . . . . . . . . . . . . . . . 21 V.

(8) 2.3.3. Fast Array of Wimpy Nodes (FAWN-KV) . . . . . . . . . . . . . . . 21 2.3.4. Bayou . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.3.5. Clusters of Order-Preserving Servers (COPS) . . . . . . . . . . . . . 22 2.3.6. Dynamo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.3.7. Google Spanner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3. Modelo de Coherencia Per-Key Causal. 25. 3.1. Definiciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.1.1. Orden de proceso sobre una variable . . . . . . . . . . . . . . . . . . 26 3.1.2. Orden de lectura de una variable . . . . . . . . . . . . . . . . . . . . 27 3.1.3. Orden de lectura previa . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.2. Coherencia Per-Key Causal . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4. Algoritmo Per-Key Causal. 31. 4.1. Estructuras de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.1.1. Memoria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.1.2. Log de operaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.1.3. Matriz de petición de escritura . . . . . . . . . . . . . . . . . . . . . 33 4.2. Comportamiento del algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.2.1. Procedimiento write(xh , v) . . . . . . . . . . . . . . . . . . . . . . . . 34 4.2.2. Procedimiento apply(xh , v, vr) . . . . . . . . . . . . . . . . . . . . . 35 4.2.3. Procedimiento read(xh ) . . . . . . . . . . . . . . . . . . . . . . . . . 35 4.2.4. Función get deps list(xh ) . . . . . . . . . . . . . . . . . . . . . . . . 36 4.2.5. Entrega de mensajes RSEND . . . . . . . . . . . . . . . . . . . . . . 36 4.2.6. Entrega de mensajes RBCAST . . . . . . . . . . . . . . . . . . . . . 37 4.3. Ejemplos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37. 4.3.1. Escritura por un proceso que administra la variable . . . . . . . . . 38 4.3.2. Escritura por un proceso que no administra la variable. . . . . . . . 39. 4.3.3. Escrituras sobre la misma variable en el mismo proceso . . . . . . . 40 4.3.4. Lectura de una variable . . . . . . . . . . . . . . . . . . . . . . . . . 42 4.3.5. Relación causal entre escrituras sobre variables diferentes . . . . . . 44 5. Conclusiones. 47. Bibliografı́a. 49. VI.

(9) Índice de figuras 2.1. Estructura de una memoria compartida como una API. . . . . . . . . . . .. 4. 2.2. Ejecución con operaciones de lectura y escritura solapadas sobre un registro. 6. 2.3. Relación entre los tipos de memoria compartida más conocidos, desde los modelos con coherencia más fuertes a los más débiles. . . . . . . . . . . . .. 9. 2.4. Ejecución de un sistema de memoria compartida con coherencia atómica . . 11 2.5. Ejecución de un sistema de memoria compartida con coherencia secuencial . 12 2.6. Ejecución de un sistema de memoria compartida con coherencia causal . . . 14 2.7. Ejecución de un sistema de memoria compartida con coherencia causal+ . . 16 2.8. Ejecución de un sistema de memoria compartida con coherencia pRAM . . 17 2.9. Ejecución de un sistema de memoria compartida con coherencia per-key sequential . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 2.10. Ejecución de un sistema de memoria compartida con coherencia eventual. . 20. 3.1. Relación entre operaciones de escritura. . . . . . . . . . . . . . . . . . . . . 25 3.2. Orden de proceso sobre una variable. . . . . . . . . . . . . . . . . . . . . . . 27 3.3. Orden de lectura de una variable. . . . . . . . . . . . . . . . . . . . . . . . . 27 3.4. Orden de lectura previa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.5. Ejecución de un sistema con coherencia per-key causal . . . . . . . . . . . . 29 3.6. Ejecución de un sistema con coherencia per-key causal y relaciones causales. 29. 3.7. Ejecución de un sistema con coherencia per-key causal y operaciones concurrentes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30. 4.1. Representación del array utilizado para almacenar la copia local de las variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.2. Representación del Log de operaciones para almacenar la historia local del proceso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.3. Representación de la matriz de petición de escritura (Wr) de pi . . . . . . . 33. VII.

(10) 4.4. Ejecución de una operación de escritura realizado por p2 sobre una variable que administra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.5. Ejecución de una operación de escritura realizado por p1 sobre una variable que no administra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 4.6. Ejecución de dos operación de escritura realizadas por p1 sobre la misma variable x2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41. 4.7. Ejecución de una operación de lectura realizado por p1 sobre la variable x2. 43. 4.8. Ejecución de dos operación de escritura relacionadas por per-key causal . . 45. VIII.

(11) Índice de tablas 2.1. Posibles lecturas en registros seguros, regulares y atómicos de la ejecución mostrada en la Figura 2.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . .. IX. 8.

(12) Capı́tulo 1. Introducción La memoria compartida distribuida (MCD) es una abstracción muy utilizada dentro de los sistemas distribuidos, ya que ofrece una visión ideal de una memoria común a los procesos, permitiendo compartir datos a pesar de no disponer de una memoria fı́sica común. Los procesos interactúan a través de operaciones de escritura y lectura sobre variables, sin preocuparse por los detalles del mecanismo de intercambio de mensajes. Esta abstracción debe garantizar que todos los procesos en el sistema acuerden un orden común para todas las operaciones en la memoria. Estas garantı́as son proporcionadas por un modelo de coherencia. Los modelos de coherencia más fuertes como el atómico o linearizable (Herlihy y Wing, 1990; Lamport, 1986) o el secuencial (Lamport, 1979), garantizan un orden total de las operaciones; pero imponen altas latencias para mantener la coherencia en el sistema, si se realiza sobre redes WAN. Por otro lado, los modelos de coherencia más relajados como el pRAM (Lipton y Sandberg, 1988) o per-key sequential (Cooper y col., 2008; Goodman, 1989) son menos bloqueantes, ordenan parcialmente las operaciones, reducen la latencia, pero provocan problemas de coherencia en la memoria. El modelo de coherencia causal (Ahamad y col., 1995) muestra un buen equilibro entre coherencia y disponibilidad. Este modelo establece que solamente las operaciones relacionadas causalmente tienen que ser vistas en el mismo orden por todos los procesos. Mientras que, las operaciones que no tengan una relación causal, pueden ser vistas por los procesos en diferente orden. Desde un punto de vista práctico, los sistemas distribuidos deben abordar el teorema de CAP (Brewer, 2000), el cual plantea que los sistemas de cómputo distribuido no puede garantizar más de dos, de las siguientes propiedades: coherencia, disponibilidad y tolerancia. 1.

(13) CAPÍTULO 1. INTRODUCCIÓN. a particiones de red. Si los sistemas se encuentran sobre una red LAN, podrı́a suponerse que no se producen errores en la red, y por lo tanto, siempre son coherentes y están disponibles. Por otro lado, si los sistemas se encuentran sobre redes WAN, la tolerancia a particiones de red debe ser considerada y se debe escoger entre coherencia o disponibilidad. Si se elige una coherencia atómica, los sistemas experimentan altas latencias para garantizar la coherencia de los datos; mientras que, si se elige un modelo de coherencia más relajado, como el modelo causal, se puede garantizar disponibilidad del sistema con un alto grado de coherencia sobre los datos. El modelo causal puede ser modelado siguiendo dos semánticas, causalidad explı́cita y causalidad potencial. La causalidad explı́cita se define en la capa de aplicación e identifica las operaciones que realmente influyen sobre una nueva operación de escritura (Cheriton y Skeen, 1993; Fekete y col., 1999; Ladin, Liskov y Shrira, 1990). Mientras que, la causalidad potencial suele definirse en la capa de comunicación o de almacenamiento de datos y considera todas las operaciones que podrı́an influir sobre una nueva escritura. Tanto la causalidad explı́cita, como la causalidad potencial pueden ser implementadas utilizando relojes lógicos o listas de dependencias. Sin embargo, las implementaciones del modelo de coherencia causal potencial presentan serios desafı́os de escalabilidad. A cada operación de escritura que se propaga en el sistema, se debe adjuntar las dependencias causales. Dependiendo de la aplicación, las dependencias causales podrı́an ser enormes (Bailis y col., 2012), y por lo tanto, la latencia en la visibilidad de un nuevo valor por parte de una operación de escritura se incrementará considerablemente y limita el número máximo de escrituras por unidad de tiempo (throughput) que el sistema puede atender. Otro desafı́o es lograr una coherencia causal convergente, también conocida como coherencia causal+ (Lloyd y col., 2011). Este tipo de causalidad asegura que tarde o temprano los valores de las variables llegarán a converger, cuando las actualizaciones cesen. La convergencia es un criterio importante porque el modelo de coherencia causal, por sı́ mismo, carece de garantı́as de vivenza (liveness) (Bailis y col., 2012). Observando los modelos causales anteriores, se identifica un nuevo modelo de coherencia causal intermedio entre la causalidad potencial y la causalidad explı́cita, que llamaremos per-key causal. El modelo per-key causal, objetivo de este trabajo, considera que la escritura de un valor sobre una variable depende solo de los valores previamente leı́dos.. UPM. Máster en Ciencias y Tecnologı́as de la Computación. 2.

(14) CAPÍTULO 1. INTRODUCCIÓN. 1.1.. Objetivos. 1. Definir una nueva relación de orden causal que relaje el orden de proceso para operaciones de escritura sobre variables diferentes siempre que no estén relacionadas casualmente por lecturas intermedias. 2. Definir un nuevo modelo de coherencia para sistemas de memoria compartida distribuida, utilizando la nueva relación de orden causal, que reduzca la latencia de la visibilidad de las operaciones de escritura y aumente el número de peticiones de escritura por unidad de tiempo en el sistema. 3. Permitir que el nuevo modelo sea tolerante a particiones de red ofreciendo disponibilidad y sin violar la semántica causal definida. 4. Diseñar un algoritmo que implemente el nuevo modelo de coherencia y permita coherencia causal convergente. 5. Entender los conceptos y las tecnologı́as detrás de la memoria compartida distribuida a través de un ejercicio teórico-práctico.. 1.2.. Contribución. Este trabajo define formalmente un nuevo modelo de coherencia denominado Per-Key Causal, como una variante al modelo causal. Establece una semántica más permisiva que permite disminuir las dependencias causales introducida por la causalidad potencial. También, se presenta un algoritmo implementado sobre un sistema de intercambio de mensajes, que utiliza canales de comunicación fiables no FIFO y cuyo diseño garantiza la convergencia del sistema.. 1.3.. Organización del documento. La memoria se organiza de la siguiente manera: En el capı́tulo 2 se realiza una revisión del estado del arte sobre los modelos de coherencia en memoria compartida distribuida, y se define un marco formal común para compararlos. En el capı́tulo 3 se define formalmente el nuevo modelo de coherencia denominado Per-Key Causal. El capı́tulo 4 describe el algoritmo, su comportamiento y ejemplos de su funcionamiento. Y finalmente, en el capı́tulo 5 se presentan las conclusiones a las que se ha llegado con este trabajo y las posibles futuras lı́neas de investigación. UPM. Máster en Ciencias y Tecnologı́as de la Computación. 3.

(15) Capı́tulo 2. Estado del Arte Puesto que los sistemas distribuidos no disponen fı́sicamente de una memoria común, es necesario una abstracción que permita compartir los datos a través de los procesos. Una posible abstracción es la memoria compartida distribuida (MCD). El principal objetivo de esta abstracción es crear una interfaz (Steinke y Nutt, 2004) en la cual los procesos puedan acceder fácilmente a los datos compartidos, a través de operaciones de lectura y escritura sobre localizaciones de memoria (registros) de la misma forma cómo se hace en memorias fı́sicas ordinarias.. Figura 2.1: Estructura de una memoria compartida como una API.. Cuando un proceso realiza una operación de lectura sobre una localidad de memoria, lo deseable es obtener el valor de la última escritura realizada sobre esta localidad. Sin embargo, con múltiples procesos independientes accediendo de forma simultánea a la memoria compartida distribuida se producen ejecuciones donde las operaciones de lectura y escritura pueden estar ordenadas parcialmente. Por lo tanto, se debe establecer una forma para determinar cuál es el valor de la última escritura realizada sobre un registro que una operación de lectura puede retornar.. 4.

(16) CAPÍTULO 2. ESTADO DEL ARTE. Para entender esta forma en que las escrituras y lecturas son ordenadas, se revisaran varios conceptos relacionados con la Memoria Compartida Distribuida. Se inicia con la semántica de registros seguros, regulares y atómicos para continuar con los modelos de coherencia más conocidos. Finalmente, se describen varios trabajos relacionados con este tema.. 2.1.. Registros Seguros, Regulares y Atómicos. La semántica que utiliza este tipo de registros de lectura y escritura es utilizada ampliamente dentro de la programación concurrente (Herlihy y Shavit, 2008; Raynal, 2013). Se inicia este análisis con la semántica más débil y permisiva hasta la semántica más estricta, revisando sus propiedades y las diferencias entre cada una de ellas. Notación. Para explicar cada una de las propiedades de estos registros se utilizará la. siguiente notación. Se dice que v denota un item de dato (registro), v 0 representa el valor inicial de v. Para representar los sucesivos valores que toma v se utilizará v 1 , v 2 , . . . , v n . Cada operación que escriba sobre v se notará como v i , para alguna i ≥ 0, y termina con un valor v igual a v i+1 . Una operación de escritura se representa por wi (v), donde v es el valor que ha sido escrito sobre el registro, en la escritura i-ésima. Las operaciones de lectura se las representa por rj () → v, para indicar el valor v de retorno de la lectura correspondiente, j denota las sucesivas operaciones de lectura, para alguna j ≥ 1, y termina con rj+1 . Capacidad de un registro. La primera dimensión asociada a un registro está relacio-. nada con su tamaño, este determina la capacidad para contener más o menos información. El tipo de registro más simple es el registro binario, el cual puede almacenar un solo bit 0 o 1. Por otro lado, están los los registros multi-valuados. Dentro de estos, se tiene los registros acotados, cuyo dominio de valores incluye b valores distintos (p.ej., los valores de 0 hasta b − 1), donde b es una constante conocida por los procesos. Un registro que puede contener b valores distintos se lo denomina registro b-valuado y el conjunto de estos valores se lo denomina dominio del registro. Mientras que, un registro que no contenga esta constante se denomina registro no acotado y su dominio puede ser infinito. Acceso a los registros Un registro puede ser accedido de forma única (Single mode) o múltiple (Multi mode) para las operaciones de lectura y escritura. La notación XWYR, indica que tanto X como Y representan M(Multi) o S(Single) sobre las operaciones a las que se refiere. Por ejemplo, SWMR indica que se puede escribir de forma única y leer. UPM. Máster en Ciencias y Tecnologı́as de la Computación. 5.

(17) CAPÍTULO 2. ESTADO DEL ARTE. de forma múltiple. Este es un aspecto fundamental al analizar es el comportamiento de un registro cuando es accedido de forma concurrente por varios procesos.. 2.1.1.. Registros seguros. Un registro seguro en un modo de acceso SWMR es un registro cuyas operaciones de lectura satisfacen las siguientes propiedades: 1. Una operación de lectura que no es concurrente con una operación de escritura retornará el valor escrito por la más reciente operación de escritura. 2. Una operación de lectura que es concurrente con una o varias operaciones de escritura secuenciales podrá retornar cualquier valor que el registro pueda contener. Por lo tanto, la operación de lectura podrá retornar cualquier valor v i , para alguna i en el dominio 0...b − 1. Es importante notar que durante el perı́odo de solapamiento de las operaciones de escritura y lectura, el valor retornado por una operación de lectura puede ser uno que nunca se haya escrito antes por ninguna operación de escritura previa, el valor retornado solamente tiene que formar parte del dominio del registro. Por ejemplo, considere la ejecución de la Figura 2.2 sobre un registro seguro cuyo dominio es {0, 1, 2, 3}. En las operaciones de wi y ri , el subı́ndice i indica el orden en el que se ejecutan dentro del proceso. Los procesos p0 y p1 pueden acceder al registro de forma concurrente. Suponiendo que el valor v 0 = 0, que p1 ha realizando la primera operación de escritura w1 (1) y p0 ha realizado una operación de lectura r1 () → a de tal forma que no ocurre un solapamiento, entonces a = 1 puesto que se cumple la primera propiedad. A continuación, se tiene las operaciones de lectura de p0 , r2 () → b seguida de r3 () → c, las cuales se encuentran solapadas por la segunda operación de escritura w2 (3) en p1 . En este caso se debe considerar la segunda propiedad y por lo tanto, los valores de b y c podrı́an ser 0, 1, 2 ó 3.. Figura 2.2: Ejecución con operaciones de lectura y escritura solapadas sobre un registro. UPM. Máster en Ciencias y Tecnologı́as de la Computación. 6.

(18) CAPÍTULO 2. ESTADO DEL ARTE. 2.1.2.. Registros regulares. Un registro regular SWMR es más estricto que un registro seguro, pero más relajado que un registro atómico. Introduce una restricción a las operaciones de lectura concurrentes con una operación de escritura. Las operaciones de lectura sobre registros regulares, deben satisfacer las siguientes propiedades: 1. Una operación de lectura que no es concurrente con una operación de escritura retornará el valor escrito por la operación de escritura más reciente. 2. Una operación de lectura concurrente con una o varias operaciones de escritura secuenciales deberá cumplir lo siguiente: Considere v 0 como el valor que ha sido escrito por la última operación de escritura, y considere v 1 , ..., v k como la secuencia de valores que han sido escritos por operaciones de escritura solapadas con la lectura. La operación de lectura podrá retornar cualquier de los valores v i , para alguna i en el rango 0...k. Durante un perı́odo de solapamiento, las operaciones de lectura pueden retornar solamente el valor que contenı́a el registro antes del perı́odo de solapamiento y los valores que se han escrito por las operaciones de escritura concurrentes con la operación de lectura. Por ejemplo, si se considera la misma ejecución de la Figura 2.2 sobre un registro regular con el mismo dominio {0, 1, 2, 3}. Para la primera lectura r1 () → a, a = 1 puesto que es el último valor escrito en el registro por w1 (1) y no existe solapamiento, cumpliendo ası́ con la primera propiedad. Para el caso de la segunda lectura r2 () → b y la tercera lectura r3 () → c, el valor que puede tomar b y c es 1 ó 3, ya que estas operaciones se encuentran solapadas con w2 (3). Además, cuando una operación de escritura es concurrente con una o varias operaciones de lectura, el valor que se está leyendo puede tener un efecto ”fliker”1 entre el nuevo y el viejo valor, antes de que este último sea remplazado definitivamente por el nuevo valor. Considerando el mismo ejemplo, b podrı́a ser 3, el nuevo valor escrito por w2 (3) y c podrı́a ser 1, el valor escrito por w1 (1). Dentro de la semántica de registro regular, esto es permitido.. 2.1.3.. Registros atómicos. Un registro atómico SWMR es el más estricto que los dos anteriores. Sus operaciones de lectura deben satisfacer las siguientes propiedades: 1. flicker: Se puede traducir como parpadeante u oscilante. UPM. Máster en Ciencias y Tecnologı́as de la Computación. 7.

(19) CAPÍTULO 2. ESTADO DEL ARTE. 1. Cada invocación aparece como si ésta hubiese sido ejecutada instantáneamente en un punto de la lı́nea de tiempo entre el inicio y el final del evento. 2. Una operación de lectura que no es concurrente con una operación de escritura retornará el valor escrito por la operación de escritura más reciente. 3. Una operación de lectura que que es concurrente con una o varias operaciones de escritura secuenciales deberá cumplir con lo siguiente: Considere v 0 como el valor que ha sido escrito por la última operación de escritura, y considere v 1 , ..., v k como la secuencia de valores que han sido escritos por operaciones de escritura solapadas. La operación de lectura podrá retornar cualquier de los valores v i , para alguna i en el rango 0...k. Con la siguiente restricción: Si r1 , ...rn () es la secuencia de las operaciones de lectura sobre una operación de escritura solapada y rj → v i entonces rj+1 → v l donde l ≥ i. Si un proceso existen dos operaciones secuenciales de lectura sobre un registro, solapadas por una operación de escritura de otro proceso, la última lectura no puede retornar un valor anterior al que ha retornado la primera lectura. Por ejemplo, consideremos nuevamente la ejecución de la Figura 2.2 sobre un registro atómico con el mismo dominio {0, 1, 2, 3}. Para la primera lectura r1 () → a, a = 1 puesto que es el último valor escrito en el registro por w1 (1) y no existe solapamiento, cumpliendo ası́ con la primera propiedad. Para el caso de la segunda lectura r2 () → b el valor que puede tomar b es 1 ó 3, ya que esta operación se encuentra solapada por w2 (3). Si b es igual a 1, entonces la tercera lectura r3 () → c puede retornar el valor de 1 ó 3. Pero si b es igual a 3, el único valor que puede retornar r3 () → c es 3. Puesto que, una vez que el valor de un registro ha cambiado, este cambio se vuelve permanente durante el perı́odo que dure el solapamiento de las operaciones. En la Tabla 2.1 se puede apreciar un resumen de las lecturas que devolverı́an cada una de las semánticas revisadas sobre el registro multi-valuado con b = 4 mostrado en la ejecución de la Figura 2.2. Valor retornado Registro Seguro Registro Regular Registro Atómico Registro Atómico. a 1 1 1 1. b 0/1/2/3 1/3 1 3. c 0/1/2/3 1/3 1/3 3. Tabla 2.1: Posibles lecturas en registros seguros, regulares y atómicos de la ejecución mostrada en la Figura 2.2. UPM. Máster en Ciencias y Tecnologı́as de la Computación. 8.

(20) CAPÍTULO 2. ESTADO DEL ARTE. 2.2.. Modelos de Coherencia en la MCD. Existen varias propuestas de sistemas de memoria compartida, cada una con diferentes tipos de coherencia. En (Cholvi y Bernabéu, 2004) se presenta un marco formal para especificar los diferentes modelos de coherencia y sus propiedades. Tomando como base este trabajo, se presenta un resumen de los modelos más conocidos y la relación que existe entre ellos, para luego continuar con la definición formal de cada uno. El modelo atómico es el más fuerte de los modelos de coherencia. Garantiza un orden total de las operaciones respetando el orden de proceso y el orden de tiempo real. El modelo secuencial es más relajado, puesto que no respeta el orden de tiempo real. Establece un orden total para las operaciones respetando un orden de ejecución. Ambos modelos garantizan un orden total de las operaciones sobre los registros que conforman la memoria compartida, pero introducen algún tipo de bloqueo en las operaciones.. Figura 2.3: Relación entre los tipos de memoria compartida más conocidos, desde los modelos con coherencia más fuertes a los más débiles. El modelo causal, establece un orden parcial de las operaciones, respetando la relación de orden causal. A partir de este modelo, cada proceso puede observar las operaciones de escritura en un orden diferente. El modelo causal+, además de establecer la relación de orden causal, resuelve conflictos de operaciones de escritura concurrentes sobre un mismo registro. Por lo tanto, este modelo es más fuerte que el modelo causal. El modelo pRAM solamente garantiza el orden de programa de las operaciones de todos los procesos. Es el modelo más débil de todos y puede dejar a la memoria en un estado de inconsistencia. A continuación se encuentra el modelo per-key sequential, garantiza un orden de escritura secuencial sobre cada registro por separado. Finalmente se encuentra el modelo eventual, en el cual el sistema tarde o temprano llegará a un estado de coherencia, toda vez que las operaciones de escritura sobre los registros terminen.. UPM. Máster en Ciencias y Tecnologı́as de la Computación. 9.

(21) CAPÍTULO 2. ESTADO DEL ARTE. Modelo Para la definición de los modelos de coherencia y sus ejemplos, se empleará la notación utilizada por (Jiménez, Fernández y Cholvi, 2008). Se establece un sistema S constituido por un conjunto finito de procesos Π = {p1 , p2 , ..., pn } que interactuan a través de una memoria compartida con un conjunto finito de localidades de memoria definidos como variables. Los procesos acceden a las variables a través de operaciones de lectura y escritura. Una operación de escritura denotada como wp (x)v se interpretará como la escritura del proceso p sobre la variable x con el valor v. Una operación de lectura denotada como rp (x)v retornará el valor v de la variable x para el proceso p que realiza la lectura. Siempre que el proceso que realice estas operaciones no interese conocer, se indica como w(x)v y r(x)v. A menos que se establezca lo contrario, el valor inicial de las variables es 0. Se denota como α al conjunto de operaciones de escritura y lectura obtenidas de una ejecución R dentro del sistema S. Se utiliza op → op0 para denotar que op precede a op0 en una secuencia de operaciones dentro de α. Vista. Se denota como vista β a una secuencia formada por todas las operaciones de α,. o un subconjunto de α. Esta secuencia debe preservar una relación de orden, dependiendo del modelo de coherencia.. 2.2.1.. Modelo Atómico. El modelo atómico (atomic consistency) (Lamport, 1986), también llamado Linearizable (Herlihy y Wing, 1990) es el más estricto de los modelos de coherencia. Las operaciones de lectura y escritura que se producen en este modelo tienen efecto en un punto instantáneo en el intervalo entre la invocación y la terminación de la operación. Esta propiedad de instantaneidad significa que cuando una operación de escritura ha actualizado el valor de una variable, este valor será visible por cualquier operación de lectura posterior en el sistema. La relación de orden atómico, denotada como ≺ato , entre dos operaciones op y op0 ∈ α existe, si y solo si se cumple lo siguiente: 1. Orden de proceso (op ≺p op0 ): Si una operación op es invocada por el proceso p antes que otra operación op0 . 2. Orden de tiempo real (op ≺rt op0 ): Si una operación op termina de ejecutarse antes de que otra operación op0 comience a ejecutarse. Vista Atómica (βato ) UPM. Una ordenación de todas las operaciones de α que preserve ≺ato .. Máster en Ciencias y Tecnologı́as de la Computación. 10.

(22) CAPÍTULO 2. ESTADO DEL ARTE. Vista Atómica legal. Una βato es legal si ∀r(x)v ∈ α, ∃w(x)v ∈ α : w(x)v → r(x)v y. @w(x)u ∈ α : w(x)v → w(x)u → r(x)v en βato . Coherencia Atómica. Un sistema es atómico si para toda ejecución R de S existe una. βatom legal. Ejemplo 2.1. Considere R como la ejecución descrita por el cronograma de la Figura 2.4. La siguiente vista βato = w1 (x)1 r3 (y)0 w2 (y)2 r2 (x)1 r3 (y)2 respeta la relación ≺ato .. Figura 2.4: Ejecución de un sistema de memoria compartida con coherencia atómica. Puesto que existe una βato legal, entonces R es una ejecución atómica. Implementación. Las implementaciones del modelo atómico sobre memoria compartida. distribuida generalmente involucran bloqueos durante las operaciones de escritura para garantizar la linearizabilidad, o algoritmos centralizados con paradigmas de programación tradicional (Li y Hudak, 1989). Esto implica que el modelo introduzca periodos de latencia altos cuando existe un número elevado de procesos en el sistema.. 2.2.2.. Modelo Secuencial. El modelo secuencial (sequential consistency) establece que el resultado de una ejecución se observa como si las operaciones de todos los procesos fueran ejecutados en un orden secuencial, y las operaciones de cada proceso individual aparecen en la secuencia especificada por su programa (Lamport, 1979). Es un modelo de coherencia más débil que el modelo atómico, puesto que elimina la restricción del tiempo real. La relación de orden secuencial, denotada como ≺seq , entre dos operaciones op y op0 ∈ α existe, si y solo si se cumple lo siguiente: 1. Orden de proceso (op ≺p op0 ): Si una operación op es invocada por el proceso p antes que otra operación op0 . UPM. Máster en Ciencias y Tecnologı́as de la Computación. 11.

(23) CAPÍTULO 2. ESTADO DEL ARTE. 2. Orden de lectura (op ≺ op0 ): Si op = w(x)v y op0 = r(x)v. 3. Si existe una operación op00 ∈ α, tal que op ≺seq op00 y op00 ≺seq op0 entonces op ≺seq op0 Vista Secuencial (βseq ). Una ordenación de todas las operaciones de α que preserve. ≺seq . Vista Secuencial legal Una βseq es legal si ∀r(x)v ∈ α, ∃w(x)v ∈ α : w(x)v → r(x)v y @w(x)u ∈ α : w(x)v → w(x)u → r(x)v en βseq . Coherencia Secuencial. Un sistema es secuencial si para toda ejecución R de S existe. una βseq legal. Ejemplo 2.2. Considere R como la ejecución descrita por el cronograma de la Figura 2.5. La siguiente vista βseq = w1 (x)3. w2 (x)2. r1 (x)2 w2 (y)4 w3 (y)1. r3 (y)1 respeta la. relación ≺seq .. Figura 2.5: Ejecución de un sistema de memoria compartida con coherencia secuencial. Puesto que existe una βseq legal, entonces R es una ejecución secuencial. Implementación. La mayorı́a de algoritmos que implementan coherencia secuencial in-. volucran algún tipo de bloqueo costoso para el sistema (Girard y Li, 1999). Existen otros trabajos que tratan de minimizar estos bloqueos, en (Jiménez, Fernández y Cholvi, 2008) se garantiza escrituras inmediatas sobre las variables y solamente retrasa las operaciones de lectura, para las variables cuyo valor no ha sido actualizado por el proceso local.. 2.2.3.. Modelo Causal. El modelo causal (causal consistency) introducido por Ahamad (Ahamad y col., 1995), establece que todos los procesos deben llegar a un acuerdo para definir un orden parcial de las operaciones que tienen una relación de orden causal entre si. Por ejemplo, si en UPM. Máster en Ciencias y Tecnologı́as de la Computación. 12.

(24) CAPÍTULO 2. ESTADO DEL ARTE. una ejecución existe una operación rp (x)v, es porque también existe una operación previa wq (x)v. Por lo tanto, la operación de escritura precede en orden causal a la operación de lectura. La relación de orden causal, denotada como ≺cau , entre dos operaciones op y op0 ∈ α existe, si y solo si una de las siguientes condiciones se cumple: 1. Orden de proceso (op ≺p op0 ): Si una operación op es invocada por el proceso p antes que otra operación op0 . 2. Orden de lectura (op ≺ op0 ): Si op = w(x)v y op0 = r(x)v. 3. Si existe una operación op00 ∈ α, tal que op ≺cau op00 y op00 ≺cau op0 entonces op ≺cau op0 Si op y op0 son dos operaciones en α que no tienen una relación de orden causal, esto es p 6≺cau op0 y op0 6≺cau op, se dice que op y op0 son concurrentes y se denota op || op0 . Dado que, el modelo causal establece un orden parcial de las operaciones sobre α, es necesario analizar las vistas por separado para cada proceso. Para una ejecución R, sea αp el subconjunto de operaciones de α producidas en R tal que se elimina de α todas las operaciones de lectura generadas por un proceso distinto de p. Vista Causal (βcau−p ). Una ordenación de todas las operaciones de αp que preserve. ≺cau . Vista Causal legal. Una βcau−p es legal si ∀r(x)v ∈ αp , ∃w(x)v ∈ αp : w(x)v → r(x)v. y @w(x)u ∈ αp : w(x)v → w(x)u → r(x)v en βcau−p . Distintos procesos pueden tener distintas vistas causales legales, ya que αp y αq son diferentes. Coherencia Causal Un sistema es causal si para toda ejecución R de S existe una βcau−p legal para todo proceso p. Ejemplo 2.3. Considere R como la ejecución descrita por el cronograma de la Figura 2.6. Las vistas βcau−1 = w1 (x)2 r1 (y)0 w2 (y)1 w2 (x)3, βcau−2 = w2 (y)1 w2 (x)3 w1 (x)2 r2 (x)2 y βcau−3 = w2 (y)1 w1 (x)2 r3 (x)2 w2 (x)3 r3 (x)3 se han obtenido de α1 , α2 y α3 , respectivamente, y respetan la relación ≺cau . Las operaciones de escritura w1 (x)2 y w2 (x)3 son concurrentes y se ven en diferente orden en los procesos, tal y como se aprecia en las vistas causales βcau−2 y βcau−3 . UPM. Máster en Ciencias y Tecnologı́as de la Computación. 13.

(25) CAPÍTULO 2. ESTADO DEL ARTE. (a) Ordenamiento de operaciones para α1 .. (b) Ordenamiento de operaciones para α2 .. (c) Ordenamiento de operaciones para α3 .. Figura 2.6: Ejecución de un sistema de memoria compartida con coherencia causal Puesto que ∀p ∃βcau−p legal, entonces R es una ejecución causal. Implementación. Los algoritmos que implementan coherencia causal generalmente rea-. lizan lecturas no bloqueantes sobre registros locales y actualizando las escrituras a través de envı́o de mensajes a los otros procesos del sistema (Ahamad y col., 1995; Baldoni, Milani y Piergiovanni, 2004; Jiménez, Fernández y Cholvi, 2008; Raynal y Ahamad, 1998). Este tipo de coherencia permiten implementar sistemas con baja latencia y disponibilidad, propiedades que modelos de coherencia más estrictos no permiten.. 2.2.4.. Modelo Causal+. La coherencia causal plantea un problema. Al final de una ejecución, es posible que los procesos lean valores distintos sobre una misma variable. En la Figura 2.6, la escritura w1 (x)2 y w2 (x)3 son dos operaciones concurrentes sobre la variable x. El valor de esta variable empieza a diverger, como se aprecia en r2 (x)2 y r3 (x)3. Si no existe otra escritura sobre la variable x, esta divergencia se mantendrá durante el resto de la ejecución. El modelo causal+ (causal+ consistency) introducido en (Lloyd y col., 2011), es un modelo de coherencia causal con un manejo de conflictos convergente, que permite resolver el estado de incoherencia que se genera cuando dos operaciones de escritura concurrentes operan sobre la misma variable. Para resolver este conflicto, se debe establecer una regla que defina que operación de escritura prevalecerá en todas los procesos.. UPM. Máster en Ciencias y Tecnologı́as de la Computación. 14.

(26) CAPÍTULO 2. ESTADO DEL ARTE. Manejo de conflictos convergente. Dada dos operaciones sobre un mismo registro. op = w(x)v y op0 = w(x)v 0 , se dice que están en conflicto si no tienen una relación de orden causal, esto es: op 6≺cau op0 y op0 6≺cau op. El manejo de conflictos es una función h(v, v 0 ) asociativa, conmutativa que opera sobre un conjunto de escrituras en conflicto sobre una variable para tarde o temprano producir un valor (posiblemente nuevo) final para la variable. La función debe producir el mismo valor final independiente del orden en el cual se observe las escrituras en conflicto. De esta manera, una vez que un proceso ha aplicado la función h y determinado el valor de una variable, todos los demás procesos acordarán de manera independiente el mismo valor final para dicha variable. (Lloyd y col., 2011) El modelo causal+ cumple las mismas propiedades que el modelo causal. Para una ejecución R, sea αp el subconjunto de operaciones de α producidas en R tal que se elimina de α todas las operaciones de lectura generadas por un proceso distinto de p. Vista Causal+ (βcp−p ). Una ordenación de todas las operaciones de αp que preserve. ≺cau e incorpore manejo de conflictos convergente para operaciones de escritura concurrentes sobre la misma variable. Vista Causal+ legal. Una βcp−p es legal si ∀r(x)v ∈ αp , ∃w(x)v ∈ αp : w(x)v → r(x)v. y @w(x)u ∈ αp : w(x)v → w(x)u → r(x)v en βcp−p . Distintos procesos pueden tener distintas vistas causales legales, ya que αp y αq son diferentes. Coherencia Causal+ Un sistema es causal+ si para toda ejecución R de S existe una βcp−p legal para todo proceso p. Ejemplo 2.4. Considere R como la ejecución descrita por el cronograma de la Figura 2.7. Las vistas βcp−1 = w1 (x)2 r1 (y)0 w2 (y)1 w2 (x)3 , βcp−2 = w1 (x)2 w2 (y)1 w2 (x)3 r2 (x)3 y βcp−3 = w2 (y)1 w1 (x)2 r3 (x)2 w2 (x)3 r3 (x)3 se han obtenido de α1 , α2 y α3 , respectivamente. Respetan la relación ≺cau y resuelve el conflicto de las escrituras concurrentes w1 (x)2 y w2 (x)3, sobre la variable x.. UPM. Máster en Ciencias y Tecnologı́as de la Computación. 15.

(27) CAPÍTULO 2. ESTADO DEL ARTE. (a) Ordenamiento de operaciones para α1 .. (b) Ordenamiento de operaciones para α2 .. (c) Ordenamiento de operaciones para α3 .. Figura 2.7: Ejecución de un sistema de memoria compartida con coherencia causal+ Puesto que ∀p ∃βcp−p legal, entonces R es una ejecución causal+. Implementación. Este modelo de coherencia ha sido utilizado en COPS (Lloyd y col.,. 2011), una base de datos geo-replicada, escalable que garantiza las dependencias causales entre los valores de las claves y bajos tiempos de latencia. Otro sistema que ha sido implementado utilizando este modelo de coherencia es ChainReaction (Almeida, Leitao y Rodrigues, 2013), un almacén de datos de clave-valor geo-distribuida con alto rendimiento, tolerancia a fallos y escalable. Este sistema se presenta como una variante novedosa a la replicación en cadena (chain-replication).. 2.2.5.. Modelo pRAM. El modelo Pipeline RAM, también llamado FIFO, fue definido por (Lipton y Sandberg, 1988). Este modelo establece que las operaciones de escritura realizadas por un proceso son vistas por los otros procesos en el mismo orden en el que fueron emitidas. Las operaciones de escritura de diferentes procesos pueden ser observadas en diferente orden, por diferentes procesos. Para una ejecución R, sea αp el subconjunto de operaciones de α producidas en R tal que se elimina de α todas las operaciones de lectura generadas por un proceso distinto de p. La relación de orden pRAM, denotada como ≺pRAM , entre dos operaciones op y op0 ∈ αp existe, si cumple con la siguiente condición: 1. Orden de proceso (op ≺p op0 ): Si una operación op es invocada por el proceso p antes UPM. Máster en Ciencias y Tecnologı́as de la Computación. 16.

(28) CAPÍTULO 2. ESTADO DEL ARTE. que otra operación op0 . Vista pRAM (βpR−p ). Una ordenación de todas las operaciones de αp que preserve. ≺pRAM . Vista pRAM legal. Una βpR−p es legal si ∀r(x)v ∈ αp , ∃w(x)v ∈ αp : w(x)v → r(x)v y. @w(x)u ∈ αp : w(x)v → w(x)u → r(x)v en βpR−p . Coherencia pRAM Un sistema es pRAM si para toda ejecución R de S existe una βpR−p legal para todo proceso p. Ejemplo 2.5. Considere R como la ejecución descrita por el cronograma de la Figura 2.8. Las vistas βpR−1 = w1 (x)1 w1 (y)2 w2 (y)5, βpR−2 = w1 (x)1 w1 (y)2 r2 (y)2 w2 (y)5 r2 (y)5 y βpR−3 = w2 (y)5 w1 (x)1 r3 (y)5 w1 (y)2 r3 (y)2 se han obtenido de α1 , α2 y α3 , respectivamente, y respetan la relación ≺pRAM .. (a) Ordenamiento de operaciones para α1 .. (b) Ordenamiento de operaciones para α2 .. (c) Ordenamiento de operaciones para α3 .. Figura 2.8: Ejecución de un sistema de memoria compartida con coherencia pRAM. Puesto que ∀p ∃βpR−p legal, entonces R es una ejecución pRAM. Este es el modelo de coherencia más débil y el resultado de una ejecución podrı́a dejar a la memoria en un estado de inconsistencia. Como se puede apreciar en βpR−2 la operación de lectura final sobre y es igual a 5. Mientras que, en βpR−3 la operación de lectura final sobre la misma variable es igual a 2.. UPM. Máster en Ciencias y Tecnologı́as de la Computación. 17.

(29) CAPÍTULO 2. ESTADO DEL ARTE. Implementación. La revisión bibliográfica no evidenció una implementación especı́fica. de este modelo. Sin embargo, en (Kshemkalyani y Singhal, 2008) se muestra que este modelo puede ser implementado utilizando Broadcast FIFO.. 2.2.6.. Modelo Per-Key Sequential. El modelo per-key sequential (Lloyd y col., 2011), también denominado per-record timeline en (Cooper y col., 2008) o más conocido como modelo cache (Goodman, 1989); es uno de los modelos más débiles, puesto que solamente garantiza un orden total de escritura por cada variable individual del sistema. Para una ejecución R, sea α(x) el subconjunto de operaciones de α producidas en R tal que se elimina de α todas las operaciones de una variable distinta de x. La relación de orden per-key sequential, denotada como ≺ks , entre dos operaciones op y op0 ∈ α(x) existe, si y solo si una de las siguientes condiciones se cumple: 1. Orden de proceso (op ≺p op0 ): Si una operación op es invocada por el proceso p antes que otra operación op0 . 2. Orden de lectura (op ≺ op0 ): Si op = w(x)v y op0 = r(x)v. 3. Si existe una operación op00 ∈ α(x), tal que op ≺ks op00 y op00 ≺ks op0 entonces op ≺ks op0 Vista per-key sequential (β(x)) Una ordenación de todas las operaciones de α(x) que preserve ≺ks . Vista per-key sequential legal. Una β(x) es legal si ∀r(x)v ∈ α(x), ∃w(x)v ∈ α(x) :. w(x)v → r(x)v y @w(x)u ∈ α(x) : w(x)v → w(x)u → r(x)v en β(x). Las variables tienen distintas vistas per-key sequential legales, ya que α(x) y α(y) son diferentes. Coherencia Per-Key Sequential. Un sistema es per-key sequential si para toda eje-. cución R de S existe una β(x) legal para toda variable x. Ejemplo 2.6. Considere R como la ejecución descrita por el cronograma de la Figura 2.9. Las vistas per-key sequential β(x) = r2 (x)0 w1 (x)2 w1 (x)3 r3 (x)3. y β(y) =. w1 (y)5 r2 (y)5 w3 (y)9 se han obtenido de α(x) y α(y), respectivamente, y respetan ≺ks .. Puesto que ∀x ∃β(x) legal, entonces R es una ejecución per-key sequential. UPM. Máster en Ciencias y Tecnologı́as de la Computación. 18.

(30) CAPÍTULO 2. ESTADO DEL ARTE. (a) Ordenamiento de operaciones para α(x).. (b) Ordenamiento de operaciones para α(y).. Figura 2.9: Ejecución de un sistema de memoria compartida con coherencia per-key sequential Implementación. La primera implementación de este modelo se encuentra en (Jiménez,. Fernández y Cholvi, 2008), un algoritmo parametrizado que permite seleccionar entre tres modelos de coherencia distintos: secuencial, causal ó cache. Este modelo de coherencia también se implementa en PNUTS (Cooper y col., 2008), una base de datos geográficamente distribuida y con un fuerte paralelismo para las aplicaciones Web de Yahoo!. Este sistema almacena los datos ordenados dentro de tablas hash y proporciona baja latencia para un alto número de peticiones concurrentes. Dentro de esta implementación se centraliza el proceso de escritura en un nodo. Ası́, el nodo dueño del registro, establece el orden de escritura y las replicas aplican las actualizaciones del registro en el mismo orden.. 2.2.7.. Modelo Eventual. Este modelo establece que tarde o temprano todos los procesos observarán los mismos valores, una vez que todas las operaciones de escritura hayan terminado (Terry y col., 1995; Vogels, 2008). Durante el tiempo entre la última actualización y el punto en donde todas las replicas observan el mismo valor, los procesos pueden observar diferentes valores para un mismo registro. A este intervalo de tiempo se lo denomina ventana de inconsistencia. El tamaño de este intervalo depende de varios factores como retrasos en la comunicación, fallos, carga del sistema o particiones en la red. Cabe mencionar que este modelo no ha sido formalmente definido. Ejemplo 2.7. Considere la ejecución descrita por el cronograma de la Figura 2.10. Posterior a la escritura de w3 (y)3 existe un perı́odo de tiempo en el cual las lecturas de los diferentes procesos retornan valores diferentes. Esta es la ventana de inconsistencia. Una vez finalizado este perı́odo, todos los procesos observan el mismo valor para todas las variables.. UPM. Máster en Ciencias y Tecnologı́as de la Computación. 19.

(31) CAPÍTULO 2. ESTADO DEL ARTE. Figura 2.10: Ejecución de un sistema de memoria compartida con coherencia eventual Implementación. El primer sistema donde se introdujo este modelo de coherencia es. Bayou (Terry y col., 1995), un sistema de base de datos relacional distribuida que permite operaciones desconectadas y tolera particiones de red. Dispone de un protocolo de resolución de conflictos a nivel de la aplicación. Otros sistemas que implementan este modeo de coherencia son a Dynamo de Amazon (DeCandia y col., 2007), el proyecto Valdemort de LinkedIn (Project Voldemort A distributed database 2011) o Casandra de Facebook (Laksham y Malik, 2010).. 2.3.. Trabajos relacionados. Dentro de esta sección se muestra los trabajos más relevantes relacionados con este proyecto. Se inicia con un teorema importante dentro de los sistemas distribuidos y un protocolo basado en la coherencia causal que optimiza las operaciones de escritura. A continuación, se describe el funcionamiento de varios sistemas que utilizan replicación de datos, haciendo énfasis en los diferentes modelos de coherencia que implementan y tratando de evidenciar sus ventajas y desventajas.. 2.3.1.. Teorema de CAP. El teorema de CAP (Brewer, 2000) estable que los sistemas de cómputo distribuidos no pueden garantizar simultáneamente más de dos, de las siguientes propiedades: Consistency: La coherencia establece que todos los nodos observen la misma información al mismo tiempo. Equivalente a tener un sola copia de los datos actualizada. Availability: La disponibilidad establece que el sistema responda siempre a las peticiones y los datos se encuentren disponibles para actualizar o consultar. Partition tolerance: La tolerancia a particiones de red establece que el sistema puede UPM. Máster en Ciencias y Tecnologı́as de la Computación. 20.

(32) CAPÍTULO 2. ESTADO DEL ARTE. seguir operando a pesar que existan retrasos en la entrega de mensajes, fallas en la red o que algunos nodos dejen de funcionar. Dada la naturaleza de los sistemas distribuidos, la tolerancia a particiones de red siempre debe ser considerada. Por lo tanto, solamente se puede escoger una de las propiedades restantes para la implementación de este tipo de sistemas. Si se elije la coherencia sobre la disponibilidad, los sistemas podrı́an retornar error a peticiones de los clientes o experimentar latencias altas para garantizar la coherencia de los datos. Por otro lado, si se elije la disponibilidad sobre la coherencia, los sistemas siempre atenderán las peticiones de los usuarios y tratarán de retornar la información más actual, pero se corre el riesgo de trabajar sobre datos no actualizados.. 2.3.2.. Algoritmo de Baldoni. En el artı́culo denominado ((An optimal protocol for causally consistent distributed shared memory systems)) (Baldoni, Milani y Piergiovanni, 2004, 2006), los autores presentan un criterio de optimización para los algoritmos que implementan coherencia causal en memoria compartida distribuida. Este protocolo propone que cada proceso disponga una copia local de los registros del sistema. Cuando un proceso realiza una actualización en un registro, esta actualización es propagada a los otros procesos. El criterio de optimización determina la capacidad del protocolo para actualizar la copia local tan pronto como sea posible, siempre y cuando se respete la coherencia causal. El protocolo está implementado sobre una primitiva de comunicación de broadcast fiable y pone en evidencia que los algoritmos anteriores a su publicación, no son óptimos. Una desventaja de este algoritmo es que no resuelve los conflictos que se suscitan con escrituras concurrentes sobre un mismo registro.. 2.3.3.. Fast Array of Wimpy Nodes (FAWN-KV). FAWN-KV (Andersen y col., 2011) es una base de datos distribuida de tipo clave-valor diseñada para trabajar sobre la arquitectura FAWN con almacenamiento en memoria flash y bajo consumo de energı́a. Es utilizado como base para sistemas de almacenamiento en centros de datos que requieren una coherencia fuerte, alta disponibilidad y rendimiento. La arquitectura FAWN está compuesta por dos tipos de nodos: front-ends y back-ends. El front-end es el punto de entrada del sistema, recibe las peticiones de los clientes y las reenvı́a hacia el nodo de back-end responsable de manejar la clave requerida. Los. UPM. Máster en Ciencias y Tecnologı́as de la Computación. 21.

(33) CAPÍTULO 2. ESTADO DEL ARTE. nodos back-end FAWN-KV son los responsables de almacenar los valores de las claves. Se encuentran organizados en un anillo utilizando coherencia por hashing similar a sistemas como Chrod (Stoica y col., 2001) donde las claves están mapeadas al sucesor de la clave en el anillo. Dentro de cada nodo FAWN-KV se encuentra un subsistema denominado FAWN-DS (FAWN datastore) el cual administra el almacenamiento de datos a través de una estructura de logs y está optimizado para leer y escribir sobre memorias flash. Para ofrecer alta disponibilidad, FAWN-KV utiliza la replicación en cadena para mantener la coherencia de múltiples réplicas de los datos. FAWN-KV presenta un alto throughput y bajo consumo de energı́a, y resulta ser una excelente opción para implementar sistemas de almacenamiento en un solo datacenter. Sin embargo, este sistema no es adaptable a escenarios donde se requiere geo-replicación, puesto que la replicación en cadena tendrı́a que enlazar nodos de diferentes centros de datos a través de redes WAN y esto ocasionarı́a altos tiempos de latencia.. 2.3.4.. Bayou. Bayou (Terry y col., 1995) es una base de datos relacional distribuida que permite a los nodos realizar operaciones desconectados del sistema. Presume que un conjunto de nodos solamente se conectan ocasionalmente al sistema. Este sistema es tolerante a particiones de red. Dispone de protocolos para la resolución de conflictos a nivel de la aplicación. Uno de sus puntos fuertes es que permite que las operaciones de lectura y escritura continúen incluso durante las particiones de la red y resuelven los conflictos de actualización utilizando diferentes mecanismos de resolución de conflictos, algunos controlados por el cliente. Este sistema garantiza una coherencia eventual.. 2.3.5.. Clusters of Order-Preserving Servers (COPS). Lloyd presentó el diseño e implementación de COPS (Lloyd y col., 2011), una base de datos de clave-valor que utiliza la coherencia causal+ para geo-replicación. El enfoque central en COPS es el seguimiento y comprobación explı́cita de las dependencias causales entre las claves antes de realizar las escrituras. Además, se presenta una variante denominada COPS-GT, en donde se introduce una función denominada get_trans para obtener una vista coherente de varias claves sin producir bloqueos. Las pruebas muestran que COPS finaliza las operaciones en menos de un milisegundo, proporciona un rendimiento similar al de otros sistemas cuando se utiliza un servidor por centro de datos y escala bien a medida que aumentamos el número de servidores en cada centro. También muestra que UPM. Máster en Ciencias y Tecnologı́as de la Computación. 22.

(34) CAPÍTULO 2. ESTADO DEL ARTE. COPS-GT proporciona latencia, rendimiento y escalado similares a COPS para cargas de trabajo comunes. Una de las desventajas de este sistema es el throughput causado por los metadatos de las dependencias causales que acompañan a cada mensaje y la validación de las dependencias que se debe realizar en cada escritura.. 2.3.6.. Dynamo. Dynamo (DeCandia y col., 2007) es un sistema de almacenamiento clave-valor altamente disponible utilizado por algunos servicios de Amazon. Para alcanzar alta disponibilidad, Dynamo sacrifica la coherencia de datos bajo ciertos circunstancias de fallo. El almacenamiento está basado en una tabla hash distribuida que implementa coherencia eventual. Dymamo replica los datos en N nodos. Las operaciones de escritura y lectura se realiza sobre un número de replicas que representa la mayorı́a (técnicas de quórum). Cada uno de los nodos implementan coherencia eventual. El tamaño del quórum para las operaciones de lectura y escritura pueden ser configurados independientemente por las aplicaciones para ofrecer diferentes niveles de disponibilidad y coherencia. Si se requiere que el sistema sea altamente disponible, el valor de quórum para las escrituras y lecturas debe ser bajo. Mientras que, si se requiere altos niveles de coherencia, los valores de quórum deben ser altos. A diferencia de otros almacenes de datos, Dynamo fue concebido como un sistema altamente disponible (para brindar experiencia always-on al usuario). Esto puede ocasionar que múltiples escrituras sobre una misma clave se realicen en múltiples replicas. Este conflicto de escrituras debe ser manejado ya sea de forma automática o por las aplicaciones.. 2.3.7.. Google Spanner. Spanner (Corbett y col., 2012) es una base de datos escalable, distribuida globalmente, diseñada, construida e implementada en Google. En el nivel más alto de abstracción, es un sistema que fragmenta los datos en muchos conjuntos de máquinas de estado Paxos (Lamport, 1998) en centros de datos diseminados por todo el mundo. El sistema proporciona transacciones linearizables mediante el uso de marcas de tiempo real que garantizan el orden total de las operaciones. Estas marcas de tiempo se basan en lı́mites de incertidumbre y son asignadas por un servicio llamado TrueTime, que hace uso de GPS y relojes atómicos como referencia. El sistema ofrece tres tipos de operaciones a los clientes: read-write transactions, readUPM. Máster en Ciencias y Tecnologı́as de la Computación. 23.

(35) CAPÍTULO 2. ESTADO DEL ARTE. only transactions y non-bloking reads. Las read-write transactions están serializadas en una réplica lı́der (lı́der de Paxos) y requieren un control de concurrencia pesimista. Las read-only transactions tienen un rendimiento similar a las transacciones en sistemas que ofrecen aislamiento de snapshot y se pueden ejecutar utilizando mecanismos sin bloqueo. Finalmente, non-bloking reads permite que los clientes obtengan un snapshot de la base de datos.. UPM. Máster en Ciencias y Tecnologı́as de la Computación. 24.

(36) Capı́tulo 3. Modelo de Coherencia Per-Key Causal En este capı́tulo se define formalmente un nuevo modelo denominado Per-key Causal, como una variante al modelo causal con una semántica más permisiva. Mantiene la relación de orden causal para operaciones de lectura, cuyos valores hayan sido escritos previamente. Pero, relaja el orden de las operaciones de escritura sobre variables diferentes, que no estén relacionadas causalmente, incluso, aunque estas operaciones hayan sido invocadas por el mismo proceso. Considérese el cronograma de la Figura 3.1a, las operaciones de lectura r1 (x)a y r2 (x)a establecen causalidad potencial entre las operaciones de escritura w1 (x)a, w1 (z)c y w2 (y)b. Mientras que, en la Figura 3.1b, al no existir las operaciones de lectura, el orden de las operaciones de escritura se pueden intercambiar.. (a) Operaciones de escritura relacionadas por operaciones de lectura intermedias.. (b) Operaciones de escritura no relacionadas.. Figura 3.1: Relación entre operaciones de escritura.. Adicional a lo anterior, se puso especial atención al Modelo Per-Key Sequential (Goodman, 1989) y la implementación de PNUTS (Cooper y col., 2008). Puesto que, resulta interesante 25.

(37) CAPÍTULO 3. MODELO DE COHERENCIA PER-KEY CAUSAL. ver como se establece un orden total sobre las operaciones de escritura para cada variable, por separado. A partir de estas dos ideas, se propone este nuevo modelo. A continuación se muestran las propiedades del modelo, su definición y ejemplos.. 3.1.. Definiciones. En esta sección se establecen conceptos previos para definir el nuevo modelo de coherencia. La notación es la misma que la utilizada en la Sección 2.2. Se define un sistema S constituido por un conjunto finito de procesos Π = {p1 , p2 , ..., pn } que interactuan a través de una memoria compartida con un conjunto finito de localidades de memoria definidos como variables. Los procesos acceden a las variables a través de operaciones de lectura y escritura. Una operación de escritura denotada como wp (x)v se interpretará como la escritura del proceso p sobre la variable x con el valor v. Una operación de lectura denotada como rp (x)v retornará el valor v de la variable x para el proceso p que realiza la lectura. Siempre que el proceso que realice estas operaciones no sea de particular importancia, se indica como w(x)v y r(x)v. A menos que se establezca lo contrario, el valor inicial de las variables es 0. Se denota como α al conjunto de operaciones de escritura y lectura obtenidas de una ejecución R dentro del sistema S. Se utiliza op → op0 para denotar que op precede a op0 en una secuencia de operaciones.. 3.1.1.. Orden de proceso sobre una variable. Permite establecer el orden de las operaciones que emite un proceso sobre la misma variable. Dadas dos operaciones op y op0 que pertenecen al conjunto α. Se dice que op precede a op0 en orden de proceso sobre una variable, denotado op ≺p op0 si cumplen lo siguiente: 1. Si op y op0 son operaciones del mismo proceso sobre la misma variable. 2. op es emitida antes que op0 . Ejemplo 3.1. Considere α = {w2 (y)1, w1 (x)2, w1 (y)5, r2 (y)5, w1 (x)3, w2 (y)9} como la ejecución descrita por el cronograma de la Figura 3.2. Para el proceso p1 , el orden de proceso sobre la variable x es w1 (x)2 ≺p w1 (x)3, y el orden de proceso sobre la variable y está compuesta por una sola operación, w1 (y)5. Mientras que, para el proceso p2 el orden de proceso para y es w2 (y)1 ≺p r2 (y)5 ≺p w2 (y)9.. UPM. Máster en Ciencias y Tecnologı́as de la Computación. 26.

(38) CAPÍTULO 3. MODELO DE COHERENCIA PER-KEY CAUSAL. Figura 3.2: Orden de proceso sobre una variable.. 3.1.2.. Orden de lectura de una variable. Establece la relación que existe entre una operación de lectura y una operación de escritura previa sobre una variable. Si una operación de lectura reporta un valor v, este valor debió ser escrito previamente. Dadas dos operaciones op y op0 que pertenecen al conjunto α. Se dice que op precede a op0 en orden de lectura de una variable, denotado op ≺ op0 si cumplen lo siguiente: 1. Si op = w(x)v y op0 = r(x)v Ejemplo 3.2. Considere α = {w1 (x)2, r1 (x)2, w2 (y)3, r2 (x)2} como la ejecución descrita por el cronograma de la Figura 3.3. Las operaciones de lectura para la variable x se encuentran ordenadas de la siguiente manera: w1 (x)2 ≺ r1 (x)2, y w1 (x)2 ≺ r2 (x)2.. Figura 3.3: Orden de lectura de una variable.. 3.1.3.. Orden de lectura previa. Esta relación se establece por medio de una operación de lectura sobre una variable x, que antecede a otra operación de escritura sobre una variable y. Ambas operaciones deben ser emitidas por el mismo proceso. Esta relación de orden, junto al orden de lectura de una variable, permite establecer una relación de orden causal entre dos operaciones de escritura sobre variables diferentes. Dadas dos operaciones op y op0 que pertenecen al conjunto α. Se dice que op precede a op0 en orden de lectura previa, denotado op ≺pr op0 si cumplen lo siguiente: 1. Si op y op0 son operaciones del mismo proceso. UPM. Máster en Ciencias y Tecnologı́as de la Computación. 27.

(39) CAPÍTULO 3. MODELO DE COHERENCIA PER-KEY CAUSAL. 2. op = rp (x)v y op0 = wp (y)v 0 . x 6= y. 3. op es emitida antes que op0 . Ejemplo 3.3. Considere α = {w1 (x)2, r1 (x)2, w1 (z)5, r2 (x)2, w2 (y)3} como la ejecución descrita por el cronograma de la Figura 3.4. Existen dos relaciones en orden de lectura previa: r1 (x)2 ≺pr w1 (z)5 y r2 (x)2 ≺pr w2 (y)3.. Figura 3.4: Orden de lectura previa.. 3.2.. Coherencia Per-Key Causal. El modelo Per-Key Causal establece un orden parcial de las operaciones de lectura y escritura a través del cierre transitivo de la unión entre el orden de proceso sobre una variable, orden de lectura de una variable y el orden de lectura previa. La relación de orden per-key causal, denotada como ≺kc , entre dos operaciones op y op0 ∈ α existe, si y solo si una de las siguientes condiciones se cumple: 1. Orden de proceso sobre una variable (op ≺p op0 ): Si una operación op es invocada por el proceso p antes que otra operación op0 sobre la misma variable x. 2. Orden de lectura de una variable (op ≺ op0 ): Si op = w(x)v y op0 = r(x)v. 3. Orden de lectura previa (op ≺pr op0 ): Si una operación op = rp (x)v es invocada por el proceso p antes que otra operación op0 = wp (y)v 0 y x 6= y. 4. Cierre transitivo: ∃ op00 : op ≺kc op00 ≺kc op0 Dado que, el modelo per-key causal establece un orden parcial de las operaciones sobre α, es necesario analizar las vistas por separado para cada proceso. Para una ejecución R, sea αp el subconjunto de operaciones de α producidas en R tal que se elimina de α todas las operaciones de lectura generadas por un proceso distinto de p. Vista Per-Key Causal (βp ). Una ordenación de todas las operaciones de αp que pre-. serve ≺kc . UPM. Máster en Ciencias y Tecnologı́as de la Computación. 28.

(40) CAPÍTULO 3. MODELO DE COHERENCIA PER-KEY CAUSAL. Vista Per-Key Causal legal Una βp es legal si ∀r(x)v ∈ αp , ∃w(x)v ∈ αp : w(x)v → r(x)v y @w(x)u ∈ αp : w(x)v → w(x)u → r(x)v en βp . Distintos procesos pueden tener distintas vistas per-key causal legales, ya que αp y αq son diferentes. Coherencia Per-Key Causal. Un sistema es per-key causal si para toda ejecución R. de S existe una βp legal para todo proceso p. Ejemplo 3.4. Considere α = {w1 (x)2, w1 (y)5, r2 (y)5, r2 (x)0} como ejecución de la Figura 3.5. Entre w1 (x)2 y w1 (y)5 no existe ninguna relación de orden. Mientras que, entre w1 (y)5 ≺ r2 (y)5 existe una relación por orden de lectura de una variable. Una posible vista para el proceso p1 es β1 = w1 (x)2 w1 (y)5. Otra posible vista es β10 = w1 (y)5 w1 (x)2, puesto que ambas operaciones son concurrentes entre si. Para el proceso p2 , se tiene β2 = w1 (y)5 r2 (y)5 r2 (x)0 w1 (x)2.. Figura 3.5: Ejecución de un sistema con coherencia per-key causal Tanto β1 , como β10 y β2 son vistas per-key causal legales. Puesto que ∀p ∃βp legal, entonces R es una ejecución per-key causal. Ejemplo 3.5. Considere α = {w1 (x)2, r1 (x)2, w1 (y)5, r2 (y)5, r2 (x)0} como la ejecución de la Figura 3.6. Existen las siguientes relaciones: w1 (x)2 ≺ r1 (x)2, r1 (x)2 ≺pr w1 (y)5, w1 (y)5 ≺ r2 (y)5 y w1 (x)2 ≺ r2 (x)2 . Por transitividad, se tiene w1 (x)2 → w1 (y)5 y w1 (x)2 → r2 (y)5. Continuando con el análisis de las vistas, en el proceso p1 se obtiene β1 = w1 (x)2 r1 (x)2 w1 (y)5. Mientras que, para el proceso p2 se obtiene β2 = w1 (x)2 w1 (y)5 r2 (y)5 r2 (x)2.. (a) Relaciones de orden ≺kc para α1 .. (b) Relaciones de orden ≺kc para α2 .. Figura 3.6: Ejecución de un sistema con coherencia per-key causal y relaciones causales. UPM. Máster en Ciencias y Tecnologı́as de la Computación. 29.

(41) CAPÍTULO 3. MODELO DE COHERENCIA PER-KEY CAUSAL. Tanto β1 como β2 son vistas per-key causal legales. Puesto que ∀p ∃βp legal, entonces R es una ejecución per-key causal. Ejemplo 3.6. Considere α = {w1 (x)2, w1 (y)1, r1 (x)5, w2 (x)5, r2 (x)2, r2 (y)1} como la ejecución de la Figura 3.7. Existen las siguientes relaciones: w1 (x)2 ≺p r1 (x)5, w2 (x)5 ≺ r1 (x)5, w2 (x)5 ≺p r2 (x)2, w1 (x)2 ≺ r2 (x)2 y w1 (y)1 ≺ r2 (y)1. Las siguientes operaciones de escritura son concurrentes: w1 (x)2, w2 (x)5 y w1 (y)1, y por lo tanto, estas operaciones pueden aparecer en diferente orden dentro de las vistas de cada proceso. Para el proceso p1 se tiene β1 = w1 (x)2 w1 (y)1 w2 (x)5 r1 (x)5. Otra posible vista es β10 = w1 (x)2 w2 (x)5 r1 (x)5 w1 (y)1. Para el proceso p2 se tiene β2 = w2 (x)5 w1 (x)2 r2 (x)2 w1 (y)1 r2 (y)1. Otra vista es β20 = w1 (y)1 w2 (x)5 w1 (x)2 r2 (x)2 r2 (y)1.. (a) Relaciones de orden ≺kc para α1 .. (b) Relaciones de orden ≺kc para α2 .. Figura 3.7: Ejecución de un sistema con coherencia per-key causal y operaciones concurrentes Tanto β1 como β10 , β2 y β20 son vistas per-key causal legales. Puesto que ∀p ∃βp legal, entonces R es una ejecución per-key causal.. UPM. Máster en Ciencias y Tecnologı́as de la Computación. 30.

(42) Capı́tulo 4. Algoritmo Per-Key Causal En este capı́tulo se presenta el algoritmo que implementa el modelo de coherencia per-key causal. A continuación se detalla el modelo del sistema, los detalles de la implementación, las estructuras de datos y los procedimientos que conforman el algoritmo. En la parte final, se muestran varios ejemplos que muestran su funcionamiento. El modelo del sistema está basado en los trabajos de (Baldoni, Milani y Piergiovanni, 2004) y (Jiménez, Fernández y Cholvi, 2008). Sea Π = {p1 , p2 , . . . , pn } un conjunto finito de procesos, cada uno identificado de forma única por un numero natural entre 1 y n. Los procesos no fallan. Sea M = {x1 , x2 , . . . , xm } un conjunto finito de variables, cada uno identificado de forma única por un número natural entre 1 y m. El conjunto M es la memoria compartida. Los procesos interactúan con la memoria a través de operaciones de lectura y escritura. Una operación de escritura ejecutada por el proceso pi , denotada como wi (xh )v, almacena el valor v sobre la variable xh . Una operación de lectura ejecutada por el proceso pi , denotada como ri (xh )v, retornará a pi el valor v almacenado en la variable xh . El valor inicial de cada variable es ⊥. El algoritmo utiliza replicación y propagación a través de un subsistema de intercambio de mensajes fiable. El canal de comunicación no es FIFO. Se asume que cada proceso mantiene una copia local del conjunto M . Cada proceso administra un conjunto de variables y es responsable de definir un orden FCFS de las operaciones de escritura sobre las variables, similar a PNUTS (Cooper y col., 2008). Cada una de las variables tiene asociada un número monótono creciente sin huecos denominado versión. La versión se incrementa cada vez que se realiza una operación de escritura sobre la variable. Este número inicia con valor cero. Una operación de lectura ejecutada por el proceso pi se aplica sobre las variables locales del proceso. Mientras que, una operación de escritura emitida por un proceso pi es enviada al proceso que administra. 31.

(43) CAPÍTULO 4. ALGORITMO PER-KEY CAUSAL. la variable que escribe en la variable y la propaga al resto de procesos. Cada operación de escritura lleva adjunta una lista de dependencias, similar a COPS (Lloyd y col., 2011), que se deben satisfacer antes aplicar los cambios sobre las variables. Para generar la lista de dependencias, se dispone de un log en cada proceso que permite obtener las operaciones previas, tanto de lectura como de escritura, que se han realizado localmente.. 4.1.. Estructuras de Datos. Cada proceso pi maneja tres estructuras de datos. La primera estructura es la memoria local del proceso que permite almacenar una copia local de las variables. La segunda estructura es un log local que permite registrar las operaciones de lectura y escritura que se realizan sobre el proceso. Y la tercera estructura permite, a los procesos dueños de las variables, llevar un orden FIFO sobre operaciones de escritura que ejecuta un proceso, sobre la misma variable.. 4.1.1.. Memoria. El array M [1 . . . m] contiene la copia local de las variables que conforman la memoria compartida. Cada posición del array representa a una variable xh y contiene una tupla compuesta por hv, vr, ow, wn, pwi donde: v (value) es el valor de la variable, vr (version) el número de versión de la variable, ow (owner) es el número de identificador del proceso que administra la variable, wn (writing number) indica el número de escrituras solicitadas al proceso que administra la variable. Este número sirve para establecer un orden FIFO sobre las operaciones de escritura que ha realizado un proceso pi sobre xh . Finalmente, pw (pending writings) indica el número de escrituras a completar por el proceso que administra la variable xh .. Figura 4.1: Representación del array utilizado para almacenar la copia local de las variables. UPM. Máster en Ciencias y Tecnologı́as de la Computación. 32.

Referencias

Documento similar