Sunteți pe pagina 1din 63

Sistemas Distribuidos

Comunicacin

Carrera de Ingeniera de Sistemas Universidad Politcnica Salesiana del Ecuador

Comunicacin de Procesos en Sistemas Distribuidos

La comunicacin de procesos es una parte fundamental y bsica en cualquier sistema distribuido. Existen dos enfoques de comunicacin, ambos basados en el paso de mensajes:

Mecanismos de bajo nivel


En este tipo de esquemas se ofrecen servicios en los que el programador debe encargarse de establecer los protocolos de comunicacin, la forma de representacin de los datos, etc. El programador debe de ser capaz de estructurar programas dada la especificacin tcnica del hw de un microprocesador, cpu. Se encuentran a nivel de firmware o del chipset (dentro del mainboard) Se pueden cuidar los recursos.

Ejemplo: los sockets

Mecanismos de alto nivel

En este tipo de enfoques se ofrecen abstracciones que facilitan la programacin y en las que el programador no debe preocuparse de los aspectos de bajo nivel relacionados con el paso de mensajes. En este tipo de esquemas se incluyen las llamadas a procedimientos remotos y la invocacin de mtodos remotos, como la que ofrece CORBA o RMI de java, C++

A parte de los mecanismos de comunicacin que se empleen, existen dos patrones bsicos de comunicacin en sistemas distribuidos:

Comunicacin cliente-servidor: cliente-servidor: El protocolo tpico utilizado es el de peticin-respuesta. El cliente realiza la peticin de un servicio y el servidor responde con el resultado al cliente. Este es el esquema ms utilizado.

Comunicacin en grupos: En la comunicacin en grupos existe un grupos: conjunto de procesos que constituyen un grupo y que cooperan en algn trabajo comn. Este modelo puede ser til en caso de que se desee actualizar de forma simultnea la copia de un archivo que reside en varios servidores.

Introduccin
Sobre la capa de red y de SO, frecuentemente, los sistemas distribuidos estn desarrollados sobre un middleware. Nos interesa saber y comprender la capa inferior del middleware

Programas finales

Aplicaciones de Servicios RMI - RPC Protocolos de peticin / Respuesta empaquetado y representacin externa de datos UDP - TCP Midleware

Introduccin
Visin simplificada de programacin con TCP/IP
Aplicacin TCP IP Aplicacin UDP

Introduccin
RPC : Remote Procedure Call RMI : Remote Method Invocation) TCP : Transmission Control Protocol : Establece un canal desde que inicia y termina la comunicacin. UDP : User Datagram Protocol: Lo mensajes se enva por un canal sin esperar respuesta. TCP/IP: Conjunto de Protocolos de la Internet En este segundo capitulo analizaremos las posibilidades que ofrece el protocolo UDP y TCP. Se llevar a un plano ms prctico con la API de Java.

API para protocolos de Internet


Comunicacin entre dos procesos:
Esta comunicacin se basa en dos acciones primitivas: enva y recibe. As un proceso A enva un mensaje a otro proceso B. Por su parte, B recibe ese mensaje para procesarlo. Mensaje
A B

Protocolos de Internet
Comunicacin entre dos procesos:
El proceso emisor enva mensajes a la cola de mensajes del proceso receptor (buffer de entrada)

Enva m Canal m mensajes salientes m

Recibe m

m m Cola de mensajes entrantes

Protocolos de Internet
Caracterstica de la Comunicacin entre dos procesos:
Sincronizada: El proceso que enva se bloquea hasta que el mensaje se haya enviado, mientras que en el proceso receptor, activa un recibe y tambin se bloquea hasta que el mensaje se haya recibido. ej: pginas web Asncrona: El proceso emisor no se bloquea al enviar, mientras que el proceso receptor puede tener las dos variantes: bloqueado o no bloqueado. En este ltimo caso, se utiliza un buffer de mensajes recibidos. Ej: aplicaciones hechas en ajax, gmail (correo y chat)

Destino : el proceso receptor puede tener asociada


Una direccin_IP+Puerto_local, que la hace ms bien esttica servidor sql (192.168.10.155 :1433) O un nombre (que deber ser traducida por un servicio de nombres) que le permita cambiar de localidad del proceso receptor. Servidor sql (ups-sql-server: 1433)

Fiabilidad : Se define en trmino de validez e integridad


Un sistema provee validez si entrega todo el mensaje o una parte que sea aceptable para el proceso receptor. Un sistema de comunicacin resguarda la integridad si entrega los mensajes sin corromperse ni duplicarse.

