Post on 09-Aug-2020
Técnicas Avanzadas de Middleware
Presentación del curso
Ponente
Agustín Santos Méndez● Experiencia laboral superior a 25 años.
– Proyectos de integración de sistemas complejos con Middleware.
● Profesor asociado en la Universidad Rey Juan Carlos (Madrid) desde 2002.– Imparte asignaturas de sistemas distribuidos y
programación, entre otras. ● Actualmente ingeniero investigador en Imdea
Networks.– Investigando en: redes sociales, sistemas distribuidos,
teoría de juegos, big data, data análisis.
Objetivos del Curso
● Introducir el concepto de Middleware ● Tipologías● Aplicaciones y mercado● Principios básicos
● Tendencias del Middleware● Middleware + Lenguaje de Programación =
Sistemas Distribuidos
● Técnicas actuales para la construcción de un Middleware
Objetivos del Curso
● El asistente al final del curso deberá:● Conocer el estado del arte de los principales
conceptos utilizados en los middleware modernos (basados en objetos remotos).
● Conocer (y utilizar) al menos dos de los principales middleware de la industria.
● Saber razonar sobre las características comunes a un gran subconjunto de middleware.
Conocimientos previos
● Este curso es de nivel avanzado para final de grado o de master
● Es recomendable disponer de cursos previos en:● Programación Orientada a Objetos● Lenguajes de programación● Sistemas distribuidos● Tecnologías web● Compiladores
Razones
● Construir sistemas distribuidos es muy habitual:– Ejemplos: Sistemas de control industrial, Aplicaciones
móviles, Big Data, Internet of Things, Aplicaciones Web, Integración de backoffice, etc.
● Pero construir un sistema distribuido es complejo:
– Problemas derivados de: comunicaciones, concurrencia, heterogeneidad, sistemas desacoplados, evolución tecnológica, cluster, etc.
● Análisis de Mercado: Software de Infraestructura de Aplicaciones y Middleware (AIM) 2011, Gartner: 19.300 millones dólares.
Middleware
● ¿Podemos hacer una aplicación cliente-servidor en 40 líneas de código?
● ¿En apenas unos pocos minutos?● Se puede hacer si disponemos del middleware
apropiado.● Y nosotros lo haremos durante el curso!!
Sistemas Distribuidos
● ¿Qué es un sistema distribuido?
“You know you have one when the crash of a computer you’ve never heard of stops you from getting any work done.” Leslie Lamport
● Algunas definiciones:● “A collection of (perhaps) heterogeneous nodes
connected by one or more interconnection networks which provides access to system-wide shared resources and services”.
● “A collection of independent computers that appears to its users as a single coherent system”.
Sistemas Distribuidos
● Múltiples ordenadores ● Nodos físicos diferentes, cada uno con su memoria,
CPU, etc.
● Interconectados● Mecanismos de comunicación usando una red
● Mantienen un estado común● El servicio distribuido que genera un estado
distribuido o replicado entre los nodos.
Concepto de Middleware
“ ....are services to facilitate the development and deployment of distributed applications in hete-rogeneous environments”
“The role of middleware is to ease the task of de-signing, programming and managing distributed applications by providing a simple, consistent and integrated distributed programming envi-ronment”
Más definiciones
● “.. layer of software above the operating syste-ms and the network substrate, but below the application”
● “.. higher level programming abstractions for developing the distributed application”
● “.. it masks the heterogeneity programmers of distributed applications have to deal with netwo-rk, OS, programming languages, etc.”
Por similaridad
● Un sistema operativo es “el software que hace que el hardware se pueda utilizar”
● El middleware es el software que hace posible programar un sistema distribuido.
Concepto de Middleware
Platform2
Platform1
MIDDLEWARE
Applications&
Services
MIDDLEWARE
Network
Applications&
Services
Middleware
● Da soporte para las interacciones● Actúa de pegamento que une los componentes del
sistema distribuido● Facilita la interacciones entre componentes:
soporta servicios de nombrado, de descubrimiento, etc.
● Gestiona la diversidad de los componentes (diversidad en lenguajes de programación, de S.O. Etc.)
Middleware
● Facilita las interacciones● Aporta soluciones para los problemas más
comunes (inconsistencias, sincronización, etc.)● Da soluciones para que el sistema sea abierto (se
pueden introducir nuevos componentes)● Da soporte para los problemas (fault recovery,
replicación)● Gestiona y monitoriza el sistema (logging,
monitoring)
Ejemplos de Middlware
● Algunos middleware conocidos en la industria:● CORBA● DCE● RMI● Web Services● DCOM, COM+● Remoting● JXTA,● MQSeries● Java EE● Hadoop, Spark
Clasificación de Middleware● Una posible clasificación:
● Remote invocation mechanisms
– RPC, CORBA, RMI, DCOM, Remoting, etc...
● Naming and directory services
– JNDI, LDAP, COSS Naming, COSS trader, etc...
● Message-oriented middleware
– JMS (Java Message System), MQSeries, MQSI, etc...
● Publish/subscribe systems
– JMS (Java Message System), some proprietary systems, etc...
● Transactional middleware
● Database-Oriented middleware
● Big Data middleware
– Haddop, Spark, ..● Grid and P2P middleware
– Jxta,
Distributed Object Middleware
● El foco de este curso serán los middleware orientados a objetos distribuidos.● Si entendemos estos middleware es más fácil
comprender cómo funcionan el resto.● Se pueden simular los otros middleware utilizando
los middleware con objetos distribuidos● Aportan una visión sobre el lenguaje de
programación que nos nos dan los demás.●
Middleware D.O.
● Es la mezcla de dos tecnologías● Objetos
– Herencia– Encapsulación– Polimorfismo
● RPC o Remote Procedure Call– Distribución– Heterogéneo– Data Marshalling
Tendencias
● Visión tradicional del middleware:
Application
Middleware (API, Tools)
Operating System
ProgrammingLanguage(C++,..)
Tendencias
● La visión actual:
Application
Middleware (API, Tools)
Operating System
ProgrammingLanguage(Java, .Net,..)
Tendencias
● La visión actual:
Application
Web Systems
ProgrammingLanguage
Middleware (Web Technologies)
Operating System
¿El Futuro?
● Una visión de futuro:● El Lenguaje de Programación es Distribuido
Application
Operating System
DistributedProgrammingLanguage(X10?..)
Principios fundamentales
● En todo sistema distribuido solemos tener problemas fundamentales.● Descubrimiento (Discovery): ¿Cómo sabe un
componente que existen otros remotos?● Descripción (Description): ¿Cómo sabe un
componente que lo que pueden hacer los demás?● Interacción (Interaction): ¿Cómo se solicitan y se
responden las peticiones?
Lenguaje de programación
● Esos principios no suelen ser relevantes en los sistemas no distribuidos.
● El lenguaje de programación no necesita ofrecer soluciones a tales problemas.
● Por ejemplo:● Para descubrir que existe una clase, variable o componente el
programador la incluye directamente en su código. El compilador/linker resuelve el problema.
● Para describir lo que hace una clase, solemos utilizar una especificación (“.h”), interfaces, etc. El compilador resuelve el problema.
● Para interactuar, simplemente hacemos llamadas a métodos. El compilador o el intérprete se encarga de resolver el problema.
Técnicas Avanzadas
● Pero para hacer un middleware moderno tenemos que incorporar esos y otros mecanismos al lenguaje. ● ¿Se puede hacer?● ¿Cómo?● ¿Hasta qué punto eso puede alterar el
funcionamiento de un programa?● ¿Siguen siendo válidos los modelos de
programación habituales?● ¿Es el modelo O-O un modelo válido?● ¿Hay alternativas?
Objetivo del curso (de nuevo)
● Durante el curso vamos a enfrentarnos a esas interrogantes. ● Algunas están resueltas en lenguajes modernos
(C# o en Java)● Otras se están investigando:
– Scala, X10, etc.– Modelos de Actores, Active Objects, etc.
● Muchas quizás no tengan sentido– Web Services propone un modelo muy diferente.
Qué vamos a ver
● Construir un sistema distribuido usando un middleware
● Estudiar qué hace ese middleware (y qué no hace)
● Cómo afecta al modelo de programación tradicional.
● Qué razones hay para que suceda eso● Cómo se ha construido el middleware (criterios
de diseño)
Qué vamos a ver
● Mecanismos de construcción y destrucción de objetos remotos (modo de vida)
● Fases de creación, activación y muerte de un objeto remoto (ciclo de vida)
● Limitaciones en el modelo actual.● Mecanismos de serialización● Factores que afectan el rendimiento● Mecanismos de descripción y descubrimiento
de objetos remotos● Sistemas de apilamiento de protocolos
Qué vamos a ver
● Cómo se utiliza la reflexión del lenguaje de programación
● Cómo se interceptan las llamadas a objetos remotos y cómo se gestionan.
● Cómo se aplica la Programación Orientada a Aspectos en los middleware
● Cómo se construyen “proxys” de forma dinámica (generación de código dinámico)
● Cómo se construyen serializadores de forma dinámica
Metodología del curso
● El curso será MUY PRACTICO● Con pocas clases de teoría.● Muchas prácticas que permitan auto-explorar los
conceptos, decisiones, implicaciones del middleware.
● El desarrollo de las prácticas por parte del alumno le permitirá al profesor introducir los conceptos.
● El trabajo en grupo será fundamental● Grupos de discusión sobre lo aprendido