Accesos directos a las distintas zonas del curso

Ir a los contenidos

Ir a menú navegación principal

Ir a menú pie de página

COMPUTACIÓN DISTRIBUIDA EN JAVA

Curso 2016/2017 / Cod.31102079

COMPUTACIÓN DISTRIBUIDA EN JAVA

CONTEXTUALIZACIÓN

La diversificación de los recursos de computación en el momento actual es un hecho que traspasa los límites de la computación tradicional, basada en potentes y caros computadores. Estos recursos se encuentran distribuidos a lo largo de redes de comunicación en diferentes localizaciones, listos para ser usados en diferentes ámbitos. Sin embargo, desde el punto de vista de la programación, la accesibilidad a los recursos implica un conjunto de reglas de acceso que permita de manera transparente el uso de dichos recursos. De esta manera surge de manera natural el concepto de middleware (capa de servicios) que proporciona un conjunto de servicios a los programadores que les permite diseñar y construir aplicaciones software distribuidas en diferentes medios de comunicación, principalmente redes. Esta capa de servicios puede ser muy compleja o casi inexistente, dependiendo del tipo de paradigma de computación distribuida empleado en la construcción del software.

Los middlewares de computación distribuida basados en objetos de servicio más conocidos son CORBA (Common Object Request Broker Agent, definido por el OMG) y Java RMI (Remote Method Invocation, de Oracle). CORBA se caracteriza por su independencia de lenguaje y plataforma, pero a la vez por su complejidad de implementación. Java RMI, por el contrario, es más simple pero está limitado al mundo Java, lo que hace que sea una solución más limitada.

Para paliar los problemas anteriores existen otras tecnologías de computación distribuida como la arquitectura SOA (Service Oriented Architecture) que pretende estandarizar las normas de funcionamiento para que la transparencia de ubicación sea completa (independiente de lenguaje de programación y/o sistema operativo) y la comunicación se realice mediante el estándar XML bajo distintas normas (SOAP, WSDL, UDDI). También destaca la mas reciente y actual conocida como Cloud Computing (Computación en la nube) la cual esta produciendo una transición de un modelo tradicional en el que los datos y las aplicaciones de las organizaciones y empresas eran de su propiedad (estaban situadas en sus servidores y centros de datos), a un modelo nube donde sus aplicaciones y datos se encuentran en unas nuevas plataformas compartidas que son ofrecidas por grandes proveedores de servicios como Google, IBM, Dell Telefónica, etc.

Esta asignatura pretende centrarse en los conocimientos y mecanismos necesarios para abordar una aproximación profesional al diseño e implementación de soluciones software en el ámbito de la computación distribuida, presentando las bases y conceptos necesarios para usar la terminología adecuada en los diferentes paradigmas existentes.

En un primer módulo se realiza una presentación de los diferentes middlewares, CORBA y Java RMI, incidiendo en este último y presentando también sus antecedentes (sockets y RPC). En el módulo II se realizará un estudio sobre la arquitectura SOA como metodología de diseño software y en los módulos software conocidos como servicios Web que proporcionan las funciones. Para ello se estudiarán el lenguaje de descripción de servicios Web (WSDL), el protocolo SOAP para describir la comunicación y el API para diseños de modelos Web (REST) entre otras tecnologías.

El último módulo del curso está dedicado a la computación en la nube y a su definición de modelo de servicios, basado en el acceso bajo demanda a un pool de recursos configurables por computación (redes, servidores, almacenamiento, etc.), los cuales se proporcionan rápidamente con un mínimo esfuerzo de gestión por parte del proveedor de servicios. Además, se revisarán algunas de las plataformas más destacadas de computación en la nube. Ejemplos de estas plataformas de servicios son: Amazon (AWS, S3, etc.), Google App Engine, Microsoft Azure, etc.

La distribución temporal de la asignatura se ha adecuado de forma que se premia el componente práctico. Para ello se propone la realización de varias actividades que complementan de manera concreta diferentes áreas del temario de la asignatura. En concreto, para cada módulo de la asignatura, se desarrollará un conjunto de preguntas de evaluación que se elaborarán en la propia plataforma de formación y que permitirá comprobar la efectividad del aprendizaje. Junto a los cuestionarios se fomentará el uso de los foros de discusión sobre los contenidos teóricos, de forma que promueva colaborativamente la generación de preguntas frecuentes y debates interesantes sobre diferentes aspectos teóricos. Adicionalmente se han programado varias actividades prácticas (una por cada módulo temático) que pretenden reforzar el aprendizaje de las diferentes tecnologías de computación distribuida.

De manera general de las competencias definidas para el módulo VI del postgrado, la asignatura cubre las siguientes:

  • Ser capaz de desarrollar aplicaciones distribuidas sobre el lenguaje de programación Java.
  • Ser capaz de programar sobre redes de comunicaciones mediante el uso de sockets.
  • Ser capaz de diseñar aplicaciones multicapa basadas principalmente en el patrón MVC.
  • Poseer y comprender conocimientos que aporten una base u oportunidad de ser originales en el desarrollo y/o aplicación de ideas, a menudo en un contexto de investigación.
  • Que los estudiantes posean las habilidades de aprendizaje que les permitan continuar estudiando de un modo que habrá de ser en gran medida autodirigido o autónomo.
  • Comprender la estructura de los sistemas de información y comunicaciones actuales.
  • Conocer y comprender las distintas tecnologías existentes para el diseño, despliegue, y mantenimiento de sistemas informáticos.
  • Ser capaz de comprender y de explicar conceptos complejos.

De forma particular, se pueden formular las siguientes competencias profesionales particulares que se asumen en esta asignatura y que el alumno deberá adquirir al cursar la misma:

  • Adquirir conocimientos generales sobre la computación distribuida, su historia y los paradigmas de computación existentes.
  • Ser capaz de comprender los beneficios y desventajas de usar las tecnologías de computación distribuida y su correcta aplicación en los proyectos de desarrollo.
  • Discernir las diferentes clasificaciones del componente servidor en el paradigma cliente-servidor, distinguiendo servidores con o sin estado u orientados a conexión.
  • Adquirir conocimientos sobre objetos distribuidos y las diferentes alternativas de uso de dichos objetos: procedimientos de llamada remota (RPC) o invocación de métodos remotos (RMI).
  • Ser capaz de utilizar el middleware Java RMI para la elaboración de aplicaciones distribuidas basadas en tecnología Java y realizar proyectos con características profesionales.
  • Reconocer una arquitectura SOA y ser capaz de especificar e implementar un servicio Web simple que emplee las tecnologías SOAP, WSDL y UDDI.
  • Adquirir conocimientos sobre la arquitectura de servicios REST y diseñar servicios Web siguiendo sus patrones.
  • Adquirir conocimientos sobre la computación en la nube y su modelo de servicios. Así como, sobre los diferentes modelos de computación en la nube: infraestructura como servicio, plataforma como servicio y software como servicio.
  • Reconocer los múltiples métodos de desarrollar aplicaciones distribuidas y seleccionar la mejor opción de rendimiento global.
  • Conocer y utilizar herramientas de creación y gestión de la información.
  • Analizar las distintas tecnologías existentes para el desarrollo de sistemas informáticos en el contexto de la sociedad del conocimiento actual.