Pontificia Universidad Javeriana Departamento de Ingeniería de Sistemas Proyecto Final 1. Objetivos El objetivo del proyecto final consiste en implementar un manejador de tuplas distribuido, al que llamaremos MTUD, con soporte transparente y consistente de réplicas, persistencia de los datos y tolerante a fallas. Algunos ejemplos de sistemas distribuidos que trabajan con tuplas son Linda[1] y sus derivados TSpaces[2] y JavaSpaces (http://en.wikibooks.org/wiki/Java_Programming/JavaSpaces). Para garantizar la integridad de las tuplas se deberá implementar el Protocolo Consumación Atómica en dos Fases. La comunicación entre los procesos se realizará usando sockets y RMI. 2. Definiciones Una TUPLA es una secuencia ordenada de datos con tipo que tiene la siguiente estructura: Ti = (size, x0, x2, ….xn) Donde el primer parámetro, size, indica el número de elementos de la tupla. Los xi…xn son los elementos que componen la tupla, siendo x0 la clave (de tipo entero) y cada Xi (i >= 1) una cadena de caracteres. Algunos ejemplos de tuplas son: T1 = (3, 56788, “Mary”, “ANN”) T2 = (4, 334189, “PEP”, “Sanders”, “Quinn”) 3. Características de MTUD MTUD estará formado por tres tipos diferentes de procesos: el Coordinador, los Manejadores de Réplicas y los Clientes. Sólo existe un proceso Coordinador, pero se pueden crear varios Manejadores de Réplicas en las distintas máquinas en donde se instale MTUD. La información, constituída por las tuplas y sus réplicas, está distribuida en varias máquinas. Los Clientes manipulan los datos comunicándose con el proceso Coordinador. Los estudiantes deberán proveer también una librería para el manejo de la durabilidad o persistencia de los datos. A continuación se explican los detalles del sistema: 3.1 Durabilidad Deberán implementar una librería para la manipulación de tuplas que garantice su durabilidad, incluso ante la ocurrencia de fallas de los procesos. Es decir si un proceso termina y se restaura de nuevo, todos los valores que fueron insertados deben poder Pontificia Universidad Javeriana Departamento de Ingeniería de Sistemas Proyecto Final recuperarse usando la operación “consultar”. De la misma forma cualquier valor que haya sido eliminado, debe quedar eliminado después de la falla. Los estudiantes deben decidir si las operaciones insertar, borrar y consultar retornan códigos de error en caso de no haber podido realizar la operación solicitada correctamente. La librería debe proveer tres métodos: insertar(tupla)= inserta la tupla que recibe como parámetro dentro del espacio de tuplas de la máquina local. borrar(clave): borra localmente cualquier tupla que tenga como clave el valor que se recibe como parámetro. consultar(clave): recupera la tupla asociada con la clave que se recibe como parámetro. El código de la librería se puede programar completamente o se puede utilizar alguna librería ya existente, como por ejemplo Sqlite. SQLite es un sistema de gestión de bases de datos que implementa las propiedades ACID. No es un proceso independiente, como otros gestores de BD sino que es una librería que se enlaza con el programa fuente. 3.2 Procesos del Manejador de Tuplas y Protocolo de Consumación de Dos Fases El Coordinador ofrece a los clientes una interfaz RMI que contiene los métodos: Insertar, Borrar, Consultar, para insertar y borrar tuplas en/del sistema y consultar la existencia de una determinada tupla dada su clave. También ofrece el método Estructura que retorna información sobre MTUD y la información que almacena: máquinas donde está instalado, tipo(s) de proceso(s) ejecutándose en cada máquina, cuáles son las tuplas almacenadas y dónde se encuentran sus réplicas. Cuando el Coordinador recibe una solicitud para insertar o borrar tuplas, debe aplicar un Protocolo de Consumación de dos Fases, a fin de que la información quede consistente en todas las réplicas. Cada tupla debe tener al menos una réplica dentro del sistema. Ante una operación de consulta, el Coordinador selecciona una réplica en forma aleatoria en todo el sistema, a fin de satisfacer el requerimiento. El Coordinador debe ser un proceso concurrente, es decir múltiples clientes deben poder conectarse en forma simultánea para realizar varias operaciones sobre el sistema de tuplas. Los Manejadores de Réplica están a cargo de una o varias réplicas, pertenecientes a una o varias tuplas, que residen en un computador. Estos procesos se comunican con el Coordinador a través de sockets para aplicar el Protocolo de Consumación de dos Fases. Los procesos réplica también deben ser concurrentes. El esquema de control de concurrencia a implementar será el siguiente: Si dos operaciones de manipulación de tuplas llegan en forma concurrente la primera de ellas tendrá éxito, mientras la segunda fallará. Pontificia Universidad Javeriana Departamento de Ingeniería de Sistemas Proyecto Final El sistema debe ser tolerante a fallas, es decir si alguno de los procesos falla durante la aplicación del protocolo de consumación de dos fases, todo debe funcionar en forma correcta. Después de la falla, los componentes deben recuperarse y proceder adecuadamente. Los Clientes: Son procesos que se conectan al proceso Coordinador y pueden realizar un conjunto de operaciones para crear, borrar o consultar tuplas. También pueden solicitar información sobre cómo es el almacenamiento de las tuplas y sus réplicas invocando el método Estructura. Debe ser posible ejecutar múltiples clientes en forma simultánea. Los clientes también deben poder leer un conjunto de peticiones y escribir los resultados de las peticiones desde/hacia archivos (si el usuario lo desea); los nombres de los archivos se recibirán como parámetros de la invocación. El profesor, dará el día de la sustentación el contenido de los archivos de prueba. Ejemplos de archivos: Archivo Cliente 1 Insertar(2, 5622788, “Jussara”) Insertar(3, 1123, “Mary”, “ANN”) Insertar(3, 23456, “Ignacio”, “Cabrera”) Insertar(5, 2226, “Paul”, “Michael”, “Sanders”, “Q”) Estructura() Borrar(1123) Consultar(2226) Estructura() Archivo Cliente 2 Insertar(3, 1234578, “Danny”, “Luca”) Insertar(2, 222, “Cecil”) Insertar(4, 23456, “Roger”, “Peter”, “Deker”) Estructura() 4. Equipos de Trabajo El Proyecto se realizará en grupos de máximo tres personas. 5. Entrega y condiciones La entrega se realizará el día viernes de la semana 17 en un CD y la sustentación será el mismo día (viernes) de 9:00 a 11:00 am. Para la sustentación los estudiantes deben mostrar al menos la siguiente configuración: Pontificia Universidad Javeriana Departamento de Ingeniería de Sistemas Proyecto Final Al menos 3 máquinas: un Coordinador y un Manejador de Réplica en una Máquina, y 2 Manejadores de Réplica en el resto. Tuplas con una réplica en cada uno de las máquinas. Más de dos clientes solicitando peticiones al Coordinador. Fallas de un Manejador de Réplica: para simular una falla los procesos Manejadores de Réplica recibirán un entero, como parámetro de invocación, que indicará el tiempo, a partir del inicio del proceso, en el que se producirá la falla. Si el valor del parámetro es 0, el proceso no fallará. Si el valor es n, el proceso fallará y terminará n segundos después de su inicio. Después de la falla, el proceso se debe restaurar manualmente desde la cónsola. Dependiendo del orden de entrega se hará la sustentación. Además del código se debe adicionar un documento de no más de 5 páginas con la descripción del software desarrollado. 6. Referencias [1] Carriero, N y Gelernter, D (1989). Linda in Context. Comms. ACM, vol 32, no 4, pp 444-58. [2] Wyckoff, P , McLaughry, S Lehmen, T y Ford, D (1998). T spaces. IBM Systems Journal, vol 37, nro 3.