Esta asignatura revisa la teoría fundamental de los sistemas distribuidos y analiza las principales soluciones modernas en este campo. Empieza identificando los problemas asociados a compartir datos entre varias máquinas físicas, describiendo cómo se puede moldear un sistema distribuido, discutiendo las técnicas para sincronizar varios nodos comunicados por una red, estudiando qué técnicas se pueden utilizar para replicar datos, así como sus ventajas y desventajas, y termina analizando los sistemas distribuidos modernos altamente escalables.
Profesores Titulares
Profesores Docentes
- Conocimientos de programación orientada a objetos.
- Conocimiento del funcionamiento interno de un sistema operativo.
- Conocimientos de exclusión mutua y algoritmos.
La asignatura tiene los siguientes objetivos:
- Identificar las principales características de un sistema distribuido.
- Comprender un artículo científico sobre sistemas distribuidos.
- Asimilar las principales técnicas utilizadas en sistemas distribuidos.
- Comprender los algoritmos que conducen al diseño de sistemas distribuidos escalables.
- Introducción a los sistemas distribuidos y sus fundamentos.
- Arquitecturas de res compartido vs. memoria compartida: programación multihilo y aplicaciones distribuidas.
- Modelos y relojes: relojes lógicos, relojes de dependencia directa y relojes vectoriales.
- El problema de la exclusión mutua en arquitecturas distribuidas: algoritmo basado en tokens, algoritmo de horno de Lamport y algoritmo de Ricart y Agrawala.
- Primitivas y estrategias de comunicación: paso de mensajes y RPC, y gRPC y codificación binaria con buffers de protocolo.
- Técnicas de replicación de datos: replicación impaciente, replicación perezosa, copia primaria, actualización en todas partes y teorema CAP.
- Modelos de fallos: bizantino y bloqueo/paro.
- Tolerancia a fallos y políticas de recuperación: elección de líder - Raft
- Hashing consistente.
- Retos modernos - lectura de papel.
Ésta es una asignatura eminentemente práctica que combina contenidos teóricos y clases magistrales con ejercicios o microtareas destinadas a consolidar los conocimientos adquiridos por los estudiantes, por lo que la asignatura se imparte íntegramente en el laboratorio.
Todos los ejercicios propuestos, sin excepción, deben entregarse y aprobarse para poder aprobar la asignatura. La participación activa en las discusiones de clase y la respuesta a preguntas durante las clases magistrales contribuirán con un 5% a la nota final. La asistencia regular y la participación son esenciales para la superación de ese componente.
Si los ejercicios se entregan antes de la fecha del examen de la evaluación ordinaria y se superan las entrevistas correspondientes, no será necesario aprobar ningún examen. La nota final se calcula mediante la siguiente fórmula:
Nota final de la asignatura = 95% Media de ejercicios + 5% asistencia
En caso contrario, será necesario aprobar un examen final. Cuando todos los ejercicios estén aprobados y el examen tenga una puntuación igual o superior a 4, la nota final se calculará como:
Nota final de la asignatura = 55% Examen + 40% Media de ejercicios + 5% asistencia.
Se evaluarán los siguientes aspectos:
- Trabajos prácticos: La capacidad de diseñar sistemas distribuidos escalables y aplicar correctamente las principales técnicas utilizadas en arquitecturas distribuidas dentro de un entorno práctico de laboratorio.
- Lectura de papers: La capacidad de comprender y analizar un artículo científico sobre los retos modernos en sistemas distribuidos.
- Examen final: La asimilación y correcta identificación de las principales características, la teoría fundamental y los modelos de un sistema distribuido.
- Vijay K. Garg. 2007. Concurrent and Distributed Computing in Java. IEEE Press, Piscataway, NJ, USA.
- Patrick Hunt, Mahadev Konar, Flavio Paiva Junqueira, Benjamin Reed: ZooKeeper: Wait-free Coordination for Internet-scale Systems. USENIX Annual Technical Conference 2010.
- Fernando Pedone, Matthias Wiesmann, André Schiper, Bettina Kemme, Gustavo Alonso: Understanding Replication in Databases and Distributed Systems. ICDCS 2000: 464-474.
- Leslie Lamport: The Part-Time Parliament. ACM Trans. Comput. Syst. 16(2): 133-169 (1998).
- James C. Corbett et al.: Spanner: Google's Globally Distributed Database. ACM Trans. Comput. Syst. 31(3): 8 (2013).
- Giuseppe DeCandia et al.: Dynamo: Amazon's highly available key-value store. SOSP 2007: 205-220.
- Tom White: Hadoop The Definitive Guide: Storage and Analysis at Internet Scale (4. ed., revised & updated). O'Reilly 2015, ISBN 978-1-491-90163-2, pp. I-XXV, 1-727.
-