Guías Académicas

SISTEMAS DISTRIBUIDOS

SISTEMAS DISTRIBUIDOS

GRADO EN INGENIERÍA INFORMÁTICA

Curso 2024/2025

1. Datos de la asignatura

(Fecha última modificación: 09-05-24 13:17)
Código
101132
Plan
ECTS
6.00
Carácter
OBLIGATORIA
Curso
4
Periodicidad
Segundo Semestre
Idioma
ESPAÑOL
Área
CIENCIA DE LA COMPUTACIÓN E INTELIGENCIA ARTIFICIAL
Departamento
Informática y Automática
Plataforma Virtual

Campus Virtual de la Universidad de Salamanca

Datos del profesorado

Profesor/Profesora
Pablo Chamoso Santos
Grupo/s
PB2
Centro
Fac. Ciencias
Departamento
Informática y Automática
Área
Ciencia de la Computación e Inteligencia Artific.
Despacho
Edificio Multiusos I+D+i, C/Espejo 2, 24.2
Horario de tutorías
-
URL Web
https://bisite.usal.es
E-mail
chamoso@usal.es
Teléfono
Ext. 6591
Coordinador/Coordinadora
Rodrigo Santamaría Vicente
Grupo/s
TA,TB; PA1,PA2,PB1
Centro
Fac. Ciencias
Departamento
Informática y Automática
Área
Ciencia de la Computación e Inteligencia Artific.
Despacho
Casa del Parque 1, C/ del Parque nº 1
Horario de tutorías
Martes, de 12:00 a 14:00
URL Web
http://vis.usal.es/rodrigo (Sistemas Distribuidos)
E-mail
rodri@usal.es
Teléfono
+34 923294500 (ext 1926)

2. Recomendaciones previas

Es recomendable tener afianzados los conocimientos teóricos alcanzados en Programación I, II y III, Redes de Computadores I y II, y Sistemas Operativos I y II, todas ellas asignaturas del Grado en Ingeniería Informática de la Universidad de Salamanca (o asignaturas equivalentes de otros grados o universidades)

Para la realización de las prácticas, es también recomendable una destreza en programación, especialmente en Java (obtenida en distintas asignaturas del grado, por ejemplo Programación III y/o Interfaces Gráficas) y en desarrollo multihilo (asignaturas Sistemas Operativos I y II).

3. Objetivos

GENERALES

Que el alumno llegue a comprender la problemática asociada a la implementación de sistemas distribuidos, los algoritmos existentes para su solución, y su utilización como herramientas de trabajo en un entorno de red real.

ESPECÍFICOS

Comprender conceptos básicos de sistemas distribuidos, especialmente: tiempos y estados de red, la coordinación entre procesos y el usos se servicios compartidos. Ser capaz de implementar dichos conceptos en programas reales dentro del entorno ofrecido por el laboratorio de prácticas.

 

4. Competencias a adquirir | Resultados de Aprendizaje

Específicas | Habilidades.

CE11: Conocimiento y aplicación de las características, funcionalidades y estructura de los Sistemas Distribuidos, las Redes de Computadores e Internet y diseñar e implementar aplicaciones basadas en ellas.

CE14: Conocimiento y aplicación de los principios fundamentales y técnicas básicas de la programación paralela, concurrente, distribuida y de tiempo real

CETI6: Capacidad de concebir sistemas, aplicaciones y servicios basados en tecnologías de red

Transversales | Competencias.

CT4: Capacidad de organizar y planificar

CT8: Habilidades de gestión de la información.

CT9: Resolución de problemas

CT10: Toma de decisiones

CT11: Capacidad crítica y autocrítica.

CT12: Trabajo en equipo.

CT13: Capacidad de trabajar en un equipo interdisciplinar.

CT16: Capacidad de aplicar los conocimientos en la práctica.

CT17: Habilidades de investigación.

CT18: Capacidad de aprender.

CT20: Capacidad de generar nuevas ideas.

CT21: Habilidad para trabajar de forma autónoma y cumplir plazos.

 

5. Contenidos

Teoría.

·      

