Apuntes-jmlvega-26.02

=26/02/2007=

1.2 Computación Distribuida
Algunas características de los sistemas distribuidos:
 * 1) Los sistemas distribuidos permiten alcanzar grandes prestaciones sin necesidad de equipos especialmente potentes, por lo que se abaratan los costes.
 * 2) Los sistemas dist. son más robustos, si alguno de los equipos cae, el resto pueden continuar desempeñando su función sin que se produzca un error crítico. Ejemplo de esto son los servidores Web, que almacenan información redundante para asegurar el servicio. Otro ejemplo sería el que representan los servidores DNS, concretamente los servidores raíz, que constituyen un sistema masivamente paralelo.

__EJERCICIOS: Bloque 1.1__
1. Buscar ejemplos de sistemas P2P.
 * **Joost:** Sistema para distribución de videos orientado a MAC.
 * **PPLife:** PPLive se sirve de la tecnología P2P para visualizar canales de televisión desde tu propio ordenador. Se puede descargar en [|este enlace].
 * **Napster**: No es un sistema P2P puro.
 * Sistemas de mensajería instantánea: MSNMessenger, Jabber. Sin embargo, GoogleTalk NO es P2P (la información queda registrada en un servidor intermedio).

2. Identificar diferentes productos para crear clústers de computadores, e instalaciones comerciales que los usen.
 * [|openMosix]Plataforma libre para crear clústeres. [|Wiki] de openMosix
 * [|Gluster:] Plataforma GNU para crear clústeres.
 * [|OpenSSI]: Solución para crear clústeres en un entorno SSI Linux. [|Wiki] de OpenSSI. Algunos de sus [|usuarios] son:
 * [|DePauw University Computer Science Department]
 * [|Zagreb Children's Hospital]
 * [|Emory University]

3. Identificar un producto para sistemas Grid, y diferentes instalaciones que lo usen.
 * [|GridSystems:] Proyecto de la Universidad Politécnica de Valencia. Un ejemplo de aplicación es en [|Telecom italia].

1.3 Características Fundamentales de Computación Distribuida
Vamos a tratar computación distribuida ad-hoc, aprovechando capacidades de un sistema heterogéneo, dinámico. Este tipo de computación es mucho más asequible que la computación paralela.

Se suelen hacer una serie de suposiciones:
 * **La red es fiable**: No es cierto, la información puede perderse, necesitamos mecanismos para recuperar los errores.
 * **Latencia nula**: Falso, la latencia existe y suele ser alta. Un ancho de banda alto no supone una latencia baja, realmente es al contrario. Por el funcionamiento intrínseco de TCP, un ancho de banda mayor puede suponer una latencia también mayor.
 * **Ancho de Banda infinito**: Falso, tarde o temprano el ancho de banda se satura. Incluso usando un sistema como Gnutella en el que cada nodo esté conectado a otro, a partir de cierta carga la red se satura.
 * **La red es segura**: Falso, debemos suponer que los datos pueden ser falsos.
 * **La topología no cambia**: Falso, debemos construir un sistema que siga funcionando aunque cambie la topología.
 * Único administrador
 * Coste de transporte nulo: Cada paquete enviado supone una ocupación del medio.
 * Red homogénea: Hay que tratar de aprovechar las capacidades que nos ofrecen los diferentes nodos.

Características deseables:
 * Transparencia: Acceso al recurso independiente de su localización física.
 * Apertura: Los sistemas distribuidos deben estar definidos por protocolos abiertos.
 * Escalabilidad: Queremos conseguir el escalón lineal, al añadir un nuevo nodo conseguimos una mejora proporcional a un nuevo nodo. A veces se consigue escalón superlineal, pero suele ser mediante ciertos algoritmos.
 * Tolerancia a fallos
 * QoS y seguridad.

El uso de servicios remotos de hace mediante RPC (llamadas a procedimiento remoto). XDR es la forma de representar los datos. Se hace uso de serialización, se transforma un objeto a un formato que sea entendible por la red (inflado/desiflado/marshalling). Solemos contar con un API, que es un estándar que nos permite para trabajar con sistemas heterogéneos. CORBA es un estándar independiente del lenguaje, que nos generaba una serie de cabeceras para rellenar con el programa. El problema de CORBA es que pertenecía al OMG y las aplicaciones eran incompatibles unas con otras. Ejemplos de utilización de CORBA lo tenemos en telefónica. HLA sigue el mismo esquema, se usa, por ejemplo, para interconectar simuladores con fines militares. DCOM es el sistema que usa Microsoft para acceso remoto a objetos, está siendo sustituído por .Net. .Net es un entorno de aplicaciones que puede trabajar con muchos lenguajes. A pesar de que .Net es un estándar independiente de Microsoft, sigue dependiendo de Microsoft. RMI es específico de JAVA.

Hoy en día se está estandarizando XML como vehículo de invocación remota de procedimientos. Puede combinarse con otras tecnologías como AJAX.

También tienen cierto éxito interfaces simples, tales como REST, que codifica en URI. Se efectúan peticiones sin estado y sin memoria.

Hemos visto como ejemplo el servicio [|GeoName]. Devuelve las coordenadas GPS para un nombre determinado, funciona con URL. Hemos visto un ejemplo de [|programa] en PERL, en el ejemplo se descarga una página mediante método GET y se selecciona una cadena que coincide con cierta expresión regular. A continuación hemos visto el mismo programa escrito en Ruby.


 * Mashups:** Combinaciones de servicios de Internet.

__EJERCICIOS: Bloque 1.2__

 * 1) Discutir cuáles son los principales obstáculos a la escalabilidad en un sistema distribuido.
 * 2) Hacer un programa o buscar un ejemplo que use un interfaz REST para acceder a algún servicio Web, como [|del.icio.us].

