apuntes+funkcje+25-02-2008

Caracteristicas fundamentales de la computación distribuida: Durante mucho tiempo se ha simulado este tipo de computacion mediante la simulacion de nodos en una sola maquina. Esto provoco una serie de falacias sobre la programacion distribuida debido a los conceptos inherentes a la programacion concurrente, siendo estas por ejemplo que:
 * la red era **fiable** siendo esto falso en todos los niveles y habria que hacer una provisión de comportamientos en caso de fallos o congestión de la red.
 * la **latencia** es nula, y no solo esto no es cierto sino que ademas es impredecible dependiendo de la carga de la red e incluso de la temperatura. Con ello se supone que no habrá espera entre una petición y su respuesta, lo cual es falso y habria que realizar una comunicación asincrono siendo más eficiente en cuanto a que se puede continuar trabajando.
 * el **ancho de banda** es infinito y debido al aumento de la capacidad de las redes locales se prodria saturar la red, debiendo tener esto en cuenta a la hora de la programación de las aplicaciones (sobre todo en cuanto a peticiones realizadas).
 * la red es **segura**, pero el problema es que cualquiera persona puede entrar en la red y realizar operaciones sobre esta que comprometa la seguridad del trafico que circula por la red. No se puede confiar en ningun usuario y esto debe tenerse en cuenta ya que estos podrian intentar engañar al sistema.
 * La **topologia** no cambia, y esto es falso ya que en general la red es variable y no estatica y podria causar cambios en la topologia del sistema.
 * que hay un solo administrador, y esto no solo es falso en sistemas grid sino incluso en un solo computador debido a que puede contar con varios usuarios y con el superusuario.

Caracteristicas de los sitemas distribuidos:
 * Transparencia: un recurso debe ser independiente de su ubicación fisica.
 * Apertura: el sistema debe de poder ser ampiable y compatible con cualquier fabricante y sistema.
 * Ecalabilidad: las prestaciones deberian de crecer aproximadamente de forma lineal al aumentar el numero de nodos.
 * Tolerantes a fallos: deben de incluirse redundancias que hagan que el sistema no se caiga ante el fallo de alguno de los nodos.
 * Seguridad: los protocolos deben de asegurar que el uso de la red de los nodos sea el correcto y que la comparticion de recursos sea adecuada.

Teniendo esto en cuenta un sistema distribuido, un sistema distribuido se implementa mediante RPC (llamada a procedimiento remoto) necesitandose una representación externa de los datos (marshall). Al principio se comenzo usando los sitemas NFS mediante los cuales se podia acceder a ficcheros y directorios de maquinas remotas (sin distinción del sistema local). Existen otras formas de hacer programación distribuida mediante DCOM usado en windows para sobre el sistema poder llamar a objetos remotos. Este esta siendo sustituido por el .NET (alternativa de microsoft a java) que es un entorno de aplicaciones basado en una maquina virtual usando lenguajes de programación especificos. En java se usa el RMI como forma especifica a la llamada a procedimiento. Otra alternativa es CORBA (poco usada a excepción del I+D de telefonica). Hoy en dia XML se esta estandarizando para la invocación remota de procedimiento (a veces a traves de AJAX). La forma de realizar las llamadas es mediante REST, que consiste en codificar los parametros de la invocación a la aplicación remota mediante una URL.