Contenidos Teóricos

  • Tema 1.- Introducción a los sistemas distribuidos: conceptos, caracterización y desafíos
  • Tema 2.- Modelado de sistemas distribuidos: arquitecturas y fundamentos
  • Tema 3.- Middleware: marshalling, RPC y servicios web
  • Tema 4.- Tiempo y estados globales: relojes físicos y lógicos
  • Tema 5.- Coordinación y acuerdo: exclusión mutua distribuida, algoritmos de elección, multidifusión y acuerdo
  • Tema 6.- Sistemas de archivos distribuidos: NFS y AFS
  • Tema 7.- Sistemas P2P: Napster, BitTorrent y middleware P2P
  • Tema 8.- Replicación: Servicios tolerantes a fallos y de alta disponibilidad
  • Tema 9.- Registros distribuidos: blockchain y bitcoin
  • Tema 10.- Diseño de sistemas distribuidos: Google como caso de estudio
  • Seminario.- Debate: P2P, propiedad intelectual y difusión de la cultura
  • Seminario.- Sistemas de control de versiones: SVN y Git

 

Práctica.

Contenidos Prácticos

  • Sesión 1.- Introducción a Java (fase 0)
  • Sesión 2.- Programación multihilo en Java (fase 1)
  • Sesión 3.- REST en Java (fase 2)
  • Sesión 4.- Práctica obligatoria
  • Sesión 5.- Práctica opcional

6. Metodologías Docentes

La metodología a seguir cubre diferentes apartados.

Por un lado, mediante las sesiones de teoría se expondrán los fundamentos necesarios para entender las técnicas algorítmicas existentes para la resolución de problemas distribuidos básicos. Para cada problema, se expondrán sus características, se harán asunciones sobre el modelo de sistema, se explicarán las soluciones algorítmicas disponibles y se debatirá sobre sus ventajas y desventajas. Cada tema teórico se explicará en una sesión de dos horas, o dos sesiones de una hora, dependiendo del horario que se establezca (a excepción del tema 4, que se dará en dos sesiones de dos horas). En cada sesión se expondrán los aspectos y problemas fundamentales del tema, explicando los conceptos o métodos más complejos y atendiendo a las dudas de los alumnos. Es altamente recomendable que el alumno estudie, a menos superficialmente, el tema antes de la sesión correspondiente.

La metodología a seguir cubre diferentes apartados.

Por un lado, mediante las sesiones de teoría se expondrán los fundamentos necesarios para entender las técnicas algorítmicas existentes para la resolución de problemas distribuidos básicos. Para cada problema, se expondrán sus características, se harán asunciones sobre el modelo de sistema, se explicarán las soluciones algorítmicas disponibles y se debatirá sobre sus ventajas y desventajas. Cada tema teórico se explicará en una sesión de dos horas, o dos sesiones de una hora, dependiendo del horario que se establezca (a excepción del tema 4, que se dará en dos sesiones de dos horas). En cada sesión se expondrán los aspectos y problemas fundamentales del tema, explicando los conceptos o métodos más complejos y atendiendo a las dudas de los alumnos. Es altamente recomendable que el alumno estudie, a menos superficialmente, el tema antes de la sesión correspondiente.

 

Por otro lado, mediante las sesiones de práctica se estudiarán algunos de estos problemas en un entorno real, para llegar a comprender en toda su dimensión estos problemas y su resolución, así como las limitaciones y facilidades que nos impone el entorno de red y las técnicas de programación elegidas. De nuevo, cada sesión práctica corresponderá a dos horas de clases presenciales, en las que se expondrá el problema y se atenderán dudas. Asimismo, durante las distintas fases de la práctica, se debatirá sobre la fase anterior, para ver los problemas y dudas que han surgido y analizar las soluciones alcanzadas.

Por último, los seminarios servirán para exponer aspectos tangenciales a la asignatura, pero de especial relevancia por su actualidad o utilidad en el mundo profesional y/o académico. Estos seminarios pretender ser más participativos y abiertos que las clases magistrales, donde, debido a la complejidad de la materia, habrá que dedicar mucho tiempo a explicaciones de tipo teórico. Se han planeado dos seminarios, cada uno de una hora, pero su contenido puede estar sujeto a cambios, según las necesidades del alumnado. Cada seminario podrá ser acompañado de un debate evaluable.

Se fomentará el trabajo en equipo, de modo que las prácticas se realizarán siempre por parejas o grupos.

