Guías Académicas

SISTEMAS DISTRIBUIDOS

SISTEMAS DISTRIBUIDOS

GRADO EN INGENIERÍA INFORMÁTICA

Curso 2020/2021

1. Datos de la asignatura

(Fecha última modificación: 22-07-20 14:14)
Código
101132
Plan
ECTS
6.00
Carácter
OBLIGATORIA
Curso
4
Periodicidad
Segundo Semestre
Á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
Rodrigo Santamaría Vicente
Grupo/s
A (Teoría); PA
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 16:30 a 19:30
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.

·         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: definición y generaciones

·         Tema 4.- Servicios web: SOAP y REST

·         Tema 5.- Tiempo y estados globales: relojes físicos y lógicos

·         Tema 6.- Coordinación y acuerdo: exclusión mutua distribuida, algoritmos de elección, multidifusión y acuerdo

·         Tema 7.- Sistemas de archivos distribuidos: NFS y AFS

·         Tema 8.- Sistemas P2P: Napster, BitTorrent y middleware P2P

·         Tema 9.- Replicación: Servicios tolerantes a fallos y de alta disponibilidad

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

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 obligatoria

Sesión 6.-  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.

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.

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.

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

9. Recursos

Libros de consulta para el alumno.

El libro que seguiremos principalmente es el de Coulouris. Aunque aconsejamos la última versión (5ª, en inglés), las versiones anteriores contienen prácticamente todo el material teórico de la asignatura, y están disponibles en la biblioteca.

COULOURIS, G.; DOLLIMORE, J.; KINDBERG, T. (2011): “Distributed Systems. Concepts and design”. 5a edición. Addison Wesley.

COULOURIS, G.; DOLLIMORE, J.; KINDBERG, T. (2002): “Sistemas Distribuidos. Conceptos y diseño”. 3a edición. Addison Wesley.

BARBOSA, V.C. (1996): “An Introduction to Distributed Algorithms”. MIT Press.

CHOW, R. y JOHNSON, T. (1997): “Distributed Operating Systems & Algorithms”. Addison-Wesley. GOCINSKI, A. (1991): “Distributed Operating Systems. The Logical Design”. Addison-Wesley.

SINHA, P.K. (1997): “Distributed Operating Systems. Concepts and Design”. IEEE Computer Society Press.

TANENBAUM, A.S. (1995): “Sistemas Operativos Distribuidos”. Prentice Hall.

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

http://download.oracle.com/javase/8/docs/api documentación sobre las clases java , especialmente el paquete rmi para acceso a objetos distribuidos

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

https://jersey.java.net/documentation/latest/index.html documentación sobre Jersey

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: entre un 30% y un 60%* 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: entre un 40% y un 60%* 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: entre un 10% y un 20% de 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 (entre un 15% y un 30%) y en práctica (entre un 20% y un 30%) para superar la asignatura

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.

12. Adenda. Metodologías Docentes y Evaluación de Competencias

13. Adenda. Plan de Contingencia ante la situación de emergencia