P ONTIFICIA U NIVERSIDAD C AT ÓLICA DE C HILE E SCUELA DE I NGENIER ÍA D EPARTAMENTO DE C IENCIA DE LA C OMPUTACI ÓN IIC 2523 — Sistemas Distribuidos Tarea 1 Fecha de Entrega: Viernes 03-Mayo, 23:59 Esta tarea tiene dos partes. En la primera parte deberá implementar un sistema de diccionario remoto usando ONC RPC. En la segunda parte deberá implementar un sistema de mensajerı́a/microblogging distribuido utilizando Java RMI. Ambas aplicaciones deberán funcionar sobre un sistema Linux, para lo cual se les entregará acceso a un servidor con las herramientas necesarias para ello. Parte 1: Diccionario Remoto (50 %) Esta es una aplicación cliente/servidor. El programa servidor mantiene un conjunto de diccionarios de palabras y los programas cliente pueden conectarse a él y verificar la existencia de palabras de acuerdo a un diccionario especificado. El programa cliente debe permitir las siguientes funciones para el usuario: Verificar palabras. Mediante un llamado al servidor, el cliente verifica la existencia de la palabra en un diccionario especificado. Agregar palabras. Ingresa una palabra no existente al diccionario especificado en el servidor. Sugerir palabras. En el caso de una palabra desconocida, debe sugerir algunas alternativas (en caso que el diccionario posea palabras similares). En este caso usted debe decidir si la sugerencia se efectúa completamente en el servidor (en cuyo caso el cliente hace una consulta al servidor y obtiene las sugerencia), o bien si ésta es implementada en el cliente realizando posiblemente varias consultas al servidor. Verificar archivo de texto. Verifica todas las palabras de un archivo de texto para un diccionario, y entrega estadı́sticas de palabras correctamente detectadas, palabras inválidas y palabras nuevas agregadas al diccionario. El programa servidor debe manejar distintos diccionarios que pueden estar precargados. En cualquier caso, debe ser posible crear diccionarios nuevos y verificar archivos contra ellos. Restricciones El sistema debe funcionar en base al modelo cliente-servidor. El sistema debe utilizar el mecanismo RPC. Funcionalidades adicionales El sistema podrı́a implementar funcionalidades no especificadas en este enunciado, las cuales pueden sumar hasta un 10 % del puntaje y son opcionales. Algunos ejemplos incluyen la calidad de las sugerencias efectuadas sobre las palabras, por ejemplo, usando alguna métrica de similitd; o la posibilidad de utilizar un servicio externo para obtener sugerencias. Entrega La tarea se entrega en un directorio dentro de su cuenta con el nombre tarea1/rpc. Debe entregar los archivos fuente tanto del cliente como del servidor y un archivos con instrucciones (.txt ó .pdf) para compilarlo y probarlo. Parte 2: Mensajerı́a P2P (50 %) El objetivo de esta parte es experimentar con la comunicación RMI de Java. Para esto deberá implementar un sistema de mensajerı́a/microblogging decentralizado, en el cual cada proceso miembro se registra ante sus pares al momento de formar parte de la red y utiliza el conocimiento parcial que tiene cada miembro sobre sus vecinos para enrutar los mensajes. Cada programa identifica a un usuario individual. Al momento de registrarse debe utilizar la dirección de al menos un proceso adicional. Este registro distribuido debe servir para ubicar a los distintos usuarios. Cada usuario puede realizar las siguientes funciones: Explorar la lista de usuarios del sistema, a través de consultas a sus vecinos, las cuales pueden propagarse a través del resto de los nodos. Mantener y actualizar una lista de usuarios “seguidos”. Publicar un mensaje de largo máximo 139, el cual es propagado al timeline de todos los usuarios que lo siguen. Mostrar su propio timeline, que incluye los mensajes publicados por sı́ mismo, y los mensajes publicados por sus usuarios “seguidos”. Restricciones Es importante que no haya ninguna parte del sistema que sea centralizada. Esto es, si alguno de los nodos desaparece de la red o se vuelve inalcanzable, el sistema debe poder seguir funcionando con los nodos disponibles. Funcionalidades adicionales El sistema podrı́a implementar funcionalidades no especificadas en este enunciado, las cuales pueden sumar hasta un 10 % del puntaje y son opcionales. Algunos ejemplos incluyen la implementación de “menciones”, “reenvı́os” y mensajes directos (los cuales no aparecen en el timeline); o bien alguna manera inteligente de manejar la lista de usuarios actuales sin tener que propagar mensajes entre todos los miembros de la red. Entrega La tarea se entrega en un directorio dentro de su cuenta con el nombre tarea1/rmi. Debe entregar los archivos fuente de todos los objetos necesarios y un archivo con instrucciones (.txt ó .pdf) para compilarlo y probarlo.