Apuntes+de+nikaTeleco

Tras comentar los apuntes y bloques de ejercicios de alumnos seguimos con el tema 1. En primer lugar hablamos de las características que se pretenden con éstos:


 * Transparencia
 * Apertura: con protocolos que permitan añadir fácilmente nuevos sistemas (P2P)
 * Escalabilidad: para añadir nuevos nodos
 * Tolerancia a fallos: no significa que no falle nada, sino que si cae algún nodo que no caiga todo el sistema
 * Seguridad: cualquiera de las características debe hacerse de forma que no impida a los demás usuarios acceder al sistema

La mayor parte de los sistemas distribuidos están basados en protocolos RPC (//Remote Procedure Call//, Llamada a Procedimiento Remoto) donde un cliente inicia el proceso solicitando al servidor que ejecute cierto procedimiento, y éste le devuelve el resultado de dicha operación.

En la programación distribuida suele hacerse uso de APIs (//Application Programming Interface// o Interfaz de Programación de Aplicaciones. Entre los estándares hablamos de CORBA usado en Telefónica que es sintácticamente más complejo que el RPC y tiene interfaces con diferentes implementaciones. Hoy en día, los sistemas distribuidos se están estandarizando a XML que además permite definir la gramática de otros lenguajes específicos. Más simple es la interfaz REST, donde se llama a un procedimiento remoto mediante una URL. //NOTA: En las URL no puede usarse el símbolo ‘@’ ya que lo interpreta como entidad, de ahí que se use el ‘;’.//

A continuación comentamos un ejemplo en lenguaje RUBY (lenguaje muy elegante) que devuelve la latitud y longitud de un pueblo de Granada (por ejemplo se gizo para Garrucha) haciendo uso de Geonames:

code require 'net/http' require 'uri' code code pueblo = ARGV[0] code code respuesta = Net::HTTP.get( URI.parse( URI.escape('http://ws.geonames.org/search?q='+pueblo+'&country=ES'))) code code respuesta =~ / ([^<]+)<\/lat>\s + ([^<]+)<\/lng>/ code code print "Las coordenadas de #{pueblo} son latitud=#$1 y longitud=#$2" code
 * 1) !/usr/bin/ruby
 * 2) require equivale a include en otros lenguajes
 * 1) Definimos la variable pueblo que será introducido por el teclado
 * 1) Ahora simplemente llamamos a un sitio remoto y obtenemos la respuesta
 * 1) URI.parse à convierte
 * 2) URI.scape à esto transforma símbolos que no son ASCII (como espacios) #en ASCII
 * 1) Expresión regular de donde obtenemos la información
 * 1) Mensaje por pantalla

Siguiente apartado del tema: __Tipos de sistemas de computación distribuida:__

Fases para acceder a los recursos de la red: En el distribuido hacemos una petición a la red para saber que recursos tenemos. En //napster// el descubrimiento de recursos está centralizado. El problema principal de un sistema centralizado es que al atascar al servidor central, cae todo el sistema (vulnerabilidad). Este tipo de descubrimiento también lo usan sistemas de mensajería (como Messenger o Google Talk) en donde se identifican dos clases de servicios: de Presencia y Envío. Emule o Edonkey no son tan vulnerables. Los sistemas p2p no son tan vulnerables ya que aunque se caigan varios pares, el sistema podría seguir funcionando.
 * //Descubrimiento de recursos:// diferencia entre centralizado y distribuido.
 * //Disponibilidad de un recurso:// depender un recurso de uno o varios nodos
 * //Comunicación del recurso a través de la red:// en //Google Talk// el broker (nodo intermedio) es el servidor Google (que es por donde pasa la información.)

Finalmente, hablamos de //BitTorrent// (sistema centralizado), en donde se usa un //Tracker// (bucador) para descubrir recursos; de Chord, usado principalmente en investigación, en el que creas una tabla hash y la distribuyes por toda la red (descentralizado), y de SETI@HOME (centralizado).