Ordenacin: En algunos casos de comunicacin entre procesos, es


requisito mantener el orden de llegada de mensajes, de acuerdo al orden de salida de los mismo. En otro tipo de aplicaciones, el orden no podra tener mayor relevancia.

Sockets

Los sockets aparecieron en 1981. Un socket es una abstraccin que representa un extremo en la comunicacin bidireccional entre dos procesos. Ofrece una interfaz para acceder a los servicios de red en el nivel de transporte de los protocolos TCP/IP. Actualmente la interfaz de sockets est siendo estandarizada dentro de todos los sistemas UNIX.

Comunicacin con Sockets


Mquina A proceso Mquina B proceso

enviar sockets NUCLEO

enviar

Sockets NUCLEO

RED

Sockets
Socket = conector Permiten comunicar:
Procesos del mismo computador Procesos conectados a travs de una red

Tipos de direcciones:
Direcciones locales: dominio UNIX Direcciones de red (TCP/IP)
Direccin de red (direccin IP) Puerto
17

Sockets (II)
patan 138.100.240.36
ftp 21

zipi 138.100.240.2

Red de interconexin

telnet 23

batman 138.100.240.32

merlin 138.100.240.50

conan 138.100.240.20
18

Protocolos de Internet
SOCKET
Los socket son conectores de comunicacin entre procesos remotos. Este mecanismo est en la mayora de los sistemas operativos y fue introducido por Unix BSD Cada conector est asociado a una IP y un puerto (216). Cada conector utiliza un protocolo de comunicacin que puede ser UDP o TCP. Socket
Socket

Puertos

Protocolos de Internet
Comunicacin con datagramas UDP
Un mensaje enviado va UDP, no posee reintentos y acuso de recibo por parte del proceso receptor. Si algo falla el mensaje podra no llegar a su destino El receptor posee un puerto especfico para recibir mensajes El cliente podr utilizar cualquier puerto para enviarlos. El receptor averiguar por el mensaje entrante, la IP y el puerto del proceso emisor, lo que le permite enviar una respuesta. Ejm: streaming (radios online), video conferencia

Protocolos de Internet

Comunicacin con datagramas UDP


Tamao del Mensaje:
El mensaje integro puede ser de hasta 216 byte pero es usual uno de 8 Kilobyte. La aplicacin debe dividir el mensaje en partes. Mensajes excesivamente grandes afectan el rendimiento de la red.

Protocolos de Internet

Comunicacin con datagramas UDP


Bloqueo: UDP usa las operaciones
enva, no bloqueante, osea la operacin retorna el control una vez encaminado el mensaje a la capa IP en su socket. Recordar que si el mensaje es muy grande, se enva por parte. La aplicacin se encarga de particionar y rearmar el mensaje

Protocolos de Internet
Comunicacin con datagramas UDP
Bloqueo: UDP usa las operaciones
recibe bloqueante, o sea el mensaje enviado se almacena en una cola de mensajes en el puerto del proceso receptor. Este proceso activar su operacin recibe y se bloquear hasta recibir todo el mensaje. Para esto utiliza un hilo de proceso receptor.
Tiempo lmite (timeout): la operacin recibe puede tener asociado un timeout por seguridad (por falla emisor o red). Si el mensaje tiene un destino inexistente, se descarta

Protocolos de Internet

Comunicacin con datagramas UDP


Modelo de Fallo
Fallos por Omisin Emisor Canal Buffer de llegada (lleno) Ordenacin, puede ocurrir que la aplicacin requiera que los mensajes estn ordenados.

Protocolos de Internet

Comunicacin con datagramas UDP


Utilizacin de UDP
En Aplicaciones que aceptan fallos de omisin, ocasionales (ejemplo DNS, Web). No sobrecarga la red debido a que:
No se requiere informacin de estado ni en el origen ni en el destino. No existe retransmisiones ni transmisin extra El efecto de la latencia es menor

Protocolos de Internet

Comunicacin stream TCP


Este visualiza la comunicacin como un flujo de bytes (stream), y los procesos pueden leer desde este flujo o escribir en l. Esta abstraccin oculta algunas caractersticas propias de la red:
Tamao de los mensajes: la aplicacin decide sobre el tamao de los mensajes y el protocolo inferior TCP los traduce a paquetes IP y se asegura que lleguen a destino.. Por su parte, el proceso receptor consume los datos enviados segn las necesidades de la aplicacin.