1.4 Tipos de Sistemas de Computación Distribuida
Los sistemas distribuidos se clasifican por cómo se accede a los recursos desde uno de los nodos de la red; y para acceder a los recursos hay tres fases: //descubrimiento//, //disponibilidad// y //comunicación://

Descubrimiento: Encontrar el recurso. Disponibilidad: Localizar en qué nodo está disponible el recurso. Comunicación: Mediada o sin mediar, dependiendo de si la comunicación ha de pasar por un servidor intermedio.

Hay sistemas P2P puros, son aquellos que tanto que el descubrimiento, la disponibilidad y la comunicación se desarrollan totalmente entre pares. BitTorrent tiene el sistema de búsqueda de enlaces centralizado. Chord es un sistema totalmente descentralizado.

__EJERCICIOS: Bloque 1.3__

 * 1) Buscar un fichero de tamaño conocido (por ejemplo, una ISO de alguna distro Linux) y probar qué tiempo se tarda en descargarla usando BitTorrent y usando la web. ¿Qué diferencia hay? ¿De qué depende esa diferencia?
 * 2) Instalar algún cliente de gnutella (por ejemplo, gtk_gnutella) y buscar un fichero popular para bajarlo. ¿Cuánto se tarda desde la petición hasta que se encuentra? ¿Cuánto se tarda desde que se empieza a descargar hasta que se descarga?
 * 3) Discutir en el foro las ventajas relativas de las diferentes formas de localización, descarga y disponibilidad de los recursos.

=Tema 2. Taller 1: JAVASCRIPT= Para programar Javascrip sólo necesitamos un editor y un navegador. Javascript tiene un modelo de programación similar a JAVA, aunque la tipificación es menos fuerte. Javascript nos permite realizar computación distribuida. Lo más interesante es que podemos utilizar AJAX para establecer una comunicación bidireccional cliente-servidor.

Vamos a usar intérpretes de JAVASCRIPT fuera del navegador. Un ejemplo de intérprete es [|Rhino] o [|SpiderMonkey]. Otra posibilidad es usar [|CodeIDE].

//**Actualización 4/03/2007: Añadido formateo y enunciado de ejercicios. Completado Bloque 1.1**//