Llamada a procedimiento remoto (RPC) ¿cómo especifica el cliente la dirección del servidor? mediante la conexión dinámica se emplea una especificación de un servidor: nombre, versión y servicios que proporciona
specification of file_server, version 3.1: long read(in char name[MAX_PATH], out char buf[BUF_SIZE, in long bytes, in long position); …
La especificación es usada por los stubs cliente y servidor. Cuando un programa (cliente o servidor) va a hacer uso de alguno de los servicios de esta especificación el correspondiente stub se linka con él
Llamada a procedimiento remoto (RPC) El servidor envía un mensaje a un programa llamado conector para darle a conocer –exportar- su nombre, versión y dirección (IP, p.ej.) Cuando el cliente llama a un procedimiento remoto por primera vez, envía un mensaje al conector, solicitando la importación de la versión 3.1 de la interfaz file_server Si no está el servidor, o no tiene esa versión, la llamada del cliente fracasa En caso contrario, se envía al cliente la dirección en la que podrá conectar con el servidor
Llamada a procedimiento remoto (RPC) Fallos que se pueden dar: El cliente no puede localizar al servidor Se pierde el mensaje de solicitud del cliente al servidor Se pierde el mensaje de respuesta del servidor al cliente El servidor falla antes de recibir una solicitud El cliente falla después de enviar una solicitud
Comunicación en grupo La comunicación es entre un grupo de procesos Cuando un emisor envía, el mensaje lo reciben todos los miembros de un grupo Los grupos se entienden como dinámicos, se pueden crear y destruir grupos. Un proceso puede ser miembro de varios grupos, se puede unir a uno y dejar otro Algunas redes permiten diferentes tipos de broadcasting, lo que facilita la implementación de comunicación en grupo
Comunicación en grupo Los grupos pueden ser: abiertos: no-miembros pueden enviar al grupo cerrados: solo los miembros pueden enviar al grupo Los miembros del grupo pueden ser iguales, o bien existe un miembro coordinador o líder De existir, los envíos se hacen al coordinador, que decide a qué miembro reenviar Atomicidad: cuando se envía un mensaje a un grupo, llega a todos los miembros o no llega a ninguno La atomicidad es una propiedad deseable
Comunicación en grupo ¿cómo asegurar la atomicidad? La única forma de garantizar que cada miembro reciba el mensaje es pedirle que devuelva un reconocimiento al recibirlo pero ¿y si aun así falla alguna máquina? Una solución: El emisor envía un mensaje a todos los miembros. Se activan cronómetros y se reenvía el mensaje en los casos necesarios Cuando un miembro recibe el mensaje, si lo ha visto ya lo descarta. Si no, lo envía a todos los miembros del grupo (usando también cronómetros y retransmisiones)
Comunicación en grupo Otra propiedad deseable es la del ordenamiento de mensajes Supongamos 5 miembros. Los miembros 0,1,3 y 4 pertenecen a un mismo grupo A la misma vez, los miembros 0 y 4 desean enviar un mensaje al grupo. Podrían enviarlos en este orden: 0 1 2 3 4 0 1 2 3 4 5
Comunicación en grupo ¿cómo reciben los mensajes los miembros 1 y 3? El miembro 1 recibe los mensajes en este orden: mensaje de 0 mensaje de 4 El miembro 3 recibe los mensajes en este orden: mensaje de 4 mensaje de 0 No se cumple el ordenamiento de mensajes! Esto puede ser fatal: imaginemos que fueran operaciones sobre un base de datos replicada en los miembros 1 y 3
Comunicación en grupo Aunque se cumpla el ordenamiento de mensajes hay situaciones problemáticas Supongamos dos grupos solapados. A y D quieren enviar a la vez un mensaje a sus compañeros de grupo: A B C D 0 1 2 3
Página anterior | Volver al principio del trabajo | Página siguiente |