Protocolos de Internet

Comunicacin stream TCP


Mensajes perdidos: Para cada paquete IP que TCP enva desde el emisor debe esperar un acuse de recibo desde el receptor, si pasado un tiempo (timeout) no lo recibe, lo considera como paquete perdido y reenva el paquete IP nuevamente. (el protocolo de ventana deslizante mejora este mecanismo). Control de Flujo: TCP regula y coordina el proceso de envo (produccin) y recepcin (consumo) de los paquete: por ejemplo, si el receptor lee muy lento, bloquea al emisor hasta que el lector haya ledo una cantidad suficiente de byte.

Protocolos de Internet

Comunicacin stream TCP


Duplicacin y Ordenacin de los Mensajes: A cada paquete IP se le asocia un Id nico que permite al receptor ordenarlos y eliminar paquetes repetidos. Destino de los mensajes: Para establecer la comunicacin, el proceso emisor enva una solicitud connect al receptor (necesita conocer direccin ip y puerto del receptor) y este debiera responderle con un accept. Una vez establecida la comunicacin, los procesos leen y escriben en el stream, sin preocuparse por la direccin IP y el nmero de puerto.

Protocolos de Internet
Comunicacin stream TCP Etapas de la comunicacin
El proceso cliente enva una solicitud connect a la direccin ip y puerto del servidor. EL servidor posee una cola para recibir las solicitudes connect y a al momento de realizar un accept, dispone un nuevo puerto para el stream de comunicacin con el cliente. Cuando se establece la comunicacin, cada proceso dispone de dos stream uno para escribir y otro para leer. Para finalizar la comunicacin uno de los procesos cierra su conector de envi, el receptor detecta esto y cierra sus conectores.

Protocolos de Internet

Comunicacin stream TCP Aspectos importantes


Coordinacin entre el emisor y receptor en el tipo de datos emitidos y recibidos. Ocurren bloqueos cuando: El receptor intenta leer y no existen datos en la cola. El emisor intenta escribir y el buffer est lleno El servidor atiende a cada cliente a travs de un hilo independiente, que si se bloquea no afecta a los otros clientes.

Protocolos de Internet
Comunicacin stream TCP Modelo de Fallo
Integridad de los datos: se obtiene a travs de detectar paquetes IP corruptos. Adems, utiliza un nmero de serie para ordenar y evitar la duplicidad de los paquetes. Validez: se consigue reenviando el paquete, cada vez que timeout. Lo que garantiza la entrega. Conexin rota: cuando los timeout ocurren con demasiada frecuencia, TCP declara la comunicacin rota. Esto significa que TCP no proporciona una comunicacin fiable.

Protocolos de Internet

Comunicacin stream TCP Modelo de Fallo


Fallos: Cuando una conexin es declarada rota se notifica, pero el emisor slo se entera si intenta leer en el stream. Esto hace que el cliente no distinga si el fallo ocurri en el proceso o fall la red. Ni puede saber si su ltimo mensaje fue leido por el receptor.

Protocolos de Internet

Comunicacin stream TCP Utilizacin de TCP


En internet los servicios ya poseen puertos pblicos bien conocidos para prestacin de algunos servicios:
HTTP : para la web FTP : transmisin de archivos Telnet : acceso remoto SMTP : transferencias de correos

Protocolos de Internet

Representacin externa de datos


Cada vez que dos procesos se envan mensajes, estos son pasados a bytes para la transmisin y luego reconstruidos en procesos receptor. Es necesario ponerse de acuerdo acerca del tipo de dato que se est enviando. No todas las mquinas hacen el mismo tratamiento interno acerca de los tipos de datos (ejemplo: punto flotante, ASCII, Unicode).

Protocolos de Internet

Representacin externa de datos


Mtodos para intercambio de datos
El emisor y el receptor utilizan un formato comn y externo. Cada datos es acompaado de un identificador tipo de dato externo, para su traduccin correcta en el receptor Si para algunos datos, ambos poseen el mismo tratamiento interno, en ese caso no utilizar el formato externo.

Protocolos de Internet

Representacin externa de datos


Mtodos para intercambio de datos
Representacin Externa de datos: Estndar acordado para tratar datos simples y las estructuras de datos. Empaquetado (marshalling) : es el ensamblado de un conjunto de datos para transmitirlos al receptor. Desempaquetado(unmarshalling) : desensamblado en el destino, para obtener la coleccin equivalente de datos.

Protocolos de Internet

Representacin externa de datos


