Apuntes+josepd+25-2-08

Empezamos la clase añadiendo los blogs al Planet AAP y aprendiendo a utilizar el wiki.

Pasamos a comentar los ejercicios de los compañeros.

Seguimos avanzando en teoría y vamos a ver las características fundamentales de la programación distribuida. Rompemos la mentalidad de la programación concurrente pero hay que evitar algunas falacias en esta nueva etapa: -La red no va a ser fiable a ninguno de los niveles y hay que considerar un plan B antes los errores. -La latencia, ademas de no ser nula, es impredecible y puede variar por múltiples factores. Hay que considerar este tiempo y usar sistemas asíncronos a ser posible. -La red se acaba saturando al crecer. -La red no es segura a ningun nivel y puede haber falsificaciones de todo tipo. Nunca hay que suponer que el usuario es honrado: problema de los proxys. -Nunca vas a saber si tus vecinos van a seguir siendo los mismos en todo momento: la topología es cambiante. Esa vision estática ya ha desaparecido. -En los sistemas grid, por ejemplo, hay mas de un administrador. O en un único nodo, más de una persona puede tener la clave del admin.

A mas latencia, mas throughput y viceversa. Cuando enviamos un paquete pequeño, recibimos muy rápido el ack pero al enviar uno muy grande, tardamos mas en obtener respuesta pero cuando lo recibimos, tenemos mucha mas informacion.

Al usar estos sistemas, queremos conseguir los siguientes objetivos: -El sistema debe ser accesible desde cualquier recurso. -Tiene que ser posible añadir nuevos sistemas de forma sencilla. -Los sistemas han de ser escalables, de forma que las prestaciones crezcan de forma lineal cuando lo hagan los nodos. -Si cae uno de los componentes del sistema, ha de aguantar el resto. Debe ser tolerante a fallos. -En cuanto a la seguridad, tenemos que regular la red de forma que la compartición de recursos sea lo más justa posible.

Hay muchas formas de hacer programación distribuida: RPC es una de ellas, que inicialmente se hizo para NFS. Tambien esta DCOM, de forma que mapeamos el sistema Windows en objetos. Esta siendo sustituido por .Net (alternativa cuasi-libre a Java). Otra opción es RMI, que es un método específico de Java para acceder a métodos remotos.

Hoy día se está estandarizando XML para la invocación remota de procedimientos, que se usa en AJAX (Java asíncrono + XML). REST es de los más simples e introduce la sintaxis en un URI.

Vamos a ver GEONAMES (ejemplo de servicios web) a través de PERL, que es un lenguaje de scripting.Parece que el ejemplo no funciona... Tambien vemos el ejemplo en Ruby. Para instalarlo en casa podemos usar Cygwin.