Licenciatura en Sistemas Sistemas Informáticos Distribuidos TRABAJO PRÁCTICO Nº 6 “Comunicación y Objetos Distribuidos” Comunicación y Objetos Distribuidos 1) Describa los siguientes ítems relacionados con los protocolos de Internet: 1.1 Características De Las Comunicaciones Entre Procesos La comunicación entre procesos, en inglés IPC (Interprocess Communication) es una función básica de los Sistemas operativos. Los procesos pueden comunicarse entre sí a través de compartir espacios de memoria, ya sean variables compartidas o buffers, o a través de las herramientas provistas por las rutinas de IPC. La IPC provee un mecanismo que permite a los procesos comunicarse y sincronizarse entre sí. Normalmente a través de un sistema de bajo nivel de paso de mensajes que ofrece la red subyacente. La comunicación se establece siguiendo una serie de reglas (protocolos de comunicación). Los protocolos desarrollados para Internet son los mayormente usados: IP (capa de red), protocolo de control de transmisión (capa de transporte) y protocolo de transferencia de archivos, protocolo de transferencia de hipertexto (capa de aplicación). Los procesos pueden estar corriendo en una o más computadoras conectadas a una red. Las técnicas de IPC están divididas dentro de métodos para: paso de mensajes, sincronización, memoria compartida y llamadas de procedimientos remotos (RPC). El método de IPC usado puede variar dependiendo del ancho de banda y latencia (el tiempo desde el pedido de información y el comienzo del envió de la misma) de la comunicación entre procesos, y del tipo de datos que están siendo comunicados. Para que estos procesos se comuniquen para el intercambio de datos o información de control. Hay unos cuantos métodos. Se pueden considerar los siguientes: • • • • • • Tubería (Pipes) Señales (Signals) Colas de Mensajes Semáforos Memoria Compartida Sockets 1.2 Sockets Los sockets proporcionan una comunicación de dos vías, punto a punto entre dos procesos. Los sockets son muy versátiles y son un componente básico de comunicación entre interprocesos e intersistemas. Un socket es un punto final de comunicación al cual se puede asociar un nombre. Este tiene un tipo y uno o más procesos asociados. Los sockets existen en los dominios de comunicación. Un socket de dominio es una representación que da una estructura de direccionamiento y un conjunto de protocolos. Los sockets se conectan solamente con sockets en el mismo dominio. Veintitrés dominios de sockets son identificados, de los cuales solamente los dominios de UNIX e Internet son normalmente sockets de Linux usados para comunicarse entre procesos en un sólo sistema, como otras formas de comunicación entre procesos. El dominio de UNIX da un espacio de direcciones de socket en un sistema. Los sockets de dominio de UNIX son nombrados con las rutas de UNIX. Los sockets pueden también ser usados para comunicar procesos entre diferentes sistemas. El espacio de direcciones del socket entre los sistemas conectados es llamado el dominio de Internet. La comunicación del dominio de Internet usa la suite del protocolo de Internet TCP/IP. 2 1.3 Comunicación De Datagramas (UDP) • Un mensaje enviado vía UDP, no posee reintentos y acuso de recibo por parte del proceso receptor. • Si algo falla el mensaje podría no llegar a su destino • El receptor posee un puerto específico 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. Tamaño del Mensaje: • El mensaje integro puede ser de hasta 216 byte pero es usual uno de 8 Kilobyte. La aplicación debiera dividir el mensaje en partes. • Mensajes excesivamente grandes afectan el rendimiento de al red. Bloqueo: UDP usa las operaciones • envía, no bloqueante, o sea la esta operación retorna el control una vez encaminado el mensaje a la capa IP en su socket. • Recordar que si el mensaje es muy grande, se envía por parte. • La aplicación se encarga de particionar y rearmar el mensaje • recibe bloqueante, o sea el mensaje enviado se almacena en una cola de mensajes en el puerto del proceso receptor. Este proceso activará su operación recibe y se bloqueará hasta recibir todo el mensaje. Para esto utiliza un hilo de proceso receptor. • Tiempo límite (timeout): la operación recibe puede tener asociado un timeout por seguridad (por falla emisor o red). • Si el mensaje tiene un destino inexistente, se descarta • Esta operación recibe mensajes de cualquier otro. Modelo de Fallo • Fallos por Omisión o Emisor o Canal o Buffer de llegada (lleno) • Ordenación, puede ocurrir que la aplicación requiera que los mensajes estén ordenados. Utilización de UDP • En Aplicaciones que aceptan fallos de omisión, ocacionales (ejemplo DNS, Web). • No sobrecarga la red debido a que: o No se requiere información de estado ni en el origen ni en el destino. o No existe retransmisiones ni transmisión extra o El efecto de la latencia es menor Latencia 1.4 Comunicación De Streams (TCP) Este visualiza la comunicación como un flujo de bytes (stream), y los procesos pueden leer desde este flujo o escribir en él. Esta abstracción oculta algunas características propias de la red: • Tamaño de los mensajes: la aplicación decide sobre el tamaño 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 según las necesidades de la aplicación. • Mensajes perdidos: Para cada paquete IP que TCP envía 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 reenvía el paquete IP nuevamente. (el protocolo de ventana deslizante mejora este mecanismo). • Control de Flujo: TCP regula y coordina el proceso de envío (producción) y recepción (consumo) de los paquetes: por ejemplo, si el receptor lee muy lento, bloquea al emisor hasta que el lector haya leído una cantidad suficiente de byte. • Duplicación y Ordenación 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 comunicación, el proceso emisor envía una solicitud connect al receptor (necesita conocer dirección IP y puerto del receptor) y este debiera responderle con un accept. 3 Una vez establecida la comunicación, los procesos leen y escriben en el stream, sin preocuparse por la dirección IP y el número de puerto. Etapas de la comunicación • El proceso cliente envía una solicitud connect al la dirección 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 comunicación con el cliente. • Cuando se establece la comunicación, cada proceso dispone de dos stream uno para escribir y otro para leer. • Para finalizar la comunicación uno de los procesos cierra cu conector de envió, el receptor detecta esto y cierra sus conectores. Aspectos importantes • Coordinación 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 través de un hilo independiente, que si se bloquea no afecta a los otros clientes. Modelo de Fallo • Integridad de los datos: se obtiene a través del cheque de suma para detectar paquetes IP corruptos. Además, utiliza un número 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. • Conexión rota: cuando los timeout ocurren con demasiada frecuencia, TCP declara la comunicación rota. Esto significa que TCP no proporciona una comunicación fiable. • Conexión rota: cuando los timeout ocurren con demasiada frecuencia, TCP declara la comunicación rota. Esto significa que TCP no proporciona una comunicación fiable. • Fallos: Cuando una conexión es declarada rota se notifica, pero el emisor sólo 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 leído por el receptor. Utilización de TCP • En Internet los servicios ya poseen puertos públicos bien conocidos para prestación de algunos servicios: HTTP : para la web FTP : transmisión de archivos Telnet : acceso remoto SMTP : transferencias de correos 2) Describa las siguientes representaciones externas de datos empaquetados: 2.1. Representación Común de datos de CORBA CORBA utiliza la representación externa para envío de los datos, lo que le permite trabajar con una variedad de lenguajes (fortrasn c, c++, java,..) 2.2 Serialización Objetos en Java Java serializa los objetos (en una secuancia de bits) antes del envío 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 programados no interviene directamente en este proceso. 2.3 Referencia Objetos Remotos • Objeto cuyos métodos pueden invocarse desde otras Máquinas Virtuales • Descrito por una o más Interfaces Remotas (las que implementa) en las que se declaran los métodos que pueden ser invocados por objetos desde otras VMs Difiere de un objeto local en: 4 • • Se puede hacer conversión de tipos (Cast) a una interfaz remota que el objeto implemente Su tipo se puede revisar con el operador instanceof : prueba las interfaz remota que un objeto implementa • Es subclase de RemoteObject, clase que redefine métodos de java.lang Object : toString( ), equals( ), hashCode ( ), clone ( ), de modo adecuado para objetos remotos, por ejemplo, dos referencias remotas son iguales si apuntan al mismo objeto remoto, sin importar el contenido o estado de dicho objeto Definición Invocación a Método Remoto: • Acción de invocar un método de una interfaz remota en un objeto remoto • Tiene la misma sintaxis de una invocación a un método local Difiere de una invocación local en: • Argumentos no remotos en invocaciones remotas se pasan por valor (copia) • Objetos remotos se pasan por referencia • Hay Excepciones Remotas. Estas excepciones no son de tipo runtime, por lo que deben ser cachadas o lanzadas de manera adecuada. Objetos Remotos: se pasan por referencia (talones, usados para invocar métodos remotos). • Los objetos remotos no viajan, en cambio se envían referencias (que permiten crear talones o sustitutos) a quienes los reciben, ya sea como argumentos de un método o como resultados de un método • Un talón se debe convertir al tipo (cast) de las interfaces remotas que implememte la clase del objeto remoto al que corresponde. El tipo del talón determina que métodos remotos se pueden invocar en el objeto remoto (aquellos que se declaran en la interfaz correspondiente) • Si un objeto remoto implementa varias interfaces remotas un cliente solo puede convertir el talón a una de ellas (y por lo tanto solo podrá invocar los métodos declarados en esa interfaz) • Dos talones que se refieren al mismo objeto remotos en el mismo servidor se consideran iguales bajo la operacion equals 3) Describa la función y o finalidad de los siguientes casos 3.1 El Modelo de Objetos, y Objetos Distribuidos Modelo de Objetos Locales Referencia a Objetos Forma de acceder a un objeto Interfaces Métodos (argumentos, resultados y excepciones) Acciones (mensajes locales) Informa acerca del estado del receptos Cambia el estado del receptos Puede afectar a otros objetos (“indirectamente”) Excepciones Tratamiento de errores separados del código principal del módulo Liberación de Memoria Cuando un objeto deja de ser accesible Objetos Distribuidos Un sistema podría estar compuestos de un conjunto de objetos locales. Ese mismo sistema podría “esparcir” sus objetos en computadores o procesos diferentes. Bajo este esquema, algunos objetos podrían ser vistos como objetos clientes y mientras que otros como objetos servidores (Arquitectura Cliente-Servidor). Es posible implementar objetos locales que representen a los objetos remotos, lo que facilita la programación de este tipo de sistema (Modelo Cliente-Servidor con Proxy). 5 B’ M1() M2() M3() A M1() M2() A.x = B.M1(); CLIENTE B M1() M2() M3() B.y = A.M2(); SERVIDOR (PROXY) SERVIDOR 3.2. El Modelo De Objetos Distribuidos En este modelo se distribuyen objetos coarse grained. Del punto de vista del paralelismo es la tercer forma de realizar el paradigma cliente/servidor (a parte de socket y RPC), así, los objetos distribuidos son tareas paralelas y MPMD, donde cada interacción entre dos objetos sigue el patrón cliente/servidos. En muchos casos la estructura del sistema es peer-to-peer, lo cual significa que el rol de cliente o servidos puede cambiar. Al relacionar el modelo de objetos distribuidos con el paradigma cliente/servidor, los métodos pasan a ser servicios. Cada objeto distribuido está sujeto a un proceso server que realiza las operaciones del objeto. Los procesos clientes deben pedirlo a un proceso server. La mecanismo de comunicación entre un cliente y un servidor es llamado remote method invocation (RMI), el cual es una adaptación de RPC, por lo cual tiene ciertos progresos con respecto a este. Una diferencia a tener en cuenta es que una misma invocación (mismo método y parámetros) puede dar resultados diferentes según el estado del objeto, mientras que en RPC, el mismo llamado (igual procedimiento y parámetros) produce el mismo resultado (a menos que acceda a Base de Datos o variables globales). Se utilizan en sistemas middleware como CORBA, DCOM, JavaRMI. local remote C E invocation loca invocation invocation A B remote invocation F local invocation D Referencia a objetos remotos Se debe poseer referencias únicas a objetos remotos. Paso de referencia de objetos remotos como parámetros o como resultado de las invocaciones. Interfases Remotas Solo pone a disposición métodos remotos Se puede utilizar un IDL CORBA usa IDEL JAVA utiliza la misma forma de definir interfaces en un contexto local Ambos soportan herencias múltiples para sus interfaces. 6 remot objec Dat remot interfac { m m m implementatio of m m m Acciones en un Sistema de Objetos Distribuidos Como en el caso local, las acciones de un objeto remoto, puede afectar a otros objetos también remotos. En cada caso se emplea RMI, para tener acceso a los objetos remotos. A B A sufre un cambio y notifica a B, C y D C D Compactación Automática Si el lenguaje lo permite, la compactación ocurre localmente (caso lenguaje Java) Si no los diferentes objetos debieran colaborar para detectar referencias no accesibles para compactar la memoria disponible Excepciones Cada objeto debiera manejar, además de los errores locales, aquellos errores propios de un ambiente distribuidos. Fallas en la Red Fallas en el objeto remoto 3.3. Diseño E Implementación para RMI Es otro sistema middleware como CORBA y DCOM. No soporta interoperabilidad entre lenguajes, solo trabaja con Java. Su funcionalidad es bastante más reducida que los anteriores. Desde la versión 1.1 de JDK, Java tien su propio ORB: RMI (Remote Method Invocation). A pesar de que RMI es un ORB en el sentido general, no es un modelo compatible con CORBA. RMI es nativo de Java, es decir, es una extensión al núcleo del lenguaje. RMI depende totalmente del núcleo de la Serializción de Objetos de Java, así como de la implementación tanto de la portabilidad como de los mecanismos de carga y descarga de objetos en otros sistemas, etc. El uso de RMI resulta muy natural para todo aquel programador de Java ya que éste no tiene que aprender una nueva tecnología completamente distinta de aquella con la cual desarrollará. Sin embargo, RMI tiene algunas limitaciones debido a su estrecha integración con Java, la principal de ellas es que esta tecnología no permite la interacción con aplicaciones escritas en otro lenguaje. 7 RMI como extensión de Java, es una tecnología de programación, fue diseñada para resolver problemas escribiendo y organizando código ejecutable. Así RMI constituye un punto específico en el espacio de las tecnologías de programación junto con C, C++, Smalltalk, etc. Cuestiones de Diseño sobre RMI Semántica de la invocación RMI Un objeto local es invocado sólo una vez pero no es así necesariamente con un objeto distribuido. Reenvío del mensaje de petición (reintento) Filtrado de mensajes duplicados Reenvío de mensajes de resultados Invocación Pudiera ser Un método se invoca solamente una vez Fallo por omisión de la invocación o de la respuesta Fallo del servidor donde reside el método remoto Después de un time out no se reintenta Es útil en aplicación donde se puede tolerar esos tipos de fallos Invocación Al menos una vez A menos que reciba una respuesta o una excepción, reenvía el mensaje de invocación. Fallo por caída del servidor Fallo producto invocar más de una vez un método (pude generar resultados erróneos Aceptable si la invocación a un método es idempotente (si se activa más de una vez produce los mismos resultados, ejemplo: saldo de una cuenta) Invocación Máximo una vez El proceso envía sólo una mensaje de invocación al método remoto Recibe una respuesta o una excepción. Es necesario considerar todos los fallos posibles para enmascararlos. Transparencia Semántica de invocación Ubicación Empaquetado Paso de Mensaje Recuperación ante fallos Latencia es mayor al invocar un objeto remoto Ante una invocación fallida, construir mecanismos para restaurar el estado del objeto remoto Implementación RMI Modulo de Referencias Remotas Traduce referencias locales y remotas Utiliza una tabla de referencias de métodos locales y métodos remotos Los objetos remotos son registrados en el servidor, y el proxy correspondiente, en la tabla local. Un mensaje de respuesta puede contener una referencia a un objeto remoto, ésta referencia se registrará en la tabla local. La capa RMI Proxy: Representa al objeto remoto, redirigiendo mensajes de invocación y entregando resultados o excepciones. Esqueleto del objeto remoto Distribuidor del mensaje de petición/respuesta 3.4 Compactación Automática De Memoria • Recuperación de memoria cuando nadie tenga una referencia a un objeto remoto o local • Información de creación/eliminación de proxys en clientes 8 • Concesiones en Jini 9