CORBA utiliza la representacin externa para envo de los datos, lo que le permite trabajar con una variedad de lenguajes (fortrasn c, c++, java,..) Java serializa los objetos (en una secuencia de bits) antes del envo y el receptor reconstruye el objeto basado en un rbol de clases que debe conocer previamente (tal vez por medio de un mensaje previo o que ya est almacenado en disco). En ambos casos toda esta tarea es realizada por el midleware (CORBA o RMI deJava)y el programador no interviene directamente en este proceso.

IO para la Red
Mecanismos en Java para la I/O en Internet

Sistema de I/O
Stream : Secuencia de byte de largo indeterminado, movindose desde una fuente a un destino: Ejemplo: I/O del sistema
System.in : para lectura de stream System.out : para escritura de stream System.err : para escritura de stream cuando un error es atrapado por try/catch

Sistema de I/O
Ejemplo
import java.io.*; public class Ejemplo1 { public static void main(String[] args) { try { byte[] hola = {72,101,108,111,32,87,111,114,108,100,33,10,13}; System.out.write(hola);} catch (Exception e) {System.err.println(e);} } } Salida : Hello world!

Sistema de I/O - OutputStream


Es una clase abstracta con implementaciones como:
Public abstract void write(int b) throws IOException Public void write(byte[] data) throws IOException; escribe datos al final del stream Public void write(byte[] data, int offset, int length) throws IOException; escribe desde una posicin indicada y los bytes que se deben de escribir) Public void flush() throws IOException; Public void close() throws IOException;

Sistema de I/O - OutputStream


Ejemplo 2 Escribiendo byte a byte: La tabla ASCII
import java.io.*; public class Ejemplo2_Ascii { public static void main(String[] args) { try { for (int i = 32 ; i < 127 ; i++){ System.out.write(i); if((i%8)==7)System.out.write('\n'); } System.out.write('\n'); } catch (Exception e) {System.err.println(e);} } }

Sistema de I/O - OutputStream


Ejemplo 3 Escribiendo un arreglo : La tabla ASCII
import java.io.*; public class Ejemplo3_Ascii_Arreglo { public static void main(String[] args) { byte[] b = new byte[(127-31)*2]; int k = 0; for (int i = 32 ; i < 127 ; i++){ b[k++] = (byte) i; if((i%8)==7) b[k++] = (byte)('\n'); else b[k++] = (byte)('\t'); } b[k++] = (byte)('\n'); try { System.out.write(b); } catch (Exception e) {System.err.println(e);} } }

Sistema de I/O - InputStream


java.io.InputStream es una superclase abstracta, con mtodos:
public abstract int read() throws IOException public int read(byte[] data) throws IOException public int(byte[] data, int offset , int length) throws IOException public long skip(long n) throws IOException public void close() throws IOException public synchronized void mark(int readLimit) public synchronized void reset() throws IOException public boolean markSupported ()

Sistema de I/O - InputStream


Ejemplo: el siguiente cdigo lee 10 enteros desde el sistema: int datos = new int[10];
for (int i = 0 ; i < datos.length ; i++){ datos[i] = System.in.read(); }

Sistema de I/O - InputStream


