Guías Académicas

SISTEMAS DISTRIBUIDOS

SISTEMAS DISTRIBUIDOS

GRADO EN INGENIERÍA INFORMÁTICA

Curso 2023/2024

1. Datos de la asignatura

(Fecha última modificación: 07-06-23 13:57)
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
PA3
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,2,4
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. Sentido de la materia en el plan de estudios

Bloque formativo al que pertenece la materia.

Sistemas Operativos

Papel de la asignatura.

El alumno, en el último cuatrimestre del grado, tiene ya una destreza y conocimiento adecuados en el diseño y desarrollo de programas en entornos locales, así como las destrezas y conocimientos necesarios para comprender y manejar redes de ordenadores.

La asignatura de sistemas distribuidos complementa y aumenta dichos conocimientos, introduciendo los problemas que surgen al programar en entornos distribuidos, las soluciones algorítmicas a dichos problemas, y los recursos para su implementación en red.

Perfil profesional.

Los sistemas distribuidos se utilizan cada vez más, especialmente debido al auge de las redes, a la creciente demanda de capacidad de cálculo y al alcance de ciertos límites en el desarrollo de procesadores más potentes. Todo esto lleva a la necesidad del uso de múltiples ordenadores en paralelo y de la programación en un entorno web, lo cual implica el acceso distribuido a recursos. Empresas como Google, Amazon o GitHub tienen un alto componente de desarrollo de sistemas distribuidos, que además son la base de su éxito.

Esta asignatura proporcionará al alumno los conocimientos y destrezas necesarias para ocupar puestos profesionales que requieran la administración, desarrollo o explotación de sistemas distribuidos.

3. 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).

4. Objetivo de la asignatura

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.

 

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. Competencias a adquirir

Específicas.

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.

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.

 

7. Metodologías

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.

8. Previsión de Técnicas (Estrategias) Docentes

9. 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

10. Evaluación

Consideraciones generales.

Esta asignatura debe dar al alumno los conocimientos básicos para entender un sistema distribuido: su complejidad, los distintos problemas asociados (concurrencia, interbloqueo, tiempos físicos, escalabilidad, etc.), las soluciones algorítmicas a dichos problemas (sincronización, acuerdo, optimización, tiempos lógicos, etc.) y la aplicación de dichas soluciones teóricas en casos reales (limitaciones y particularidades de la red, comunicación distribuida, disparidad de equipos/sistemas, etc.)

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.

Instrumentos 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.

Recomendaciones para la recuperación.

Partes del temario teórico están íntimamente ligadas al desarrollo de las prácticas, pero en general es razonable poder aprobar la parte teórica sin aprobar la parte práctica o viceversa. Se recomienda por tanto guardar la nota obtenida en una de las partes para la recuperación de la otra.