apuntes+santiggd+25-2-2008

=Apuntes 25-2-2008=

Características fundamentales de la computación distribuida
Existen una serie de falacias sobre la computación distribuida que luego no son ciertas y pueden dar problemas a la hora de programar de forma distribuida.


 * **La red es fiable:** no se puede dar por sentado que siempre va a funcionar bien, ya que puede fallar a cualquier nivel. Además de los propios errores de la red, hay que añadir los posibles ataques, como los típicos ataques DoS.


 * **La latencia es nula:** No solamente la latencia no es nula sino que va cambiando, depende de muchos factores como por ejemplo la cogestión de la red, o distintos posibles fallos concretos en la topología de la red, que hagan necesario reenrutamiento que aumenta la latencia. Es necesario tener esto en cuenta a la hora de programar, especialmente manteniendo solicitud asincronas para no dejar el equipo parado esperando.


 * **El ancho de banda es infinito:** al añadir nuevos nodos, al final algunos enlaces acaban saturandose.


 * **La red es segura:** La red realmente no es segura, existen muchos tipos de ataques que pueden vulnerar la seguridad de la red, esto es especialmente visible en las redes wireless donde el medio es compartido. Además se da por sentado que el otro extremo es fiable, pero existen todo tipo de falsificaciones tanto de destinos como de nodos proxy, por lo que no se puede asumir la seguridad.


 * **La topología no cambia:** la topologia normalmente siempre cambia, se van añadiendo nuevos nodos y van cayendo otros, y los nodos van continuamente comprobando si hay cambios en los vecinos. Esto es especialmente importante en las redes P2P.


 * **Hay un único administrador:** cada equipo va a tener un administrador distinto y no podemos suponer nada sobre él.

Las principales características de los sistemas distribuidos son:
 * Transparencia: el acceso a un recurso no debe diferir de si se trata de un recurso local o uno remoto.
 * Apertura: los protocolos deben permitir una comunicación con la mayoria de los sistemas.
 * Escalabilidad: se debe permitir añadir nuevos equipos a la topología de red sin que disminuyan considerablemente las prestaciones.
 * Tolerancia a fallos: deben poder seguir funcionando a pesar de que ocurran fallos como caidas de enlaces o nodos, aunque disminuyan las prestaciones como es lógico.
 * Seguridad: se debe regular la pertenencia a la red de forma que se aseguren todas las otras características.

A continuación vamos a ver como se pueden llevar a cabo los sistemas distribuidos. Con respecto a la programación, una forma habitual es utilizando la llamada a procedimiento remoto (RPC). Originalmente este sistema se utilizó para NFS (Network File System), donde los sistemas remotos no tienen ningún tipo de distinción sintactica con respecto a los sistemas locales. En lenguajes orientados a objetos existen versiones denominadas invocaciones a método remoto. Para que esto funcione se necesitan funciones de marshling de forma que los datos se igualen en la red para que cualquier sistema sea capaz de entenderlos, independientemente de la forma de almacenar los datos de este.

Existen otras tecnologías de programación distribuida, como DCOM, utilizado por Windows. Este se ha quedado algo anticuado, esta siendo sustituido por .Net, cuya idea original era la de tratar de desvancar a Java por medio de una serie de lenguajes alternativos y otra máquina virtual. El conjunto de herramientas y lenguajes, unos son propietarios y otros libres. Por otro lado está RMI, qu es la invocación de métodos remotos por parte de Java. También se llevó a cabo un estandar CORBA (Common Object Request Broker Arquitecture) para la distribución de objetos y la interacción de distintos sistemas y plataformas, pero resulta tremendamente complicado por lo que no ha tenido éxito.

Hoy en día se esta desarrollando enormemente el XML para llevar a cabo la invocación remota de procedimientos. XML se puede combinar con otras tecnologías, como sucede por ejemplo AJAX.

Ahora vemos el funcionamiento de un script en Perl para el acceso a un sitio web, concretamente Geonames, donde se realiza una petición a la web, esta devuelve la respuesta en formato XML con la información solicitada.