Ejemplo: el siguiente cdigo lee 10 byte desde el sistema: try{ byte b = new byte[10];
for (int i = 0 ; i < b.length ; i++){ b[i] = System.in.read(); } } catch (Exception e) {System.err.println(e);

Sistema de I/O - InputStream


Ejemplo: un copiador eficiente: public static void copy(InputStream in, OutputStream out) throws IOException{ synchronized(in) { synchronized(out) { byte[] buffer = new byte[256]; while (true) { int bytesRead = in.read(buffer); if (bytesRead ==-1) break; out.write(buffer,0,bytesRead); }}}

File Streams
Se pretende adoptar un mtodo conveniente para leer y escribir archivos. Revisaremos:
Lectura de Archvios Escritura de Archivos Visualizacin de Archivos

Se utilizarn las clases:


java.io.FileInputStream java.io.FileOutputStream

File Streams - FileInputSream


Leyendo Archivos
FileInputStream es una clase concreta de InputStream:
public class FileInputStream extends InputStream

Se puede utilizar uno de los tres siguientes mtodos:


public FileInputStream(String F) throws IOException public FileInputStream(File F) throws IOException public FileInputStream(FileDescriptor fdObj)

File Streams - FileInputSream


Leyendo Archivos
try{ FileInputSream fis = new FileInputSream( hola.txt ); int n; While ((n = fis.available())>0) { byte[] b = new byte[n]; int resultado = fis.read(b); if(resultado == -1) break; String s= new String(b); System.out.print(s); } } catch (IOException e) {System.err.println(e);}

File Streams - FileInputSream


Leyendo Archivos / Copiador
public static void Tipee(String archivo) throws IOException { FileInputStream fin = new FileInputStream(archivo); CopiaStream.copy(fin,System.out);

File Streams - FileOutputSream


Escribiendo Archivos
FileOutputStream es una clase concreta de OutputStream:
public class FileOutputStream extends OutputStream

Se puede utilizar uno de los cuatro siguientes mtodos:


public FileOutputStream(String F) throws IOException public FileOutputStream(File F) throws IOException public FileOutputStream(FileDescriptor fdObj) public FileOutputStream(String F, boolean append) throws IOException

File Streams - FileOutputSream


Ejemplo: Copiar desde un archivo a otro, utilizando el copador
FileInputStream fin; FileOutputStream fout; .. try { fin = new FileInputStream(archivo1); fout = new FileOutputStream(archivo2); CopiaStream.copy(fin,fout); }

Network Stream
Revisaremos:
La Clase URLs Connexiones con URL Sockets Server Sockets

Network Stream - URLs


La clase URL (Uniform Resource Locator), identifica un recurso en la red.
Constructores
public URL(String u) throws MalformedURLException public URL(String protocol, String host, String file) throws MalformedURLException public URL(String protocol, String host, String port, String file) throws MalformedURLException public URL(URL context, String u) throws MalformedURLException

URLs
Paso 1: Cronstruir las URLs Ejemplos URL u = null; try { u = new URL( http://www.unap.cl/index.php ); } catch (MalformedURLException e){} URL u1 = null; URL u2 = null; try { u1 = new URL( http , www.unap.cl , /index.php ); u2 = new URL( http , www.inf.unap.cl/ccastro ,80, /index.php ); } catch (MalformedURLException e){}

URLs
Paso 2: recuperar datos va URL Existen dos mtodo para conseguirlo:
openStream() : retorna raw stream de bytes desde la fuente.
Se conecta al socket del servidor, con la puerta correspondiente a la URL.

getContent(): retorna un objeto que representa el dato (tipos MIME).

URLs
Paso 2: recuperar datos va URL Ejemplo:
URL u = null; try { u = new URL( http , www.unap.cl , /index.php ); InputStream in = u.openStream(); int b; while((b=in.read()) != -1) {System.out.write(b);} } catch (MalformedURLException e){System.err.println(e);} catch (IOException e){System.err.println(e); }

URLConnection
java.net.URLConnection / openConnetion() Las conexiones URL proveen mayor control de la comunicacin cliente /servidor. Coordina rapidez de la lectura/escritura desde ambos lados del a comunicacin. java.net.URLConnection / openConnetion() es una clase abstracta que maneja la comunicacin entre diferentes tipos de servidores (FTP , Webs,..) por lo que se debe especificar el protocolo.

URLConnection
Pasos para leer desde una URL Conections
Construir un Objeto URL openConnection de URL, crea la URLConnection Inicializar los parmetros de conexin y request que el cliente enviar al servidor El mtodo connect() conecta al servidor usando un socket, o se conecta localmente a un archivo. Espera una respuesta desde el servidor getInputStream lee los datos y getOutputStream enva los datos al servidor.

URLConection
Ejemplo:
try { URL u = new URL(args[i]); URLConnection uc = u.openConnection(); uc.connect(); InputStream in = uc.getInputStream(); CopiaStream.copy(in, System.out); in.close(); }

URLConnection
Pasos para Escribir en una URL Connections
Construir un Objeto URL openConnection de URL, crea la URLConnection Hacer true a setDoOutput() para indicar que se va a escribir en el stream. Y hacer true a setDoInput() si tambin se va a leer. Preparar los datos en formato byte Llamar al mtodo getOuputStream para obtener un stream y escribir en l. Cerrar el stream de salida Llamar al mtodo getInputStream para obtener un stream para leer desde l.

URLConnection
Ejemplo:
::: try { URL u = new URL("mailto:" + args[0]); URLConnection uc = u.openConnection(); uc.setDoOutput(true); uc.connect(); OutputStream out = uc.getOutputStream(); CopiaStream.copy(System.in, out); out.close(); } catch (IOException e) {System.err.println(e);}

S-ar putea să vă placă și