Asignatura 780014
Programación Avanzada
TEMA 7 –
Programación Concurrente distribuida.
Sockets y Cliente/Servidor.
©
[email protected]
Computación distribuida
Comunicación y
sincronización
Entre procesos
concurrentes
Que se ejecutan
en distintas
máquinas
Se rompe la
limitación de la
memoria única
Sistema Distribuido
Definición:
– Solución software
– Funcionalidad repartida entre distintas máquinas
– Máquinas interconectadas por una red
– Cada máquina con
• Su propio procesador (pueden ser varios)
• Su propia memoria
• Su propio sistema operativo
Conceptos
• Ya no hay una memoria común para comunicar
– Los procesos utilizan líneas de comunicación físicas
– Concurrencia real, hay varios de cada HW
• Los sistemas deben ser muy desacoplados
– Intercambiar la menor cantidad de información
• Las líneas trabajan velocidades inferiores
•
Hay varios modelos para la creación de los programas
– Para describirlos usaremos en el concepto de canal:
• Línea de comunicación ideal, 100% fiable
Ventajas y desventajas
• Ventajas:
• Hardware más económico
• Mayor potencia de cálculo global
• Uso de la distribución de cálculo y datos
•
• Mayor fiabilidad global del sistema ante caídas y percances
•
Compartición recursos entre varios equipos
Posibilidad de escalabilidad del sistema (añadir HW)
Posibilidad de sistemas abiertos (especificaciones públicas, independencia de HW)
Facilidad en el despliegue de nuevas aplicaciones o versiones
•
•
• Desventajas:
Complejidad adicional en la coordinación de HW, SO, etc. distintos.
•
• Necesidad de red con una buena fiabilidad y rapidez (hoy todo está en red)
•
Seguridad menor que en un ordenador único, aislado y bien protegido
• Una conexión de red es una puerta a ataques, virus, troyanos, etc.
– Hay nuevas herramientas para la protección (firewalls, etc)
Motivación
• Motivos para el uso programación distribuida:
• Posibilidades:
• Compartir recursos en tiempo real
• Compartir sin necesidad de medios removibles
• Necesidades:
• Compartir un recurso único
• Aumentar la seguridad en recursos
– Mediante SW distribuido y niveles de acceso
• Aumentar potencia de cálculo
– Distribuyendo el trabajo.
Tipos de línea física
• Directa. Cable serie o infrarrojos.
•
Lenta, poco fiable y sólo permite crear sistemas específicos que se basen en la
existencia de la conexión.
• Directa tipo red, con cable o inalámbricas, entre dos
• Más eficientes y seguras, pero el sistema seguirá estando limitado a trabajar con dos
ordenadores y las ventajas de la programación distribuida no se alcanzan realmente.
• Red, interna (intranet) o Internet
• HW y SW nos aíslan del componente físico de la red
• Requiere un sistema de nombrado lógico
• Escenario ideal
• Podremos obtener todas la ventajas
Canales y protocolos
• Los canales y las aplicaciones que hacemos con ellos
– Se basan en todos los niveles de red inferiores
Repaso de protocolos
IP,Internet Protocol – Nivel de Red
Usado para comunicación entre aplicaciones
– Es el protocolo base de Internet
– Encargado de mover datos en forma de paquetes entre
un origen y un destino
Todo dispositivo conectado posee un identificador
– Dirección IP de 4 bytes=32 bits (ahora más con IP v6)
– Lo identifica unívocamente
La comunicación se basa en la utilización de direcciones IP
Repaso de protocolos
La dirección IP
– 4 byte, 4 cifras del 0 al 255
– Difícil de recordar, poco natural
– Se crea el concepto de nombre de dominio que es:
• Una cadena de caracteres
• Asociada a una dirección IP
El Sistema de Nombres de Dominio (DNS)
– Creado para la conversión entre los dominios e IP
– De forma automática
Repaso de protocolos
TCP, Transfer Control Protocol – Nivel de Transporte
Incorporado a protocolo IP
– Seguridad a la comunicación
– Valida que los paquetes de un mensaje llegan a destino y
en orden para la recomposición del mensaje original
– Puede pedir retransmisión de paquetes en mal estado o
perdidos
Repaso de protocolos
UDP, User Datagram Protocol – Nivel de Transporte
Se utiliza con IP, en comunicaciones:
– Donde no es tan importante que lleguen todos los mensajes a
un destinatario
– Donde el orden no es relevante
– Es preferible la velocidad a la fiabilidad en la entrega
Desventajas respecto TCP:
– Menos fiable.
– Necesidad de implementar verificación de envío y sincronización
El funcionamiento similar al del envío de una carta
Tipos de programación distribuida
• Vamos a ver 3 formas de crear los programas distribuidos
• Paso de mensajes
• RPC
• Cliente – Servidor
Paso de mensajes
Diseñar una aplicación que usa el paso de mensajes consiste en:
• Crear los programas necesarios en cada uno de los ordenadores
• Establecer los canales de comunicación entre ellos
• Definir el protocolo de envío/recepción de datos que requiera la
aplicación.
Los programas se crean independientes (ni siquiera tienen que estar
escritos en el mismo lenguaje), se compilan y la relación entre ellos se
establece en tiempo de ejecución, cuando se crean los canales y se envían
los datos con las consiguientes validaciones de tipos de datos.
Paso de mensajes
• Los canales serán de 2 tipos, con y sin capacidad de
almacenamiento, lo que da lugar a 2 tipos de comunicación y a 2
tipos de programación: comunicación asíncrona y síncrona.
• Cada canal tendrá asociado un tipo de datos, que podrá ser cualquiera
(simplifica la programación, al no tener que averiguar el mismo).
• Comunicación síncrona: los dos extremos de la comunicación
tienen que estar dispuestos para que ésta se produzca. También se
llama comunicación orientada a la conexión.
• Comunicación asíncrona: se pueden enviar datos sin necesidad de
que el otro extremo los esté esperando, pudiéndolos recibir más tarde.
También se llama comunicación orientada a datagramas.
En este caso los datagramas podrán quedar almacenados en la red o
en el propio sistema receptor (en las capas inferiores).
Canales y protocolos
Canal:
conexión de red totalmente
fiable y con un sistema de
nombrado que nos permite
crear un tubo para comunicar
2 procesos en 2 máquinas
distintas.
Los canales serán
bidireccionales.
Paso de mensajes
Los programas deberán:
•Definir el canal: incluirá identificador para el canal,
nombre del canal de destino, tipo de canal (síncrono o
asíncrono) y el tipo de datos a enviar. Este canal existirá
durante toda la ejecución del programa.
•Enviar datos: identificador del canal de envío y datos a
enviar (coherentes con el tipo del canal). El resultado de esta
operación informará si se ha llevado a cabo o ha fallado.
•Recibir datos: identificador del canal y la variable donde
guardar los datos recibidos. El resultado de esta operación
informará si se ha llevado a cabo o ha fallado.
Paso de mensajes
El comportamiento de las operaciones será distinto dependiendo del
canal y del estado de ocupación del mismo:
•Send en canales asíncronos, siempre enviará el dato y continuará
la ejecución con la siguiente instrucción.
•Send en canales síncronos, solo enviará el dato y continuará su
ejecución si receptor está preparado para recibir. Si no, esperará (espera
no activa) hasta que el destino ejecute receive.
•Receive en canales asíncronos, recibirá el dato y continuará la
ejecución con la siguiente instrucción. Si no hubiera dato pendiente en el
canal, quedará a la espera de que se produzca un envío.
•Receive en canales síncronos, sólo recibirá el dato y continuará su
ejecución si hay un envío bloqueado a la espera. En caso contrario se
bloqueará sin espera activa hasta que el envío se produzca.
Paso de mensajes
Ejemplo de productor-consumidor, donde la
comunicación se hace en un solo sentido:
•Un programa Pr1 lee un dato x y se lo pasa a otro
programa Pr2 que lo escribe. Esta acción la realiza 10
veces.
Diagrama de precedencia
Paso de mensajes
Solución síncrona:
Si el canal fuese asíncrono el productor no necesita esperar
al consumidor en caso de que el productor sea más rápido.
Paso de mensajes
El protocolo TCP/IP transporta bytes.
El protocolo de Aplicación proporciona la
semántica.
Sockets
Son una abstracción del sistema operativo (no Hw)
Las aplicaciones los crean, los utilizan y los cierran cuando ya no
son necesarios
Su funcionamiento está controlado por el sistema operativo
Comunicación entre procesos
Los procesos envían/reciben mensajes a través de su socket
Los socket se comunican entre ellos
La comunicación en Internet es de socket a socket
El proceso que está comunicándose se identifica por medio de su
socket
El socket tiene un identificador
Identificador = dir. IP del computador + núm. Puerto
Sockets
Para establecer una comunicación entre dos
programas, se crea un socket en cada máquina.
Podemos imaginar un cable enchufado en cada
extremo al socket correspondiente.
La API Socket
Servidor y Cliente intercambian mensajes a través de la red mediante la
API Socket
Permite a las aplicaciones utilizar los protocolos de la pila TCP/IP.
Define las operaciones permitidas y sus argumentos
La clase InetAddress
Java proporciona la clase InetAddress para la manipulación y
conocimiento de direcciones y dominios. Representa una dirección IP.
Métodos:
byte[] getAddress() =>Devuelve la dirreción IP de un objeto InetAddress.
InetAdress getByName(String host)=>Devuelve un objeto InetAddress
representando el host que se le pasa como parámetro, bien como nombre o
bien como parámetro.
InetAdress[] getAllByName(String host)=>Devuelve un array de objetos
InetAddress que se puede utilizar para determinar todas las direcciones IP
asignadas al host.
static InetAddressgetByAddress(byte[] addr) =>Devuelve un objeto
InetAdress, dada una dirección IP.
static InetAddressgetByAddress(String host, byte[] addr) =>Devuelve un
objeto InetAddress a partir del host y la dirección
Comentarios de: Programación Concurrente distribuida. Sockets y Cliente/Servidor. (0)
No hay comentarios