7. Distribución de las Metodologías Docentes

8. Recursos

Libros de consulta para el alumno.

Todo el material didáctico necesario se pondrá a disposición de los alumnos a través de la página web personal y de la plataforma Studium. Los libros básicos de consulta están a disposición del alumnado en la Biblioteca del Centro, en especial:

     Distributed Systems: Concepts and Desing (5ed.) Coulouris et al. Addison-Wesley, 2012.

Adicionalmente:

 - Distributed Systems (3ed). Steen and Tanenbaum, 2017. Disponible aquí:  https://www.distributed-systems.net/index.php/books/ds3/

Otras referencias bibliográficas, electrónicas o cualquier otro tipo de recurso.

Compilación de artículos científicos relacionados con la asignatura. Disponibles aquí: http://vis.usal.es/rodrigo/documentos/sisdis/papers/

- Documentación sobre la API de Java: http://download.oracle.com/javase/8/docs/api

- Tutoriales sobre concurrencia, hilos, sincronización e interbloqueo: http://download.oracle.com/javase/tutorial/essential/concurrency  

- Documentación sobre Jersey: https://eclipse-ee4j.github.io/jersey.github.io/documentation/latest/index.html

9. Evaluación

Criterios de evaluación.

Los criterios de evaluación se ponderarán en base a tres puntos principales:

  1. Realización de pruebas teóricas y examen: un 50%* de la calificación final. Para su superación se requerirá un conocimiento suficiente del funcionamiento de los sistemas distribuidos y de los algoritmos y técnicas básicas para su gestión, coordinación y explotación. Dicho conocimiento se obtiene a través del estudio del material teórico y las clases magistrales
  2. Defensa de prácticas, trabajos o proyectos:un 50%* de la calificación final. El conocimiento teórico nos da las bases para construir un sistema distribuido, pero la puesta en marcha de dicho sistema sólo es posible con la experiencia obtenida de la implementación práctica en un sistema real.
  3. Evaluación continua: un 10% adicional sobre la calificación final. Se evalúa de manera positiva la asistencia proactiva a las sesiones, la participación en foros y seminarios, el interés demostrado mediante dudas bien formuladas o compartición de puntos de vista, la capacidad de desarrollo autónomo sin el profesor, de trabajo en grupo  y de cumplir con los plazos establecidos. Igualmente todos estos aspectos no tenerse en cuenta o pueden evaluarse negativamente si no se evidencian en el día a día o se demuestra lo contrario.

*Es indispensable llegar al porcentaje medio en teoría y en práctica (un 25% en cada una) para superar la asignatura. En la parte práctica este límite puede ser un poco más bajo según las prácticas entregadas.

Sistemas de evaluación.

Los instrumentos para la evaluación dependen del criterio de evaluación:

  1. Pruebas de teoría: se realizará un único examen teórico, en papel, mediante una serie de preguntas a desarrollar, que será evaluado por el profesor, teniendo en cuenta los requisitos mínimos de conocimientos sobre sistemas distribuidos establecidos en el temario.
  2. Evaluación de prácticas: las prácticas se entregarán a través de Studium, en plazos bien determinados. La evaluación de las prácticas entregadas tendrá lugar en el laboratorio de informática, mediante el uso de varios ordenadores conectados en red. Se evaluará tanto la calidad teórica y de diseño del código fuente, como su defensa por parte del alumno y la corrección de su ejecución (siendo esta última requisito indispensable para aprobar la parte práctica). En particular se demandará una práctica obligatoria y una práctica opcional, así cómo ejercicios opcionales previos.
  3. Evaluación continua: Todos los valores evaluables serán considerados de la manera más objetiva posible, a partir de la percepción del profesor del cumplimiento de los criterios de evaluación continua (participación, debates, evolución personal, etc.).

Recomendaciones para la evaluación.

Dada la dificultad y diversidad de la casuística en la parte práctica, se recomienda establecer unos criterios mínimos de funcionamiento que deben darse para su superación.

Un aspecto muy importante de la formación de un ingeniero es la ética profesional. Por tanto, recomendamos fuertemente el suspenso automático de ambas partes si se detecta y demuestra la copia, total o parcial, en un ejercicio práctico o en el ejercicio teórico final.