Apuntes_david_26.2

Son varias las maneras en que la computación distribuida consiguen varias prestaciones: - Mejor relacion precio/prestaciones. - Las prestaciones propiamente dichas que se pueden alcanzar son mucho mayores. El Mare NOstrum es un cluster de ordenadores muy potente. - Son más fiables: si falla un ordenador están los otros. Un ejemplo son los servidores web. Los procesos se reparten entre varios sitemas, y si uno falla los procesos de éste se pasan a cualquier otro. También tienen varios sitemas de bases de datos.

Vamos a hacer los **ejercicios de autoevaluación**. 1. Sistemas P2P: PPLife, Joost (sistema P2P para MAC que distribuye video), Napster (noera P2P puro pq tenia servidores centralizados para buscar información), sistemas de mensajería instatánea,... Google Talk no es P2P pq la conversación se queda guardada en un servidor. 2. Productos para crear clusters: OpenMosix (sistema para crear clusters en Linux que usan muchas instalaciones comerciales) 3. Productos para sistemas Grid (middleware): Gridsystems (tiene un producto llamado IGV que usan empresas de farmacia, animación,...).

Hablaremos de computación masiva //ad hoc//. Tienes sus propios retos a la hora de programar, aunque tampoco nos meteremos mucho en eso.

Hay una serie de __falacias de la computacion distribuida__: - La red es fiable. Es mentira. Por defecto, deberemos suponer que los mensajes no llegan. Lo normal es q aunq haya un error en la red el sistema no se quede colgado. Los fallos se dan a todos los niveles: desde un nodo a una aplicación que falla. - La latencia es nula. Existe, y ademas depende de factores y no es siempre la misma. La distancia al nodo siguiente puede ser variable. No se deben hacer aplicacione sincronas porque hay mucho desperdicio. - Al ancho de banda es infinito. Se llega a la saturación de la red, antes o después. - La red es segura. Ni a nivel de red ni nivel de clientes. Tienes que asumir que los clientes están engañandote. - La topología no cambia. - HAy un solo administrador. Es incierto, ni siquiera si hay un unico servidor. - El coste de transporte es nulo. Todo tiene coste de elctricidad, de ancho de banda,... - La red es homogénea. Es algo obvio que no es así. Hay heterogeneidad a todos los niveles.
 * Característticas fundamentales**

El objetivo de los sistemas distribuidos: - Transparencia: acceder a un recurso con independencia de su localización. Usaremos la URI o URL para acceder a ellos. - Apertura: se deben permitir fácilmente nuevos sitemas. - Escalabilidad: capacidad para aumentar el número d enodos en la red. Se busca el escalón lineal: cuando añado un nodo más consigues una mejora equivalente a uno. A veces se consiguen escalones superlineales, que introuducen más mejoras. - Tolerancia a fallos. - Seguridad: que no haya intrusiones y que haya una determinada QoS para los usuarios de la red.

¿Cómo programar esto? Se usa RPC. Hay muchas maneras de hacerlo. Se envía una petición a un sistema remoto. Hace falta una representación de los datos estándar. Se habla de serializar un objeto cuando se pasa un objeto a un formato a una estructura de datos comprensible por por todos lo sitemas.

Se usan sistemas estándar. Hace algun tiemop se usaba CORBA: arquitectura común para que un sistema distribuya las peticiones. CORBA es independiente del lenguaje, que se llama IDL. Compilas la definición del IDL con la que obtenías una cabecera. Era muy difícil hacer sistemas en CORBA que funcinaran bien porque en la práctica las aplicaciones eran incompatibles unas con otras. Telefónica sí lo ha usado mucho.

Hay otras tecnologías más o menos propietarias: - DCOM - .Net: en la práctica Microsoft lo controla. - RMI: tiene el problema de que es especifico de Java. Es muy dificil hacerlo en toro lenguaje.

Hoy dia se esta estandarizando XML como codificacion intermedia.Se puede combianr con otras tecnologias como AJAX: envias una peticion codificada, y el servidor la recibe y te responde en XML.

Se estan haciendo populares interfaces simples. REST es un ejemplo. Codifica las llamadas en un URL. VEmos un ejemplo en las transparencias. Se puede usar desde cualquier lenguaje. Son peticiones sin estado y sin memoria.

Como ejemplo, un servicio llamado GeoNAmes. Devuelve las corrdenadas para un nombre determinado. EN una URL codifica los parametros de la peticion. T devuelves los datos de 4 formas diferentes. VAmos a ver un ejemplo en PERL.


 * 1) !/usr/bin/perl


 * 1) Busca pueblos de Granada y devuelve la long/lat
 * use** LWP::Simple; #LibrerÃ­a web
 * use** URI::Escape; #CodificaciÃ³n en URI


 * my** $pueblo = uri_escape( **shift** ); #Coge el primer argumento de la linea de comandos


 * 1) Interpolas $pueblo. Te bajas directamente la pag web
 * my** $resultado = get(http://ws.geonames.org/search?q=$pueblo&country=Spain); y
 * 1) Expresiones regulares. Me coge todo lo que se encuentre entre y y 
 * my** ($lat, $lng) = ( $resultado =~ m{ ([\d\-\.]+) \s+ ([\d\-\.]+) }gs );


 * print** "La latitud y longitud de $pueblo es $lat:$lng\n";

Lo vemos ahora en Ruby

code
 * 1) !/usr/bin/ruby

require 'net/http' require 'uri'

pueblo = ARGV[0] #~Coge el primer argumento respuesta = Net::HTTP.get( URI.parse( URI.escape('http://ws.geonames.org/search?q='+pueblo+'&country=ES') ) ) respuesta =~ / ([^<]+)<\/lat>\s+ ([^<]+)<\/lng>/ print "Las coordenadas de #{pueblo} son latitud=#$1 y longitud=#$2"
 * 1) Se pasa la cadena a formato URI

code Perl y Ruby tienen sitios estánda donde se colocan las librerias documentadas.

Los mashups son combinaciones de servicios que están en Internet. Usan interfaces de varios servicios diferentes y los combinan.

del.icio.es es un servicio de bookmarks. Permite asignar etiquetas a un URL.

-** Descubrimiento del recurso al que tienes que conectarte. - Disponibilidad, que puede ser centralizada o distribuida. - Comunicación. Puede ser sin mediar (cd se conectan dos pares solo intervienen los pares) o mediada (como en el caso de Google Talk ya comentado)
 * Tipos de sistemas de computación distribuida.

En funcion de esto hay varios tipos de sitemas. En los puros todo se hace de manera distribuida. Chord es un sistema experimental que usa tablas de hash distribuidas. Es descentralizado pero en la parte de descubrimietno de recursos necesitas conocer la dsitribucion de los hash. También esta Seti@home.

IDeas a sacar: hay sistemas P2P que lo son realmente, y otros que se llaman asi poero que realmente no son asi.