. .. Casa abierta al tiempo UNIVERSIDAD AUT6NOMA METROPOLITANA iencias ,@I ásicas e ngeniería lndice Página Agradecimientos 1 Introducción Problemática . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Casodeestudio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Estructura del documento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Notacionesdeldocumento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Capitulo 1 v . Conceptos preliminares 2 2 2 2 4 5 SISTEMASDISTRIBUIDOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Características clave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Compartición de recursos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Apertura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Concurrencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Escalabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Toleranciaafallas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Transparencia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 6 6 7 7 8 8 9 BUSCADORES (SEARCH ENGINES) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Estrategiasdebúsqueda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Navegacióndirecta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ArbolesdebúsquedadelWeb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . IndicesdebÚsquedaenelWeb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Filtrado automático de Newsgroups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 11 11 11 13 13 para 2 . Medios Capítulo obtener información 15 FTP (Protocolo de Transferencia de Archivos). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 .. ... PRINCIPALES SISTEMAS DE BúSQUEDA DE RECURSOS EN INTERNET . .............. ... Archie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ............... ... Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ............... ... Las bases de datos de Archie . . . . . . . . . . . . . . . . . . . . . . . . . ............... ... La arquitectura de Archie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . ............... ... ‘Cómo lo hicieron? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ... i Cómo funcionaArchie? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ............... ... En contacto con Archie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .............. ... Ventajas y Desventajas de Archie . . . . . . . . . . . . . . . . . . . . . . ............... ............... ... Gopher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .................................. Historia . . . . . . . . . . . . . . . . . . . . . . . . . .................................. La arquitectura de Gopher . . . . . . . . . . ................................... ‘Cómo funciona Gopher? . . . . . . . . . ................................... En contacto con Gopher . . . . . . . . . . . 16 17 17 18 18 19 20 20 21 21 21 22 23 24 i DISEÑO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCAOOR DE WEB Página Veronica . el camino a los servidores Gopher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ventajas y Desventajas de Gopher. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . WAIS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . La arquitectura de WAIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ‘Cómo funciona WAIS? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Encontactocon WAIS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ventajas y Desventajas de WAIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . WorldWideWeb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Historia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Laarquitecturade WWW. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Encontactocon WWW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Árbolesdebúsqueda. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ventajas y Desventajas de WWW. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 26 OTROS PRINCIPIOS DE BúSQUEDA. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Neffind. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . El Servicio de Información Knowbot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Alex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sistemas de Archivos Semántico. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 32 32 LA NORMA X.500 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.ConceptosyModelo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.Nombrado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. La base de información del Directorio ................................... 1.3. Operación distribuida. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1. Modelo funcional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.2.Modelodecapas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.3. Procedimientos para la operación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4. Administración distribuida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2. Servicios de Directorio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1. Ligamiento y Desligamiento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Operación de Lectura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.OperacióndeBúsqueda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4. Operación de Modificación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.OperacióndeAbandono . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. Protocolos del Directorio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 . Algunos tipos de Atributos y Clases de Objetos ................................. 4.1.Atributos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. Clases de Objetos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 33 33 35 36 36 37 37 39 40 40 40 40 41 41 41 41 41 42 ANALISIS DE LOS PRINCIPALES SERVICIOS DE BúSQUEDA DE INFORMAC16N. . . 43 43 Flexibilidad en el uso e interacción con el usuario ................................. Manipulación.organización y manejodelainformación . . . . . . . . . . . . . . . . . . . . . . . . . . . . Comentario sobre la normaX.500 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ............ Forma en que satisfacen las características clave de un sistema distribuido Tablacomparativa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Capítulo 3 - Diseño del Buscador 26 26 27 8 29 29 30 30 30 30 31 31 32 33 43 44 44 46 47 COMO FUNCIONA EL BUSCADOR DE RECURSOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 ARQUITECTURA DEL BUSCADOR DE RECURSOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 INDICE Página ROBOT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . LAS BASESDEDATOSDE LA ARQUITECTURA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Base de Datos de Sitios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bases de Datos de PalabrasClave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . SERVIDORES (Primarios y Secundarios) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . DISTRIBUIDORDESOLICITUDESDECONSULTA ............................... INTERFAZ DE USUARIO .................................................... ARQUITECTURA GLOBAL .................................................. Capítulo 4 .Evaluacihn 49 51 51 51 52 54 55 56 57 FUNCIONALIDAD DEL BUSCADORRESPECTO A OTROSBUSCADORES . . . . . . . . . . . . 57 CALIDAD DELA INFORMACIóN QUEENTREGA EL BUSCADOR . . . . . . . . . . . . . . . . . . . . 58 CARACTERíSTICASCLAVE DEL BUSCADOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Compartición de recursos .................................................... Apertura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Concurrencia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Escalabilidad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Toleranciaafallas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Transparencia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 58 58 59 59 59 60 Capítulo 5 - Conclusiones y Perspectivas 61 CONCLUSIONES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 PERSPECTIVAS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 ANEXOS deAnexo A . Manual 67 REQUERIMIENTOS DEL SISTEMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Requerimientos de Hardware ...................................................... ....................................................... Requerimientos de Software 67 67 67 INSTALACIóN Y CONFIGURACION DEL SISTEMA.................................... Instalación delAgenteDistribuidor de Solicitudes..................................... InstalacióndelmóduloCliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . InstalacióndelServidordeSolicitudes ............................................... InstalacióndelRobotBuscador ..................................................... ConfiguracióndelasBasesdeDatos ............................................... 67 68 68 EJECUCIóN DEL SISTEMA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . EjecucióndelServidordeSolicitudes ............................................... EjecucióndelAgenteDistribuidordeSolicitudes ...................................... EjecucióndelRobotBuscador de Recursos.......................................... Ejecuci6nde la lnterfazdeUsuario ................................................. Utilizando la lnterfaz de usuario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Requerimientosdelsistemadelusuario ..................................... 69 69 71 74 74 75 75 76 76 77 iii DISENO E IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDO PARAUN BUSCADOR DE WEB Página Anexo B .Manual Técnico 79 PROBLEMAS ENCONTRADOS DURANTELA IMPLEMENTACIÓN DEL SISTEMA . . . . . . . 79 DESCRIPCIóN DELOS MóDULOS COMPONENTES .................................. 80 C6DIGO FUENTE DEL SISTEMA..................................................... Código fuente del Robot Buscador de Recursos ...................................... ClaseSpider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clasespiderlhread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ClasePageVisitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ClaseHTMLParser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ClaseVisitor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ClaseWordsTable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clase textTag. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ClasewordlnUrl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ClaseMyProperties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Código fuente del Servidor de Solicitudes ............................................ ClaseDataSase. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ClaseSearchServer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ClaseSearchServerThread. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Claseserver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Código fuente del Agente Distribuidor de Solicitudes .................................. ClaseAgentServer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clase AgentServerThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ClaseCheckHost. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C6digo fuente dela lnterfaz de Usuario (Cliente)..................................... ClaseSearchApplet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Clase Search Template . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ClaseClientRequestEntry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ClaseRequest. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ClaseQuickSorf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . lnterfaz Comparable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 81 81 85 87 92 97 99 106 109 110 111 111 117 118 121 124 125 128 130 134 134 136 142 144 147 148 Glosario 149 Referencias 153 iv Agradecimientos Q uerernos agradecer a nuestra asesora de proyecto, la Dra. Elizabeth Pérez Cortés por su confianza, apoyoy disposición para llevar a cabo este proyecto de investigación, sus enseñanzas y sugerencias fueron de vital importancia para nosotros. Queremos agradecer también a los profesores de la licenciatura que estuvieron presentes en nuestra formación universitaria por habernos transmitido sus conocimientos,quesonlabase de nuestraformaciónprofesional, y por habernos dado su orientación, tiempo y apoyo a lo largo de lacarrera. Agradecemos también a todas las personas que nos ayudaron de una u otra forma en la realización de este proyecto de investigación, yaque sin su ayuda nos hubiera tomado mayor esfuerzo. Finalmente queremos agradecer a nuestras familias y en especial a nuestros padres por habernos dado en todo momentosuapoyo a lo largo de nuestra formación universitaria y en la vida; a ellos dedicamos nuestro esfuerzo y dedicación que estuvieron presentes a lo largo de nuestra carrera en especial durante la realización de este proyectodeinvestigaciónyaquesuculminaciónrepresentatambiénla terminación denuestrapreparaciónuniversitaria y un pasomásennuestra formación profesional. V Introducción I nternetesuna colección demiles y miles de redes conectadas a millonesde usuarios de instituciones académicas, industriales y de gobierno a través de todo el mundo. Ofrece un gran potencial de colaboración y comparte recursos tales como documentos, software, información, y servicios. En este ambiente la búsqueda de recursos es un tópico muy importante. Lo anterior se puede ver de la siguiente manera, si los usuarios no pueden encontrar los recursos, entonces sólo están aprovechando unapequeña parte de los beneficios que implica esta gran red. El tamaño de Internet necesita escalabilidad en los algoritmos utilizados para la búsqueda y localización de recursos en su granespacio.Una solución muy común es organizar lainformaciónde los recursos enuna jerarquía. Desafortunadamente, las organizacionesjerárquicas se vuelven ineficientes a medida que los recursos se van incrementando. Los usuariosdeben comprender cómomás y más componentes anidados se van estableciendo. Más aún, los usuarios sólo pueden buscar eficientemente la informaciónjerarquizada de acuerdo a los atributos primarios de organización. La descentralización administrativa de Internet significa que la información de los recursospuedeprovenir de fuentes variadas y enformatos diferentes. Mientras que los estándares son de gran ayuda, esdificil especificar estándares que sean adoptados globalmente y porla tecnología actual. A medida que unagrancantidad de institucionescontribuyenenla infraestructura de información global, será posible establecer varios caminos para la organización y formate0 de la información. Otra consecuencia de la descentralización de Internet es que los recursos frecuentemente no son anunciados formalmente. Por ejemplo, muchos servidores de Internet proveen acceso a una gran variedad de software y documentos, pero los administradores de este servidor no registran estainformaciónen un directorio de servicios. Normalmente esta información esanunciada sólo unavezencorreos electrónicos o mensajes de noticias. Inclusive, si los recursos son formalmente registrados algunos recursos son de valor sólo por un periodo corto de tiempo. Los sistemas tradicionales de organización de la información (como los usados en librerías, por ejemplo) no son buenas opciones debido al cambio tan rápido de la información [OVRK93]. Gran parte de los servicios que se pueden encontrar en Internet, están contenidos enla World Wide Web (o simplemente el Web). La World Wide Web es parecida a una interconexión de varios sitios que comparten un formato llamado “Lenguaje de marcado de hipertexto”(o HTML, HiperText Mark-up Languaje). El Web, el cual está creciendo a razón del 20% mensual (según la Internet Society en 1996), es el campo más impactante en la red debido a que es extremadamente poderoso, flexible y fácil de usar. La belleza del Web descansa en la manera en que los recursos (texto, sonido, fotos, video, etc.) están ligados unos con otros. Es por esto que el Web se ha convertido en un medio muy atractivo de publicidad para la mayoría de las empresas e instituciones de tipo comercial y por lo mismo, se ha incrementado su tamaño en granmedida.Actualmente las compañías de tecnología dela computación utilizanel Web como un mediopara acrecentar sus ingresos anuales y han desarrollado una nueva línea de hardware especial para la navegacidn dentro de él. Todo esto patrocinado en gran parte por aquellas empresas que se verían principalmente beneficiadas por esta nueva tecnología, la cual impulsaría aún másla navegación enel Web. De esta forma el Web se ha convertido en lo que es ahora, el nuevo espacio de publicidad para aquellas empresas. La entrada de miembros de carácter comercial a la Internet provocó desde sus inicios, un crecimiento elevado de la comunidad de usuarios y ha rebasado las expectativas de crecimiento de la red. Este descontrol inesperado de la comercialización dentro de la red ha provocado varios descontentos y frustraciones entre los miembros de la comunidad del ciberespacio. Debido a que el Web es un medio relativamente barato de comercialización y propaganda, las empresas llevan a cabo un sin fin de estrategias para hacer que su producto llegue a más y más 1 DISEA0 E IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB usuarios. Desafortunadamente estas estrategias no respetan mucho los intereses de vuelven un aspecto molesto dela Internet. los usuarios y día a día se Problemática Un problema en particular con el que se encuentra cualquier persona novata y no tan novata en la navegación dentro del Web es: la localización de recursos de inter&. Dentro de la organización de la Internet, existen varios dominios alos que son incorporados los sitios existentes en la red. Entre los más importantes están los dominios gubernamentales (.gov), educativos (.edu), comerciales (.corn) y de organizaciones (.org) que no entran en los dominios anteriores [LYND93]. El crecimiento de la cantidadde los recursos dentro del Web hace que la localización de recursos específicos sea cada día más complicada, y no sólo eso, lo que hace más complicada la búsqueda de recursos es la gran cantidad de información comercial que se encuentra hoy en la Internet y que crece a grandes velocidades. De acuerdo a información de la Internet Society, el 70% de los sitios registrados en la Internet son de dominio comercial, y sólo un 10% son sitios de dominioeducativo. Las cifrasanterioresnosreflejanlavelocidad con laque el propósito comercial ha superado al propósito inicial de la Internet: La investigación y la educación. Si a esto aumentamos la naturaleza cambiante del Web en donde los documentos pueden ser modificados en cualquier momento por los administradores de los sitios, la búsqueda puede complicarse aún más. Para las personas interesadas en la localización de recursos del tipo no-comercial dentro del Web, es molesto o encontrarse conmucha “basura” informática(denominada así porqueesinformaciónnosolicitada,inútil carente de sentido) en casi todos los buscadores de recursos del Web. Esto es casi inevitable ya que los métodos empleados por muchos buscadores de recursos no son lo suficientemente efectivos como para poder identificar a la información que puedeser “basura” para algunos usuariosy omitirla al momento de reportar los resultados de búsqueda. Caso de estudio Es por todo lo anterior, y sobre todo por la necesidad de la comunidad educativa por obtener información de carácter didáctico, que tomamos como caso de estudio el diseñar e implementar un buscador de recursos en el Web. Objetivos Los objetivos principales quese persiguen al implementar estebuscador son: 0 Que cumpla con las necesidades de la comunidad educativa. Que la arquitectura del buscador se base en un Sistema Distribuido el cual integre mecanismos de tolerancia a fallas y transparencia ensu distribución a la vista delos usuarios. Estructura del documento Este documento consta de los siguientes capítulos: 2 INTRODUCCldN Capítulo 1 - Conceptos preliminares En este capítulo se presentan conceptos útiles para la comprensión del documento tales como: 0 Sistemas Distribuidos: Se presenta una introducción en donde se habla acerca de la historia de estos sistemas y cómohanidoevolucionando así como sus características clave queson:comparticiónderecursos, apertura, concurrencia, escalabilidad, tolerancia a fallasy transparencia. Buscadores: Se describenlascaracterísticas,limitaciones y estrategias debúsquedadeinformaciónen el Web. - Capítulo 2 Medios para obtener información En este capítulo se presenta una descripción detallada acerca delfuncionamiento del “Protocolo de Transferencia deArchivos” (FTP) yaquees una delasaplicacionesmásimportantesyutilizadasenInternetpara la transferencia de archivos. En este capítulo se exponen también los principales sistemas de búsqueda de recursos en Internet. Además, se hace un análisis comparativo entre ellos de su funcionalidad y eficiencia, y se muestra un cuadro comparativo resumiendo dicho análisis. Capítulo 3 -Diseño del Buscador En este capítulo se hace un planteamiento más específico sobre el problema de la obtención de recursos de interés para la comunidad educativa en Internet y se expone el diseño del buscador que proponemos para dar solución a dicho problema, mostrando detalladamente cada entidad de la arquitectura del sistema. - Capítulo 4 Evaluación En este capítulo se hace un análisis cualitativo de la implementación del buscador propuesto respecto a otros buscadores existentes, los objetivos planteados así como a las características clave de los Sistemas Distribuidos. Capítulo 5 - Conclusionesy Perspectivas En este capítulo se retoman los objetivos y propósitos del proyecto y a partir de un resumen de la evaluación se hace una reflexión de acuerdo a los objetivos planteados desi lo conseguido en el proyecto fue satisfactorio o no. Aquí también se mencionan perspectivas de cómo solucionar las fallas encontradas en el capítulo 4 y de algunos aspectos que no se alcanzaron a cubrir, peroque sin duda, darían un mejor funcionamiento al buscador. ANEXOS Anexo A - Manual de Usuario Aquí se explica cuáles sonlos requerimientos de hardwarey software del sistema, cómo instalarlo y configurarlo y, cómo debe ser ejecutado. Además se explica cómo el usuario debe hacer uso del buscador y cuáles son los requerimientos necesarios para queéI pueda hacerlo. Anexo B - Manual Técnico. Contiene información técnica acerca de la implementaron del sistema. Esta información abarca los problemas y lassolucionesa esos problemas que fueronencontrados durante laimplementación, una descripción de los móduloscomponentes y del código fuente delsistemay,porúltimo la documentacióncompletadel código empleado en la implementación del buscador; todo esto con el fin de que desarrolladores posteriores puedan entender y modificareste sistema de la formaque les parezca más conveniente. Glosario En esta sección se incluyen todas las palabras técnicas utilizadas en este documento junto con una definición de cada una de ellas. 3 DlSEfiO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB Referencias Aquí se publican todas las referencias bibliográficas desarrollar este proyecto. quefueronutilizadasenlainvestigaciónquerequirióel Notaciones del documento Dentrodelaestructuradellibro los términostécnicosseránseñaladosconeltipodeletra Tahoma y su significadoselocalizará en elGlosario detérminos técnicos. Además,algunosconceptosimportantesque se mencionan dentro del texto serán destacados con el tipo de letraen itcilica. Las referencias que se utilizaron para la elaboración de este documento se encuentran indicadas a lo largo del mismoconetiquetasencerradasencorchetes [ 1. La informacióncompletadeesasreferencias se obtiene buscando dichas etiquetas en la sección final de este documento llamada “Referencias”. 4 CAPITULO 1 Conceptos Preliminares Sistemas Distribuidos U n sistema distribuido puede ser visto como una colección de computadoras autónomasenlazadas por una red, con software diseñado para producir una facilidad integrada de cómputo. Los sistemas distribuidos son implementados enplataformas de hardware que varían en untamaño que puedeir desde un pequeño grupo de estaciones de trabajo conectadas por una red de área local hasta la Internet - una colección mundial de redes de área local y de área amplia que conectan a miles eincluso millones de computadoras [COUG94]. Las aplicaciones de los sistemas distribuidos van desde el establecimiento de facilidades decómputode propósito general para grupos de usuarios hastasistemasde comunicación automatizados bancarios y de multimedia, y abarcan casi todas las aplicaciones comerciales y técnicas de lascomputadoras. Las características clave de los sistemas distribuidos son soportadas por la compartición de recursos, apertura, concurrencia, escalabilidad, tolerancia a fallas y transparencia. Estas características son consideradas para el diseño de software de un sistema distribuido. La historia de los sistemas distribuidos tiene sus orígenes en el desarrollo de computadoras multiusuario y redes de computadoras en la década de los 60s y fue estimulada por el desarrollo de estaciones de trabajo personales de bajo costo, redes de área local y el sistema operativo uND(en los 70s. Estos son principalmente los factores que contribuyeron al desarrollo de los sistemas distribuidos. Un sistema distribuido consiste enuna colección de computadorasautónomas conectadas porunaredde computadoras y equipadas con un software de sistema distribuido. El software de sistema distribuido habilita a las computadoras a coordinar sus actividades y a compartir los recursos del sistema, como hardware, software y datos. Los usuarios de un sistema distribuido bien diseñado deberán percibir una facilidad de cómputo individual e integrada aúncuando éSta esté implementada por varias computadoras enlugares distintos. El desarrollo de los sistemas distribuidos surgió con la aparición de redes de computadoras de área local de alta velocidad en el comienzo de los 70s. Más recientemente la disponibilidad de computadoras personales de alto rendimiento, estaciones de trabajo y servidores ha resultado en una alza para los sistemas distribuidos y una baja paralas computadoras centralizadas y multiusuario. Estatendencia ha sido acelerada por el desarrollode software diseñado para dar soporte a la implementación deaplicaciones distribuidas. Mucha investigación y trabajo de desarrollo han sido realizados en el diseño de sistemas distribuidos y en sus principios subyacentes. El trabajo continúa, pero ya hay muchas implementaciones prácticas efectivasde sistemas distribuidos y un cuerpo sustancial de conocimiento teórico y empírico de su diseño. 5 DISENO E IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDOPARA UN BUSCADOR DE WEB Como muchos otros campos de la cienciade la computación, el desarrollo de los sistemas distribuidos ha progresadoporla formulación de los modelos abstractos para sistemas que establecen los alcancesdelos requerimientos generales, seguido por el diseño e implementación de sistemas que soportan esos modelos. En las figuras 1.1 y 1.2 se ilustran las diferencias entre un sistema distribuido y uno centralizado. Figura 1.1. Sistema distribuido simple. W Figura 1.2. Sistema Centralizado multiusuario. CARACTERhTICAS CLAVE Seis características clave son primariamente responsables de la utilidad de los sistemas distribuidos. Estas son: compartición de recursos, apertura, concurrencia, escalabilidad, tolerancia a fallas, y transparencia. Debe hacersenotarque éstas no son consecuencias automáticas de la distribución, los sistemas y el softwarede aplicación deben ser cuidadosamente diseñados para de esa forma asegurar que éstos son de fiar. Comparticih de recursos. El término “recurso” es muy abstracto, pero se caracteriza por el alcance de las cosas que puedenser compartidas útilmente en unsistema distribuido. El alcance se extiende desde componentes de hardware tales como discos duros e impresoras hasta entidades de software como archivos, ventanas, bases de datos y otros objetos de datos. 6 CONCEPTOS PRELIMINARES Losusuariosde sistemas, tanto centralizados como distribuidos, están acostumbrados a los beneficiosde la compartición de recursos. Los beneficios del acceso compartido a un sistema de archivos sencillo con bases de los datos, programas, documentación y otrainformación fueron primero reconocidos con laapariciónde sistemas multiusuario o de tiempo compartido en los comienzos de los 60s y los sistemas UNIX multiusuario en los 70s. 0 Dispositivos de hardware tales comoimpresoras, discos duros de gran capacidad y otros periféricosson compartidos por conveniencia y para reducir costos. La compartición de datos es un requisito esencial en muchas aplicaciones de computadoras. J Desarrolladores de software trabajando en equipo pueden necesitar acceso al trabajo de cada uno del equipo y pueden compartir las mismas herramientas de desarrollo, requiriendo solo unacopiade compiladores, librerías de procedimiento, editores y ayudas para depurar; cuando se requiera que una herramienta de desarrollo o una nueva versión de un compilador sea instalada, todoslosusuarios obtienen acceso inmediatamente a ellas. J Muchas aplicaciones comerciales habilitan a los usuarios para accesar objetos de datos compartidos en una base de datos sencilla que esté activa. L a apertura. La apertura de un sistema de computadora es la característica que determina si el sistema puede ser extendido en varias formas. Un sistema puede ser abierto o cerrado con respecto a extensiones de hardware por ejemplo, la adición de periféricos, memoria o interfaces de comunicación - o con respecto a extensiones de software - la adición de nuevas características de un sistema operativo, protocolos de comunicación y servicios de compartición de recursos. La apertura de los sistemas distribuidos está determinada primariamente por el grado en el cual nuevos servicios pueden ser adicionados sin afectar o duplicar los servicios existentes. La apertura es alcanzada especificando y documentando las interfaces de software clave y haciéndolos disponibles a desarrolladores de software. Es decir que las interfaces clave sean publicadas. Históricamente, los sistemas de computadoras fueron bastante cerrados. Ejecutaban programas en un ámbito de lenguajes de programación pero ellos no permitian a los desarrolladores de aplicaciones aumentar las semánticas de los lenguajes paraexplotar características de sistema operativoo hardware nuevos. Los sistemas que están diseñados para soportar compartición de recursos, en este sentido, son llamados sistemas distribuidos abiertos para enfatizar el hecho que ellos son extensibles. Estos pueden ser extendidos en el nivel de hardware por la adición de computadoras en la red y en el nivel de software por la introducción de nuevos servicios, habilitando programas de aplicación para compartir recursos. En resumen: 0 0 Los sistemas abiertos son caracterizados por el hecho de que sus interfaces claves son publicadas. Los sistemas distribuidos abiertos están basadosenlaprovisión de un mecanismo decomunicaciónde interproceso uniforme e interfaces publicadas para accesar a recursos compartidos. Los sistemas distribuidos abiertos pueden ser construidos desde hardware y software heterogéneos, posiblemente de diferentes distribuidores. Pero la conformación de cada componente a ser publicado como estándardebeser cuidadosamente probado y certificado silos usuarios van a estar protegidos dela responsabilidad de la resolución de problemas de integración del sistema. Concurrencia. Cuando muchos procesos existen enunacomputadoraindividual decimos queestánsiendo ejecutados concurrentemente (como cada proceso sólo existe lo quedure el programaen ejecución, la coexistencia implica concurrencia de ejecución.). Si la computadora está equipada con un procesador central 7 DISEÑOE IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB individual, esto se logra partiendo en pequeñas porciones cada proceso. Si la computadora tiene n procesadores, entonces hasta n procesos pueden ser ejecutados simultáneamente, esto es, en paralelo. En los sistemas distribuidos hay muchas computadoras, cada una, con uno o más procesadores centrales. Si hay m computadorasen un sistema distribuido con un procesador central cadauna, entonces hasta m procesos pueden correr en paralelo siempre y cuando éstos estén localizados en diferentes computadoras. En un sistema distribuido que esté basado en el modelo de compartición de recursos descrito anteriormente, las oportunidades para la ejecución en paralelo ocurren por dos razones. l . Muchos usuarios invocan simultáneamente comandos o interactúan con programas de aplicación. 2. Muchos procesos de servidor corren concurrentemente, cada uno respondiendo a diferentes solicitudes del proceso cliente. Resumiendo, la concurrencia y la ejecución enparalelo se originan naturalmente en lossistemas distribuidos con las actividades individuales de los usuarios, la independencia de los recursos y la localización de procesos de servidor en computadoras separadas. La separación de esas actividades habilita el proceso para actuar en paralelo encomputadoras separadas. Los accesos concurrentes y actualizaciones a recursos compartidosdebenser sincronizados. Escalabilidad. Los sistemas distribuidos operan efectiva y eficientemente en muchas escalas distintas. El sistema distribuido más pequeño que puede llevarse a la práctica, probablemente consiste de dos estaciones de trabajo y un servidor de archivos, mientras que un sistema distribuido construido alrededor de una red de área local puede contener varios cientos de estaciones de trabajo y muchos servidores de archivos, de impresión y de otros propósitos especiales. Varias redes de árealocalsonamenudo interconectadas ainter-redes, y éstas pueden contener muchos miles de computadoras que forman un sistema distribuido individual, habilitando recursos a ser compartidos entre todos ellos. El software de sistema y aplicación no debería necesitar ser cambiado cuandola escala del sistema crezca. Esta característica es lograda hasta un grado significativo en la mayoría de los sistemas y componentes distribuidos actuales, pero, es un área en la cual se requiere de una investigación másp r o h d a y en progreso para acomodar los sistemas de gran escala y aplicaciones que son probables a surgircomo incrementos en inter-redes. La necesidad de la escalabilidad no es sólo un problema de hardware o de desempeño de una red. Esta cuestión penetraencasi todo aspecto de sistemas distribuidos. Ensistemas centralizados de computadoras,algunos recursos compartidos - memoria, procesadores, canales de entrada-salida - están en provisión limitada y no pueden ser replicados indefinidamente. En los sistemas distribuidos, la limitación en la provisión de algunos de estos recursos es automáticamente removida - esto se ha notado ya que puede haber un número de computadoras potencialmente ilimitado, cada uno con memoria, uno o más procesadores centrales y canales de entrada-salida. Otras limitaciones pueden aparecer si el diseño delsistema no reconoce explícitamente lanecesidadde escalabilidad. Tolerancia a fallas. Los sistemas de computación a menudo fallan. Cuando las fallas ocurren en hardware softwarelos programaspueden producir resultados incorrectos o ellos pueden detenerse antes dehaber completado la computación a la queestaban destinados. 0 El diseño de sistemas de computadoras resistentes a fallas está basado en dos aproximaciones, ambas deben ser desplegadas para manejar cada falla: 1. La redundancia de hardware: El uso de componentes redundantes. 2. Recuperación de software: El diseño de programas para recuperación de las fallas. 8 CONCEPTOS PRELIMINARES Para producir sistemas que sean tolerantes a fallas de hardware, dos computadoras interconectadas a menudo emplean una aplicación sencilla, una de ellas espera a la otra, es decir, si una falla la otra toma el lugar de la que falló. La asignación de hardware redundante requerida para la tolerancia a fallas puede ser designada de tal manera que el hardware sea explotado para actividades no críticas cuando no haya errores presentes. Por ejemplo, una base de datos puede ser replicada en muchos servidores para asegurarse de que losdatos permanezcan accesibles después de la falla de un servidor individual. Los servidores pueden ser diseñados para detectar fallas en sus los servidores asociados a ellos. Cuando una falla es detectada en un servidor, los clientes son redireccionados a los servidores restantes. Mediante técnicas como ésta, la tolerancia a algunos tipos de fallas del hardware puede ser suministrada en sistemas distribuidos a un costo relativamente bajo. La recuperación de software involucra o requiere el diseño del software paraque el estado de datos permanentes puedan ser recuperados cuando una falla es detectada. En general, las computaciones realizadas por algunos programas estarán incompletas cuando una falla ocurra, y los datos permanentes que estos actualizan (como archivos y otro material almacenado) pueden noestar en un estado consistente. Transparencia. La transparencia está definida comoel encubrimiento al usuario delaseparaciónde componentes en un sistemadistribuido para que elsistema sea percibido comouno solo, enlugardeuna colección de componentes independientes. Las implicaciones de la transparencia son una mayor influencia en el diseño del software del sistema. Laseparaciónde componentes es unapropiedadinherentedelos sistemasdistribuidos. Sus consecuencias incluyen la necesidad de comunicación, manejo del sistema explícito y técnicas de integración. La separación permitela verdadera ejecución de programas en paralelo, la contención de las fallas decomponentes y recuperación de las fallas sin perturbación del sistema completo, el uso del aislamiento y control de canales de comunicación comométodo para reforzar las políticas de seguridad y protección, y el crecimiento o la contracción del sistema a través de la adición o substracción de componentes. El manual de referencia ANSA [ANSA,19891, y el modelo de referencia para proceso distribuido abierto de la IS0 (M-ODP) [ISO, 19921 identifican 8 formas de transparencia. Estas formas proveen un recuento útil de la motivación y metaspara sistemas distribuidos: 1. Transparencia al acceso: Habilita objetos de información locales y remotos para ser accesados utilizando operaciones idénticas. 2. Transparencia a la localización: Habilita objetos de información para ser accesados sin conocimiento de su localización. 3. Transparencia en la concurrencia: Habilita varios procesos a operar concurrentemente utilizando objetos de información compartida sin interferencia entre ellos. Habilita múltiples instancias de objetos de información a ser utilizadas 4. Transparenciaenlareplicación: para incrementar confiabilidad y desempeño sin conocimiento de la réplica por usuarios o programas de aplicación. 5. Transparencia en las fallas: Habilita el encubrimiento defallas, permitiendo a losusuarios y a los programas de aplicación completar sus tareas a pesar de la falla de componentes de hardware o software. 6. Transparencia en la migración: Permite el movimiento de objetos de información dentro de un sistema sin afectar la operación de los usuarios o programas de aplicación. 7 . Transparencia en el rendimiento: Permite al sistema ser reconfigurado para mejorar el rendimiento según varíen las cargas. 8 . Transparencia en la escalabilidad: Permite al sistema y a las aplicaciones crecer en escala sin cambiar la estructura del sistema o los algoritmos de aplicación. 9 OISEÑO E IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDO PARAUN BUSCADOR DE WEB Las dos transparencias más importantes son acceso y localización; su presencia o ausencia son las que más fuertemente afectan a la distribución de los recursos distribuidos. Estas, en conjunto, son a veces referidas como transparenciade red. La transparencia de red provee un grado similarde anonimato para recursos queson encontrados en sistemas de computación centralizados. BUSCADORES (Search Engines) Durantemuchos años y de manera independiente al Web, se han realizado investigaciones en el áreade recuperaciónde información descubriendo algunas limitaciones para el Web. El Web no va a responderlas preguntas del usuario; incluso no las entenderá. Todo lo que hace es almacenar algunos documentos que pueden contener alguna información de utilidad para el usuario. El objetivo principal de la recuperación de información es seleccionar documentos de una enorme cantidad existente que encajen en alguna solicituddebúsqueda proporcionada por el usuario. Esto se lleva a cabo por medio de un buscador (o Search Engine). Los buscadores trabajan de acuerdo a dos principios: Los buscadores booleanos buscan palabras simples que son combinadas conoperadores lógicos como A N D , OR y NOT. Si el buscador encuentra documentos que encajen exactamente con la solicitud, éste los regresará, de otra manera, los documentos son descartados. La figura 1.3 ilustra el funcionamiento de estos operadores. P Eloperador AND busca todos los documentosque tienentodaslas palabras conectadas con AND. La solicitud Internet AND escuelas busca todos losdocumentos con las palabras “Internet” y “escuelas”. P El operador OR busca todos los documentos que contengan cualquiera de las palabras conectadas con OR. Lasolicitud Internet OR escuelas va a buscartodoslosdocumentosque contengan cualquieradelas palabras “Internet” o “escuelas”. P El operador NOT puede ser utilizado para excluir algunos documentos. Por ejemplo, la solicitud Internet NOT escuelas buscará todos los documentos quecontengan la palabra “Internet” y no contengan la palabra “escuelas”. AND OR NOT Figura 1.3. Operadores booleanos Desde luego los sistemas booleanos tienen sus limitaciones, una de ellas es la necesidad de aprender un lenguaje artificial para especificar búsquedas complejas. Un método alternativo, llamadobúsquedaprobabilística,no requiere términos complicados para realizar búsquedas. Elusuarioproporciona su solicitud en un lenguaje natural acerca de los temas relacionados. Entonces el buscadorprobabilístico regresa todos los documentos que coincidieron con la búsqueda enuna lista ordenada, en la cual las mejores coincidencias se presentan primero. La solicitud “Dame todos los documentos relacionados a la introducción de Internet en las escuelas” no sólo regresarán documentos que contengan las palabras “Internet” y “escuelas” sino que también documentos más relacionados. 10 CONCEPTOS PRELIMINARES Desafortunadamente, durante muchos años la búsqueda de información se ha enfocado a situaciones donde la colección de documentos era local y estática. Los conceptos no han sido fácilmente transformados a un ambiente dinámico y global. Hasta ahora, la mejor manera es colectar información sobre todos los documentos distribuidos y almacenarlos localmente en un solo servidor, una vez esto, se pueden aplicar todas las técnicas tradicionales para la obtención de la información. Este método ha probado ser, hasta ahora, el más exitoso de los experimentos acerca de la obtención de información distribuida. Estrategias debúsqueda A continuación se discuten cuatro estrategias de búsqueda en el Web: Navegacion directa. hboles de búsqueda para el Web. indices de búsqueda para el Web. Filtrado automático de newsgroups. Navegación directa Si bien el término Navegación no nos indica una estrategia muy eficiente de búsqueda, es inevitable para poder llevar a cabo una búsqueda exitosa en el Web. La navegación directa es la parte más importante en la última fase de la búsqueda, debido a que muchaspáginas de Web tienen apuntadores a información relevante. Si una página no es exactamente lo que se busca, una de las referencias debe apuntar a una página con mejor información. La navegación directa también implica adivinar las direcciones Web (o URL, por sus siglas en inglés: Universal Resource Locators). Parece razonable, por ejemplo, que la Universidad de Stanford tenga la siguiente dirección en el Web: httD://www.stanford.edu/. Desde luego esto no siempre es cierto, ya que si deseáramos adivinar la dirección en el Web de la serie de televisión X-Files, uno pensaría que su dirección en el Web es: http://www.xfiles.com o algo parecido. Nos podemos dar cuenta que de esta manera, adivinar las direcciones de Web de algunos sitios podría llevamos algo de tiempo ya que no siempre son simples de deducir, como en el ejemplo anterior, nos llevaría algo de tiempo adivinar que la verdadera direcciónWeb es httP://www,thex-files.com. Árboles de búsqueda del Web Si la navegación directa no nos lleva al objetivo, la asistencia de computadoras puedeser utilizada. Un árbol de búsqueda del Web (librería de temas, catálogos, etc.) es un servidor de Web especializado. Sus contenidos son actualizados manualmente y jerárquicamente estructurados, los cuales listan recursos en el Web junto con sus comentarios. Cualquier recurso en el Web puede ser encontrado en un árbol de búsqueda siempre que una referencia a é1 se haya registrado en los árboles de búsqueda. También, si un recurso se lista en una categoría incorrecta o bajo un término incorrecto, posiblemente nunca podría ser encontrado. Yahoo es el árbol de búsqueda más grande y más conocido. Normalmente Yahoo acepta una liga a cualquier página. El URL de Yahoo es httD://www.vahoo.com (ver figura 1.4). 11 DISENO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB I I I I I j ... I Education I Institutes I Labor ... Figura 1.4. Parte de los niveles del árbol de Yahoo. Un árbol de búsqueda como Yahoo puede ser rastreado en dos maneras diferentes: Búsqueda manual: Navegando a través de los árboles de búsqueda. La búsqueda de información se puede realizar a través de la navegacibn directa del árbol de búsqueda. La información concerniente al Web en las escuelas puede ser encontrada bajo la siguiente secuencia de términos: Culture Education Computers 3 Networks Internet. Desde luego, lasiguiente secuencia también es válida: Computer Internet Education. Esta variedad de formas de acceder a la información es consecuencia de la falta de un esquema declasificación jerárquico, universal y fuente de toda la información. + + + + + Búsqueda automática utilizando unbuscador. Un árbol de búsqueda de Web puede crecer bastante, haciendo dificil encontrar un tema en parhcular. Por esta razón, para ayudar a los usuarios a encontrar un tema específico, el proveedor del árbol de búsqueda instala frecuentemente un buscador para suárbol. Desde luego, éste buscará sólo enel contenido del árbol. No buscará en la información contenida en los documentos y por esta razón puede fácilmente omitir información importante. indices de búsqueda en elWeb Tal como los árboles de búsqueda del Web, los indices de búsqueda son servidores especializados que ofrecen unarevisión de los contenidos del Web. De formaopuestaa los árboles de búsqueda, sus contenidosson construidos automáticamente. Tales servidores son los de Altavista, Lycos, HotBot, Infoseek entre otros. La información es recolectada por robots (también conocidos como spiders, gatherers, crawlers, ants o worms; los cuales son programas que recuperan información del Web) que intentan encontrar tantas páginas de Internet como sean posibles. Un robot accesa una página de Web, analiza su contenido y agrega todas las referencias (o ligas de hipertexto) de la página accesada a una lista de páginas a indexar (figura 1S ) . Entonces continuará con la siguiente página que se encuentra en esa lista. Estos robots han analizado más de 30 millones de páginas en más de 300,000 servidores (hasta noviembre de 1996) [KOSM98]. 12 CONCEPTOS PRELIMINARES Búsquedas de los usuarios Search engine Res ondc alas búsquedas lndexa continuamente usan!o e¡ indice de palabras páginas deWcb I- PdginasWcb Figura 1.5. Indices de búsqueda del Web. Mediante el análisis, es construido un enorme índice con todas las palabras contenidas en las páginas. Entonces un segundo programa, el buscador, permite las búsquedas en este índice. Con un índice como éste, no es posible la navegacidn, sólo el acceso mediante el buscador. Los indicesdelos buscadores del Web padecendelas mismas restricciones que los árboles de búsqueda. El buscador, sólo puede encontrar lo que previamente se había indexado. Una página que todavía no haya sido alcanzada por el robot no puede ser encontrada por el buscador. Desde luego, como la indexación de las páginas es automática, más páginas son accesadas por los buscadores que por los árboles de búsqueda. Filtrado automático de Newsgroups Algunos de losindices de búsqueda permiten la búsqueda enartículos de noticias (figura 1.6) que son publicados recientemente. Estos actúan como filtros automáticos querastrean y almacenan los artículos denoticiasy mensajes en listas de correo tan pronto como son publicados y construyen un índice que puede ser revisado por un buscador como se mencionó anteriormente. Desde luego, los filtros de mensajes denoticiastienen un componente adicional para hacer el filtrado. Un programa especial llamado agente, hace búsquedas periódicamente de acuerdo a los perfiles de los usuarios. Estos perfiles de usuarios contienen una solicitud de búsqueda e información adicional acerca de cuándo la búsqueda debe ser ejecutada y qué debe hacerse con los artículos que coincidieron. Normalmente las 10 primeras líneas de cualquier artículo que coincida son enviadas vía correo electrónico diaria o semanalmente. Búsquedas de los usuarios de Artículos Search engine Buscaautomiticay periódicamente Responde a las búsquedas usando el índice de palabras lndcxa continuamente páginas deWeb Articulas de noticiar Figura 1.6. Filtrado de noticias. 13 CAPITULO 2 Medíos para obtener Información FTP (Protocolo de transferencia de archivos) U na de las aplicaciones más importantes y más usadas de Internetes la transferencia de archivos. A través de la transferencia de archivos se puede localizar en Internet cualquier clase de información que pueda ser almacenada en una computadora. Lo cierto es que a través de este sistema se tiene acceso a cualquier programa de computadora de dominio público, a cualquier información de las publicadas en las revistas de informática, a muchos archivos y bases de datos públicos, entre otras cosas. La aplicación que realiza esta operación se llama “Protocolo de Transferencia de Archivos” (o FTP por sus siglas en inglés: File Transfer Protocol). Este programa es un protocolo del nivel de aplicación que permite que computadoras con sistemas operativos muy distintos, puedan intercambiar archivosentre sí sin ningún problema. No importa donde estén situadas las computadoras, cómo estén conectadas a Internet o qué sistema operativo estén utilizando. Si las computadoras son capaces de entender el protocolo FTP,entonces se podrán intercambiar archivos entre sí [CRUC90]. Dado que existen distintas formas de almacenar los archivos (ASCII, binario, comprimido, etc.) y que también existen distintas formas de manipular tanto los archivos como la estructura de directorio donde se encuentra, el programa FTP no es un programa sencillo. FTP utiliza el sistema cliente/servidor, esto quiere decir que para que esta aplicación funcione correctamente, se necesita tener instalado un programa cliente en la computadora del usuario - computadora local -, y un programa servidor en la computadora remota -sitio remoto-. Cuando el programa cliente se pone en contacto con el programa servidor, cualquier comando que el usuario teclee en su computadora será interpretado por su software cliente, y si éste ve que el comando va dirigido al servidor, le pasará el comando al mismo para que actúe en consecuencia. Para copiar archivos de una computadora remota a una local, pueden darse dos casos: que se tenga cuenta en la computadora remota o que no. En el primer caso, se accede a lacomputadoraremotaespecificando el nombredeacceso y laclave, y a continuación se utilizan los comandos adecuados que nos permitan copiar un archivo d o desde la computadora remota. En el segundo caso, si no se tiene cuenta en la computadora remota, entoncesse introduce como identificador de usuario la palabra “anonymus” (anónimo). El identificativo “anonymous” sirve para que los usuarios de FTP puedan acceder a la información deacceso público que la mayoría delos sitios ponen a disposición de todos. La forma de utilizar laaplicación FTP es tecleando la siguiente línea: %ftp nombre-de-la-computadora -remota 15 DISENOE IMPLEMENTACIbN DE UN SISTEMA DISTRIBUIDO PARAUN BUSCADOR DE WEB La computadora remota puede ser una computadora de la misma compañía, de la misma ciudad o de cualquier otra parte del mundo que esté conectada a Internet. La forma de trabajar para todos estos casos es idéntica. El esquema generalpara la transferencia de archivos se ejemplifica en la siguiente figura. Figura 2.1: Transferencia de archivos. PRINCIPALES SISTEMAS DE BúSQUEDA DE RECURSOSEN INTERNET Un número de sitios de Internet corren en sistemas centralizados que permiten la localización de información acerca de personas y otros tipos de recursos en Internet. Como una introducción aeste tema podemos mencionar, por ejemplo, que el servicio Whois es usado por centros de información de redes y otras organizaciones para almacenar información perteneciente a los usuarios registrados y sitiosde red. Desde luego, este tipode servidores sólo almacena una pequeña parte de la información existente en Internet. M á s aún, esta información se vuelve inconsistente debido a que los usuarios olvidan registrarse en estas bases de datos. Una manera muy popular de sobrellevar este problema es llenando la base dedatos basándose en información existente en algunos recursos de información, sin necesitar de esfuerzos individuales de los administradores de los sitios. Esta técnica es la base de Archie, el cual actualiza sus bases de datos realizando recursivamente listados de directorios a cada sitio una vez por mes. Debido a que Archie proporciona indices, las búsquedas no son realizadas a la manera de una estructura jerárquica como los nombres de los servidores de Internet. Por otra parte, la World-Wide Web soporta dos modelosde búsqueda. Parte de la información contenida en laW W está basada en el paradigma de las ligas de hipertexto de tal manera que los usuarios pueden explorar la información seleccionando las ligas a otra información. Otras partes consisten de indices, los cuales el usuario encuentra al explorar el espacio del hipertexto. Los Servidores de Información de Área Extensa(WMS - Wide Area Information Servers), permiten a los usuarios buscar y obtener documentos y muchos otros tipos de información a través de bases de datos indizadas en todo el espacio de información de Internet. Otro sistema, Gopher, provee a los usuarios de una interfaz uniforme para varios tipos diferentes de redes de información. Ofrece al usuario un sistema de menú jerárquico, permitiendo al usuario tener acceso a muchos de los sistemas que ya estén listados, así como varios directorios telefónicos en línea, catálogos de librerías, etc. [HOWG91] A continuación se proporciona una descripción más detallada sobre la arquitecturade estos sistemas de búsqueda de recursos, cómo trabajan, y cómo manejan la información. 16 MEDIOS PARA OBTENER INFORMACION ARCHIE Historia El servicio Archie ayuda a resolver el problema de localizar archivos por atributo dentro de Internet. Archie fue desarrollado en la Universidad de McGill por Alan Emtage y Peter Deutch [EMTA92]. Los servidores de Archie centralizanlainformaciónindizadapor el nombrede los archivosqueseencuentrandisponiblesatravés de varios miles de sitios de archivos de dominio público en la Internet. Los FTP anónimos surgieron rápidamente para brindar la oportunidad de buscar archivos en los repositorios de laRed,perodurantemuchotiempolaexistencia de archivos era conocida sólo porcontactointerpersonalde unos usuarios con otros a través de la red. Parte del aprendizaje para convertirse en un guní de red consistía en a las conferenciasnecesariasparasaberdóndeestabaocultala conocerlassuficientespersonasyacudir información. EstofuncionababiencuandoInternetera una red de dimensiones pequeñas utilizada únicamente por profesionales dela computación.AhoraqueInternetproporcionarecursosparaelpúblicoengeneral,el mecanismo de “los viejos tiempos” ya no funciona. Uno se puede enterar de que existen ciertas bases de datos y programas de dominio público o ciertos dominios públicos,peroes difícil encontrarlos. Archie es un sistemaquepermiteexplorarindicesen los servidores públicos especiales. Aquíes donde se debe empezar si se están buscando programas, datos o archivos de texto. Hasta 1995, Archie catalogaba cerca de 1200 servidores y 2.5 millones de archivos [OREA92]. Como usuario, o que se le puede solicitar que encuentre nombres de archivo que correspondan a ciertos criterios de búsqueda muestre archivos que contengan ciertas palabras. En la figura 2.2 se muestra la funcionalidad del sistema Archie. Este devuelve a los clientes los nombres de archivos que concuerdan con su criterio de búsqueda y el nombre de los servidoresquecontienenesosarchivos.Unavezquesehayadecididocuál de esosarchivosesel conveniente, se puede trasladar a la computadora cliente conFTP anónimo. base de datos archie Figura 2.2: El sistema cliente-servidor en Archie. 17 DISENO E IMPLEMENTAC16N DEUN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DEWEB Las basesde datos de Archie Archie ofrece actualmente dos bases de datos:Archivos y Whatis. La base de datos Archivos, ordena los nombres de archivo disponibles de cientos de sitios FTP. Archie actualiza automáticamente las bases de datos Archivos. Los usuariospueden consultar nombres de archivos dentro de estas bases de datos que coincidan con: Patrones especificados. Unalistade archivos FTP. Una lista de archivos disponibles en un sitio especificado. La base de datos Whatis contiene los nombres y las descripciones de paquetes de software, documentos y otra información disponible en Internet. Los registros incluyen cadenas de texto que consisten de palabras clave y se les asocian descripciones. Así los usuarios pueden llevar a cabo búsquedas de cadenas en ambas partes, en las palabras clave y en las descripciones correspondientes. La base de datos Whatis es mantenida manualmente por el administrador del sistemahase de datos, y la información delos archivos es introducida manualmente. ¿Cómo se utiliza la base de datos Whatis?. Si se conoce el nombre de un archivo o directorio (o partedel nombre), se puede realizar una búsqueda conArchie en la Base de Datos de Archivos de Internet. Sin embargo, ¿qué ocurre si sesabe lo que se quiere buscar, pero no se conoce su nombre?. Para facilitar la búsqueda en estos casos, Archie mantiene una segunda colección de información denominada la Base de Datos de Descripción de Sofhyare. Esta base de datos contiene descripciones breves de miles de programas, documentos y archivos de datos que se encuentran en los servidores FTP anónimo. Para realizar búsquedasen esta base de datos se utiliza la orden whatis. Hay que escribir la orden seguida de una palabra. ARCHIE buscará en la Base de Datos de Descripción de Software y mostrará todos los registros que contengan la palabra especificada. Cada registro contiene una breve descripción y un nombre de archivo. Si la descripción representa la información quebusca,podráutilizarse elnombre delarchivoindicadopara encontrarlo con Archie. Pero, ¿de dónde provienen estos registros?. Siempre que un usuario comparte un archivo vía FTP anónimo, envía una breve descripción de su contenido a los administradores de Archie que incluirán en la Base de Datos de Descripción de Software. Por esta razón, existe una restricción que limita la efectividad de la orden whatis. Si el usuario quecreó el archivo que se está buscando no envía la descripción, no se encontrará en la Base de Datos de Descripción del Software. Además, al contrario que en la Base de Datos de Archivos de Internet, la Base de Datos de Descripción de Software no se actualiza de formaregular. Deben hacerse dos consideraciones. Primero, la orden whatis realiza una búsqueda normalignorandola diferencia entre letras mayúsculas y minúsculas. Segundo, a menudo apareceránregistros que notienen nada que ver con la informaciónque se está buscando. Por Último debe tenerse en cuenta que whatis no realiza una búsqueda completa en la Base de Datos de Archivos de Internet. Sólo se hace la búsqueda en los registros de la Base de Datos de Descripción de Software. Por ejemplo, varios servidores FTP anónimo tienen directorios denominados telephone que contienen información importante, pero whatis no encuentra estos directorios porque no están en subase de datos. La arquitectura de Archie La figura 2.3 describe la arquitectura que implementa el sistema Archie. Los clientes de Archie accesan a ambas bases de datos a través del Componente de Acceso delUsuario WAC, User Access Component). El Componente de Recopilación de Datos (DGC, Data Gathering Component) descansa sobre los administradores del sitio FTP, 18 MEDIOS PARA OBTENER INFORMACION los cualesseencargan deaveriguar los nuevossitios de FTP. Cadavezque un nuevo sitio es reportado, un registro correspondiente al nuevo sitio es adicionado al archivo descriptor de sitios, el cual lista todos los sitios FTP conocidos. ElDGCseconectaperiódicamenteacada unode los sitiosconocidosy solicita una listarecursivade sus contenidos. Esta información se mantiene enlas listas preliminares del servidor Archie hasta que es procesado porelComponentedeMantenimientodeDatos (DMC, Data-MaintenanceComponent),queconviertelos listados a formatos que pueden ser aumentados a la base de datos delos archivos. La UAC permite a los usuarios accesar y consultar servidores deArchie [OVRK93]. Datos de datos Base de ervidores 'Whatis" Red de comunicacidn lnterfaz E-mail lnterfaz Telnet I sitios FTP Anijnirnor I DGC = Componente de reuni6n de datos DMC = Componente de mantenimiento de datos UAC Componente de acceso de usuario Clientes Archie Figura 2.3: Arquitectura de Archie A lolargodelaInternethay un gran número de computadoras denominadas Servidores Archie, que proporcionan un servicio muyimportante:ayudan alocalizarel nombredelosservidores FTP anónimoque contienen un determinado directorio o archivo. Cuando se precisa encontrar un archivo o directorio por FTP anónimo, todo lo que hay que hacer es decirle a Archie lo que se está buscando. Archie buscará en sus bases de datos y mostrará el nombre de cada sitio FTP anónimo que almacena ese archivo o directorio. Archie también mostrará el directorio exacto. En consecuencia, todo lo que se necesita es hacer FTP a uno de esos sitios y copiar el archivo que se buscaba. ¿Cómo lo hicieron? La respuesta es: Buscando por toda la red y preguntando a quienes estuvieran ejecutando programas servidores FTP anónimo para catalogarlos, como se muestra en la figura 2.4. Los perpetradores ejecutan su programa una vezal mes,elcualseconectaconlosservidoresmencionadosatravés de FTP. Cuandoseenlazacon los servidores, construye un directorio para listar todos los archivos que se encuentran en cada uno de ellos usando comandos FTP estándar ( 1s -IR, para ser precisos). 19 DISENO E IMPLEMENTACIONDE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB + ...... Figura 2.4: Cómo funciona Archie ¿Cómo funciona Archie? Conceptualmente, el funcionamiento de Archie es muy simple. Como ya se mencionó, a determinados intervalos, unosprogramas especiales se conectanconcadaservidor FTP anónimoy copian un listado del directorio completo de todos los archivos públicos. Estos listados se almacenan en lo que se denomina Base de Datos de Archivos Internet. Cuando se solicita a Archie que busque un archivo, todo lo que hace es mirar en la base de datos. Por ejemplo, cuando un usuario ordena “Encuentra un archivo que contenga la cadena ‘eudora’ en su nombre de archivo”, Archie explora los directorios catalogados y envía los nombres de archivo que concuerden con la cadena proporcionada junto con los nombres de los servidores que tienen disponibles tales archivos. Por tal motivo se volvió obvio que algunas personas eligieron nombres extraños, nada intuitivos para sus archivos. Por ello, los creadores de Archie pidieron a las personas responsables de cada servidor que les enviaran información sobre los paquetes más importantes que manejaran, y utilizaron esta información para crear el servicio llamado whatis ya antes mencionado [WYAA94]. Cuando aumentó el uso de Archie, el servicio se transformó para satisfacer la creciente demanda. Cada servidor construye un índice de archivos FTP cerca de éI y después los diversos servidores comparten información. Esto permiteque las actualizaciones sean más oportunas sin sobrecargar la red. En la mayoríadeloscasos,sin embargo, no hay razón de preocuparse por cómo funciona este sistema. La mayor parte de las tareas que son realizadas en Archie no se ven, todo lo que se necesita hacer es conectarse a cualquier servidor Archie y buscar la información que se necesita. En contacto con Archie Para utilizar Archie se debe seleccionar un servidor Archie. Existen muchos y todos son equivalentes. Esto significa que contienen la misma información. Lo más conveniente es buscar el servidor que responda con mayor rapidez. Hay tres formas de utilizar un servidor Archie. Primero haciendo un Telnet a un servidor Archie e iniciando una la comunicación, seejecutará el conexióncomenzando con el identificador archie. Unavezestablecida programa Archie. A este programa se le pueden dar instrucciones, una tras otra, y preguntarle sobre un archivo o directorio determinado. Archie buscará en su base de datos y presentará los resultados. Si no está seguro del nombredel archivo que se está buscando, Archie tieneuna facilidad denominada servicio “whatis” que suministra,como ya se mencionó, descripciones de miles de programas, archivos de datos ydocumentos diferentes. La segunda forma de utilizar Archie es usandounprograma llamado “cliente Archie” que se ejecutaenla computadora local. En este caso se indica al cliente Archie qué es lo que se está buscando. El cliente Archie se 20 MEDIOS PARA OBTENER INFORMACION conectará automáticamente con un servidor Archie, se realizará la búsqueda, el cliente aceptará los resultados que le envía el servidor y los mostrará en la pantalla. Una vez que se aprende a utilizar Archie, es mucho más fácil y rápido utilizar un cliente Archie. De esta forma no es necesario iniciar una sesión Telnet, ni recordar las órdenes de Archie. Por último, es posible enviar por correo electrónico peticiones a un servidor Archie. Este ejecutará la petición y enviará los resultados por correo electrónico. Esto puede ser muy útil si no se tiene acceso a un cliente o por alguna razón no se puede hacer Telnet a un servidor Archie. También puede ser útil cuando no se precisa una respuestarápida o cuando sequierenrealizarmúltiplesbúsquedas. Se puedeenviarunapeticiónporcorreo electrónico y obtener los mensajes posteriormente un en mensaje. Se puede utilizar cualquier servidor Archie, pero probablemente será mucho más rápido utilizar el más cercano geográficamente. Los servidores Archie tienengeneralmente un límitedeusuariosquepuedenutilizarlo o esperar simultáneamente. Si el servidor Archie más cercanoestá ocupado,hayqueutilizarotroservidor durante un tiempo y esperarde nuevo. Ventajas y desventajas de Archie Ventajas: - Para saber donde se encuentra un archivo, solo se busca en la base de datos. Todos los servidores Archie contienen la misma información. Hay tres formas de utilizar un servidor Archie: haciendo un Telnet; utilizando un cliente Archie; enviar una petición por e-mail. Sus servidores se encuentran repartidos por todo el mundo. La base de datos Whatis es muy útil para encontrar archivos cuando los nombres de éstos, no coinciden con el tema que se está buscando. La información es relativamente confiable, pues se sabe que fue actualizada por lo mucho un mes atrás. Desventajas: - - Los servidores generalmente tienen un límite de usuarios que pueden ser atendidos simultáneamente. Los intervalosdetiempoenqueseactualizanlasbasesdedatos,sondemasiadograndesy puede ser que cuando se actualicen, sea demasiado tarde para alguien que necesite urgentemente información sobre algún tema. Las bases de datosnoseactualizanalmismotiempo, lo cualcausaproblemasdeinconsistenciaconla información. La base de datos whatis es mantenida manualmente por el administrador. GOPHER Historia Gopher fue desarrollado en la Universidadde Minesota en abril de 199 1 por un equipo formado por Bob Alberti, Farhad Ankelesaria, Daniel Torrey, Paul Linder y Marck McCahill [HAHH94]. El serviciofuediseñadopara que cada parte de la burocracia pudiera tener control sobre su propio servidor y sus propios datos. Es decir, que 21 DISEnO E IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDO PARAUN BUSCADOR DE WEB cadadepartamento académico contara conunservidorparaproporcionar los horarios declases,calendario escolar, etcétera. Podrán existir tantos servidores como grupos que quieranproporcionarlos. Luego, los inventores de Gopher crearon unaaplicación especial que pudiera guiar a los estudiantesala información que requerían sin necesidad de una capacitación. Para lograresto, organizaron el sistema por temas, de manera que es posible verlo como una enorme base de datos, en lugar de cientos de bases de datos pequeñas interconectadas. Se puede tener acceso a archivos FTP, números telefónicos de servidores white pages (guías telefónicas electrónicas), catálogos de biblioteca y otros servidores de bases de datos con propósitos especiales basados en Telnet. Pero sólo Gopher sabe dónde se localizan realmente los datos, la forma de tener acceso a ellos y que existenmuchos servidores que los proporcionan. No tomó mucho tiempo darse cuenta de que también podia funcionar para servidores colocados en diferentes partes del mundo. Todo lo que se requería era que Internet enlazara a todos. En cuatro años, más o menos, la utilización del sistema Gopher creció de un servidor a más de 1300 servidores [CARJ94]. El Gopher de Internet, permite buscar recursos utilizando mends. Cuando se encuentra algo interesante puede leerlo o tener acceso a ello a través de Gopher sin necesidad de preocuparse por los nombres de dominio, las direcciones IP o por cambiar de programa. Lagranventajaque ofrece Gopher no es tanto queahorrela búsqueda de direcciones o nombres de recursos, o que no se tengan que utilizar varios comandos para obtener lo que desea. La ventaja real consiste en que permite curiosear a través de los recursos de Internet sin importar su tipo, talcomo si se hojeara el catálogo delabibliotecalocal que contiene libros, imágenes, sonidos,todo agrupado en un volumen. Desde luego, de cualquier manera se necesita saber lo que se está buscando y un poco sobre los posibles lugares donde se encuentra, pero Gopher hace la búsqueda menospesada. Desafortunadamente los servicios Gopher, por lo general, no contratan bibliotecarios bien capacitados; no existe una lista temática estándar para organizar la información; cada servidor es un poco diferente y uno se debe aproximar a cada uno de ellos con la mente abierta [POTJ94]. No existe un formato especial de “recursos Gopher” para que se pueda tener acceso, por lo menos, no hay el mismo sentido que en los servidores FTP o directorios white pages. Gopher sabe cuál aplicación (Telnet, FTP, white pages, etc.) debe utilizar para obtener un elemento particular enel cual se está interesado y realiza el trabajo por uno. El sistema Gopher es lo suficientemente inteligente para imponer restricciones de licencias. Algún software o recursos pueden tener licencia para ser utilizados únicamente dentro una ciudad o campus en particular. La arquitectura de Gopher La arquitectura de Gopher consiste de las comunicaciones de clientes y servidores a través del protocolo de Gopher, el cual está implementado en lo alto del TCP/IP (Transmission-Control Protocol /Internet Protocol). La de Minessota. raíz de lajerarquía de Gopher reside en el servidor rawBits.-micro.umn.edu, en la Universidad Éste es el directorio que cargan los clientes Gopher por defecto cuando son invocados por primera vez. La arquitectura de Gopher contiene esencialmente un servidor de alto nivelpor cada organización participante tales como Universidades, instituciones corporativas privadas o agencias gubernamentales. Los objetos de Gopher son clasificados por tipo, nombre visible al usuario, nombre del servidor y número de puerto, y la ruta de acceso absoluta del objeto dentro del sistema de archivos del servidor. El usuario selecciona un objeto en base al nombre visible para el usuario de éste, y el cliente lo retira construyendo un handle que proviene del nombre del servidor, su número de puerto y la ruta de acceso del objeto. Entonces los usuarios 22 MEDIOS PARA OBTENER INFORMACION pueden navegar dentro del espacio deinformación almacenados de lasiguiente manera: disponible que contiene objetos documento,queson Archivos en los servidores correspondientes y Objetos directorio que pueden ser distribuidos a través de múltiples servidores. La Figura 2.5 ilustra la arquitectura que presenta el sistema Gopher. ' ellente Servidor P Servidor Rah Servldor Rak Gopher Figura 2.5: Arquitectura de Gopher. Las operaciones de búsqueda de texto pueden ser realizadas. Los servidores de búsqueda de Gopher mantienen indices invertidos basados en texto de los subconjuntos de los documentos almacenados en un servidor Gopher. Los servidores de búsqueda pueden ser configurados para indexar más de un servidor. Esto quiere decir que en una Solicitud de Comentarios RFC (Request For Comments) de búsqueda basada en texto, el servidor indexa todos los RFCs y ejecuta las búsquedas de palabras clave en sus contenidos. Un servidor de búsqueda de texto Los regresa al cliente apuntadores a los documentos que coincidieron con el patrón booleano de búsqueda. clientes Gopher pueden retirar también objetos de WAIS (que más adelante se verá), Archie y servidores FTP. ¿Cómo funciona Gopher? Los requerimientos para este sistema de información son: + + + Ser asequible desde diferentes computadoras (clientes). Organizar los datos en una computadora central pero queéSta no fuera la encargada de mantenerlos. Mantener y actualizar los datos de forma descentralizada. 23 DISENO E lMPLEMENTACl6N DEUN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB Estos objetivos pudieron materializarse a través de un modelo cliente-servidor inteligente basado en el protocolo TCP/IP. El servidor Gopher es un entorno siempre igual con el que se pueden llevar a cabo búsquedas de forma estructurada en los diferentes servicios que se ofrecen a través de Internet. La figura 2.6 muestra la funcionalidad del sistema Gopher. fuentes de gophel Figura 2.6: Cómofunciona Gopher Utilizando Gopher, se llevan a cabo, porejemplo, las siguientes acciones: 0 0 0 Se trasladan datos. Secambian directorios. Se establecen y cancelan conexiones con otras computadoras. Se inician consultas a computadoras en algún lugar del mundo. Gopher ya no es la herramienta adecuada para usuarios con un buen equipamiento y una conexión rápida con Internet [OREA92]. La idea de este sistema mundial de información fue genial, pero ya ha sido superada por el mucho más eficiente sistema de hipertexto WWW, que no sólo se limita al trabajo con textos. El W W resulta especialmente conveniente en la era de los documentos multimedia. En el caso de las conexiones lentas de Internet queno vale la pena ni siquiera iniciar V W W , en esos casos la ayuda de Gopher es muy valiosa. En contacto con Gopher Al sistema de información Gopher puede accederse desde diferentes entornos. Puede utilizarse desde un entorno de texto, también, yde forma máscómoda desde Windows o XWindows o también desde Mosaic. Como Gopher está considerado en proceso de extinción, cada vez es más dificil encontrar informaciones interesantes en el mismo [OREA92]. Para tener acceso al sistema Gopher, se necesita un programa cliente Gopher. El programa cliente especial debe estar instalado en una computadora que se encuentre en Internet. Cada cliente tiene la “forma y las maneras” del sistemaen el que se está ejecutando. Cualquieraquesea el cliente quese haya decidido instalar, estará preconfigurado con la dirección de Internet del servidor delcual se extrajo. 24 MEDIOS PARA OBTENER INFORMACION Cuando un cliente Gopher se enlaza con su servidor base y le solicita el menú principal el servidor envía dicho menú y cierta información oculta a su cliente. La información oculta indica a éste último lo que representa cada elemento del menú (por ejemplo un archivo de texto, un directorio, un equipo anfitrión, etc.); también le indica el Protocolo de Internet (IP) del servidor para ese elemento, el número del puerto que debe utilizar y una ruta de acceso para un archivo. La dirección IP puede ser el servidor base mismo si es ahí donde reside el recurso, pero tambiénpuede ser cualquier otro servidor ubicadoen un lugar diferente. Enrealidadnotieneimportancia, cuando se selecciona un elemento del menú, el cliente realiza el mismo procedimiento. Su cliente conserva la posición original y se enlaza con el nuevo servidor, entonces, el proceso se repite. Al utilizar un cliente Gopher un usuario, después de seleccionar un menú tendrá que seleccionar un recurso. El cliente Gopher, seleccionará una utilidad apropiada para manejar el recurso seleccionado, sea lo que sea. Si es un archivo, el cliente FTP es lo más apropiado. Si el recurso es una “sesión interactiva”, el cliente principia una sesión Telnet. Si es una colección indizada por Archie o WAIS, Gopher utiliza Archie o WAIS para encontrar la información relevante. El cliente Gopher que se está utilizando permiteal usuario comunicarse coné1 a través de menús que se despliegan en el monitor. Toma lo que se le indica y lo transforma en comandos viables para ser utilizados en la aplicación apropiada. Así que cuando se esté trabajando con Gopher no se necesitará escribir el comando get de FTP para indicar la orden correspondiente. La figura 2.7 ilustra lo anterior. I gopher I Figura 2.7: Servicios de Gopher Gopher mantiene el rastro de varios y diferentes tipos de opciones. Las más importantes son los directoriosy los archivos de texto. Todos los clientes utilizan algún tipo de marca para mostrar el tipo de opción que representa cada elemento del menú.El cliente que se utiliza para estos ejemplos coloca una diagonal al final de la línea para distinguir un directorio. Un directorio equivale a un menú en la práctica Veronica - el camino a los servidores Gopher Igual que en el FTP se utiliza un sistema de búsqueda, también se dispone de otro sistema de búsqueda en el sistema Gopher. El sistemadebúsquedasedenomina Veronica y noesmás que unabase de datos única.Existenvarios servidores Veronica a través de los que se puede consultar esa base de datos. Para iniciar una búsqueda puede conectarse directamente con el servidor Veronica por medio de un programa Gopher o con un navegador de Web o iniciarlo desde un servidor Gopher local. 25 DISENOE IMPLEMENTAC16N DE UNSISTEMA DISTRIBUIDO PARAUN BUSCADOR DE WE0 En el último caso se establecerá la conexión con el sistema de búsqueda Veronica, generalmente a través de palabras clave como “Vinculo con otros sistemas de información”, “Vínculos con otros servidores Gopher” o “Búsquedas en el Gopher-Space”.Se debe buscar en loscorrespondientes submenús preferentemente por fuentes de informacióninternacionales con lo que encontrará aVeronica más rápidamente. En el servidor Gopher se utilizan los siguientes menús: 0 Vinculación con otros sistemas de información. Todos los servidores Gopher del mundo. Búsqueda en el GopherSpace por medio de Veronica. Veronica puede buscar no sólo palabras clave individuales, sino también combinaciones complejas. Además, es posible limitar la búsqueda a determinados menús o tipos de archivos (de sonido, imagen, etc.). Los comandos de búsqueda pueden incorporarse directamente en la consulta o puede iniciarse una búsqueda con determinadas restricciones. Ventajas y desventajas de Gopher Ventajas: - - La base de datos está organizada por temas, de tal manera que se considera como una enorme base de datos y no en cientos de pequeñas bases de datos conectadas entre sí. Se tiene acceso a la información sin tener que preocuparse por los nombresde dominio y las direcciones IP. Se utiliza un cliente Gopher que puede contactar con otros servidores a través de servicios como Telnet o FTP y no sólo con servidores Gopher, lo cual facilita las búsquedas. Desventajas: - Sólo Gopher sabe dónde están localizados los datos, la forma en que se puede tener acceso a ellos y los servidores que los proporcionan. Cada servidor Gopher contiene sólo la información que es de importancia para sus usuarios locales por lo que hay queconectarse a otros servidores Gopher cada vez que la información no esté en el servidor Gopher local, aunque un cliente Gopher permite moverse fácilmente de un servidor Gopher a otro. W A S (Wide Area Information Servers) Historia WAIS es un proyecto que fue desarrollado por Dow Jones and Company, Thinking Machines Corp., Apple marzo Computers y KPMG Peat Marwick en 1988 (bttD://environment~v.au/tecnica~/retrieva~/wais/wais.htm~, de 1990; acceso feb. 7, 1998), debido a que se interesaron en el problema de descubrimiento y obtención de información, El proyecto busca dar alosusuarios un mecanismouniforme,fácil de usarydelocalización transparente paraalmacenar información. WAIS es un sistema distribuido de exploración de texto que utiliza unaarquitectura de obtención de información basadaen texto, dela cual, sus clientes y servidores se comunicana través de unaextensiónestándardel protocolo 239.50 [HAHH94], de la National Information Standards Organization (NISO). 26 MEDIOS PARA OBTENER INFORMACION La idea era muy ambiciosa. En un mundo con demasiada información, una computadora podría seguirlela pista a unagrancantidad de datos, separarlos, y presentar sólo la información relevante para ciertas necesidades concretas. La idea era crear un programa que actuase como un bibliotecario personal haciendo posible que se accediera a información que nunca se hubiera sabido que existía. Es excelente para realizar búsquedas a través de material indizado y localizar artículos basándose en su contenido. Esto significa que WAIS permite realizar exploraciones a través dearchivos de Internet en busca de documentos que contengan ciertos grupos de palabras. Como Gopher, WAZS permite encontrar y tener acceso a recursos informativos de la red sin importar el lugar exacto de residencia. En Gopher, se pueden encontrar los recursosinformativosbuscandoatravésde una secuencia de menús hasta hallar algo apropiado. WAIS lleva a cabo la misma tarea,sólo que realiza la búsqueda completa por sí mismo. WAIS es una herramienta que permite buscar grandes cantidades de información en forma rápida y completa. Por supuesto, estas herramientas son sólo tan buenas como la calidad y la variedad de la información, así como la potencia del programa de búsqueda. WAZS, puede buscar en cientos de fuentes de información sobre una gran variedad de temas. No obstante, WAIS está lejos de ser perfecto ya que tiene limitaciones, pero dentro de esas limitaciones, WAIS es una herramienta asombrosa. En esencia, un comando WAIS puedeser descrito de la siguientemanera:elusuarioordena:“Encuentra documentos acerca deesto en la biblioteca”. Entonces,WAIS revisa los documentos queexisten en esa biblioteca (o bibliotecas) que le han sido indicados e informa cuáles documentos son los que probablemente contengan la información requerida. Después, si así lo desea el usuario, WAIS despliega los documentos en la pantalla. En WAIS se puede preguntar “¿Existe una biblioteca para este tema?”. Así se puede averiguar con facilidad si WAIS cuenta con los recursos informativos de utilidad. WAIS realiza su trabajo. Se requiere un poco de Existen algunos pros y contras acerca de la manera en que l a s preguntas adecuadas. Para práctica para lograr que WAZS haga lo que se le indica, pues hay que plantear comprender con mayor facilidad la manera de estructurar dichas preguntas es necesario saber lo que WAIS hace con ellas. Una vez comprendido esto, se puede comenzar a hacer algunasexploraciones aunque hay limitaciones importantes.Primero,una serie de artículos enlapantalladeunacomputadora,independientementede lo personalizados que sean, nunca sustituirán a un periódico o a un libro que podemos extenderlos sobre la mesa y examinarlos con nuestros propio ojos, página a página. Segundo,los datos que se reciban serán tan buenos como las preguntas que se formulen, más lo que el programa de computadora pueda inferir sobre nuestros gustos y aversiones. Con demasiada frecuencia, es imposible hacer exactamente la pregunta correcta, incluso aunque sepamos lo que queremos cuandolo vemos. Finalmente, el programa de computadorasólo puede encontrar datos computarizados que limitan las cosas enormemente. La arquitectura de WAIS Los clientes de WAZS traducen las búsquedas de los usuarios al protocolo de WAIS y buscan en el Directorio de Servicios las bases de datos de importancia. Entonces, WAIS transmite la búsqueda a un conjunto de bases de datos seleccionadas sobre laconexióndelared. Las basesde datos mantienenindicesinvertidos en los contenidos de los documentos y ejecutan búsquedasbasadasen texto sobre de ellas. En respuestaa una búsqueda, un servidor regresa una lista relevante de descriptores de objetos. Estos descriptores corresponden a documentos que contienen palabras especificadas en la búsqueda del usuario. El cliente de WAZS despliega los resultados de las búsquedas y puede recuperar los documentos de los servidores correspondientes. Los clientes también despliegan una calificación numérica por cada acierto. Esta calificación se refiere a la frecuencia en los contenidos del objeto de las palabras especificadas en la búsqueda. La figura 2.8 muestra cómo está constituida la arquitectura de WAZS. 27 DISEÑO E IMPLEMENTACJONDE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB Servidores de Informacidn de Area Amplia Directorio Base de Base de Base de de Servicios Datos 1 Datos 2 Datos 3 Red de comunicación lnterfaz X lnterfaz Emacs lnterfaz de línea de comando Clientes Figura 2.8: Arquitectura de WAIS ¿Cómo funciona WAIS? Para hacer que un documento esté disponible a través de un servidor WAIS alguien debe crear un índice para ese servidor con el fin de que sea utilizado en la búsqueda. Para información textual, cada palabra en el documento por lo regular está indizada. Cuando se solicita una búsqueda desde un cliente WMS, éste seenlazaconel servidorque controla las bibliotecas quesehan sugerido. El cliente WAlS solicita acada servidor, en su momento, que explore el índice en busca de un conjunto de palabras. Entonces, el servidor le envía una lista de documentos que pueden ser los apropiados y una “calificación” que indica qué tanapropiado supone que es cada uno. Las calificaciones son comunes, de tal manera que el documento que mejor coincida con el criterio de búsquedarecibe 1000 puntos y losdemás vandescendiendo proporcionalmente. Así quecuandoseindica “Encuentra documentos que contengan ‘Clinton and Gore”’, por ejemplo, WMS explora el índice y cuenta el número de veces que se repite “Clinton” en cada documento, así como“and” y “Gore”. El resultado de lacuenta, sin que importe el significado exacto de la palabra, se transforma en la calificación del documento. Después de que todas las bibliotecas han sido exploradas, WMS le proporciona al cliente los títulos de los documentos cuya calificación es más alta. Existe un límite para la cantidad de documentos que será reportada, el cual por lo regular vana entre 15 y 50 dependiendo del cliente que se esté utilizando. Después se pueden seleccionar los documentos que se interesen ver y WAIS los desplegará en la pantalla. Con seguridad, los usuarios ya han detectado un problema en este método: ¿Cómo puedeconsiderar la selección conteniendo determinado número de veces la palabra “and”?. Pudo haber pensado que lapalabra “and” representa la operación lógica AND en WMS, pero de hecho no existen palabras especiales en WAIS; cada palabracuentacomo tal en la búsqueda. Un documentoquecontenga 1000 coincidencias para“and”pero ninguna para “Clinton” y “Gore” puede obtener la calificación más alta, o mejor dicho, una calificación lo suficientemente alta para colocarlo en primerlugar. Otro problema que posiblemente no es tan obvio, es que WAIS carece de “sensibilidad contextual”. Se puede solicitar a WAIS que encuentre artículos que contengan las palabras “problem children” (niños problema) y el sistema podrá incluir un elemento que contenga la fiase “Los niños tuvieron un problema; perdieron el dinero 28 MEDIOS PARA OBTENER INFORMACION para su desayuno”. No se puede indicar a WAIS que las palabras coincidentes deban tener cierto orden y tampoco puede proporcionar ninguna información sobre el contexto en que estén inmersas. Finalmente, una vez que la búsqueda ha tomado unmal camino no se puede indicar a WAIS que evite “dar ciertas vueltas” o que excluya determinadas porciones de una fuente de información. Esto quiere decir que no se puede darle un comando como “Encuentra artículos con las palabras ‘problem children’, pero que no incluya artículos que contengan referencias al desayuno”. Tampoco existe una manera de preguntar ‘‘¿Qué se ha añadido a esta fuente de información desde el año pasado?’. Esto dificulta la realización reiterativa de búsqueda en una fuente de información cambiante. Si el índice es una fuente de información sobre artículos de un determinado periódico, no existe manera de solicitar “Busca los artículos que han sido publicados desde la última revisión”. Ya se enumeraron diferentes aspectos negativos. Incluso con estas limitaciones, se encontrará que WAIS es una de las herramientas de búsqueda más útiles en Internet. WAIS cuenta con una función única que aumenta su valor: la retroalimentacidn por relevancia. Algunos clientes permiten encontrar artículos que son similares a otros que ya encontró anteriormente. Laretroalimentaciónporrelevanciapermitetomar cierto textode un artículo y dejar que WAIS lo utilice en búsquedas futuras. Tales búsquedas pueden ser realizadas dentro de la misma fuenteo en una diferente. En contacto con WAIS Teneracceso a WAIS es muy semejante a tener acceso a Gopher. Parautilizarlo,senecesitatener una computadora ejecutando un programa cliente WAIS. Se puede instalar dicho programa en una estación de trabajo o uno se puede conectar a una computadora que ya lo tenga instalado y esté ejecutándolo. En este caso, existen clientes WAIS para la mayoría de los sistemas operativos y computadoras. Existe una interfaz UNIX orientada a texto que se llama swais. El problema radica en que el funcionamiento de búsquedas WAIS utilizando swais es bastante confuso. Se necesitarían aplicar demasiados comandos y utilizar demasiadas combinaciones de teclas simplemente para configurar la búsqueda, y las consecuencias de estas órdenes no son en absoluto obvias. Es mucho más fácil visualizar lo que está sucediendo con un cliente gráfico, como xwais, el cual se ejecuta bajo el sistema XWindows. Existeun elemento que permiteutilizarunainterfazdeíndicede Gopher parabuscarcualquierfuentede información WAIS con acceso público. Lo Único que no se puede hacer con esta facilidad es buscar múltiples fuentes al mismo tiempo. Tal vez se quiera utilizar uno de estos servidores públicos la primera vez para hacer la prueba de su funcionamiento. Si se decide usarlo con regularidad, se tiene que buscar un cliente más efectivo; todos ellos estarán disponibles gratuitamente a lo largo de la red. Ventajas y desventajas de WAIS Ventajas: - Permite tener acceso a la información sin la necesidad de conocer exactamenteel lugar de residencia. Las bases de datos mantienen indices invertidos en los contenidos de los documentos y ejecuta búsquedas basadas entexto lo cual enriquece el resultado de éstas. La retroalimentación por relevancia que permite tomar cierto texto de un artículo para utilizarlo en otras búsquedas. Completa las búsquedas por sí mismo. 29 DISENO E IMPLEMENTACldN DEUN SISTEMA DISTRIBUIDO PARAUN BUSCADOR DE WEB Desventajas: - Existen limitaciones importantes a la hora de realizar algunas búsquedas, pues hay que plantear las preguntas más adecuadas para encontrar lo que se busca. Para que un documento esté disponible, alguien debe crear antes un índice para ese servidor. WAIS carece de sensibilidad contextual, esto es, no busca frases, sólo palabras. No se puede indicar a WAIS que las palabra proporcionadas para la búsqueda tenganalgún orden y no se le puedeproporcionar información sobre el contexto. Por lo anterior se requiere un largo periodo para empezar a lograr buenos resultados. WWW (World-Wide Web) Historia WorldWide Web, o simplemente, el Web, es un ambiciosoproyecto cuyo objetivo consiste en ofrecer una interfaz simple y consistente a la inmensidad de recursos que proporciona Internet. Cuando usamos el Web, nos guiamospor nuestro instinto, es decir, empezamos por dondequeramos y saltamos de un lugara otro persiguiendo lo que despierta nuestra imaginación. L o asombroso es que con sólo unas pocas órdenes, se puede saltar por todoInternet. El Web fue desarrollado en Suiza enel centro deinvestigaciones CERN. Implementa nuevas técnicasde búsqueda de recursos y de hipertexto. Organiza la información en unhipertexto distribuido, en la cual sus nodos son objetos de texto, y en directorios de objetos llamados Páginas Principales o indices. WWW también soporta búsquedas de texto sobre los documentosalmacenados en un servidor particular [HAHH94]. La arquitectura de WWW La arquitectura de WWW está basada en un modelo cliente-servidor, con clientes WWW que ofrecen al usuario una interfaz de navegación similar al de hipertexto. Además de su lenguaje natural, el protocolo H'ITP, los clientes WWW también entienden los protocolos FTP y NNTP. Como ya se mencionó anteriormente, el protocolo FTP permite a los usuarios accesar archivos a través de Internet, pero con los clientes WWW los directorios se muestran en una manera de objetos de hipertexto. En el caso de las noticias y los grupos, éstos se muestran en forma de ligas dehipertexto o hiperligas. WWW permite el retiro de documentos y la búsqueda basada en texto. WWW corre sobre el protocolo TCP/IP y direcciona cada solicitud en una conexión TCP. Los objetos HTTP son identificados por el protocolo HTTP, el tipo y nombre del servidor correspondiente, y la ruta de acceso donde los objetos residen. También pueden ser especificadas partes de documentos. Si unaoperacióndebúsqueda es solicitada, el identificadordeobjetos recibe el conjunto de palabras clave en lugar de una ruta de acceso. En contacto con WWW Como ya se mencionó, el Web utiliza un sistema cliente-servidor. Este sistema requiere del uso de un programa cliente llamado nuvegador que actúa como una ventana al Web. Desde el punto de vista del Web, todo enel universo consiste en documentos o vínculos. Por tanto, el trabajo del navegador es leer documentos y seguir los vínculos que seleccionemos. 30 MEDIOS PARA OBTENER INFORMACION Lo más importante es que un navegador sabe como conectarse a un servidor WWW que ofrece documentos públicos de hipertexto. En general, se pueden encontrar dos tipos de documentos: texto, que se puede leer, e indices, en los que se puede buscar. Cuando el navegador encuentra que un vínculo apunta a un documento textual,recupera el documento y lo muestrapantalla a pantalla.Cuando el navegador encuentra uníndice, muestra una descripción e invita a introducir una o más palabras clave. El navegador entonces explora el índice y devuelve los datos que mejor encajan con las palabras clave. Haysólo tres habilidades básicas necesarias para usar el Web. Primera: se necesita ser capaz de controlar la visualización del texto. Segunda: hayque saber cómo decirle al navegador que siga un vínculo. Tercera: hay que ser capaz de especificar como se quiere buscar en un índice. La forma exacta de cómo funcionan estas tres operaciones depende de quénavegador se utilice. L a mejor forma de acceder al Web es usar un navegador que esté diseñado para obtener todas las ventajas de las características especiales del sistema. Por ejemplo, si se usaXWindows se puede utilizar un navegador que hará uso del ratón y de la interfaz gráfica del usuario. Si no se tiene un navegador como los anteriores, hay algunos sitios que ofrecen un navegador de acceso público. Cuando se hace Telnet a uno de estos sitios públicos, se usará uno delo siguientes tipos de navegadores: + + Navegudor en modo linea. Visualiza la salida escribiendo una línea tras otra en la terminal. Se ve como si todo apareciese en la última línea de la pantalla y se desplazase hacia arriba. Un navegador de estos no se preocupa del tipo de terminal que usa. Navegudor en modo pantalla. Só10 usa caracteres, sin embargo, puede escribir esos caracteres en cualquier parte de la pantalla. Esto hace que el navegador sea más rápidoy permita una interfaz más completa. Arboles de búsqueda La información accesible a través de WWW puede ser vista como si fueran arboles de categorías. El primero clasifica lainformaciónportema. Un registro en el directorio raíz de WWW liga el directorio alárbolde clasificaciónpor tema, esta clasificación incluyetemasgeneralescomoaeronáutica,educación,geografía, entretenimiento, ciencias de la computación, etc. Esta información se propaga a través de todos los tipos de servidores, incluyendo WAIS, Gopher y la WWW. El segundo árbol de clasificaciónes por el tipo de servidor. La página principal de esta clasificación lista todos los servidores disponibles en la WWW.En esta lista se incluyen registros de WAIS, Gopher, NNTP y servidores WJVFV. Inclusive, hay un registro para sitios FTP anónimo que pueden ser obtenidos a través de Archie. El tercer árbol que clasifica por organización no es muy poblado, en el sentido de queno alberga a una gran comunidadde usuarios. Ventajas y desventajas de WWW Ventajas: - El sistema de hipertexto es ideal para la recopilación de la información a lo largo de Internet. - El hipertexto es un método simple y fácil de usar para encontrar cualquier tipo de información existente en el Web. Por tener vínculos, el hipertexto es más valioso que el texto normal. A pesar de algunos problemas, hay algunos tipos de información para los cuales es relativamnete obvio dónde deben ir sus vínculos. - - Desventajas: - La utilidad del Web está limitada a dos funciones principales: leer artículos de hipertexto y acceder a recursos de información. - El poner vínculos a un hipertexto es un proceso que consume demasiado tiempo. 31 DISENO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADORDE WEB - Elvalor añadido al texto normal por los vínculosdehipertexto depende de lo útilesqueseanlos vínculos. - Lo que personalmente se obtiene de un documento de hipertexto depende mucho de lo cerca que esté nuestra necesidad del pensamiento de lapersona que puso los vínculos enel documento. OTROS PRINCIPIOS DE BúSQUEDA El proyecto de descubrimiento de recursos de la Universidad de Coloradoes mejor conocido como Netfnd. Esta herramienta de directorio de páginas blancas (o white pages) intenta localizar información acerca de un usuario de Internet cuando se le da el nombre del usuario y su organización. Una búsqueda exitosa de Netfnd regresa información tal como la dirección de correo electrónico y el número telefónico del usuario [SCHM93]. Netfnd construye una base de datos indexada llamada Base de Datos Semilla con información dispersa a través de varias fuentes, así como mensajes de redes de noticias, del DNS (Domain Naming System), del SMTP (Simple Mail Transfer Protocol) y de la herramienta Finger. La base de datos Semilla guarda nombres de organizaciones, de ciudades y de servidores que se encuentran en los encabezados de los mensajes de noticias (news messages). El servicio de información Knowbot ElSistema Digital de Librería (DLS, Digital LibrarySystem) propuesto por laCorporaciónNacionalde Iniciativas de Investigación, es una arquitectura abierta cuyo objetivo principal es integrar el acceso a fuentes de información actuales y futuras en Internet. Los Knowbots, que es una abreviación de Knowledge Robots (Robots de información), son los componentes activos de la DLS. Un Knowbot es un programa inteligente que puede intercambiar mensajes con otros Knowbots, moverse y replicarse a sí mismo dentro del sistema, y buscar y manipular objetos. El sistema de información Knowbot (KIS, Knowbot Information System) es un servicio de directorio de Internet capaz de interactuar con un cierto número de otros servicios de directorio como el X500 (el cual se verá más adelante en este capítulo), y consulta este servicio dependiendo del comportamiento de los usuarios. Alex es un sistema de archivos desarrollado por Vincent Care enla Universidad de CarnegieMellonque proporcionaa los usuarios acceso transparente delecturadearchivos de sitios FTP anónimo. Losusuarios pueden ver la colección de sitios FTP anónimo, sus directorios correspondientes y sus archivos, así como su sistema de archivos jerárquico. Los nodos intermedios son dominios de Internet, servidores o directorios dentro deservidores;y las hojas son archivos. Usandocomandos estándares de sistemas de archivos, losusuarios pueden navegar dentro de esta jerarquía para retirar archivos. Para obtener un desempeño razonable, Alex almacena la información en memoria caché. Esta información puede ser: nombres de servidores, información de directorios y los contenidos de archivos remotos. También implementa un mecanismo sencillo que asegura que las actualizaciones incluyan todo lo ocurrido en el último 95% de la edad reportada delarchivo. Alex es implementado como un servidor NFS (Network File system) y actualmente haintegrado acceso con Archie. Una 32 MEDIOS PARA OBTENER INFORMACION base de datos que indexa archivos README esparcida en todo el espacio de Alex funciona como un substituto de la base de datos Whatis de Archie. Sistema de Archivos Semántico Desarrollado por el Programming System Group en el MIT Laboratory for Computer Science, el Sistema de ArchivosSemántico (Semantic File System)integra acceso asociativo dentro de unsistemadearchivosde estructura de árboltradicional. El acceso asociativo se implementa proporcionandoa los sistemas de archivos un atributo de retiroy una interfaz de consulta. Los filtros son llamados atributos transductores de extracción. Un transductor toma como entrada los contenidos de un archivo o directorio y produce como salida los objetos identificados y sus atributos correspondientes. Un objetopuedecorresponder a un directorio completo, un archivo o partes de un archivo. Las búsquedas consisten de expresiones booleanas combinadas de los pares de valores de atributos deseados. Los transductores y las búsquedas producen vistas personalizadas de la jerarquía de los sistemas de archivos que son llamados directorios virtudes, los cuales pueden ayudar a localizar y a organizar la información. Una implementación del Sistema de Archivos Semántico se ha llevado a cabo en la superficie del NFS de Sun. La Norma X.500 A continuación se presenta un repaso de los estándares desarrolladosen 1988 por el ComitéConsultivo Internacional de Telefonía y Telegrafia ( C C m ) y la Organización para la Estandarización Internacional (I%, en inglés:International Standards Organization) paraunserviciode directorio en lared.Estosestándares especifican un servicio de directorio distribuido que responde a búsquedas de objetos nombrados. Por ejemplo, un servicio de directorio puede regresar una dirección de e-mail(correo electrónico) o un número de telex, dado un nombre de persona en una forma apropiada. El servicio dedirectorio puede ser usado también para soportar la definición de grupos de objetos, la autenticación de usuariosy funciones de manejo de redes, tales como: rastreo delalocalización de aplicaciones. Además de permitir a susclientesrecuperarinformación,elserviciode directorio tiene mecanismos para actualizar y manipular la información que61 contiene [INTOSS]. 1. Conceptos y Modelo La serie X500 provee reglas para nombrar objetos, una base lógica de información de directorio para mantener información acerca de esos objetos, y lasentidades de protocoloquecooperanparaproveer el serviciode directorio. 1.1. Nombrado En cualquier discusión denombrado es importante distinguir los siguientes tres conceptos: Un nombre denota un objeto. Una dirección indica el lugar donde se encuentra el objeto. Una ruta indica como llegar a un lugar. 33 DISEÑO E IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB De lo anterior se puede observar que un nombre puede ser casi cualquier cosa. Por ejemplo, una dirección y una ruta pueden ser maneras de nombres. Un número serial asignado a una computadora o un número del seguro social asignado aun ciudadano son también nombres. El servicio de directorio X500 trabaja con nombres quela gente utiliza para los objetos en un ambiente de comunicación. Los nombres de X500 describen lo que los objetos son. La intención es hacer que los nombres sean fáciles para la gentede recordar o de derivar. X 500 especifica parcialmente reglas para la estructura de nombres y los valores que los nombres o parte de ellos pueden asumir. Los nombres de X500 tienen las siguientes características: Tienen una o más partes llamadas atributos. Un atributo es una pareja tipohalor que describe algún aspecto del objeto a ser nombrado. Dependiendo de su definición, a un atributo se le puede permitir ocurrir más de una vez en el mismo nombre.El tipo y rango de valores queun atributo puede asumir son gobernados por la sintaxis del atributo. Las reglas que concuerden pueden ser también definidas como parte de la sintaxis del atributo. Estas serían usadas al comparar unnombrequealguienha adivinado deuna lista denombres válidos, por ejemplo. Las partes deun nombre tienenunarelación delegada encualquier nivel de la jerarquía. jerárquica. Laautoridad para asignarnombrespuedeser El espacio de nombres, del cual los nombres son sacados, está estructurado en forma arborescente. Los atributos son asociados con las aristas del árbol y los objetos con nodos. Todos los objetos que compartenel mismo nodo padre tienendistintos nombres distinguidos relativos (RDN por sus siglas en inglés: Relative Distinguished Names). Un RDN está compuesto de uno o más atributos asociados con el arista que parte del padre alhijo. Cada objeto tiene un úniconombre distinguido. Los atributos que construyen un nombre distinguido son los RDNs asociados con las aristas que son cruzadas dela raíz del árbol de nombrado hacia el nodo a ser nombrado. Las reglas que gobiernan la definición exacta de un nombre (los atnbutos que son usados y los valores que los atributos pueden asumir) pueden variar en diferentes partes del espacio de nombres. Unahojadel árbol de nombradopuede ser unalias para otro nodo. Esta facilidadpermitea los administradores asignar uno o más nombres alternos al mismo objeto. Debe notarse que el Directorio no incluye mecanismos explícitos para mantener la consistencia de los alias y de los nodos a los que éstos apuntan. La Figura 2.9 ilustra los principales conceptos de nombrado utilizados en X500. Muestra como Fran Gilbert, quientrabajaparala división de sujetadores deGeneralWidget en Saco tieneun alias, o nombrealterno, mientras es transferido temporalmente a laoficina de General Widget en Toronto. El nombre distinguido que identifica a Fran es: El nombre distinguido que es alias de Fran es: { País = EU, { País = Canadá, Organización = General Widget, { División = Sujetadores, Estado = Maine } Nombre Personal = Fran Gilbert } . 34 Provincia = Ontario, Organización = General Widget, División = Sujetadores, Nombre Personal = Fran Gilbert 1. MEDIOS PARA OBTENER INFORMAGION Prbncia = Ontario B = Suletadores D1vis16n Lugar = Toronto I Fran Gilbert Slmboloufa 0 Nodo Raiz Nodo intermedio atributo Unforma que 0 NodoHoja Nias N Indica e1 nodo que apunta al alias un todo o un parte de nombre distinguldo relativo aaaaaaa nombre unparte deatnbuto esUn no que distinguido relatwo Figura 2.9: Conceptos de nombrado. 1.2. La base de información del Directorio La base de información del directorio (DIB por sus siglas en inglés: Directory Information Base)es una base de datos lógica que contiene informaciónque el Directorionecesitaparahacer su trabajo. Cadaobjeto enel Directorio es representado en la DIB por un registro. Toda información acerca de un objeto es almacenada en la forma de atributos. La estructura de la DIB es un árbol llamado ÁrboI de Información del Directorio (DIT por sus siglas en inglés: Directory Information Tree). El DIT es paralelo al árbol de nombrado. Cada nivel en la jerarquía de un nombre (nodos intermedios y hojas) es un objeto que es representado por un registro en el DIT. Un registro en la DIB, además de los atributos que puede formar un RDN de un objeto, también contiene una indicación de lacZuse de objeto (o subclase) a la que el objeto pertenece. Todos los objetos en las mismas clases tienenuna o más características similares. Las clases de objetospuedenserdivididasensubclases, y así sucesivamente, hasta una profundidad arbitraria. Usar clases de objetos simplifica el proceso de nombrado y organización de los objetos. Hay reglas para formar los nombres de los objetos en una clase o subclase. Una subclase hereda las reglas de su clase anterior inmediata que lo contiene. Las reglas especifican cuales atributos son obligatorios u opcionales en el registro de una clase de objeto. Las reglas también especifican cuales clases de objetos pueden ser subordinadas a un registro dado. Por ejemplo, a un objeto de la clase “país” se le puede permitir ser superior a objetos de clase “estado” o clase “organización” en el nivelpróximoinferiordel árbol. Estasegundaforma de regla es llamada: regla de estructura. Las reglas de estructura también especifican cuáles atributos asociados con una clase dada deben aparecer en el RDN de la entrada próxima inferior. Las reglas de estructura son almacenadas en entradas junto con el nombrey clase de un objeto. Todos juntos, el conjunto de clases de objeto, las reglas de estructura, los tipos de atributos y la sintaxis de los atributos; forman el esquema del Directorio. Las definiciones en el esquema son impuestas como parte de la operación del Directorio. La figura 2.10 resume los elementos del esquema delDirectorio y sus relaciones: 35 DISENO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB Estructura de DIT Figura 2.1 O: Esquema del Directorio. 1.3. Operación distribuida El directorio puede ser implementado en una manera distribuida. El modelo funcional para el Directorio describe la distribución lógica de sus funciones. El modelo de capas para el Directorio muestra cómo éste encaja en el modelo de referencia de siete capas para la interconexión de sistemas abiertos (modelo de referencia de laOSI). Las reglas de operación especifican las interacciones entre las diferentes partes del Directorio. 1.3.1. Modelo funcional Las funciones del directorio son proveídas por dos tipos de entidades abstractas. Un Agente de Usuario del Directorio (DUA por sus siglas en inglés: Directory User Agent) actúa en nombre de un usuario de Directorio individual.Cuandouna persona o proceso quiere usar el Directorio, éste interactúa con su DUA. El DUA entonces actúa según sea lo apropiado. Las funciones reales del directorio son suministradas por un número de Agentes de Servicio del Directorio @SA por sus siglas en inglés: DirectoryService Agents). Los lugares lógicos en los que estas funciones se hacen disponibles para los DUAs son llamados puntos de acceso. Un DSA puede suministrar cero o más puntos de acceso. La figura 2.11 muestra las relaciones entre los usuarios del Directorio, los agentes deusuario del Directorio y los agentes de servicio del Directorio. I. Punto de A c c e s g Figura 2.11: Modelo Funcional. 36 MEDIOS PARA OBTENER INFORMACION Diferentesporciones de laDIBson distribuidas entre variosDSAs.LaDIB permite quelassolicitudesde recuperación sean marcadas “No use la copia” (i.e. use solamente la versión original). Esto es debido a que no existe una manera formal para controlar la replicación de la información en la DIB. Una implementación que incluyareplicación deberá tener sus propiosalgoritmos y hacersuspropiasprovisionesparamantener la consistencia de la información. 1.3.2. Modelo de capas Los DUAs y DSAs son entidades del protocolo de aplicación de capas. Para comunicarse entre ellas, hacen uso de los elementos de servicio de aplicación de capas,talcomo el “ElementodeServiciodeOperaciones Remotas”. 1.3.3. Procedimientos parala operación Un DSA puede responder a una solicitud de un DUA en varias formas diferentes. Si puede satisfacer la solicitud del DUA por el mismo, éste hace lo que sea apropiado, comodar al DUA alguna información de la DIB. Por otra parte, existen tres posibilidades: 1. Como se ilustra en la figura 2.12, el DSA puede encadenar la solicitud pasándola a otro DSA. El segundo DSA responderíaalprimero,enlugar dealDUA.Elencadenamientopuedeserllevadoacabo recursivamente. a Nuevo DSA que atiende la solicitud Figura 2.12: Encadenamiento de la solicitud del DUA con otro DSA. 2. El DSA puede enviar la solicitud a múltiples DSAs para resoluciones en curso. El primer DSA recopila todas las respuesta antes de responder con los resultados. El envío múltiple puede ser considerado como una forma de encadenamiento. También puede ser llevado acabo recursivamente. La figura 13 muestra la forma en que esto se lleva a cabo. 37 DISENO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB Figura 2.13: Encadenamiento con múltiples DSAs. 3. En la figura 14 se observa cómo el DSA también puede enviar al DUA hacia otro DSA que crea que pueda segundo DSA al DUA. El DUA pediría realizar la solicitud. Esto es, el primer DSA daelnombredel entonces al segundo DSA realizar la solicitud. Figura 2.14: Cambio de DSA paraatender la solicitud del DUA. La comprensión de cuáles DSAs tienen qué porción de la DIB es llamada conocimiento. Como mínimo cada DSA tiene que saber como alcanzar otros DSAs como: m 38 Sus hijos. Su padre, el padre de su padre, y así sucesivamente, hasta un DSA cuyo padre es el nodo raíz, llamado un DSA de primer nivel. X500 asume que ningún DSA implementará el nodo raíz. Por lo tanto, requiere que todos lo DSAs de primer nivel posean el conocimiento que el nodo raíz poseería, esto es, como encontrar todos los DSAs de primer nivel (cada DSA de primer nivel debe tener alguna manera de encontrar a todos los demás DSAs. Por otra parte, un DSA de primer nivel no podría manejar todas las consultas que vinieron por su mismo camino). MEDIOS PARA OBTENER INFORMACION Este conocimiento es introducido y mantenidoporadministradoreshumanosde DSAs. El conocimiento es almacenadopor DSAs enformadereferencias.Unareferenciaasociaentradas enla DIB con DSAs que mantienen esas entradas. Los DSAsalmacenan varias formas distintas de referencias: 0 0 Las Referenciasinternas asocian un RDN con un apuntador a un registro en labase dedatosinternadel DSA. Las Referenciassubordinadas asocian un RDNparaunaentradasubordinadainmediataconelnombre y dirección delDSA que mantiene esa entrada. Las Referenciassubordinadas no especzFcas mantienen el nombre y dirección de un DSA quecontiene entradas subordinadas inmediatas. Las Referenciassuperiores mantienen el nombre y dirección de un DSA delcualeste DSA es un subordinado. Las Referencias cruzadasasocian un subárbol del DIT con el nombre y dirección de un DSA que contiene el nivel más alto de ese subárbol. escala. Sin Generalmentenoseesperaquelos DSAs compartanel conocimiento el unoalotroenunalarga embargo, pueden solicitar que sean regresadas referencias cruzadas con los resultados de una operación sobre ese objeto. Los DSAs tienen una habilidad limitada de detectar inconsistencias en esta información, y no hay un mecanismo estándar para propagarun reporte de problema al DSA que almacena la referencia inválida. La resolución de solicitudeshechasporDUAsestárealizadaentres fases. Durantela fase de resolucidn de nombre, la solicitud es pasadade un DSA a otro hasta que llega al DSA que contenga la entradaapropiada. de fusión de resultados Durante lafase de evaluación la solicitud actual es llevada a cabo. Finalmente, lafase comienza una vez que los resultados de la fase de evaluación están disponibles. Los resultados son regresados al DUA como parte de esta fase. compleja. Ademásdelosmecanismosdeprocesamientode La operaciónde un DSA puedeserbastante solicitudes, los DSAs pueden usar signaturas digitales para verificar la identidad de un DUA o para certificar los resultados regresados al DUA (el Directorio usa un esquema de encriptación de clave pública para soportar la autenticación). LosDSAs soportan un sistema deprioridadsimpleparagobernar el ordenenelquelas solicitudessonprocesadas,tambiénpuedeninterrumpirelprocesamientodeunasolicitudsi los límites de tiempo y tamaño son excedidos. 1.4. Administración distribuida Muchas distintas organizaciones pueden trabajar juntas para proveer un servicio de Directorio para todos. Por ejemplo, diferentes portadores comunes implementarían porciones del Directorio que correspondan a sus propios subscriptores. La porcióndeldirectorioparaelqueunaorganizaciónesresponsable es llamada Dominio de (DMD). La serie X500 distingueentre Dominios deManejo de Directoriosde Manejo deDirectorio Administración (ADDMDs por sus siglas en inglés: Administration Directory Management Domains), los cuales son corridos por portadores comunes, y Dominios de Manejo de Directorio Privado (PRDMDs por sus siglas en inglés: Private Directory Management Domains), los cuales son corridos por otras organizaciones. La serie X500 hace una distinciónentreAutoridadesdenombrado y AutoridadesAdministrativas.Las Autoridades de Nombrado determinan la estructura y asignación de nombres. Las Autoridades Administrativas operan DSAs y mantienen la información en DSAs de acuerdo al esquema del Directorio y las decisiones de las AutoridadesdeNombrado.EnelInternet DoD (Department of Defense),variasordenes,contratistase instituciones académicas pueden actuar como Autoridades de Nombrado ylo Autoridades Administrativas. 39 DISENO E IMPLEMENTAC16NDE UNSISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB 2. Servicios de Directorio Los servicios de Directorio descritos en esta sección son los servicios que un DUA puede solicitar desde un DSA. X500 usa llamadas a procedimientos remotos (WC: Remote Procedure Call), como un paradigma para solicitar y suministrar servicios. Conceptualmente, las llamadas a procedimientosremotos son bastantes simples. El iniciador del procedimiento invoca las llamadas en un sitio remoto. Se regresará ya sea el resultado o un mensaje de error. Las RPCs están definidas en términos de su propósito y de los parámetros que intercambian solicitantes y suministradores. Cada solicitud de servicio contiene controles en el sentido en el que el Directorio va a procesar la solicitud. Dentro de estos controles tenemos por ejemplo: 0 0 0 0 Filtros, los cuales especifican atributos sobre los cuales, el Directorio debería basar su búsqueda. Los filtros pueden contener expresiones booleanas y operadores de comparación. Selectores, los cuales controlan cuáles atributos deben ser recuperados de una entrada de objeto. Un selector puede especificar que los valores y tipos de atributos, o solamente tipos de atributos (verificando la presencia de un atributo), sean regresados. Parámetros de seguridad, que incluyen protecciones digitales y soporte de intinerarios así comonúmeros aleatorios. Límites en la cantidad de tiempo hasta que una solicitud expira, el número de entradas de objeto que puede ser regresado, la porción del Directorio en el que la solicitud puede ser procesada, la prioridad de qué proceso debe tomar lugar, y los medios que los DSAs pueden utilizar paraprocesar la solicitud. Los siguientes párrafos describen las operaciones que un DUA puede solicitar que sean llevadas a cabo. 2.1. Ligamiento y Desligamiento Las operaciones de BIND (Ligadura) y UNBIND (Desligadura) son las primeras y las últimas en una serie de operaciones que un DUA invoca desde un DSA. Éstas gobiernan la relación de trabajo entre un DUA y un DSA. La operación BIND provee un medio para un DUA de identificarse con el DSA y viceversa. La operación UNBIND es usada por un DUA para señalar el final de una serie de operaciones. 2.2. Operaciones de Lectura Dos operaciones, READ (Leer) y COMPARE (Comparar), son utilizadas para examinar la información asociada con una entrada de objeto particular. La operación READ es usada para extraer información de una entrada particular o para verificar un nombre distinguido. La operación COMPARE es similar a R E A D , excepto que el DUA suministra información al DSA para hacerla coincidir con una entrada deobjeto. 2.3. Operaciones de Basqueda Dos operaciones, LIST (Listar)y SEARCH (Buscar), pueden regresar información acerca de objetos múltiples. Dada una entrada particular en el DIT, LIST regresa los RDNs de sus entradas subordinadas. Dado un conjunto de criterios de selección, SEARCH identifica entradas de interés en un subárbol del DIT y regresa información extraída de esas entradas. 40 MEDIOS PARA OBTENER INFORMACION 2.4. Operaciones de Modificación Tres operaciones, ADD (Añadir), REMOVE (Remover) y MODIFY (Modificar), son usadas para mantener la información almacenada en los nodos hoja del DIT. ADD y REMOVE crean y borran hojas respectivamente. MODIFY puede ser usada para añadir o remover atributos de una entrada de hoja o para alterar los valores de atributos en una entrada de hoja. El diseño e implementación de controles de acceso en las operaciones ADD, REMOVE y MODIFY se dejan al implementador. Debe notarse que no hay provisiones formales hechas para Como esto estácompletado es un añadir,cambiar o borrarinformaciónalmacenadaennodosinmediatos. problema local. 2.5. Operación de Abandono El Abandono debe ser invocado porun DUA siguiendo una operación para decirle alDSAque ya no está interesadoen los resultados de la operación.Debenotarseque el Abandono no necesariamentecancelala operación. Cancelar la operación podría ser difícil de hacer, dada la naturaleza distribuida del Directorio. 3. Protocolos del Directorio Hay dos protocolos utilizados por el directorio. El Protocolo de Acceso del Directorio (DAP por sus siglas en inglés: Directory Access Protocol) es usado en interacciones entre un DUA y un DSA. El Protocolo de Sistema del Directorio (DSP por sus siglas en inglés: Directory System Protocol) es utilizado en interacciones entre dos DSAs. Ambos protocolos usan operaciones remotas como su paradigma. Todas la interaccionesde protocolo del DAP y DSP están especificadas por los argumentos pasados con la invocación, los argumentos que pueden ser regresados con los resultados, y los posibles mensajes de error. Las operaciones remotas que unDSApuedeinvocardesdeotroDSAsoncasiexactamenteparalelasalas operaciones remotas que un DUA puede invocar desdeun DSA. El directorio implementa operaciones remotasutilizando el Elementode Servicio deOperacionesRemotas (ROSE por sus siglas en inglés: Remote Operations Service Element), el cual es parte de la capa de aplicación. BIND y UNBIND son la única excepción de esto. Usan el Elemento de Servicio de Control de Asociación (ACSE por sus siglas en ingles: Association Control Service Element), el cual es también parte de la capa de aplicación. El ROSE puede ser implementado directamente en la cima de la capa de presentación o puede usar los servicios mejorados del Elemento de Servicios de Transferencia Confiable (RTSE por sus siglas en inglés: Reliable Transfer Service Element). 4. Algunos tipos de Atributo y Clases de Objetos X500 defineun número de tipos de atributo y de clases de objeto que pueden ser usados aunque no sean requeridos. Esta sección proveeun repaso de estas definiciones. 4.1. Atributos X.500 ha definido once grupos de tipos de atributo. Estos incluyen: 41 DISENO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB S S S S S S S S S S S Los tipos de atributos del sistema denotanuna clase de objeto,un alias de objeto (si lo hay), y una descripción acumulada del conocimiento leíble para los humanos (entendiendo cómo la DIB está distribuida entre DSAs) almacenadapor un DSA específico. Los tiposde atributos de etiquetado soncadenas que la gente asocia con objetos. Como porejemplo, nombres comunes tales como “Bill Gates” o “M6dem de Alta velocidad” y números seriales. Los tipos de atributos geogrdjicos asocian una región o posición geográfica con un objeto. Por ejemplo: países, estados/provincias y lugares. Los tipos de atributo organizacionales identifican una organización con la cual un objeto está afiliado y el papel que el objeto juega dentro de la organización. Porejemplo, el nombre de la organización y el título. Los tipos de atributos explicativos proveen ayuda al usuario del Directorio. Por ejemplo, pueden describir el propósito de un objeto, sugerir criterios de búsqueda que pueden ser útiles en un subárbol, o dar la ocupación de una persona. Los tipos de atributo de direccionamiento postal proporcionan información requerida por la entrega postal fisica a un objeto,como por ejemplo la dirección de una calle o el apartado postal. Los tipos de atributo de telecomunicaciones asocian una o más direcciones electrónicas conunobjeto. Ejemplos de direcciones como esas son los números telefónicos, de telex, de teletipo y, de fax; direcciones de X.121, de ISDN e información de direccionamiento utilizada portelegramas. Los tipos de atributo depreferencias especifican un orden de prioridad paraescoger el método (por ejemplo: correo electrónico, teléfono) para intentarse comunicar con unobjeto. Los tipos de atributo de aplicación de la OSI almacenan una dirección de presentación de una entidad de aplicación OS1 y una aplicación de contexto. Los tipos de atributo relacionales implementan el concepto de grupos y relaciones dentro del Directorio, por ejemplomiembro, dueño, cargo y “vea otro”.Debe notarse que el Directorio no incluyemecanismos explícitos para mantener la consistencia de esta información. Los tipos de atributos de seguridad soportan mecanismos de autenticación que pueden ser usados por el directorio. Ejemplos de estos atributos son contraseñas (passwords) y certificados. 4.2. Clases de Objetos X 500 define un número de Clases de Objetos: S S S S S S S S S S S S S S S 42 Cima (de la cual cada otra clase es una subclase) Alias País Lugar Organización Unidad Organizacional (una subdivisión de una organización) Persona Persona Organizacional (una subclase de persona usada en uncontexto de negocios) Papel Organizacional (como “Cuentas por pagar o cobrar”) Grupo denombres (puede ser definido recursivamente) Persona Residencial (una subclase de persona usada fuera delos negocios) Procesos de aplicación Entidad de aplicación DSA Dispositivo MEDIOS PARA OBTENER INFORMACION ANALISIS DE LOS PRINCIPALES SISTEMAS DE BúSQUEDA DE INFORMACldN En esta sección se presenta un análisis de los principales sistemas de búsqueda de información y un comentario sobre la norma X.500. Para el análisis tomamos en cuenta las diferencias que estos sistemas presentan en cuanto a flexibilidad en el uso e interacción con el usuario; manipulación, organización y manejo de la información; y en que formasatisfacen las características clave de un sistema distribuido. Flexibilidad en el uso einteracción con el usuario Puede observarse que servicios como Gopher y FVW ofrecen a los usuarios una interfaz que les permite navegar en el espacio de la información disponible. u.wW es una herramienta organizacional y, de manera similar a otros sistemas de archivos, WWW organiza el espacio de la información usando ligas de hipertexto. Los usuarios pueden personalizar su página principal para ligar la información a cualquier parte del espacio de información de M . Desde luego, los usuarios sólo pueden personalizar su página principal, es decir, su punto de partida dentro de M , teniendo que seguir ligas existentes a partir de ahí. Debido a que es orientado a sistema de archivos, es una herramienta de organización más flexible en cuanto a su uso, en cambio, servicios como Archie, WAIS y Netfind, para responder a las solicitudes de búsquedade los usuarios, buscan información relevante en sus bases de datos indexadas. Estas herramientas construyen sus bases de datos indexadas de la información distribuida a través de Internet [PEE97]. Manipulación, organización y manejo de la información La forma con la cual las herramientas de búsqueda manipulan los objetos es una característica de distinción. En Archie por ejemplo, los objetos de manipulación son archivos y no sus contenidos. De esta manera Archie sólo puede ser utilizado para encontrar información almacenada en archvos que tienen nombres representativos (es decir, que sus nombres se seleccionan para representar sus contenidos). Al contrario, WAIS indexa los contenidos de documentos de tal manera que los usuarios pueden encontrar documentos interesantes solicitando búsquedas basadasen palabras clave. Enel Sistema de Archivos Semántico, losusuarios pueden accesarporciones contenidas dentro de archivos tales como procedimientos de un archivo de código fuente o mensajes individuales en un archivo de correo electrónico. En cuanto a la organización de la información, usualmente las herramientas de navegación la llevan a cabo de formasimilara un grafo dirigido con nodos dirigidos porligas. Gopher, WWW y Alex pertenecen a esta categoría. WWW es un paso adelante en los sistemas de hipertexto. Permite ligas entre nodos de cualquier tipo. Por otro lado, los servicios de indices, tales como Archie y Netfind tienden a organizar la información en bases de datos indizadas que permite la búsqueda exhaustiva eficiente. Además del tema de ¿cómo las herramientas de búsqueda organizan la información?, nos preguntamos también, dónde está almacenada la información. En los servicios que emplean una organización basada en grafos, la información es distribuida usualmente entre servidores geográficamente distribuidos. Gopher y WWW pertenecen a este grupo de servicios. Por otro lado del aspecto del diseño, las herramientas como Archie y Netfind construyeron bases de datos indexadas centralizadas y duplicadas. WAIS construyó una base de datos indexada y distribuida. Las bases de datos de WAIS almacenan ambas partes, la base dedatos de indexación y su información correspondiente. Algunos de los sistemas mencionados implementan servicios de directorios, tal es el caso de WAIS y X500. En estos sistemas, las secciones de búsqueda pueden empezar con una solicitud del directorio de servicios, los 43 DISEQO E IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDO PARAUN BUSCADOR DE WEB cuales aconsejan a los usuarios algunos lugares dónde buscar. El directorio de servicios de WAIS conoce los servidores WAIS participantes y dependiendo de las solicitudes de búsqueda del usuario le proporciona una lista de servidores relevantes. Los Servicios de búsqueda de Internet han proliferado debido al número de servidores que continuamente crece y por lo tanto, se incrementa la cantidad de informacióndisponible. También las herramientas de búsqueda pueden distinguirse como herramientas de navegacidn o de indices. Las los herramientas de navegucidn organizan su espacio deinformación como grafos dirigidos ypermitena usuarios encontrar información de interés mientras navegan el espacio de información. Gopher y WWW caen dentrodeesta categoría. Los servicios de indices, tales como Archie y Neflnd, organizan lainformación disponible en bases de datos indizadas y responden a las búsquedas de los usuarios mediante búsquedas de información relevante en sus bases de datos. Debido a que las primeras herramientas de búsqueda en Internet heron desarrolladas independientemente es, desde luego importante, la interoperabilidad. Esto es, que los usuarios de una herramienta de búsqueda puedan accesar a otras para recuperar más información proporcionada por otros servicios. Por principio, los clientes Gopher pueden retirar objetos de Archie, WAIS y servidores FTP. Los clientes WWW reconocen los archivos FTP y los servidores Gopher y Archie. Los esfuerzos para mejorar la interoperabilidad entre los servicios de búsqueda incluyen la estandarización de los identificadores de los objetos. Comentario sobre la normaX.500 Se puede pensar que Internet es víctima de su propio éxito en el sentido de que cuando Whois fue planteado, nadie pensó que la base de datos alguna vez podría contener millones de registros de usuarios conectados a Internet. El servicio de directorio X500 soporta un crecimiento de la base de datos con tiempos de respuesta similares paraatendera las solicitudes de los usuarios. Contradictoriamentea Whois, X500 si secomportadeigual manera ante crecimientos excesivos de información, de hecho, parece que X500 en sus primeros días, era la única tecnología disponible que podía hacer frente a este problema, por lo mismo h e seleccionada para el directorio global en línea de Internet que construyó InterNIC. Lamentablemente, aunque X500 resuelve el problemadelcomportamiento ante crecimientos excesivosde información, crea otro problema. El estándar que ofrece es demasiado incómodo para ser usado directamente. Hasta 1994 [HAHH94], se estaba esperando que X500 fiera aceptado universalmente por lo que un gran número de organizaciones adoptaron este esquema. Hoy en día la mayoría de las personas prefieren utilizar a la WWW sobre otros servicios, con el fin de obtener informacih en Internet. Sin embargo, servicios como Archie, WAIS, Gopher, e incluso el mismo X500 siguen siendo utilizados, aunque con menor frecuencia, principalmente por personas que tienen algún conocimiento o experiencia en el uso de estos servicios. Forma en que satisfacen las características clave de un sisrema distribuido Comenzando con la comparticidn de recursos, podemos decir que FTP,Archie, Gopher, WMS, WWW y X500 son buenos en esta característica debido a que todos ellos fueron construidos con el propósito de compartir información acerca de distintos recursos existentes en Internet. 44 MEDIOS PARA OBTENER INFORMACION Estos sistemas están montados en servidores de alto rendimiento que constantemente debenser aumentados en la capacidad de sus componentes de hardware. Por lo anterior podemos decir que ellos son buenos en cuanto a la apertura. Además, todos ellos soportan la adición de nuevos servicios de compartición de recursos. En cuanto a la concurrencia, puede observarse que no todos la cumplen en la misma medida, por ejemplo, los sitios FTP sólo pueden atender a cierto número de clientes. Es fiecuente querer acceder a un sitioFTPy encontrarse que no es posible debido a que el sitio ya está atendiendo a un número de usuarios y no permite más conexiones. Lo mismo ocurre con Archie en donde sus servidores tienen un límite de usuarios que pueden ser atendidos simultáneamente. Por otro lado, Gopher, WAIS, WWW y X500 son más flexibles en esta característica permitiendo atender a múltiples usuarios simultáneamente. La escalabilidad es una característica clave que Gopher, WWW y X500 cumplen satisfactoriamente pues estos sistemas están diseñados para poder ser escalados sin alguna dificultad. Encambio FTP no permite ser escalado pues de un sitio FTP sólo se pueden transferir archivos contenidos en ese mismo sitio. Por otro lado Archie y WAIS cumplen con esta característica de manera regular ya que a pesar de que permiten ser escalados, éstos dependen del trabajo de administradores humanos lo cual limita en gran mediael desempeñode esta labor. En los sistemas como FTP y WAIS la tolerancia a lasfallas no es buena, pues en el caso del FTP no existe una forma derecuperar la información que se estaba transfiriendo una vez que se hayacaído el servidor FTP, además de que es dificil encontrar sitios FTP replicados correctamente. En WAIS existe un problema:parahacer búsquedas se tiene que accesar al Directorio de Servicios el cual es centralizado y, de esta manera, cuando el servidor que aloja dicho directorio esta fuera de servicio no hay forma de utilizar a WAIS. Por otro lado, cuando seestá atendiendo aun cliente yen ese momentofalla este servidor tampoco hay forma derecuperarla información que se estaba manejando en ese momento. En cambio, enX500 la tolerancia a lasfallas es buena ya que este servicio de directorio presenta en su arquitecturavarios puntos de acceso que son los lugares lógicos en los que los usuarios se comunican a través de un DUA con un DSAcomo se vio anteriormente, esto junto con el hecho de que distintos DSAs pueden contestar a un DUA hacen que X500 sea tolerante a fallas. En el caso de Archie, Gopher y WWW esta característica se presenta de forma regular por distintos motivos. En el caso de Archie, existen varios servidores Archie distribuidos geográficamente alrededor delmundoconcontenido equivalente. Esta redundancia en el hardware y en el software hacen de Archie un sistema tolerante a las fallas pues si unono se puede conectar con un determinado servidor existen otros más en dondese sí se puede acceder, sin embargocuando se está conectado con un servidor Archie y éste súbitamente falla, no hayformade recuperar la información proveída por este servidor. En WWWsucede algo semejante. Algunos sitios de la WWW que contienen información muy importante, tienen otros sitios con una copia de esa información para que esté disponible a los usuarios en todo momento. El caso de Gopher es similar al de WAIS sólo que se tiene la ventaja de que al utilizar un cliente Gopher, éste se conecta con el servidor raíz de Gopher por defecto cuando se ejecuta el programa cliente por primera vez, después de eso se puede navegar libremente por el espacio de información de Gopher sin que sea realmente necesario que en todo momento se encuentre activo el servidor raíz de Gopher. Por lo anterior decimos que Archie, WWWy Gopher cumplen con estacaracterística clave de forma regular. En cuanto a la transparencia, sólo consideraremos los dos tipos de transparencia más importantes de los 8 que el manual de referencia ANSA [ANSA, 19891 y el modelo de referencia paraproceso distribuido abierto de la I S 0 (RM-ODP) [ISO, 19921 identifican. La transparencia aZ acceso, como recordaremos del capítulo 1, habilita objetos de informaciónlocales y remotos para ser accesados utilizando operaciones idénticas. Debido aque cada componente uno de cada uno de estos sistemas es accesado de manera idéntica, decimos que todos ellos son transparentes al acceso. En Gopher, WAIS; WWW y X500 existe transparencia en su localización yaqueelusuariodesconoce la localización de cada uno de ellos. En el caso de Archie, a pesar de que existe un cliente Archie se puede saber cuál es el servidor Archie más cercano al que uno puede acceder para esperar resultados más rápidos y debido a 45 DISEÑO E IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDO PARAUN BUSCADOR DE WEB que no es concurrente del todo, se puede escoger algún otro servidor que pueda dar un servicio similar al más cercano en cuanto a la rapidez por lo que Archie no es completamente transparente a la localización. Por otro lado, al utilizar FTP es necesario dar la dirección explícitamente del sitio FTP que se quiere accesar lo que hace que FTP no sea transparente a la localización. A continuación se presenta una tabla comparativa endonde se resumedemanera visual todo lo expuesto anteriormente en el análisis de los principales sistemas vistos en este capítulo de acuerdo a las características clave de los sistemas distribuidos. TABLA COMPARATIVA. I Transparencia: I Simbología: 4 Bueno Regular I x I Malo Tabla 1: Evaluación de los sistemas de búsqueda de acuerdo a las características de los sistemas distribuidos. 46 CAPITULO 3 Diseño de/ Buscador L a indexación centralizada (implementada en varios buscadores como Alta Vista, Infoseek, Exite, Lycos, ALIWEB, Webcrawler) es actualmente el Único método real de trabajo del descubrimiento de recursos del Web. Por lo menos, los indices centralizados son ampliamente usados yestán satisfaciendo a millones de usuarios diariamente. Cuando un usuario completa una forma de búsqueda de Lycos, Infoseek o Alta Vista y presiona el botón de “búsqueda”, su consulta, junto con millones de otras consultas, va a un índice central enorme el cual contiene información acerca de las páginas de Web disponibles en la red. Un rastreo periódico de los sitios de Internet es requerido para mantener tal índice más o menos actualizado. Losusuariosmás experimentados están razonablemente felices con la información proveída por los buscadores. Sin embargo, muchosusuarios nuevos estánfrustrados: en un principio se emocionanconlaabundanciadeinformación disponible; pero después su emoción inicial desaparece ya que se lleva mucho tiempo (y dinero, si el acceso a Internet no es gratis) para encontrar cosas realmente útiles en esa gran cantidad de información. Toma algún tiempo desarrollar las habilidades de navegación necesarias para encontrar sus propias fuentes de información y puntos de entrada favoritos. De acuerdo con nuestro conocimiento hay por lo menos tres problemasconla indexación centralizada: Primero, el crecimiento explosivo de la Internet hace el manejo del volumende la información más y más dificil. Cuando el tamaño de Internet se duplica, la carga en los buscadores se incrementa cuatro veces debido a que tiene que indexar y servir al doble de usuarios. Actualmente, los buscadores centralizados proveen una solución satisfactoria a ese problema, sólo satisfactoria porque diferentes buscadores a menudo producendiferentes resultados para una misma consulta. Esto demuestra que ningunode ellos provee una cobertura comprensiva de Internet. Hay proyectos enfocados en lograr unaindexacióncentralizada eficiente de volumencrecientede información, mejorando en un futuro el rendimiento de los buscadores basados en bases de datos centralizadas y construyendo réplicas de las bases de datos de las búsquedas. El segundo problema es, el uso ineficiente del ancho de banda de lared. Idealmente, las consultas de los usuarios deberían ser resueltas localmente. Sin embargo, no pensamosquecada país sea capaz de proporcionar un buscador de alto rendimiento en el futuro, aún si éste es sólo una réplica. También el uso ineficiente del ancho de banda de la red es causado por el proceso de indexación cuando cadasitio debe ser visitado regularmente para guardar los indices actualizados. El tercer problema es la calidad de la información retornada. Regresar tanta información como sea posible no es necesariamentelo ideal, porque lahabilidadhumanaparaanalizar esta información y seleccionarcuáles realmente necesaria es muy limitada. Las técnicas de recuperación de información actuales, proveen documentos relevantes con una precisión del 6 6 7 0 % . Esto significa que entre los primeros documentos regresados, sólo un 60-70% son acerca del tema deseado. Pero aún entre los documentos relevantes, muchos son de poco valor y lejanos de los mejores recursos disponibles que podrían ser encontrados. A nuestro criterio, la Internet es una base de datos enorme,además, está creciendo exponencialmente (especialmente el WWW). Se espera un periodo prolongado de crecimiento debido a: P Una basta cantidad de pequeños negocios que llegan a la red. P Países del segundo y tercer mundo extendiendo su presencia enla red. 47 DISEÑO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB Avances en la capacidad de almacenamientolocal, ancho de banda y presencia de multimedia en la red. El crecimiento natural del conocimiento acumulado porel género humano quees publicado en la red. Esta base de datos enorme es dinámica. Constantemente nuevos sitios llegan y otros se van. Los documentos están siendo actualizados y desactualizados. Dado el tamaño de la Internet, el problema de mantener indices actualizados es muy serio. La Internet es descentralizada y anárquica. Esto significa que una administración coordinada de base de datos de manera centralizada es casi imposible. La información disponible es heterogénea. Esto significa que la tecnología indexada tiene que cubrir una variedad de fuentes: documentostextuales, software, imágenes, video, etc. No hay control sobre la publicación de la información de la Internet. Cualquiera puede publicar lo que sea, siempre y cuando se les haya dado el acceso de publicación en un servidor. Esto inevitablemente conlleva a la duplicación de la información y la contaminación del ciberespacio. Dada la cantidad total de información, el problema de seleccionar recursos valiosos es muy dificil. Cualquiera de estos problemas considerados tienen, cada uno, soluciones aceptables. Es el efecto de todos ellos en conjunto lo que hace que el descubrimiento de recursos de Internet sea un problema dificil. En nuestra opinión, los catálogos de información debenser: J J J Distribuidos y descentralizados para poder manejar un gran volumende información. Automáticamente adaptables para manejar información dinámica,capaces de proveer una forma común de lidiar con todo tipo de recursos para poder manejarla heterogeneidad. Capaces de seleccionar deforma experta informaciónvaliosaparaprotegera los usuariosdeser saturados de información de poco valor. Estos son los requerimientos fuertes. Para nuestro criterio, ninguno de los sistemas existentes o emergentes puede satisfacerlos. Sin embargo, a pesar de todas las dificultades que Internet presenta para la indexación, hay por lo menos una ventaja: la Internet está siendo usada por un número grande de personas. Esto significa que la gente utiliza su conocimiento y experiencia en el tema cuando busca, y tambiénindica sus preferencias directa o indirectamente. Esta información puede ser capturadayutilizadapara construir indices distribuidoscon información de valor agregado. Nosotros creemos que este paso se aleja de la tecnología de base de datos tradicional como lo es la centralizada y puede proveer una solución adecuadapara el descubrimiento de recursos de Internet. Laproblemática de la búsqueda de recursos en el Web seapreciademaneramásclaraenlacomunidad educativa, que es en donde se realizan búsquedas de recursos de carácter no-comercial, los cuales sonmás difíciles de encontrar. Es por esto que proponemos como nuestro proyecto terminal, desarrollar un buscador de recursosen el Web (Search Engine) en el cual sepuedan llevar a cabo búsquedas de recursos decarácter didáctico. A continuación se explica a gross0 modo la funcionalidad del buscador que proponemos para el descubrimiento de recursos en el Web. Más adelante se explicará condetalle la arquitectura en la que está basado y cada uno desus componentes. Cómo funciona el Buscador de Recursos La información de los recursos se recopilará por medio de unRobot. Un Robot, en este contexto, es un pequeño programa que hace conexiones remotas con ciertos sitios a través de Internet. Estos son tomados de una lista de sitios que contienen información didáctica. El Robot recupera información necesariapara crear un registro de ese sitio en una base de datos alojada en el servidor del buscador. Dicha información esta formada por las palabras encontradas en las páginas de los sitios visitados y cierta información característica de cada sitio. El Robot realizará su funciónconstantemente con el fin de recuperar la información actualizada esos de sitios. 48 DISENO DEL BUSCADOR Los usuarios harán sus peticiones de búsqueda y obtendrán los resultados de esas peticiones a través de una interfaz gráfica la cual comunicará la petición del usuario al servidor para que éste se encargue de buscar en la base de datos y después envié los resultados al usuario. Esta interfm permite al usuario utilizar algunas técnicas de búsquedade manera intuitiva con el propósito de refinar los resultadosque espera obtener. El buscador estará implementado sobre un diseño distribuido en el que intervienen varios servidores. En este diseño se tiene un conjunto de servidores que están activos esperando recibir alguna petición de búsqueda y otro conjunto más con servidores que se encargan de atender las peticiones de los usuarios cuando los primeros están inactivos. Cuando uno de los primeros servidores tiene una carga excesiva de trabajo (demasiadas peticiones de búsqueda) otro de ellos atiende las peticiones que vayan llegando. Estos últimos tienen la misma funcionalidad que los primeros y en ellos reside una copia (o réplica) de la base dedatos obtenida por medio del Robot. Existe un elemento en este sistema que se encarga de verificar que los servidores estén activos antes de que se les pase una petición de búsqueda y que sabe cuanto trabajo tiene cadaservidor activo. Con esta información este elemento puede determinar qué servidor es el másadecuadopara atender una solicitud debúsqueda.Para mantener actualizadas las bases de datos de los servidores que integran el diseño del buscador de recursos, el Robot hará su función periódicamente y se encargará de hacer laréplica. Ya se explicó a grandes rasgos la funcionalidad del buscador, a continuación se expone a detalle la arquitectura en la que está basado este sistema así como sus partes más importantes. Arquitectura del Buscador de Recursos La. arquitecturadel buscador de recursos estábasada en undiseño distribuido enelqueparticipanvarios servidores. Con este diseño se persiguen dos fines: la tolerancia a fallas y el balanceo de carga de trabajo. Con estas características es posible dar una mejor atención a los usuarios que con un sistema centralizado ya que en esta arquitectura propuesta, son varios los servidores que pueden dar atención a los clientes en un determinado momento. Otro aspecto que se persigue es la presencia de algunos de los tipos de transparencia como lo son: la transparencia al acceso, a la replicación y a las fallas. De hecho, se pretendeque la distribución del buscador sea transparente al usuario, es decir, el usuario podrá distinguir únicamente un servidor que atiende sus peticiones de búsqueda cuando enrealidad son varios los servidores que lo pueden hacer. La arquitectura del buscador de recursos está formada por varios componentes que realizan tareas específicas que en conjunto conforman la funcionalidad del sistema. Dichos componentes son explicados con detalle uno por uno y sonlos siguientes: 0 0 Robot. Bases de Datos de Sitios y de Palabras Clave. Servidores Pnmarios y Secundarios. Distribuidor de Solicitudes de Consulta. Interfaz de Usuario. ROBOT La arquitectura del buscador de recursos comienza por el Robot. El Robot es un programa quese ejecuta en uno de los servidores de la arquitectura y se encarga de rastrear sitios en la red del World Wide Web basándose en una lista de sitios seleccionados con contenido únicamente didáctico tomada de una base de datos llamada Base de Datos de Sitios la cual forma parte del Robot. Este programa guarda la dirección (o URL)y las palabras que 49 DISENOE IMPLEMENTACldNDE UN SISTEMA DISTRIBUIDO PARA UN BUSCADORDE WEB estén contenidas en cada documento (a las que llamaremosPalabras Clave) existente en cada sitio de la lista en una base de datos temporal llamada Base de Datos de Palabras Clave Temporal. Además asigna el “peso” que tiene cada palabra en un documento, esto es, analiza la importancia que tiene cada palabra en un documento. Existen dos criterios para asignar el peso de cada palabra: el primero es verificar si la palabra forma parte del título de la página analizada, en este caso se asignará el mayor peso; el segundo es de acuerdo al tamaño en que la palabra es publicada en el resto del documento analizado, eneste caso, a las palabras con mayor tamaño se les asigna un mayor peso ya que éstas pueden formar parte de un subtítulo del documento pudiendo tener más importancia queotras palabras con menor tamaño. El peso es utilizado para entregar los resultados de forma ordenada de acuerdo a la importancia de la palabra buscada en un documento. Los primeros resultados desplegados en la Interjfaz (misma que se explicará más adelante) corresponden a documentos donde la palabra buscada es más relevante y los últimos serán documentos para los que la palabra no sea tan importante en su contexto. Una vez que el Robot haya terminado de llenar la base de datos temporal con la información de los sitios visitados, hace una copia de esa base de datos a los Servidores Primarios y Secundarios, los cuales se explicarán a detalle más adelante, y después procederá a vaciar la base de datos temporal. Con esta operación el Robot mantiene actualizadas las bases de datos de los Servidores Primarios y Secundarios que son las que consulta el usuario a través de la i n t e ~ a gráfica z ya mencionada y alas que llamaremos Bases de Datos dePalabras Clave (Primaria y Secundaria según sea el servidor en donde estén alojadas) pues el Robot es capaz de identificar, dentro de un documento, ligas a otros documentos del mismo sitio para posteriormente desplazarse a ellos y analizarlos. De esta manera cada vez que se agrega una página o documento a un sitio, el Robot, al encontrar la liga a este documento, la analiza y después la agrega a labase de datos temporal. Por el contrario, si una página ha dejado de existir en un sitio simplemente no la visita. Así, cuando se hace la copia de la Base de Datos de Palabras Clave Temporal, se tendrá justo lo que en ese momento esté publicado incluyendolosnuevos documentos de un sitio. Lo anterior da al buscador de recursos mayor confiabilidad y consistencia ensus resultados, pues la información que se encuentra contenida en sus Bases de Datos de Palabras Clave sólo contendrá lo que en ese momento se encuentra publicado en los sitios de interés ya que el Robot siempre estará activo depositando la información de estos sitios en la base de datos temporal por medio de la cual se actualizan las bases de datos que el usuario consulta. En la figura 3.1 se muestra el hcionamiento del Robot. Web Base de Datm de Palabras Clave Temporal Figura 3.1 Funcionamiento del Robot. 50 DISENO DEL BUSCADOR LAS BASES DE DATOS DE LA ARQUITECTURA La arquitectura delbuscador de recursos contempla dos tipos de basesde datos: La Base de Datos de Sitios y las Bases de Datos de Palabras Clave. A su vez, éstas últimas se dividen endos tipos: la Base de Datos de Palabras Clave Temporal (o simplemente Base de DatosTemporal) y Las Bases de Datos de Palabras Clave de Servidor Primario y de Servidor Secundario (o simplemente Bases de Datos Primaria y Secundaria, respectivamente; los Servidores serán explicados más adelante en este capítulo). Para hacer más claro lo anterior, se explicará cada tipo de base de datos remarcando sus diferencias. Base de Datos de Sitios La Base de Datos de Sitios forma parte del Robot. Ella almacena la listade sitios que el Robot debe rastrear para recuperar la información contenidaen los documentos existentes en esos sitios. Lafigura 3.2 ilustra la interacción dela Base de Datos de Sitios con el Robot. " Robot Figura 3.2 Interaccidn de la Base de Datos de Sitios con el Robot Bases de Datos de Palabras Clave Como se mencionó anteriormente, existen dos tipos de esta base de datos: La Bases de Datos Primaria y Secundaria. Base de Datos Temporal y las La Base de Datos Temporal es aquella que el Robot se encarga de llenar con la información proveniente de los sitios que é1 rastrea. Esta base de datos es llamada Temporal debido a que el Robot, después de haber terminado de llenarla y de realizar una copia de ésta en los servidores de la arquitectura, procede a vaciarla y reanuda su ciclo volviéndola a llenar con información actualizada proveniente de los sitios que é1 rastrea. En la figura 3.3 su muestra la interacción de esta base de datos con el Robot. 51 DISENO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB Robot Figura 3.3 El Robot escribe en la Base de datos Temporal. Las Bases de Datos Primaria y Secundaria residen en los Servidores Primarios y en los Secundarios, respectivamente. Estas bases de datos son obtenidas a partir de una copia de la Base de Datos Temporal por lo que éstas son idénticas, de esta forma se puede garantizar la consistencia de su información. Los Servidores Primarios y Secundarios utilizan estas bases de datos para responder alas peticiones de búsqueda de los usuarios como se ilustra en la figura 3.4. Como una consecuencia de la arquitectura distribuida que se emplea para este buscador de recursos, tanto la Base de Datos Temporal como las Bases de Datos Primaria y Secundaria, están distribuidas entre los servidores. Las Bases de Datos de Palabras Clave se distribuyen en n secciones en donde n es el número de Servidores Primarios. El alfabeto será divido en n partes así cada sección o partición contendrá las palabras clave que comiencen conla letra que le corresponda a esa sección. Cada Servidor Primario almacenará sólo una de estas secciones, y de igual modo ocurrirá con los Servidores Secundarios. El Robot será capaz de enviar la información que encuentra a más de un Servidor Primario dada la naturaleza de las particiones de la Base de Datos Temporal. 1- / -\ Servidor PrlmaridSecundario Figura 3.4 Interacción delas Bases de Datos PrimariadSecundarias. SERVIDORES (Primarios y Secundarios) En la arquitectura del buscador de recursos existen dos tipos de Servidores: Los Servidores Primarios y los Secundarios. Cada Servidor Primario tiene un Servidor Secundario asociado y aunque ambos tipos de servidores hacen el mismo trabajo, existe una diferencia bien marcada en cuanto a cuándo deben hacerlo cadauno de ellos. 52 DISEA0 DEL BUSCADOR Estos servidores no son propiamente máquinas, de hecho son programas que están esperando a que programas de logradalaconexión,cada cliente,locales o remotos, se conecten a ellos enpuertospúblicos.Después servidor recibe la solicitud de búsqueda del cliente proveniente del Distribuidor de Solicitudes (mismo que se explicará a continuación), es decir, la palabra o palabras que el usuario desea buscar en la Base de Datos de Palabras Clave. Una vez recibida la solicitud del cliente, ésta será analizada por el Distribuidor de Solicitudes para determinar en qué particiónde la base de datos se hará la búsqueda. Los Servidores Primarios son los que están al frente del sistema esperando que se les otorgue una petición de búsqueda. Siempre que estén funcionando correctamente, ellos harán su trabajo de búsqueda por sí mismos, sin la ayuda de los Servidores Secundarios. Por otro lado los Servidores Secundarios también esperan una petición de búsquedapero uno de ellos sólo podrá recibir una peticióncuando el Servidor Primario asociado a éste esté inactivo. Cuando un Servidor Primario tiene un exceso en la carga de trabajo, éste deja de recibir solicitudes y es otro de los Servidores Primarios quien recibirá esas solicitudes hasta que se vuelva a nivelar su carga de trabajo. Los Servidores están conectados entre sí para solicitarse entre ellos consultas a bases de datos que completen las solicitudes de búsqueda que están despachando, pues una solicitud puede contener palabras que se encuentren en distintas particiones de la base de datos. Para lograr esto, es necesario que el sistema distribuido se instale sobre un sistema operativo abierto que permita de manera transparente la compartición de recursos, para que en este caso, se compartan las bases de datos entre los servidores.Deesta forma, cualquier ServidorPrimario o Secundario puede buscar encualquieradelasparticionesdela BasedeDatos (Primaria o Réplica respectivamente) aún cuando éstas se encuentren en distintos Servidores y así el balanceo de carga de trabajo en los Servidores Primarios se puede dar de forma más natural pues si hayalguna petición de búsqueda en la base de datos de un servidor con mucha carga, otro sin mucha carga puede leer la base de datos del servidor saturado de trabajo. La figura 3.5 muestra la funcionalidad de ambostipos de servidores. o m m w o r de L . Base de Datos Primaridsecundaria Figura 3.5 Funcionaiidad de los Servidores Primario y Secundario. 53 DISENO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB Cada servidor se encarga de tomar la solicitud de consulta que el usuario proporciona desde la inte$az (la cual será explicada más adelante) y la convierte a una instrucción de consulta para la Base de Datos de Palabras Clave. Los servidores aceptan los operadores lógicos AND y OR para depurar las búsquedas. Al solicitarse los resultados de una expresión con operadores OR se regresarán los documentos en los que se encontró cualquiera de las palabrasbuscadas con el operador OR o todas ellas. Al solicitarse los resultados de una petición utilizando el operador AND sólo se regresarán al cliente los documentos en los que se encontraron todas las palabras conjuntamente. Esta característica de los servidores da al usuario más opciones de búsqueda para que pueda obtener mejores resultados. DISTRIBUIDOR DESOLICITUDES DE CONSULTA Este componente de la arquitectura que estamos proponiendo es probablemente el corazón de la herramienta de búsqueda que se está planteando. El Distribuidor de Solicitudes es un programa residente en memoria que siempre está verificando el estado de todos los servidores que formenparte del sistema. Lo anterior es con el fin de saber a que servidores se les puede pasar una solicitud de búsqueda. Cuando alguno o algunos de los servidores se encuentren inactivos por mantenimiento o fallas, el Distribuidor de Solicitudes detectará que se encuentran fuera de servicio y no pasará solicitudes a éstos. Este agente distribuidor tiene como prioridad pasar una solicitud a un Servidor Primario siempre y cuando éste esté activo; en caso contrario pasarála solicitud a uno Secundario. Algo muy importante del agente distribuidor es que cuando asigna una petición de búsqueda a algún servidor activo y éste después de recibir la petición “se cae” (tiene alguna complicación), el agente es capaz de reasignar la solicitud de búsqueda a otro servidor que se encuentre activo. Además, el agente lleva una contabilidad de cuantas solicitudes tiene cada Servidor Primario, esto con el fin de balancear la carga delos Sewidores Primarios pues cuando el agente Distribuidor de Solicitudes detecta mucha carga en un servidor lo deshabilita para recibir más solicitudes hasta que se nivele su carga de trabajo. La figura 3.6 es un esquema funcional del agente Distribuidor de Solicitudes. IDistribuidor de Solicitudes1 Interfar de Usuario Servidor PrimariolSecundario Figura 3.6 Inferaccicindel Distribuidor de Solicitudes. 54 DISEÑO DEL BUSCADOR Por la forma en que trabaja el buscador de recursos, el usuario podría pensar que al hacer sus solicitudes de consulta a través de la Interfaz, ésta le comunica su petición a un servidor de búsqueda en donde posiblemente esté alojada una base de datos y que después de buscar en esa base de datos, el servidor arroja los resultados al usuario a través de la Interfaz. El buscador realmente recibe a través de la Interfbz las solicitudes del usuario en el Distribuidor de Solicitudes quien tiene como tarea entregar a algún servidor de una lista de servidores activos esa solicitud para después recibir los resultados del servidor y enviárselos de nuevo al cliente; por lo tanto el usuario tiene la idea que fue un solo servidor de búsqueda quien lo atendió y nunca se entera de cuantos servidores están disponibles para atender sus solicitudes. El agente Distribuidor de Solicitudes es quién da las características de sistema distribuido que se mencionaron al principio de la descripción de la arquitectura y con ellas se espera dar una mejor atencióna los usuarios. INTERFAZ DE USUARIO La Interjaz de Usuario es una applet que se ejecuta en un navegador de Web compatible con el lenguaje de programaciónJava, como por ejemplo Netscape, e interactúacon el usuariopara obtener lasolicitudde búsqueda que éste desea. Una vez que elusuario haya especificado la solicitudde búsqueda, la interjaz transfiere la solicitud al Distribuidor de Solicitudesy éste a su vez la transfiere a un servidor de búsqueda activo de donde se regresan los resultados al agente distribuidorquien finalmente los manda de regreso a la Interjaz para que los despliegue en forma de ligas a los documentos relacionados con la solicitud delcliente. La figura 3.7 muestra la interacción de laInterfaz con otros componentes de laarquitectura. La Interfaz permite navegar a través de los resultados cambiando de pantalla.Los resultados son desplegados en la Interfi de forma ordenada de acuerdo a la importancia de la palabra buscada en un documento. Los primeros resultados desplegados enla Interfaz corresponden a ligas a documentosdondelapalabrabuscadaesmás relevante y los últimos serán documentos para los que la palabra no sea tan importante en su contenido. Lo anterior se hace conel fin de que el usuario no tenga recorrertodos los resultados para obtener alguno apropiado. Usuario Distribuidor de solicitudes Figura 3.7 Interfaz de Usuario. 55 DISEÑO E IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDO PARAUN BUSCADOR DE WEB ARQUITECTURA GLOBAL A continuación se presenta la figura 3.8 en donde se muestraen formagráfica la arquitectura global del buscador de recursos del Web que propusimosen este capítulo. Figura 3.8 Arquitectura GlobaL El desarrollo de este buscador se llevará a cabo con herramientas de programación independientesdela plataforma como lo es Java y varias de sus herramientas, con el objetivo de poder asegurar su fmcionalidad con cualquier usuarioen cualquier computadora. 56 CAPITULO 4 Evaluación continuación se presenta una evaluación delbuscador de recursos propuesto en el capítulo anterior. Esta otros evaluación se hará respecto a los siguientes criterios:primero,seharáunacomparacióncon buscadores existentes en cuanto a su fimcionalidad, luego se analizará al buscador de acuerdo a los aspectos descritos en los objetivos indicados en la “Introducción” al comienzo de este documento, estos son: Primero, en cuanto a los resultados que el buscador proporciona a los usuarios de la comunidad educativa. Segundo, en cuanto a las características clave de los sistemas distribuidos que califican su funcionalidad. A Funcionalidad del Buscador respecto a otros Buscadores Existen varios buscadores de alto rendimientodisponiblesenla red. Estos buscadores sonsustentadospor distintos patrocinadores quienes aportan los medios para que éstos tengan equipos de gran capacidad y todo lo necesario para dar unservicio de manera profesional. En el caso del buscador que construimos, éste fuedesarrolladocon un propósito académico y conciertas limitaciones tanto en el hardwarecomo en el software utilizados para suimplementación. Con todo lo anterior, podemos darnos cuenta que existe una diferencia en cuanto a las capacidadesdelos buscadores comerciales y las del que presentamos en este proyecto de investigación y, que esta diferencia de capacidades influye de manera directa en lafuncionalidad de ellos. Un ejemplo de lo anterior es quelos buscadores comerciales arrojan mucho másresultados que el buscador que desarrollamos. Esto es producto dela gran capacidad que tienen estos buscadores comerciales para almacenar información y de la utilización de un manejador de bases de datos robusto. Sin embargo, el entregar demasiados resultados no necesariamente es lo mejorpues nos llevaría bastante tiempo analizarcadaunode ellos. Además,comoyahemoscomentado anteriormente, no todos los resultados son de utilidad en la mayoría de los casos. Otro aspecto que se deriva dela utilización de un manejador de bases de datos robusto en los buscadores profesionales es que éstos tienen un menor tiempo derespuesta que el buscador que nosotros desarrollamos. Los buscadores profesionales son sistemas centralizados convarias réplicas distribuidas geográficamente. Cuando una de ellas falla es posible acceder a otra de manera transparente lo que les da tolerancia a fallas, pero algo que debe mencionarse de ellas, es que dos réplicas de un mismo buscador entregan resultados distintos para una misma petición de búsqueda. Lo anterior habla de que existe inconsistencia en la información contenida en sus basesde datos. Esta inconsistencia se debe aque los buscadores no son capaces dehacerréplicas correctamente y eso puede ser a causa de que sus bases de datos son enormes. El gran tamaño que tienen esas bases de datos se debe en parte a la centralización de las mismas. Por otro lado, el buscador que desarrollamos tiene una base de datos particionada y distribuida en distintos servidores. El tamaño de la Bases de Datos de Palabras Clave de nuestro buscador es mucho menor que el de la de un buscador profesional y el de cada una de sus particiones es, en consecuencia, aún menor. Esto se debe a que este buscador sólo recupera la información de ciertos sitios escogidos con contenido de carácter didáctico. 57 DISEA0 E IMPLEMENTACdN DEUN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB El hecho de que el tamaño de cada una de las particiones no sea excesivamente grande hace quese puedan hacer réplicas de ellas de manera efectiva. En resumen,podemosdecirquelafuncionalidaddenuestro buscador es buenarespectoa los buscudores profesionales. Si bien su tiempo de respuesta es un poco mayor y entrega menos resultados que los buscadores profesionales,no es tanimportantepara los usuariosdelacomunidadeducativaqueprefierenobtener, en cambio, resultados más adecuados a sus necesidades. Debe recordarse, además, que uno de los aspectos más importantes en cuanto a su füncionalidad que se plantearon desde su diseño fue la entrega de información útil para la comunidad educativa y, como ya habíamos mencionado anteriormente, los resultados que un buscador profesional entrega no siempre son los más adecuados para algunos usuarios ya que estos buscadores no tienen unaforma de identificarqueinformaciónpudieraser no deseadapor algunas personas.Encuantoala información que entrega nuestrobuscador, de esto hablaremos a continuación. Calidad de la información que entrega el Buscador Se debe tomar en cuenta que lo que personalmente se obtiene de un documento dependemucho de lo cerca que esté nuestra necesidad del pensamiento de la persona que publicó dicho documento. Considerando lo anterior y después de algún tiempo de pruebas utilizando el buscador de recursos, observamos que los resultados que éste arrojó para peticiones de diferentes usuarios, éstos estaban libres de información que no fuese didáctica y que al mismo tiempo, y en la mayoría de los casos, eran de utilidad por su contenido. Por lo anterior consideramos que objetivo de la obtención de recursos de carácter didáctico. el buscador cumple, en buena medida, con el Es importante mencionar que la clave principal para esto es la lista de sitios que el Robot analiza pues, como ya se mencionó en el capítulo anterior, la naturaleza de éstossitios garantiza que la información que almacenansea de carácter didáctico. Sólo faltaría mencionar que es responsabilidad del administrador del sistema mantener la listadesitios de manera que sea confiable ya que de lo contrario el buscador podríaarrojarresultadosno deseados. Características Clave del Buscador Haciendo un repaso de lo expuesto con respecto a los Sistemas Distribuidos en el capítulo 1, recordaremos que sonseis sus características clave y sonlassiguientes:comparticiónderecursos,apertura,concurrencia, escalabilidad, tolerancia a fallas, y transparencia. A continuación se hará un análisis del buscador con respecto a estas seis características clave. Comparticih de recursos Esta característicaestápresenteenel buscador puestodas las particionesdelabase de datospuedenser accesadas por distintos servidores como un recurso compartido. Podemos decir que esta característica está bien representadaen este sistema distribuido pueslacomparticióndelabasededatos se dadeunamanera transparente. Apertura La disponibilidad del código del buscudor que se entrega en el Manual Técnico del Anexo B y la facilidad que presenta este sistema para aumentarhardware así como servicios de compartición de recursoshacendel 58 EVALUAC16N buscador un sistema abierto. Consideramos que el grado en el que el buscador cumple con esta característica clave es bueno. Concurrencia La codificación del buscador emplealaprogramación multihilo que es unparadigmaconceptualdela programación por el cual se dividen los programas en dos o más procesos que se pueden ejecutar en paralelo. Con lo anterior podemos asegurar que el buscador es un sistema distribuido concurrente. Esto se logra gracias al agente Distribuidor de Solicitudes que ayuda a la concurrencia y a la distribución de cargas de trabajo entre los servidores del sistema. A pesar de que su carga de trabajo es mínima, podría representar un cuello de botella ya que es la única puerta de entrada al sistema pudiendo saturarse de trabajo en caso de que muchos usuarios quieran conectarse al mismo tiempo. Por lo anterior diremos que la concurrencia en el buscador es buena pero tiene como limitante el número de conexiones cliente-servidor que el agente Distribuidor de Solicitudes pueda manejar concurrentemente. Escalabilidad Para escalar el buscador, el código del mismo no necesita cambios pues existen algunos archivos de texto de donde el buscador obtiene información acerca de la escala del sistema, de manera que cuando algún servidor es aumentado o cambiado de dirección e incluso retirado del sistema, lo Único que hay que hacer es editar el archivo de texto con los datos del servidor aumentado, cambiado o retirado. El Robot del buscador es capaz de crear por sí solo el número adecuadode particiones (de acuerdo a la escala del sistema) de la Base de Datos dePalabras Clave Temporal y de hacer las réplicas correspondientes a partir de ella por medio de un archivo del que lee el número de Servidores Primarios del sistema y de otro más con la localización de las réplicas de la base de datos. Con sólo hacer un pequeño cambio a estos archivos, el Robot puede funcionar correctamente cada vez que se escale el sistema s i n que su código tenga que ser modificado. Lo mismo ocurre con el Distribuidor de Solicitudes. Este también maneja un archivo de texto, sólo que este archivo contiene la lista de las direcciones de los servidores participantes en la arquitectura del buscador. Así, el agente Distribuidor puede hacer siempre su trabajo cuando la escala del sistema cambie sin que el código sufra ningunamodificación, sólo es cuestiónde editar el archivo detexto.Porlo anterior podemos decirque el buscador es un sistema distribuido escalable y que la forma en que puede escalarse es aceptable. Sólo aceptable ya que, debido al cuello de botella que representa el Distribuidor de Solicitudes, una escala grande del sistema podría causar problemas en el rendimiento del mismo. Tolerancia a fallas La redundancia en el hardware y en el software así como el diseño de una aplicación para la recuperación de datos son aspectos que persiguen el fin de dar tolerancia afallas al sistema distribuido en el que se implementa el buscador. A pesar de que se cuenta con este apoyo la arquitectura tiene una debilidad en la tolerancia a fallas del Distribuidor de Solicitudes pues éste es la única entrada al sistema. Si este agente falla no hay forma de accesar al buscador ni tampocohabrá forma de coordinar a los servidores del sistema. Debido a esto podemos decir que la forma en laque se implementa esta característica no es satisfactoria deltodo. 59 DISEA0 E IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDO PARAUN BUSCADOR DE WEB Transparencia Como recordaremos del capítulo 1, el manual de referencia ANSA [ANSA, 19891, y el modelo de referencia para proceso distribuido abierto de la IS0 (RM-ODP)[ISO, 19921 identifican 8 formas de transparencia para sistemas distribuidos. A continuación se hará un análisis del buscador con respecto a cada una de ellas. 1. Transparencia al acceso: Elusuarioaccesa al buscador atravésdela Interfaz deUsuariodemanera transparente. 2. Transparencia a la localización: El usuario desconoce la localización del buscador en conjunto. No sabe en donde se encuentra cada uno de los servidores que en un determinado momento lo pueden atender. 3. Transparencia en la concurrencia: Cuando un usuario entra al buscador desconoce cuantos usuarios masya estaban conectados al buscador antes que éI, ni tampoco sabe cuantos más se podrán conectar mientras éI permanezca en el buscador. 4. Transparencia en la replicación: En el buscador existen réplicas pero el usuariono sabe de la existencia de ellas, éI sólo puede deducir que es un solo servidor el que le puede proporcionar toda la información que le solicita. 5. Transparencia en las fallas: Cuando un Servidor Primario no hnciona adecuadamente el Distribuidor de Solicitudes manda la solicitud del cliente a un Servidor Secundario que se encuentre activo. Esto, el usuario no lo nota, é1 cree que siempre hubo un solo servidor que lo pudo haber atendido y que éste nunca tuvo ninguna complicación. Por otro lado, si en el momento en el que un servidor esta procesando una consulta, éste se “cae” el agente distribuidor reasignará de manera transparenteal usuario la petición del cliente a otro servidor con lo que el usuario pensará que nunca hubo una falla. 6. Transparencia en la migración: El buscador permite migrar sus componentes como lo son sus servidores y bases de datos de manera transparente al usuario, esto es, la migración de estos componentes no afecta en y, en cuanto al código, éste sólo requiere un pequeño nada la forma en que el usuario opera el sistema cambio en el manejador (o driver) que utiliza la API JDBC (Java DataBase Connectivity, o Conectividad de JavaparaBases de Datos) parahacerlaconexiónconlabasededatosenelcasodeque se migre de plataforma. De esta forma podemos decirque elbuscador es transparente a la migración. 7 . Transparencia enel rendimiento: El Distribuidor deSolicitudes balancealacargade trabajo delos Servidores Primarios de manera transparenteal usuario con elfin de que el rendimiento sea óptimo. Esto es, cuando un Servidor Primario tiene un exceso de carga de trabajo el Distribuidor de Solicitudes asignará las siguientes solicitudes de los clientes a uno que se encuentre más despejado, pero esto el usuario no lo sabe, é1 cree que sólo hay uno atendiendo su solicitud. 8. Transparencia en la escalabilidad: Laarquitecturadel buscador permitelaescalabilidad de manera transparente al usuario ya que el Distribuidor de Solicitudes administra las solicitudes de los clientes y las distribuye entre los servidores que se encuentren disponibles, esto permite que el sistema sea escalado sin que los usuarios lo noten. Resumiendo todo lo anterior podemos decir que el transparencia que un sistema dimibuido requiere. buscador cumple con la mayoría de las características de De manera global, podemos decir queel buscador de recursos que propusimos cumple conlas expectativas de la calidad de la información que entrega, de las características clave que un sistema distribuido debe poseer y, en buena medida, de su funcionalidad. Cabe mencionar, sin embargo, que el sistema presenta algunas debilidades en su arquitectura. Estamos conscientes queeste buscador necesita un mayor esherzo para que su funcionalidad sea del todo satisfactoria. Aún así, pensamos que el sistema distribuido que implementa el buscador brinda una mejor atención al usuario de lo que lo haría un buscador basado en un sistema centralizado. 60 CAPITULO 5 Conclusiones y Perspectivas L a aparición de miembros comerciales en la Internet ha provocado uncrecimiento elevado de la comunidad de usuarios y ha rebasado las expectativas de crecimiento de la red. En los últimos años el Web se ha convertido en un mediomuy utilizado para la comercialización y propaganda, lo que ha dado origen a una gran cantidad de información decarácter comercial que hace quela localización de recursos específicossea cada día más complicada. Las personas interesadas en la localización de recursos del tipo educativo dentro del Web se encuentran con que es cada vez más dificilencontrar este tipo de información. Debido a lo anterior nosotros propusimos diseñar siguiente: e implementar un buscador de Web que cumpliera con lo Que los resultados que entregara fueran exclusivamente de contenido didáctico, y Que la arquitectura del buscador se basara en un sistema distribuido que integrara mecanismos de tolerancia a fallas y transparencia en su distribución a la vista de los usuarios. Los aspectos quemotivaron este proyectoestánenfocados a un propósitoenel que se trata dehacerdel conocimiento académico la tecnología en la que se basa un buscador y, por otra parte, para hacer uso de nuestros conocimientos en el área de sistemas distribuidos; todo esto con el fin de aportar nuevas propuestas de solución al problema de descubrimiento de recursos que ya hemos mencionado a lo largo de este documento. Sabemos que en la actualidadexiste una gran cantidad de buscadores de alto rendimiento y pareciera que este proyecto no aporta nada nuevo en el ramo, sin embargo, estamos convencidos de que este es un tema que requiere de una mayor investigación. Por otro lado, también se tenía un gran interés por descubrir las posibilidadesque ofrece el software libre para la realización de este proyecto.Desdeluegonosencontramosconque el software librepresentacomo consecuencia de su naturaleza, una serie de restricciones e inconvenientes que no favorecieron el desarrollo de algunas características del sistema. Con todo lo anterior, diseñamos e implementamos un buscador que recupera la información de ciertos sitios tomados de una lista. Para garantizar que la información accesada a través del buscador sea de utilidad para la comunidad educativa, dicha lista sólo contiene sitios con contenido didáctico. La información recuperada de estos sitios es almacenada en una base de datos distribuida misma que es utilizada por los usuarios a través de una interfaz gráfica para obtenerla información que ellos requieren. La utilización de la interfaz de usuario facilita la obtención de información adecuada ya que ella permite el uso de los operadoreslógicos AND y OR quepueden ser empleadospararefinarlasbúsquedas.Además, los resultados que entrega el buscador son desplegados en esta interfaz por orden de importancia lo que permite al los resultados. usuario poder encontrar más rápidamente lo que busca sin tener que revisar, uno por uno, todos El buscador está implementado en un sistema distribuido en el que los aspectos que más fuertemente influyeron en su diseño fueron la redundancia enel hardware ysoftware, así como algunos mecanismos de transparencia de sudistribuciónyaqueconellos se pretendedar al usuariounamejoratenciónpues,por un lado se tiene 61 DlSEriJO E IMPLEMENTACdNDE UN SISTEMA DISTRIBUIDO PARA UN BUSCADORDE WEB tolerancia a las fallasy, por el otro, el usuario puede hacer sus búsquedas sin percibir la distribución del sistema. Cabe mencionar que el sistema distribuido que implementa el buscador no sólo cumple con estas características clave, además, cumple con:la comparticibn de recursos, la apertura, la concurrencia y con la escalabilidad. CONCLUSIONES Podemos decir, en términos generales, que se cumplieron los objetivos de este proyecto ya que el buscador da a los usuarios el servicio que se pretendía desde su planeación: los resultados que entrega son exclusivamente de contenido didáctico y, por otro lado, su arquitectura da tolerancia a fallas de mejor forma que como lo hace un sistema centralizado, además de que el sistema es transparente al usuario pues éste no sabe nada acerca de la distribución del sistema. Aún cuando el buscador cumple con los objetivos planteados, existen detalles que darían al buscador una mejor funcionalidad. Dichos detalles son expuestos a continuación. PERSPECTIVAS En este apartado, se mencionarán algunas característicasque por falta de tiempo no pudieron ser implementadas o que necesitan ser modificadas para un mejor desempeñoy funcionamiento del sistema. Enla arquitectura del sistema se destaca la existencia de una entidad llamada Distribuidor de Solicitudes, este agente - como ya se definió anteriormente en laarquitectura del sistema- debe recibir las solicitudes del cliente y administrarlas para distribuir las cargas entre los Servidores de Búsqueda (o de Solicitudes). En la implementación del sistema sólo se cuenta con un solo servidor de Web que proporciona la Interfaz del cliente a los usuarios y por lo tanto - por razones de seguridad de los applets de Java - éste es el Único servidor al que las interfaces de los clientes pueden conectarse. Esto hace que sólo pueda existir un solo Agente Distribuidor de Solicitudes en todo el sistema. Como se puede notar, esto es un “cuello de botella” para el sistema engeneral que afecta seriamenteel desempeño del mismo. La soluciónque se propone es que cada Servidor de Bzisqueda Primario sea también un servidor de Web que también ponga a disposición la Interfaz que el usuario utiliza para conectarse al Agente Distribuidor de Solicitudes permitiendo de esta manera que existan copias de este agente en cada uno de los Servidores de Búsqueda Primarios, para que cada uno de los Agentes Distribuidores de solicitudes administre las cargas entre los Servidores Primarios y sus réplicas. La anterior modificación afecta en la transparenciaal acceso del sistema puestoque aplicar esta solución nos daría como resultado un número mayor de servidores de Web con el mismocontenido(la Interfaz del cliente) a los cuales el cliente podría conectarse, de hecho se tendían tantos servidores Web como Servidores Primarios se tengan. El sistema debe ser transparente al acceso y se necesitaría de otra entidad que permita al usuario accesar a cualquiera de estos servidores de una forma indistinta, para ello proponemos que se haga uso de un software que permita el uso de unÚnico U . para accesar a cada uno de estos servidores indistintamente. Una solucióna este problema sería el uso de servidores deDNS en conjunto con el uso de algún servidor de Web que permita la administración de parámetros avanzados tales como la carga de trabajo de los servidores. Otro punto importante que se debe mencionar es que el criterio que se utiliza para particionar la Base de Datos de Palabras Clave no es un criterio óptimo. Las particiones de laBase de Datos de Palabras Clave se obtienendividiendoel alfabeto entre el númerode Servidores Primarios. Cadaparticióncontienelas palabrasclavequecomienzan con las letras de cadaseccióndelalfabeto. Esto enla prácticaes muy ineficiente ya que los resultados de prueba nos mostraron que para el idioma inglés - que es el idioma que predomina en el Web - la carga de palabras no es uniforme entre las letras del abecedario y esto ocasiona 62 CONCLUSIONES Y PERSPECTIVAS que las particiones de la Base de Datos de Palabras Clave difieran considerablemente en su tamaño. L o que podemosrecomendaren este puntoes aplicar unmétodomásadecuadodonde se realicencálculos estadísticos sobre los vocablos del idioma inglés que nos proporcionen información acerca de la relación de carga para cada una de las letras del abecedario y, a partir de dicha información, hacer las particiones de la Base de Datos de Palabras Clave. Por otro lado,también se pueden consultar estudiosexistentesde lingüística que puedan proporcionar información útil para la construcción de las particiones de la Base de Datos de Palabras Clave. Otro punto importante a mencionar en este apartado es lo siguiente: a pesar de que la gran mayoría de los documentos que son publicados en el Web están publicados en el idioma inglés, existe, sin embargo, una cantidad considerable de documentos que están escritos enotrosidiomasyenmuchosde ellos se hace utilización de signos deacentuación. Estos signos de acentuacióntienenunamaneraespecialde ser especificados en el código HTML de los documentos del Web. Son utilizados los tags (etiquetas) del HTML para especificar que una letrava a ser mostrada con una acentuación ortográfica especialy estos tugs no son interpretados por el Robot que es la entidad del sistema que se encarga de analizar los documentos, por lo tanto lasbúsquedasdepalabrasclaveendocumentos no escritos enel idiomaingléspueden arrojar resultados nomuy convenientes.Seproponeque el Robot sea modificado para que el análisisdeestos documentos sea el adecuado y que estos símbolos de acentuaciónsean considerados. Como ya se mencionó en la definición de la arquitectura, el Agente Distribuidor recibe la solicitud del cliente y éste se la pasa a un Servidor de Búsqueda. En la comunicación que hayentre el Agente Distribuidor y el Servidor de Búsqueda existe un temporizadorque se disparaenelmomentoenque el Agente Distribuidor envia la solicitud al Servidor de Búsqueda y en caso de que éste último no conteste la solicitud de conexión en el tiempo establecido, el Agente Distribuidor envía la solicitud a la réplica del Servidor de Búsqueda. En laimplementación actual el tiempo derespuestadeltemporizadoresestático, lo que recomendamos es que se modifique ligeramente el código del Agente Distribuidor para que éste valor pueda ser configurado por el administrador y pueda asignarle un valor que dependa de la interconexión que exista entre las computadoras del sistema. Como último caso se tiene el siguiente. La base de datos global de palabras clave se divide en particiones que son albergadas dentro de cada uno de los Servidores Primarios y Secundarios. Cuando un Servidor de Bzisqueda recibe una solicitud, éste comienza a buscaren su partición de la base de datos y si se da cuenta de que es necesario buscar en otras particiones de la base de datos se conecta con el Servidor Primario que tiene la partición de la base de datos que necesita. Supongamos el caso en el que un Servidor Primario A necesita accesar a la partición de la base de datos que radica en otro Servidor Primario B pero éste se encuentra atendiendo otra solicituden ese instante, aún así el Servidor Primario A seconectaráconel Servidor Primario B y éste tendrá que responder asu solicitud de búsqueda. Como nos dimos cuentaen este caso, no existe un balanceo eficiente de carga entre los Servidores Primarios, ¿qué pasaría si el Servidor Primario B fuera el servidor que contiene la partición con las palabras más fiecuentemente buscadas?. Pues obviamente sería el servidor que más está trabajando de todos. Nuestra recomendación es que se modificara ligeramenteel código delos Servidores Primarios paraqueen caso de que los servidores necesitaran resultados de la base de datosde algún otro servidor, éstos ya no hagan el acceso al Servidor Primario sino a su Servidor Secundario asociado, quien es, según la arquitectura, el menos descargado. De esta forma el balanceo de carga sería máseficiente entre los Servidores Primarios. 63 Anexos ANEXO A Manual de Usuario E n este anexo se indica cuáles son los requerimientos del sistema. También se explica cómo instalar y configurar el sistema así como la forma en que deben ejecutarse las interfaces gráficas del sistema para ponerloenfuncionamiento y administrarlo.Además se explicacómo el usuariodebehacerusodel buscador y cuáles son los requerimientos necesarios para poder utilizarlo. REQUERIMIENTOS DEL SISTEMA Requerimientos de Hardware El buscador debe ser instalado en computadoras con un mínimo de 32 Mb en memoria RAM y la capacidad de almacenamiento de cada una de ellas varía según sea el número de particionesde la Base de Datos de Palabras Clave. Lo que se recomienda es que se tenga capacidad de aproximadamente 20 Gb de almacenamiento entre todos los discos duros de las computadoras que integren la arquitectura para alojar la Base de Datos de Palabras Clave y que la capacidad de cadauno de ellos sea equivalente. Las computadoras deben poseer un procesador lo suficientemente rápidopararealizar la laborquehacende aceptar solicitudes y buscar enla basededatos resultadosadichassolicitudesconcurrentemente.Finalmentelascomputadoras del sistemadebenestar conectadas a Internet. Requerimientos de Software Debido a que el sistema está desarrolladocompletamente en Java, éste puede ser instalado y ejecutado en varias plataformas.Sólo se requierequeelsistemaoperativoen donde se deseeinstalar el sistema cuente con un ambiente gráfico.Además,paraejecutar el sistema, se debe contar conunaimplementacióndel JVM (Java Virtual Machine) de Sun Microsystems parala plataforma escogida. Tambiénse requiere contar con un sewidor de Web necesario para publicar la página donde se encuentra la interfaz gráfica. INSTALACIóN Y CONFIGURACIÓN DEL SISTEMA El proceso de instalación se explica de forma genérica e independiente de la plataforma y sólo en los casos en que se presenten ejemplos serán especificados parala plataforma de Windows95. Existen 5 fases en la instalación del sistema: 67 DISEESO E IMPLEMENTACldNDE UN SISTEMA DISTRIBUIDO PARAUN BUSCADOR DE WEB o 0 o 0 o Instalación del Agente Distribuidor de Solicitudes. Instalacióndelmódulo Cliente. Instalación del Servidor de Solicitudes. Instalacióndel Robot Buscador. Configuración de las Bases de Datos. Instalación del Agente Distribuidor de Solicitudes Primero se explicará la instalación delAgente Distribuidor de Solicitudes. Para esto, es necesario queel servidor en donde se vaya a realizar esta instalación cuente con un servidor de Web ya instalado. No describiremos la instalación del servidor de Web ya que no entra en los propósitos de este manual y, además, existe una gran cantidad de software de este tipo que cuenta con su propia documentación para realizaruna correcta instalación. el Agente Así,se supone queya se cuentacon un servidorde Web instalado. Es necesariotambiénque se explica a Distribuidor de Solicitudes y el módulo del cliente sean instalados en el mismo servidor como continuación: Para realizar la instalación del Agente Distribuidor de Solicitudes bastaconcopiarlasclases(archivoscon extensión .class) del mismo contenidas en el disco de instalación (anexo a este documento) en una estructura de archivo como se muestra a continuación: EduSpider Agent.class Agent Agent$l .class AgentServer.class AgentServerThread.class CheckHost.class Además de las clases, el Agente necesita de dos archivos: servemdat y mirromdat. En el archivo servers.dat se encuentran las direcciones IP de los Servidores Primarios y enel archivo mirromdat se encuentran las direcciones IP de los Servidores Secundarios. Ambos archivos son indispensables para la ejecución delAgente y deben contener las direcciones de los servidores que formanarquitectura la del sistema en forma de lista comose muestra a continuación: Servemdat 148.206.49.188 148.206.49.189 Mirrors.dat 148.206.49.186 148.206.49.187 Se recomienda que en el momento en que se instale el Agente ya se tenga planeado qué servidores funcionarán como Servidores Primarios y cuáles como Servidores Secundarios para que estos archivos sean creados con esta información. Instalación del módulo Cliente Para realizar la instalación del módulo Cliente basta con copiar sus clases y el archivo search.html del disco de instalación (anexo a este documento) en un directorio dentro de la estructura de directorios de documentos del servidor de Web. Deberá consultar al administrador del servidor Web o el manual de este servidor para localizar 68 MANUAL DE USUARIO el directorio raíz de esta estructura de directorios, después deberá crear un subdirectorio y copiar ahí las clases del módulo Cliente. Un ejemplo de lo anterior sobre la plataforma Windows 95 y con el Servidor Personal de Web de Windows 95 es el siguiente: El directorio raíz de la estructura de documentos del Servidor Personal de Web de Windows 95 se encuentra localizado normalmente en el directorio C:\webshare\wwwroot\. Se crea un subdirectorio llamado C:\webshare\wwwroot\EduSpider\ y se copian ahí los siguientes archivos: SearchApplet.class SearchTemplate.class Request.class ClientRequestEntry.class Comparable.class QuickSort.class Search.htm1 Con esto se termina la instalación y configuración del Agente Distribuidor de Solicitudes y elmódulodel Cliente. Instalación del Servidorde Solicitudes La instalación de un Servidor de Solicitudes consta de 2 pasos. El primero consiste en copiar los archivos del programa en el servidor asignado y el segundo consiste en la configuración de la Base de Datos Global a la cual va a tener acceso. Para realizar la instalación de los archivos del programa del Servidor de Solicitudes basta con copiar sus clases (archivos con extensión .class) del disco de instalación (anexo a este documento) en una estructura de archivo como se muestra a continuación: IEduSpider Server SearchServer.class SearchServerThread.class DataBase.class Server.class Server$l .class La configuración de la Base de Datos Global será vista en detalle en la sección “Configuración de las Bases de Datos” que se presenta más adelante en este capítulo. Instalación del Robot Buscador La instalación del Robot Buscador consta de 2 pasos al igual que la instalación del Servidor de Solicitudes ya antes visto. El primero consiste en copiar los archivos del programa en el servidor asignado y el segundo paso consiste en la configuración de la Base de Datos Temporal a la cual va a tener acceso y en donde va a almacenar toda la información que recopila. Para realizar la instalación de los archivos del programa del Robot Buscador basta con copiar las clases (archivos con extensión .class) del disco de instalación (anexo a este documento) en una estructura de archivo como se muestra a continuación: 69 DISEÑO E IMPLEMENTACldN DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB EduSpider Robot DBAccess.class HTMLParser.class MyProperties.class PageVisitor.class Spider.class Spider$l .class spiderThreaddass textTag.class Visitor.class word1nURL.class WordsTable.class sites.dat partitions.dat dbroutes.dat El Robot tiene tres archivos de configuración y a continuación se explicará cada uno de ellos. = Archivo sites.dat: En este archivo se encuentran listados los URLs en los cuales el Robot comenzará a realizar los análisis. Estos URLs por lo regular son direcciones raíz de sitios selectos. Cuando sea necesario, este archivo podrá ser modificado ya sea para eliminar URLs o para agregar nuevos URLs para el análisis. Archivo partitiomdat: En la primera línea de este archivo se especifica el número de particiones con las que va a contar el sistema y en las cuales el Robot deberá particionar la Base de Datos Termporal. Archivo dbroutes.dat: En este archivo se encuentran las direcciones de las particiones de la Base de datos Temporal y de la Base de Datos Global, esto con el fin de que cuando el Robot termine con el análisis de todos los sitios listados en el archivo sites.dat, inmediatamente proceda con la actualización de la Base de Datos Global que consiste en realizar una copia de los archivos de las particiones de la Base de Datos Temporal sobre los archivos de las particiones de la Base de Datos Global. El formato de este archivo es el siguiente: _ " Inicio de archivo - - cn = número de particiones> <dir. de la 1 ' . Partición de la Base de Datos Temporal> Global, <dir. de la 1 " . Partición de la Base de Datos <dir. de la copia de la 1". Partición de la Base de Datos Global> cdir. de la n'. Partición de la Base de Datos Temporal> cdir. de la n". Partición de la Base de Datos Global> <dir. de la copia de la n'. Partición de la Base de Datos Global> "- Fin de archivo - - - La configuración de la Base de Datos Temporal será vista a detalle en la siguiente sección, "Configuración de las Bases de Datos". 70 MANUAL DE USUARIO Configuración de las Bases de Datos Para el correcto funcionamiento del sistema es necesario que la base de datos sea debidamente instalada según el sistema operativo en que se ejecute el buscador y el manejador de la base de datos que sea utilizado. Para que el sistema pueda interactuar con el manejador de base de datos es necesario contar con controladores para el JDBC deJava (ver los controladores existentes para JDBC en el sitio Web de Sun Microsystems en lapágina http://WWW.iava.sun.com/products/idbc/idbc.drivers.html) que permitan el acceso a los datos. Si el sistema del buscador se está ejecutando sobre el sistema operativo Windows 95 sólo es necesario tener instalado el controlador ODBC que viene adjunto con este sistema operativo ya que el JDBC de Java (ver. 1.1) viene integrado con un puente JDBC-ODBC que permite la conexión con cualquier base de datos que sea soportada por el estándar ODBC de Microsoft. La API JDBC de Java se encuentra disponible en la siguiente dirección: http://www.iava.sun.com/uroducts/idbc/index.html. A continuación se presenta un ejemplo de configuración para el sistema operativo Windows 95 utilizando el controlador ODBC para accesar a una base de datos de tipo Microsoft Access. 0 El procedimiento de configuración es el mismo para cada partición de la Base de Datos de Palabras Clave por lo que si el número de particiones en que va a estar dividida esta base de datos es n se tendrá que realizar dicho procedimiento 2n veces debido a que las réplicas de las particiones serán configuradas del mismo modo. Ya que se ha decido el número de las bases de datos que van a contener a las particiones primarias y a las réplicas, se crea unabase de datos en cada equipo con la estructura que se muestra en la figura A.l . Figura A.1. Estructura de la Base de Datos. Además, para el caso de la primera partición se deben vincular las tablas de todas las particiones de la base de datos de la siguiente manera: supongamos que tenemos una base de datos dividida en 2 particiones. La segunda partición deberá tener la estructura antes mencionada pero la primera deberá contener además vinculadas las tablas de todas las particiones. Los nombres de estas tablas vinculadas deben de ser de la siguiente forma: para la primera partición los nombres son VtableRelacion1, VtableURL1, VtableToken 1; para la segunda partición los nombres son VtableRelacion2, VtableURL2, VtableToken2, y así sucesivamente. Importante: Es importante señalar que también se deben agregar las tablas de la primera partición como tablas vinculadas, no importa que hagan referencia a la misma base de datos. A continuación en la figura A.2. se muestra un ejemplo de tablas vinculadas: 71 DlSEAO E IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB . t VTableTokenl Vlablelokenz y Tablas vincuiadas Figura A.2. Tablas vinculadas. 0 Una vez que cada equipo cuenta con la base de datos que le corresponde a su partición, se debe crear con el sistema operativo la compartición de cada una de estas bases de datos con el resto de los equipos del sistema. A continuación se muestra un ejemplo con el sistema operativo Windows 95 en el que Enelsiguiente ejemplo mostramos el sistema de archivos del servidor que contiene a la partición primaria. Como se puede observar en la figura A.3., existen dos conexiones a los recursos del resto de los servidores: una a la copia de su partición (copia de la primera partición), otra a la segunda partición y por último otra conexión a la copia I I Conexibn a la copia l de la 2a. partici6n Figura A.3. Compartición de las bases de datos. o 72 Una vez que ya estén listas las conexiones a las particiones de los demás equipos, se ejecuta el programa de configuración del controlador de ODBC de Windows 95 y se crea un nuevo recurso del sistema para cada una de las particiones. Recuerde que las particiones no son mas que los archivos de bases de datos que acaban de ser conectadas en el paso anterior. El nombre que se debe asignar a cada uno de los recursos de las bases de datos para las particiones primarias debe ser de la forma: dbl, db2, db3, y así sucesivamente. Para el caso de las particiones secundarias el nombre de cada recurso debe ser de la forma dbls, db2s, db3s, y así sucesivamente. Es posible que un mismo equipo contenga una partición primaria y una secundaria. A continuación en la figura A.4. se muestra un ejemplo de la creación de recursos ODBC enunsistema Windows 95. MANUAL DE USUARIO Figura A.4. Creación de recursos ODBCpara laBase de Datos Global. Por último, existe una Base de Datos que va a ser utilizada por el Robot. Esta base de datos también contiene el mismo número de particiones que la Base de Datos Global. Se recomienda que se asigne otro servidor para uso exclusivo del Robot y que en ese servidor se almacenen todas las particiones de la Base de Datos Temporal, las particiones de la base de datos tienen la misma estructura que las particiones de la Base de Datos Global, la única diferencia es que éstas se encuentran en un solo servidor. De esta manera, la conexión a las particiones de la Base de Datos Temporal es más simple para el Robot. Para el caso del sistema operativo Windows 95, esto representa crear recursos ODBC a las particiones locales de la Base de Datos Temporal, los nombres que deben ser asignados a los recursos ODBC de estas particiones son de la siguiente forma: spiderdbl, spiderdb2, y así sucesivamente. A continuación se mostrará en la figura A.5. un ejemplo de la creación de los recursos ODBC que necesitaría el Robot con una Base de Datos Temporal particionada en 2 sobre el sistema operativo Windows 95. Figura A.5. Creación de recursos para la Base de Datos Temporal. 73 DISEÑOE IMPLEMENTACldN DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WE0 EJECUCIóN DEL SISTEMA Para poner a h c i o n a r el sistema, primero se deben poner en ejecución todos los Servidores de Solicitudes (o de Búsqueda) Primarios y Secundarios. A continuación se explica el procedimiento. Ejecución del Servidor de Solicitudes Para ejecutar el Servidor de Solicitudes basta con ejecutar la clase Server.class de la siguiente forma: Primero ubíquese en el directorio donde están contenidas las clases del Servidor de Solicitudes, teclee lo siguiente en la línea de comandos y después presione la tecla <ENTER>: >$ java Server Inmediatamente será cargada la interfaz gráfica del Servidor de Solicitudes y podrá iniciarse la ejecución del servidor haciendo click sobre el botón Iniciar servidor (ver Figura A.6.). Por lo anterior, es importante que se cuente con un ambiente gráfico en la plataforma que desee ejecutarse el sistema. Después de poner en ejecución cada uno de los Servidores de Solicitudes, se debe poner en ejecución el Agente Distribuidor de Solicitudes para que éste, al iniciar su ejecución, autodetecte qué Servidores de Solicitudes se encuentran funcionando y listos para recibir las solicitudes. 74 MANUAL DE USUARIO Ejecución del Agente Distribuidor de Solicitudes Para ejecutar el Agente Distribuidor de Solicitudes basta con ejecutar la clase Agent.class de la siguiente forma: Primero ubíquese en el directorio donde están contenidas las clases del Agente, teclee lo siguiente en la línea de comandos y después presione la tecla <ENTER>: >$ java Agent Inmediatamente será cargada la interfaz gráfica del Agente Distribuidor de Solicitudes y podrá inicializarse la ejecución del Agente haciendo click sobre el botón Iniciar distribuidor (ver Figura A.7.). Por lo anterior, es importante que se cuente con un ambiente gráfico en la plataforma que desee ejecutarse el sistema. Figura A. 7. Interfaz gráfica del Agente Distribuidor de Solicitudes. Hasta aquí el sistema se encuentra funcionando y listo para recibir solicitudes. A continuación diremos cómo poner en funcionamiento el Robot Buscador. Ejecución del Robot Buscador de Recursos Para ejecutar el Robot Buscador basta con ejecutar la clase Spiderxlass de la siguiente forma: Primero ubíquese en el directorio donde están contenidas las clases del Robot, teclee lo siguiente enlalínea de comandos y después presione la tecla <ENTER>: >$ java Spider Inmediatamente será cargada la interfaz gráfica del Robot y podrá iniciarse la ejecución del mismo haciendo click sobre el botón Iniciar buscador (ver Figura A.8.). Por lo anterior, es importante que se cuente con un ambiente gráfico en la plataforma que desee ejecutarse el sistema. 75 DISENO E IMPLEMENTACldN DE UN SISTEMA DISTRIBUIDOPARA UN BUSCADOR DE WEB Figura A.8. Interfaz gráfica del Robot Buscador. Ejecución de la Interfaz de Usuario Una vez que el sistema se encuentre funcionando y listo para recibir solicitudes lo Único que falta es que un usuario se conecte al servidor Web del sistema para poder tener acceso a la Inte$uz y así comenzar a utilizar el sistema. A continuación explicamos cómo hacer esto. Para ejecutar el módulo Cliente basta con abrir el documento search.html por medio de un navegador de Web. Dicho documento se encuentra alojado en el servidor de Web del sistema. Un ejemplo de lo anterior esel siguiente: si consideramos que el nombre del servidor de Web del sistema es www.cassiopeia.uam.mx, bastará con teclear el URL http://www.cassioDeia.uam.mx/EduSDider/search.htmlen el navegador para poder acceder al documento. Automáticamente el applet SearchApplet.class será cargado dentro del documento search.htm1 para dar lugar a la Interfaz de Usuario (ver Figura A.9) y entonces se podrán realizar las solicitudes de búsqueda que el usuario desee. A continuación se explica el manejo de la Interfuz de Usuario. Utilizando la Interfaz de Usuario La intefuz es, cómo ya se mencionó, un programa cliente por medio del cual el usuario interactúaconel buscador. La interfuz consta de un área de captura de datos donde el usuario teclea la o las palabras a buscar. Una vez que el usuario haya escrito su solicitud de búsqueda en esta área se tiene que hacer click con el ratón sobre el botón “Buscar” que se encuentra la derecha de dicha área (ver figura A.9.). Es importante mencionar que, con el fin de refinar las búsquedas, el sistema acepta los operadores lógicos OR y AND. Estos operadores son interpretados por los servidores de búsqueda para encontrar los resultados como se explica a continuación. Al solicitarse los resultados de una expresión con operadores OR se regresarán los documentos en los que se encontró por lo menos una de las palabras buscadas en la solicitud. Al solicitarse los resultados de una petición utilizando el operador AND sólo se regresarán al cliente los documentos en los que se encontraron todas las palabras conjuntamente. La interfaz tiene dos modos de presentación de resultados: uno es el formato corto en donde sólo se entregan como resultados el URL y el título y el peso de cada documento encontrado. El otro es el formato largo, aquí se entregan los mismos datos pero además se despliega una pequeña parte del contenido del documento para poder 76 MANUAL DE USUARIO conocer el contexto del mismo. Para cambiar de modo de presentación de resultados sólo se tieneque seleccionar el cuadro “Incluir contenido de documentos”haciendo click sobre este cuadro. Una vez que el buscador encuentra resultados, éstos son enviados a la interfaz, entonces aparece en ella una ventana en donde se despliegan los resultados en el modo en que fueron seleccionados. Para poder navegar entre los resultados entregados se tienen los botones ‘‘<Anterior” y “Siguiente Y ’ . Como se mencionó en el capítulo 3, los resultados son desplegados por orden de importancia enla relevancia de las palabras buscadas en los documentos cuyas direcciones son entregadas enla interfaz. Haciendo click en el botón “Siguiente >” se desplegará el bloque correspondiente a resultados con menor o igual importancia mientras que seleccionando el botón “< Anterior” se regresará a un bloque de resultados con mayor o igual importancia. Figura A.9. Applet SearchApplet.classincrustado en el documento search.html. Requerimientos del sistema del usuario Como es evidente, para que un usuario pueda utilizar elbuscador éste debe tener acceso a la red Internet. Debido a que el sistema está codificado por completo en Java un usuario puede ejecutar la interfuz a través de un navegador de Web de forma independiente de la plataforma, sin embargo, es importante que se cuente con un ambiente gráfico en la plataforma en que desee ejecutarse la interfuz del sistema. Cabe destacar que el navegador deberá soportar el JVM (Java Virtual Machine) de Sun Microsystems para que pueda interpretar el bytecode (o código de byte) de las clases del módulo cliente. 77 Manual Técnico E n este anexo se detallan los aspectos técnicos del buscador, desde la descripción de los problemas que se tuvieron al momento de la implementación hasta la descripción detallada del código fuente que integra al buscador. Con esta documentación se pretende que futuros desarrolladores puedan consultar de forma más rápida y fácil el código para poder realizar los cambios en el sistema que consideren pertinentes. El objetivo de este anexo es únicamente servir como referencia para aquellas personas que deseen retomar el proyecto, es por esto que consideramos que las personas que decidan leer este anexo deben tener conocimientos previos de programación, sistemas operativos y, análisis y diseño de sistemas. PROBLEMAS ENCONTRADOS DURANTE LA IMPLEMENTACIÓN DEL SISTEMA A continuación se mencionan algunos de los problemas encontrados durante la implementación del sistema. En este apartado se menciona brevemente los problemas más importantes y la forma en quefueron solucionados, de manera que desarrolladores posteriores analicen las soluciones implementadas y puedan dar una mejor solución. 0 0 Se contemplaba hacer uso de un sistema operativo para la arquitectura 386 de Intel (i386) que permitiera un alto desempeño del sistema y aprovechara al máximo los recursos del equipo de cómputo. El primer candidato fue Linux, que por su disponibilidad y soporte enla Internet nos pareció ser el sistema operativo más adecuado. Lamentablementenosencontramosconque las implementaciones de la Máquina Virtual de Java (JVM) para Linux, no ejecutaban debidamente los hilos de ejecución nativos de Linux. Desde luego, si en un futuro una implementación de la JVM para Linux llegase a corregir éste problema, se recomiendaque se considere a Linuxcomoun candidato fuerte para ser el sistema operativo en el que se ejecute el buscador. Se hizo un estudio de los sistemas operativos que no tuvieran éste problema y que contaran con una implementación de la JVM soportada por Sun Microsystems, además de una gran cantidad de software libre a su disposición. El sistema escogido bajo este criterio fue Windows 95. En la propuesta inicial de la arquitectura del sistema, se planteaba que el Robot (agente buscador de recursos en el Web) sería una entidad de código móvil, es decir, que éste pudiera transportarse en la Internet y ejecutarse de manera remota en los servidores de los que se quiere recuperar la información. Después de una amplia revisión bibliográfica, nos dimos cuenta que esto no es posible sin una previa autorización de los administradores de los servidores implicados. Es así como decidimos que esta forma de recuperación de los recursos no sería la más adecuada para los fines de funcionamiento del sistema, puesto que se tendría que invertir mucho tiempo en solicitar ésta autorización a todos los administradores de los sitios implicados. La solución que se llevó a cabo es la que describe el comportamiento del Robot en la arquitectura del sistema ya antes mencionada. El Robot se ejecuta en 79 DISENO E IMPLEMENTACldN DE UN SISTEMA DISTRIBUIDO PARAUN BUSCADOR DE WEB 0 uno de los servidores de la arquitectura y hace las conexiones remotas a los recursos disponibles en los servidores para efectuar los análisis. Como se plantea en nuestra arquitectura, cada servidor que compone el sistema distribuido guarda una partición de la Base de Datos de Palabras Clave. En un principio se proponía que para resolver las solicitudes de búsqueda que contenían másdeuna palabra enmás de una partición, los servidores deberían de comunicarse entre sí para compartir los contenidos de las bases de datos. Deseábamos resolver este problema con código Java utilizando la API de JDBC (Java DataBase Connectivity, o Conectividad de Java para Bases de Datos), pero esto implicaba la necesaria utilización de un servidor de bases de datos que nos permitiera hacer consultas remotas desde otros servidores. Se probó y se revisó una gran cantidad de Servidores de éste tipo pero todos siempre presentaron un inconveniente en su utilización. La mayoría eran productos comerciales y sólo facilitaban una versión de evaluación que caducaba en un periodo corto de tiempo, otros permitían ser utilizados libremente pero eran servidores específicos para una sola plataforma. En resumen, todos estos servidores presentaban un inconveniente para una de las principales características que se buscaba obtener en este sistema quees la independencia de la plataforma y del sistema operativo. Después de hacer un análisis de este problema y de damos cuenta que no tendría solución en la forma en que se planteó en un principio, decidimos entonces relegar esta labor de conexión entre los servidores al sistema operativo. Para ésta solución se hace requisito la utilización de un sistema operativo abierto que permita la compartición de recursos entre varios equipos de forma transparente. De esta forma se puede hacer la compartición de recursos entre los servidores - que en este caso son las particiones de la base de datos - y el sistema hace uso de ellos como si fueran recursos locales, ahorrándonos así la implementación de la conexión. DESCRIPCIóN DE LOS MóDULOS COMPONENTES Y CóDIGO FUENTE DEL SISTEMA. En el análisis el sistema completo es dividido en varios módulos o entidades principales y cada uno cumple con una tarea. Los módulos que componen el sistema son: El robot buscador de recursos, el Servidor de solicitudes, elAgente Distribuidor de solicitudes y la Interfaz del cliente. A continuación se describe cada unodelos módulos mencionando la funcionalidad, la relación que tiene con otros módulos y explicando detalladamente el código fuente. El sistema fue desarrollado 100% enlenguaje Java, y dado que éste lenguaje es un lenguaje orientado a objetos, mencionaremos también aspectos tales como herencia, polimorfismo y redefinición de métodos en aquellos módulos que se presenten. A continuación se muestra un diagrama que explica la interelación de código que existe entre las entidades sistema. Módulo: AgenteDistribuidor I + - - - - Agent Clases : I +---I +---- I I + - - - - SearchServerThread I Agentserver + - - - - checkHost 80 I + - - - - Searchserver Agent$l + - - - - AgentServerThread I Módulo: ServidorSolicitudes Clases : + - - - - DataBase I + - - - - Server I + - - - - Server$l MANUAL TECNICO Módulo: RobotBuscador Módulo : I Cliente I + - - - - DBAccess +----- I I I I + - - - - HTMLParser I + - - - - Myproperties I +----- SearchApplet +---- Request + - - - - Pagevisitor +---- ClientRequestEntry + - - - - Visitor + - - - - Comparable +---- + - - - - Quicksort Clases : I I I Clases : SearchTemplate I I I I textTag + - - - - wordInUrl I + - - - - WordsTable I +---- spiderThread +---- Spider +---- Spider$] I I CóDIGO FUENTE DEL SISTEMA. En esta última sección se proporciona el código fuente de cada uno de los módulos del sistema. El código se encuentra suficientemente documentado como para permitir un estudio a detalle del sistema. Código del Robot Buscador de Recursos A continuación se explica el código del Robot Buscador de Recursos. El código del Robot Buscadorde Recursos consta de 4 clases: Spider.class, spiderThread.class, PageVisitor.class, Visitor.class, HTMLParser.class, textTag.class y WordsTable.class. A continuación se explica en detalle cada unade las clases: Clase Spider: Java.lang.Object 1 +----java.awt.Cornponent I +----java.awt.Container I + - - - j a v a . awt .W i n d o w I +- - - - j a v a . awt , F r a m e I +-----Spider 81 DISEÑO E IMPLEMENTACldN DE UN SISTEMA DISTRIBUIDOPARA UN BUSCADOR DE WEB Public class Spider Extends Frame Runnable import java.awt.*; import java.awt.event.*; La clase Spider muestra una ventana gráfica que funciona como interface que despliega datos importantes y botonesdecontrol.También crea, inicia y detienelainstanciade spiderThread que ejecuta la búsqueda de recursos: public class Spider extends Frame { El constructor de Spider inicializa la ventana gráfica: public Spider ( ) { initcomponents pack 0 ; () ; 1 El método initComponentsO es llamado desde el constructor de la clase Spider para inicializar la ventana gráfica y sus componentes: private void initcomponents 0 { setTitle ("Robot Buscador de recursos"); setBackground (new Color ( 1 5 7 , 185, 200)); addWindowListener (new WindowAdapter ( ) { public void windowClosing (WindowEvent evt){ exit Form (evt ; 1 1 ); setLayout (new com.netbeans.developer.awt.AbsoluteLayout0 ) ; panel1 = new Panel ( ) ; panell.setBackground (new Color(157, 185, 200)); panel1,setLayout (newcom.netbeans.developer.awt.Abso1uteLayout ( ) 1 ; labell = new Label 0 ; labell. setText ( "Robot Buscador de recursos" ; labell. setFont (new Font (vlSerif", 3, 24) ) ; panell.add (labell, new com.netbeans.developer.awt.Abso1uteConstraints (20, 2 0 , -1, 82 - MANUAL TECNICO 200, panel1.add (listsites, newcom.netbeans.developer.awt.AbsoluteConstraints 140)) ; (20, 9 0 , textUrl = new TextField 0 ; textUrl.setBackground (Color.white); ; textUrl.setName ("textUrlrl) textUrl.setEditable(false); panell.add (textUrl, new com.netbeans.developer.awt.Abso1uteConstraints(240, 9 01, 9 0 , 20) ) : listurls = new List O ; 1istUrls.setBackground (Color.white) ; listUrls. setName (tllistUrls") ; panel1.add (listurls, newcom.netbeans.developer.awt.Abso1uteConstraints(240, 140, 190, 9 0 ) ) ; buttonstart = new Button( ) ; buttonstart.setLabel ("Iniciarbuscador"); buttonstart .setBackground (new Color (157, 185, 200)); 1, 1 2 ) ) ; buttonstart . setFont (new Font(lvDialogll, ; buttonstart .setName ('IbuttonStart") panell.add (buttonstart, newcom.netbeans.developer.awt.Abso1uteConstraints(450, 100, 120, 30)) ; buttonstop = new Button ( ) ; buttonstop. setLabel ( "Detener buscador") ; buttonStop.setBackground (new Color (157, 185 , 200) I ; buttonstop. setFont(new Font ( 8fDialog1v, 1 , 12) I ; buttonStop.setName (IIbuttonStop") ; loper'.awt.AbsoluteConstraints( 4 5 0 , 140, panell.add (buttonstop, new com.netbeans.deve 120, 30)); textout = new TextArea 0 ; textout. setName ("textOut"); textOut.setBackground(Color.white); textOut.setEditable(false); panell.add (textout, newcom.netbeans.developer.awt.Abso1uteConstraints(20, 260, 5 5 0 , 170)); add (panell, new corn.netbeans.developer.awt.Abso1uteConstraints (20, 20, 610, 470)); El método exitForm0 es llamado cada vez que el evento de cierre de ventana sea llamado. Éste método sólo se encarga de terminar la aplicación: 83 DISENO E IMPLEMENTACldN DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEE private void exitForm(WindowEvent evt){ System.exit ( O ); 1 El método action0 se encarga de controlar los eventos que se llevan a cabo en la interface gráfica. Éste método permite llamar a ciertas funciones como respuesta de algunos eventos de la pantalla gráfica: public synchronized boolean action(Evente, Object arg) { if (e.target==buttonStart){ initserver ( ) ; buttonStart.setEnabled(fa1se); buttonstop. setEnabled ; (true) return true; if (e.target==buttonStop) { stopserver ( ) ; buttonStart.setEnabled(true); buttonStop.setEnabled(false); return true; return false; 1 A continuación se presenta un grupo de métodos que se encargan de cambiar las propiedades más importantes de la clase. Estas propiedades son componentes gráficos de la ventana: El método setsite0 se encarga de reemplazar el texto que se encuentra en el campo de texto (text field) que contiene el nombre del sitio que se está analizando: public void setSite(String siteName) { textUrl.setText(siteName); 1 E] método framePrintln0 se encarga de agregar una línea de texto a la ventana de salida: public } 84 void framePrintln(Strin9 line) { textout .append(line + “\n”); MANUAL TfkNICO El método removeFromUrlsList0 se encarga de eliminar un elemento de la lista de URL’s por analizar: public voidremoveFromUrlsList(String site){ listurls. remove (site) ; 1 El método addToUrlsList0 se encarga de agregar un elemento a la lista de URL’s por analizar: private void initserver 0 { spider = new spiderThread(this1; spider. start () ; El método stopserver0 se encarga de detener correctamente el hilo de ejecución: private void stopserver0 { //spider.stopSpiderThreadO; //spider. stop () ; System.exit ( O ) ; 1 private java.awt.Pane1 panell; private java.awt.Labe1 labell; private java.awt.Labe1 label2; public java.awt.List 1istSites; private java.awt.Labe1 label3; private java.awt.TextField textUrl; private java.awt.Labe1 label4; private java.awt.List listurls; public java.awt.Button buttonstart; public java.awt.Button buttonstop; private java.awt.TextArea textout; private java.awt.Labe1 labels; private spiderThread spider= null; El método main0 se encarga de crear una instancia de la clase Spider para efectuar la tarea de búsqueda de recursos: public static void main(java.lang.String[l args) { new Spider ( ) .show ( 1 ; 1 Clase suiderThread: java.lang.0bject I +-----java.lang.Thread I +-------spiderThread DISEflO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB Public class spiderThread Extends Thread Código: import java.io.*; La clase spiderThread se encarga de empiezar el robot de búsqueda public class spiderThread extends Thread { static private private private public static private String rooturl; Pagevisitor visit = null; String url = I t t l; ThreadGroup Group; int MAX-THREADS = S ; Spider frame= null; El constructor de spiderThread0 inicializa el hilo de ejecución y lo asocia con ungrupo de hilos de ejecución: public spiderThread(Spider newFrame){ Group = new ThreadGroup ( ItGroup" ) ; frame = newFrame; 1 El método run0 es el método que inicia la ejecución del robot y pasa como par metro el URL a analizar a la nueva instancia del robot (Pagevisitor): public void run ( ) { DataInputStream issites= null; try { issites = new DataInputStream(newFileInputStream(llsites.datlt)); } catch (FileNotFoundException e){ frame.framePrintln("No se encontró el archivo sites.dat"); try I while ( ( (url=isSites. readLine 0 !=null) frame.addToSitesList (url) ; } catch (IOException e) { frame.framePrintln("Erroral leer del archivosites.dat"); 1 try { issites = new DataInputStream(newFileInputStream("sites.dat") ) ; } catch (FileNotFoundException e) { frame.framePrintln("Nose encontró el archivo sites.datar); } try { while(((url=isSites.readLineO) !=null)) { if (Group.act iveCount ( ) < = MAX-THREADS ) { doIt (url) ; frame.listSites.remove(ur1); 86 MANUAL TCCNICO I else I while () (Group.activeCount >= "THREADS) ; } catch (IOException e') { frame.framePrintln("Erroral leer del archivo sites.dat"); I frame.setSite(""); frame.buttonStart.setEnabled(true); frame.buttonStop.setEnabled(fa1se); return; 1 El método doItO inicia la ejecución de análisis del robot al URL recibido: public void doIt (String url){ Se verifica si el URL proporcionado es la dirección de una página o de un subdirectorio String root = url; ( ) . endsWith ( "html") I j root. toLowerCase ( ) . endsWith ( "htm") if (root. toLowerCase root. toLowerCase ( ) . endsWith ( ''asp'' ) ) root = root.substring(0, root.lastIndexOf (lt/ll) ); rootUrl = root; 1I Se crea una instancia de la clase Pagevisitor y se le proporciona como argumento el URL recibido para iniciar ahí el análisis I El método stopSpiderThread0 es el método que seencarga de detener de forma correcta el hilo de ejecución: public void stopSpiderThread0 { Se detienen todos los hilos de ejecución que ha creado visit como entidad Pagevisitor para rastrear los documentos del sitio asignado visit.stopPagevisitor0; Clase Pavevisitor: java.lang.Object I +-----java.lang.Thread I +-------Pagevisitor 87 DISENO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB Public class Pagevisitor Extends Thread Código: import java.util.*; import java.io.*; import java.net.*; La clase Pagevisitor controla el análisis de las páginas: class Pagevisitor extends Thread { / / define algunas constantes globales private final static int MAX-THREADS = 10; private final static String SAVE-DIR = private final static String WORDS-FILE = “words.datI9; = lturls.dat”; private final static String URLS-FILE private final static String CONTENT-FILE = “content“; static Stack pagestack= new Stack(); static WordsTable words= new WordsTableO; private ThreadGroup Group= new ThreadGroup(‘IGroup9l); private Spider frame; private String rootUrl= / / comienza vacía la base de datos de las p ginas analizadas = new static Hashtable pageDatabase Hashtable(); static int i = O ; static Runtime mem = Runtime.getRuntime(); Visitor v = null; El constructor de Pagevisitor inicializa el hilo de ejecución que se encargará del rastreo de un sitio, recibe como argumentos: 0 0 0 PageAddress, el URL del documento inicial para el análisis. Group, el grupo al que va a pertenecer el hijo de ejecución. NewFrame, la instancia de Spider que permitirá desplegar en la ventana de salida mensajes importantes. public Pagevisitor (String pageAddress, ThreadGroup group, Spider newFrame) { super(group, pageAddress); pageStack.push(pageAddress) ; rootUrl = pageAddress; frame = newFrame; frame.addToUrlsList(pageAddress); frame.setSite(pageAddress); El método start inicializa al hilo de ejecución: public void start () { Vector links; 88 MANUAL TECNICO long count = 1; string page = new String(); El siguiente ciclo se ejecuta mientras la pila de páginas a analizar no está vacía. En este ciclo se realiza el análisis de los documentos encontrados en este sitio: while ( !pagestack. empty () ) { if (count % 2 0 == O ) ( frame.framePrintln("Esperemientras se guardan 10s resultados..."); saveData ( ) ; 1 Se extrae el URL de la siguiente página a analizar: page (String)pageStack.popO; frame.removeFromUrlsList(page); = / / si la páginano ha sido visitada anteriormente.. if ( ! alreadyVisited(page) ) ( frame.f rameprintln ( "visitando "+page); / / se marca la página como "ya visitada" markAsVisited(page) ; Si los threads (o hilos de ejecución) actualmente en ejecución son más que el máximo permitido, se hace esperar a que termine de ejecutare un thread antes de comenzar a analizar el siguiente documento: if (Group. activecount ( ) > MAX-THREADS) ( System.out .println(page+" est en espera... " ) wait ( ) ; ; 1 se crea un nuevo hilo de ejecución para que visite el documento: v = new Visitor(Group, page, rootUr1, frame); i++; frame. frameprintln (!'yason "+i+" URL's analizados!"); frame.framePrintln(mem.freeMemory0 + " Bytes libres"); count++; 1 1 catch (Exception e) { error ( "ooops! pila vacía! ! ! 'I ) ; 1 while (Group. act iveCount () > O) ; Cuando todos los documentos encontrados en las ligas ya han sido analizados se procede a guardar en disco los resultados y a actualizar las bases de datos primara y secundaria: frame.framePrintln("Esperemientras se guardanlos resultados..."); saveData ( ) ; updateData ( 1 ; 89 DISEÑO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDOPARA UN BUSCADOR DE WEB El método alreadyvisitedo regresa TRUE si la dirección del documento recibido ya fue visitado: protected boolean alreadyVisited(String pageAddr) { return pageDatabase.containsKey(pageAddr); I El método markAsVisited0 marca a la página como "ya visitada" para evitar que vuelva ser analizada por el robot: protected void markAsVisited(String pageAddr) { pageDatabase.put(pageAddr, pageAddr); / / agrega el nombre de la / / p gina a la base de datos } El método saveData0 guarda en disco toda la información obtenida: private try I void saveData (1 { Se abre el directorio en donde se va a guardar la información: File dir = new File(SAVE-DIR); if (!dir.existsO) dir . mkdir ( ) ; Guarda los vectores de los URL's y los títulos: words.saveUrls(dir, URLS-FILE); Guarda las palabras encontradas en las páginas: ; words.saveWords(dir, WORDS-FILE) words.clearAllVectors0; frame.framePrintln("Lainformación ha sido guardada."); 1 catch(I0Exception e) { frame.framePrintln("Erroral escribir los resultados de la búsqueda "+e.getMessage( ) ; System.exit ( 1 ) ; I El método updateData0 reemplaza las particiones de labasede particiones actualizadas por el robot: private void updateData () { FileInputStream inputstream; DataInputStream dbRoutesFile; Fileoutputstream outputstream; String line; int numpartitions = O ; byte buffer[] = new byte[1024]; Vector primDBs= new Vector() ; Vector secDBs = new Vector(); Vector spiderDBs = new VeCtOrO; 90 datos primarias y secundarias por las MANUAL TECNICO Se abre el archivo dbRoutes.dat para obetener de é1 el número de particiones y las rutas de acceso a Cllas. El archivo contiene las rutas de acceso a las particiones de la bases de datos temporal (que es la que le actualiza el Robot con la nueva información obtenida), base de datos primaria y la base de datos secundaria. dbRoutesFile = new DataInputStream(newFileInputStream("dbroutes.dat") ); / / se lee la primera línea que contiene el número de particiones / / y lo convierte aun entero () ; line = (String) dbRoutesFile. readLine numpartitions = (Integer.valueOf(line)).intValueO; / / se leen l a s rutas de acceso fuente y destino de las Particiones //de la base de datos for(int i = 1 ; i<= numpartitions; i++) { if ((line=(String)dbRoutesFile.readline())! = null) spiderDBs.addElement(line); systern.out.println(line); if ((line=(String)dbRoutesFile.readLineo) ! = null) primDBs.addElement (line) ; System.out.println(line); if (line= (String) dbRoutesFile secDBs .addElement (line) ; System.out.println(line); ( dbRoutesFile. 1 .readLine ( ) ) ! = null) close () ; 1 catch(I0Exception e) { frame.framePrintln("Error Faltal! No se pudo leer el archivo de rutas de acceso a las particionesde la base de datos:"+e.getMessageO); frame.framePrintln("La base de datos no pudo ser actualizada, será necesario actualizarla manualmente"+e.getMessageO); System.exit ( O ) ; 1 frame.framePrintln("Se prepara a actualizar la base datos..."); de try { Enumeration eSpiderDBs = spiderDBs.elements0; Enumeration ePrimDBs = primDBs.elements0; Enumeration eSecDBs = secDBs.elements0; En este ciclo se copian los archivos fuente en las direcciones destino que se especificaron enel dbpaths.dat: archivo while(eSpiderDBs.hasMoreElements0) { String inputFileName = (String)eSpiderDBs.nextElement() ; / / se copia el archivo a la partición primaria inputstream = new FileInputStream(inputFi1eName); outputstream = new FileOutputStream((String)ePrimDBs.nextElement()) ; while(inputStream.read(buffer) ! = - 1 ) { outputStream.write(buffer); 1 inputstream. close () ; outputStream.close0; / / se copia el archivo a la partición secundaria inputstream = new FileInputStream(inputFi1eName); 91 DISEÑO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDOPARA UN BUSCADOR DE WEB outputstream = new FileOutputStream((String)eSecDBs.nextElement()) ; while(inputStream.read(buffer) ! = -1) { outputStream.write(buffer); } inputStream.close0; outputstream. close (1 ; } } catch (IOException eIO) { frame.framePrintln(”Error al actualizar l a base de datos.Se recomienda hacer la actualización manua1mente.l1); } frame.framePrintln(llLa base de datos ha sido actualizada.“); El método error0 despliega mensajes de error en la salida de errores predefinida: private void error(StringS ) { System.err.println(s); 1 El método stopPageVisitor0 se encarga de terminar adecuadamente la ejecución de éste hilo de ejecución: public void stopPageVisitor0 { //Thread threadsArray [I ; //int count = Group.enumerate(threadsArray); //synchronized (Group) { v. stop (1 ; Clase HTMLParser: 1 java.lang.Object I +-----“HTMLParser Public class HTMLParser Extends Object Código: import java.net.*; import java.util.*; import java.io.*; 92 MANUAL TECNICO La clase HTMLParser tiene como función principal analizar documentos html. Extrae las ligas a otros URL's, los títulos de los documentos y los contenidos: class HTMLParser { URL url; private StreamTokenizerst; private String title; private Vector content; / / se guardan las cadenas de caracteres+atributos private Vector links; y sus atributos private textTag nextTag;/ / contiene la línea actual de an lisis private String rooturl= ' I " ; El constructor de HTMLParserrecibe como argumentos: 0 U, una instancia de la clase URL del documento a analizar. o NewRootUrl, el URL inicial con el que se comenzó el análisis del sitio. Se encarga de entablar la comunicación con el documento a analizar y de preparar el análisis por tokens: public HTMLParser(URL u, String newRootUr1) throws IOException{ Abre un flujo de datos al URL para analizar cada token del documento: st = new StreamTokenizer(u.openStream0 ) ; rootUrl = newRootUr1; url = u; content = new Vector(); links = new Vector(); nextTag = new textTag0 ; title = new String("no title") ; st. resetsyntax () ; st.wordChars(0,255); st. ordinarychar ( '<I ) ; st. ordinarychar ( '>' ) ; st.lowerCaseMode(false); st.eolIsSignificant (false) ; El método analizeo analiza la página y guarda todas las ligas válidas en un vector: public void analizeo throws IOException { textTag String boolean String newTag = new textTag0; token; inTag = false; / / bandera que indica si estamos dentro undetag testlink; while ((st.nextToken()) ! = st.TT-EOF) { if(st.ttype == 60) { / / se abre un tag inTag = true; continue; c 1 if(st.ttype == 6 2 ) { / / se cierra un tag> inTag = false; 93 DISEÑO E IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB continue; 1 if(st.ttype == st.TT-WORD) { / / el token es una palabra token = st.sval.trim0 if (token.equals(”\n”)I I token.length0 == O ) / / se ignoran l a s nuevas líneas / / y los espacios continue ; Si el analizador se encuentra dentro de un tag del lenguaje HTML, se guarda en un objeto de tipo textTag: if (inTag) nextTag.updateStatus(token); Se obtiene el tipo del token actual y se toma una acción que depende de su tipo: switch (nextTag. type) { / / si es un tag de liga ... case nextTag.LINK-TAG: / / se crea una liga v lida a partir del token nextTag.buildLink(token); / / si la liga no es una liga vacía ... if (nextTag. content ! = null) { / / se verifica que la liga sea una liga v lida testLink = addLink(nextTag.content); / / y si es una liga v lida se agrea al vector de ligas / / encontradas if (testLink ! = null) links .addElement (testLink) ; J break ; / / si es un tag de texto . . . case nextTag.TEXT-TAG: / / se verifica su tipo para decir una acción { switch (nextTag. tag) / / si el tag es el título del documento ... case(nextTag.TITLE): if ( ! inTag) { / / se garda el título del documento en un String apartir / / del token title = new String(token) ; / / se eliminan caracteres no imprimibles for(int i = O ; i < 32; i++) title = title.replace((char)i, I ) ; Se crea un nuevo tag a partir del token y se agrega al vectorde contenido if(!title.equalsIgnoreCase(”no title“)) { newTag = new textTag(token, nextTag.tag, nextTag .type) ; content.addElement(newTag); break; default : if(!inTag) { / / si el analizador se encuentra dentro de un / / tag entonces no se agrega el token al 94 MANUAL TECNICO / / contenido ; newTag = new textTag(token, nextTag.tag, nextTag.type) content.addElement(newTag); 1 break; 1 default : break; 1 1 } / / mientras haya m S tokens 1 El método addLink0 regresa en un string una liga válida a partir de un string recibido como parámetro, siempre y cuando del string pueda extraerse una liga válida si no, regresa un string nulo: private String addLink(String link) { URL tmpUr1; int refPos; / / se remueve cualquier referencia refPos = link. indexof ("#'I) ; if(refPos ! = - 1 ) { if (refpos == O ) link = II I 1 . else link = link.substring(0, 1ink.lastIndexOf ('I#")) ; 1 { tmpUrl = new URL( u r l , link) ; / / se verifica que el protocolo de la liga sea http .getprotocol ( 1 .equals("http")) if ( ! tmpurl return null; / / si el nombre del host de la liga no es el mismo que el del URL / / de inicio regresa null if ( ! tmpUrl .getHost ( ) .equals (url .getHost () ) ) return null; / / si la liga no es a un documento .html o .htm entonces regresa null for(int i=O; ic(tmpUrl.getFile0).length(); i++) if((tmpUrl.getFile()).charAt(i) = = l . ' ) if ( ! (tmpUrl.getFile0 .toLowerCaseO .endsWith("html")) && ! (tmpUrl. getFile ( ) . toLowerCase ( ) . endsWith ( "htm") ) ) return null; //se verifica quel a liga no esté en el mismo directorio raíz de //inicio queel primer URL if(!tmpUrl.toStringO .startsWith(rootUrl)) return null; / / regresa la liga al URL v lido return tmpurl .tostring ( ) ; 1 catch(Ma1formedURLException e) { return null; 1 95 DSEÑO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB El método checkLegalFileName0 regresa TRUE si el nombre de archivo recibido es un nombre válido de un documento html, si no, regresa FALSE: private booleancheckLegalFileName(String name) { int i = O; if (name == null) return false; / / se omiten los ''mailto:" if (name.startsWith(f'mailto:) 'I) return false; / / se omiten las referencias if (name.startsWith("#")) return false; / / se busca la extensión del nombre del archivo while((i < name.length0) && (name.charAt(i) ! = i++; l . ' ) ) //si el nombre del archivo no termina con( I . html" o I t . htm" / / entonces no es un nombre de archivov lido () ) if (i < name. length { if (!name.endsWith("html")&& !name.endsWith("htmlr)) return false; 1 return true; 1 El método returncontento regresa el contenido de un URL comoun vector de palabras y valores public Vector returncontento { return content; 1 El método returnstringcontento regresa el contenido del documento en formade String public String returnstringcontento { StringBuffer buf = new StringBufferO; Enumeration enum = content.elements(); / / mientras existan elementos while(enum.hasMoreElements0) { en el vector de contenido. . . / / se agregan los tags al string resultante () ; textTag tag = (textTag) enum.nextE1ement buf. append (tag.content+" I' ) ; 1 return buf.tostring ( ) ; 1 El método returnLinks0 regresa el vector donde se guardan las ligas encontradas en el documento public Vector returnLinks () { return links; 96 MANUAL TECNICO El método returnTitle0 regresa el título del documento en un string public String returnTitle () ( return title; i El método returnURL() regresa el URL del documento actual public URL returnURL() ( return url; 1 El método updatelinkso agrega una liga al vector de las ligas encontradas en el documento private void updateLinks(StringS ) { 1inks.addElement( S ); 1 El método error() muestra un mensaje de error que depende de laexcepción recibida private void error(String S , Exception e) ( System.err.println(s+e.getMessageo) ; J Clase Visitor: java . lang .O b je c t I +-----java.lang.Thread I +-------Visitor Public class Visitor Extends Thread Código: import java.net.*; import java.util.*; La clase Visitor representa un solo thread de búsqueda: class { Visitor extends Thread HTMLParser parser; string page; 97 DISEÑO E IMPLEMENTACldN DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB URL pageToFetch; private String rooturl= private Spider frame; 1'"; El constructor inicializa el thread y le asigna un URL de página y un grupo al que pertenece. Recibe como parámetros: Group, el grupo de hilos de ejecución al que va a pertenecer el thread. 0 PageAddress, el URL del documento que se va a analizar. 0 NewRootUrl, la dirección del documento donde se comenzó a realizar el análisis. 0 NewFrame, la instancia de la ventana gráfica qure se utiliza para desplegar mensajes. Visitor(ThreadGr0up group, String pageAddress, String newRootUr1, Spider newFrame) { super (group, pageAddress); page = pageAddress; rootUrl = newRootUr1; frame = newFrame; start ( ) ; 1 public void run() { / / vector para acumular / / en el documento Vector pagelinks; try { pageToFetch = new los URLIs encontrados URL(page1; Se crea un objeto de la clase HTMLParser para analizar la página: Se obtienen las ligas encontradas en la página: pageLinks = parser.returnLinks0; Se bloquea el objeto de ambiente global words para poder agregar el registro del documento ya rastreado. Se guarda el URL del documento, el título del documento y el contenido del documento. Se bloquea este recurso para asegurarse de que no se efectúen intentos de acceso concurrentes por otros hilos de ejecución y de esta manera se preserve la integridad del recurso: synchronized (PageVisitor.words) { PageVisitor.words.addURL((parser.returnURL()).toString(), parser.returnTitle0, parser.returnContent0 ) ; Se muestra en la consola el nsmero de ligas que fueron encontradas en el documentoanalizado: frame. documentos.It ) ; framePrintln(getName () + Enumeration 98 'I tiene (I enum= pageLinks.elements0; + pagelinks. size () + 11 ligas a otros MANUAL TECNICO Se muestra en la ventana de salida los URL's de los documentos que son agragados a la pila para ser rastreados posteriormente: while(enum.hasMoreElements0) { String page = (String) enum.nextElement 0 frame. frameprintln ("Se agrega I' + page + frame.addToUrlsList(page); ; a " lapila"); Se bloquea la pila de las páginas a ser visitadas para evitar que existan accesos concurrentes de ésta manera se preserve la integridad del recurso: synchronized (Pagevisitor .pagestack) { Se agrega el URL de cada documento encontrado para ser analizado posteriormente: PageVisitor.pageStack.push(page); 1 1 1 catch (Exception e) { frame.frameprintln( "Error return; } return; al abrir el URL 'I + getName ( ) + " "+e.getMessage( ) ) ; Clase WordsTable: java.lang.Object I +---"WordsTable Public class WordsTable Extends Object Código: La clase WordsTable es la clase contenedora de todos los documentos analizados. Guarda los títulos, los URL's y los pesos de cada uno de los tokens en los documentos. Además accesa a las particiones de las bases de datos para almacenar toda la información ahí durante el análisis. class WordsTable { / / se definen algunas constantes globales = l'commonWords"; private final static String COMMON-WORDS 99 DISEÑO E IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDOPARA UN BUSCADOR DE WEB private final static String PARTITIONS-FILE = "partitions.datIt; private final static intA-ASCII = 'al; private private private private private private private private private private private private private DataInputStream commonWordsFile; DataInputStream partitionsFile; StringTokenizer st; Hashtable commonWords; int urlsIndex = O ; int partitionsNumber = O ; Vector urls; Vector titles; Vector contents; Vector urlskeys [I ; MyPropert ies inwords [1 ; Connection con; Statement stmt [I ; / / se definen los delimitadores private static final String DELIMETERS = 11 \t\n\r,;. / I () :\\/=?-\""; El constructor de WordsTable inicializa los vectores, tabla de hash y los contenedores en donde se almacena de forma clasificada la información obtenida durante el análisis: public WordsTable( 1 { String word; String tmp; int count; commonWords = new Hashtableo; urls = new vector 0; titles = new Vector0 ; contents = new Vector(); inwords = new Myproperties1261 ; for(int i=O; ic26; i++) inwords [ i] = new Myproperties () ; Carga las palabras comunes del archivo commonWords y las pone en una tabla Hash que será consultada cada vez que sese encuentre un nuevo token para decidir si se guarda o se omite en la base de datos: try { / / se abre el archivo commonWords commonWordsFile = new DataInputStream(newFileInputStream(COMM0N-WORDS)); while ( (word= (String) commonWordsFile. readLine ( ) ) ! = null) { if (word ! = null) { tmp = new String (word) ; / / se agrega la palabra a la tabla Hash commonWords.put(word, tmp); 1 catch(I0Exception e) { System.err.println("No "+e.getMessage( ) ; System.exit( O ) ; 1 catch(Exception e ) { 1O0 se pudo leer el archivo de palabras comunes: MANUAL TECNICO Se abre el archivo partitions.dat para leer el n&merode particiones en las que se divide la base de datos: try { / / se abre el archivo partitions.dat partitionsFile = new DataInputStream(newFileInputStream(PARTITIONS-FILE)); if ((tmp = (String)partitionsFile.readLine())! = null) { partitionsNumber = Integer.parseInt(tmp); 1 else partitionsNumber = 1; SyStem.out.println("partitionsNumber= "+String.valueOf(partitionsNumber)); 1 catch(I0Exception e) { System.err.println(''No se pudo leer el archivo de particiones: "+e); System.exit ( O ) ; 1 Se realiza la conexión con la base de datos: try { Class.f orName ( "sun.jdbc . odbc . JdbcOdbcDriver") ; 1 catch(C1assNotFoundException el) { System.out .println("Driver not found! !") System.exit ( 1 ) ; ; 1 stmt = new Statement[partitionsNumber] ; System.out.println("Connectando con las bases de datos..."); for (count=l;count < = partitionsNumber; count++) { String url="jdbc:odbc:spiderdb"; String num = String.valueOf(count); url+=num.trimO ; System.out .println( "abriendo base de "+url+" datos . . ." ) try { con = DriverManager.getConnection(ur1, " " ) ; stmt [count-11 = con.createStatement 0 ; ; I"', 1 catch (SQLException e2) { System.out.println("SQLExceptional inicializar!! " + e2); El método add=() agrega el URL del documento, el título y su contenido a la tabla de palabras: public void addURL(Stringurl, String title, Vector content){ String token; wordInURL word; int value; StringBuffer buf = new StringBufferO; String tmp-title = title.toLowerCase0; 101 DISENO E IMPLEMENTACldN DE UN SISTEMA DISTRIBUIDO P A W UN BUSCADOR DE WEB if (tmp-title. return; startsWith( I'errorll)) Agrega el URL del documento al vector de URL's: urls .addElement (url) ; Agrega el títulodel documento al vector de títulos: titles.addElement (title) ; Enumeration enum = content.elements0; Agrega los tags que se encuentren en el vector decontenido del documento: while(enum.hasMoreElements0) { textTag tag = (textTag) enum.nextElement0; value = tag.tag; st = new StringTokenizer(tag.content, DELIMETERS, false); / / se agrega cada tag al buffer IT) ; buf = buf .append(tag.content+I' while (st.hasMoreElements ( ) ) { token = st.nextToken0; token = token. trim( ; token = token.toLowerCase0; .. //si el token es una palabra v .lida if (legalword (token) ) { / / y si la palabra no es una palabra comfn ... if (commonWords .get (token) = = null) { / / busca la palabraen la tabla Hash correspondiente a / / la primera letra del token if (containsKey(token)) { Si el token ya existe en la tabla, entonces se agrega el tipo del tag y el índice del URL en la tabla de m's: word = (wordInURL) get (token) ; word.setURL (value, urlsIndex) ; 1 else { Si el token no existe se crea un nuevo objeto word para quese agregue eltoken correspondientejunto con el tipo de tag y el índice del URL en la tabla de URL's: I I word = new wordInURL (token) ; word. setURL (value, urlsIndex) ; put (word. getword ( ) , word) ; J else { / / si el token es una palabra común ... //System.out.println("palabra "+token+" es comfn, seomite."); 102 a latabla MANUAL TCCNICO Se agrega tambien el continido del documento en forma deString: I contents.addElement(buf.toString()); urlsIndex++; El método containsKey0 Regresa TRUE si el token ya existe en la tabla a la que corresponde: public boolean containsKey(String key) { int i = key.charAt (O) - A-ASCII; I (inwords [il . containsKey return (key) ) ; El método puto agrega el token a la tabla Hash cuando éste no existe: public Object put(0bjectkey, Object value) { int i = ((String)key).charAt(O) - AASCII; return(inWords[i].put(key, value)) ; } El método get0 regresa el objeto de tipo word en latalba relacionado con el token: public Object get (Object key) { int i I = ((String)key).charAt(O) - A-ASCII; return(inWords[il .get (key) ) ; El método getwordso regresa la i-ésima tabla Hash de datos: public Properties getWords(inti) { return inwords [il ; } El método getUrls0 regresa el vector de URL's analizados: public Vector getUrls0 { return urls; 1 El método saveWords0 guarda las tablas hash de la información encontrada en la base de datos: public void saveWords(Fi1edir, String name) throws IOException{ char c; int count, pos, divisor; Se obtiene el número máximode letras de abecedario que contiene cada una de las particiones: if (26 % partitionsNumber > O) divisor = (int)(26/partitionsNumber)+l; else divisor = (int) (26/partitionsNumber) ; 103 DISENO E IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDOPARA UN BUSCADOR DE WEB Se inserta primero los tokens capturados en la tabla TableToken de la base de datos: for(int i = O ; i < 26; i++) { pos = (int) (i/divisor) ; for (Enumeration e = getWords(i).keys(); e.hasMoreElements0; ) { String key= (String)e .nextElement( 1 ; try I stmt [pos] .executeupdate ( "INSERT INTO TABLETOKEN (token) VALUES ( ' " + key.replace("',"').replace('l','!') + " ' ) " ) ; } catch (SQLException excep) { 1 1 Se crea un arreglo de los valores de CveURL de cada partición de la base de datos disponible: urlskeys = new Vector[partitionsNumber]; for(count = O ; count < partitionsNumber; count++) { urlskeys [count] = new Vector (urls.( 1 ) size ; 1 Se crea un arreglo que contiene las claves de los URLs que se van a utilizar para crear la tabla de relaciones for (Enumeration enumurls= urls.elements0; enumurls.hasMoreElements() ; ) { String strurl= (String) enumurls .nextElement () ; for(count = O; count < partitionsNumber; count++) { try I Resultset rec = stmt[count] .executeQuery("SELECT CveURL, URL FROM TableURL WHERE URL = I + strurl. replace ( I u , I ) .replace( I I ,1 ! ) 111) ; while (rec.next ( ) ) { urlskeys [count] .addElement Long(rec.getLong(vlCveURLtl) (new ) ) ; I 1 } catch (SQLException excep) { System.out.println("SQLException - - 3 - - in savewords at query!! "+excep); Ahora se crea latabla de relaciones entre los tokens encontrados y los URLs: for(int i pos = = O ; i < 26; i++) { (int)(i/divisor); for (Enumeration e = getWords(i).elements(); e.hasMoreElements0 ; ) { wordInURL word = (wordInURL)e.nextElement(); long CveToken=O; try { Resultset rec = stmt[p~s].executeQuery(~'SELECT CveToken, Token FROM TableToken WHEREToken= I "+word.getword ( .replace( I I I , I .I ) .replace( I I ' , I ! ) + " ) ; rec.next ( ) ; CveToken = rec.getLong ( "CveToken") ; } catch (SQLException sqlq) { System.out.println("Word: "+word.getWordO+" Exception - - 4 - - in query! "+sqlq); } I' Vector Weights = word.getScore0; for (int j = O ; j < Weights.size0; j++) { if (Weights .elementAt (j) !=null){ 104 MANUAL TGCNICO stmt[pos] .executeUpdate("INSERT INTO TableRelacion (CveURL,CveToken,Weight)VALUES (Weights.elementAt(j))+"); ' I ) ("+(Long)(urlskeys[pos] .elementAt(j))+","+CveToken+","+(Integer) El método saveUrls guarda los URL's encontrados de los documentos analizados en la base de datos: public void saveUrls(Fi1e dir, String name) throws IOException { Enumeration enumUr1, enumTitle; Enumeration enumcontents; string sql; enumurl = urls.elements0; enumTitle = titles.elements0; enumcontents = contents.elements0 stmt [count] . executeupdate ; (sql) ; 1 } catch (SQLException e) { System.out.println("SQLException in saveURLS!1 "+e); El método IegalWordO verifica si la palabra es legal, es decir, si ésta comienza con una letra private boolean legalWord(String word){ if (Character.isLowerCase(word.charAt( O ) ) ) { return true; 1 else return false; 1 105 DISENO E IMPLEMENTACIONDE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB El método clearAllVectors0 borra todos los vectores y tablas hash donde se guarda l a información de los documentos analizados: public void clearAllVectors0 for(int i = O ; i<26; i++) urls.removeA11Elementso; contents.removeA11Elements titles.removeAllElements0 urlsIndex=O; Clase textTag: java.lang.0bject I +-------textTag Public class textTag Extends Object Código: *; import java .ut .il import java.io.*; La clase textTag es la clase utilizada para representar una palabra en un documento html con su tag. class textTag { / / valores que se utilizan para identificar los tags de las palabras static static static static static static static static static static / / se static static public public public 106 final final final final final final final final final final int UNDEF= -1; int TITLE= 10; int PLAIN= 1; intBOLD = 1; int ITALICS= 1; intH1 = 6; int H2 = 5; intH3 = 4 ; intH4 = 3; intH5 = 2 ; definen constantes que representan el tipo de tag final int TEXT-TAG= 1; final int LINK-TAG= 2; int tag; int type; String content; MANUAL TECNICO Constructores que inicializan una instancia de la clase textTag: El primero inicializa una instancia de la clase textTag con los valores predeterminados, y el segundo recibe los parámetros con los que se va a inicializar. public textTag0 { tag = PLAIN; type = TEXT-TAG; content = new StringO } ; public textTag (String S , int ta, int ty) { content = new String(s) ; tag = ta; type = ty; 1 El método updatestatus0 actualiza el valor del objeto textTag con el string recibido: public void updateStatus(StringS ) { if(s == null) { inicializan type = TEXT-TAG; return; /cadena / cadena la una si esvacía se / / todos los status 1 String stat = new String(s); stat = stat.trim0 ; stat = stat. toLowerCase () ; Si el tag inicia con la letra "a" interpreta el tag como una liga: if (stat.startsWith("a")){ type = LINK-TAG; return; 1 Si el tag inicia con "title" quiere decir que se trata del título del documento: if (stat.startsWith("tit1e") { tag = TITLE; type = TEXT-TAG; return; 1 switch(i) { case(1): tag = H1; break; case ( 2 ) : tag = H2; break; case(3) : 107 DISENO E IMPLEMENTACldN DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB tag = H3 ; break case ( 4 ) : tag = H4 ; break case ( 5 ) : tag = H5 ; break; 1 type = TEXT-TAG; return; 1 / / se trata deun tag de texto tag = PLAIN; type = TEXT-TAG; 1 El método buildLink0 Extrae el nombre del documento de la liga y lo guarda en la propiedad content de la clase: public void buildLink(String1) { StringTokenizer st; String link= new StringO ; try I st = new StringTokenizer(1, 'I = I J , false) ; while(st.hasMoreTokens0) { if (st. nextToken ( ) . equalsIgnoreCase ( "href( I { link = st .nextTokenO ; if (link.startsWith("\"") 1 / / remueve las ' I " link = link.substring(1, link.length0 -1); content = link; return; 1 1 1 catch(NoSuchE1ementException e) { content = null; return; 1 catch (Exception e) { error("Error el construir la liga al documento", e) ; 1 content return; = null; El método error0 despliega mensajes de error: private void error(StringS , Exception e) { System.err.println(s+e.getMessage()); 1 } 108 MANUAL TECNICO Clase wordInUrl: java.lang.0bject I +-----wordInUr1 Public class wordInUrl Extends Object Código: La clase wordInUrl almacena todas las palabras con su valor de coincidencias (peso) y su URL: class wordInURL { private Vector score; private String word; El constructor de wordInUrlinicializa la instancia con el valor del string recibido y un vector de pesos nuevos: public wordInURL (String st) { word = new String(st) ; score = new Vector0 ; El método setURLO Asigna un valor de coincidencias (peso del token en el documento) a un URL existente: public void setURL(int value,int index) { Integer I; / / se verifica si ya existe ese valor if (score.size() < = index) { //si no existe el índice se crea en la tabla y se guarda el valor I = new Integer(value1; score. setsize (index) ; score.insertElementAt(1, index); 1 else { / / si existe el índice en la tabla se suma el valor al valor / / ya almacenado ; I = (Integer) (score. elementAt (index) I = new Integer ( I .intvalue ( ) + value) ; score. setElementAt (I, index) ; 1 } El método tostring regresa en un string la lista de valores de coincidencias de toda la tabla: public String tostring 0 { String buf = new String0 ; for(int i = O ; i<score.sizeO; i++) { Integer val= (Integer) score.elementAt (i); if (val ! = null) 109 DISEÑO E IMPLEMENTACI6N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADORDE WEB return buf; } El método getword0 regresa la palabra contenida en la instancia de esta clase: public String getWord0 { return word; 1 El método getscore0 regresa el número de coincidencias de esa palabra en forma de vector: public Vector return score; getscore O { 1 Clase MvProDerties: java . lang .Object I +-----java.util.Dictionary I +------java.util.Hashtable I +------java.util.Properties I +------Myproperties Public class Myproperties Extends Properties Código: La clase Myproperties es utilizada para contener uno de los tokens encontrados y para guardarlo en la base de datos: class Myproperties extends Properties { public MyPropertieso { super ( ) ; 1 El método save0 guarda las propiedades a la base de datos en la tabla TableToken:. public synchronized void save(Statementstrnt) { for (Enumeration e = keys(); e.hasMoreElements0 ; ) 110 { MANUAL TECNICO String try key= (String)e.nextElement ( ) ; I stmt . executeupdate ("INSERT INTO TABLETOKEN } catch (SQLException excep){ System.out .println("SQLException! ! ''+excep) ; (token) VALUES ( I' + key +Ir ' ) 'I) ; 1 Código fuente delServidor de Solicitudes A continuación se explica el código del Servidor de Solicitudes.El código del Servidor de Solicitudes consta de 4 clases: Server.class, SearchServer.class, SearchServerThread.classy DataBase.class. A continuación se explica en detalle cada una de las clases: Clase DataBase: java.lang.Object I +-----DataBase Public class DataBase Extends Object Código: import java.util.*; import java.sql.*; import java.io.*; La clase DataBase se encarga de hacer la conexión con las particiones de la base de datos, crea a partir de la solicitud recibida una instrucción SQL para realizar la búsqueda y manda ejecutar la consulta a las particiones de la base de datos. Además recibe los resultados y los guarda en un objeto de tipo ResulSet para que posteriormente sea regresado a la clase que lo llame. class DataBase { Connection con; ResultSet results = null; Statement stmt [I ; private static int ASCII-A= 97; private static String PARTITIONS-FILE = "partitions.dat"; private int partitionsNumber; private Vector keysvector; private Vector opervector; 111 DISEÑO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB El constructor de DataBaserecibe como argumentos lo siguiente: 0 0 El prefijo del nombre del recurso de base de datos al que se va a conectar. El vector de palabras que van a buscarse en la base de datos. La instancia de la ventana del servidor para poder desplegar mensajes en la ventana de salida. El constructor de DataBase hace la conexión con la base de datos y busca en ella (en sus particiones) la ó las palabras solicitadas por el cliente. Construye la sentencia SQL adecuada para realizar la búsqueda dependiendo de las palabras que desea encontrar y del orden enque los operadores lógicos aparecen enla solicitud de búsqueda. public DataBase (String db, Vector wordsvector, Serverframe) { int lettercode, pos; int divisor; String tmp, word, sql; Server sFrame = frame; keysvector = new Vector(); opervector = new Vector(); partitionsNumber = 1; En este ciclo se dividen y se depuran las palabras clave de la solicitud y los operadores lógicos en dos vectores diferentes. boolean prevToken= false; Enumeration e = wordsVector.elements0; while (e.hasMoreElements0) { String token = (String) e.nextElement O; token. toLowerCase ( . trim ( ; if ( ( !token. equals ("and")) && ( !token. equals (''or'') ) ) { if (prevToken) opervector . addElement ( 'landaf ) ; keysVector.addElement(token); prevToken = false; if (e.hasMoreElements ( ) ) { token = (String) e .nextElement( ) ; if ((token.equals("and"))I I (token.equals(Iforlf)) && (e.hasMoreElements0)) operVector.addElement(token); else if ( ( ( !token. equals (''and") ) && ( !token.equals ("orr1) ) ) && (keysVector.size0 > O ) ) { opervector .addElement ( "and") ; keysVector.addElement(token); prevToken = true; 1 1 / / se muestra elcontenido delos vectores de llaves y operadores Enumeration keysEnum = keysVector.elements0; Enumeration operEnum = operVector.elements0; Se abre el archivo partitions.dat para leer el número de particiones en las que se divide la base de datos. try I / / se abre el archivo partitions.dat 112 MANUAL TECNICO DataInputStream partitionsFile= new DataInputStream(new FileInputStream(PARTITIONS_FILE)); if ( (tmp = (String) partitionsNumber = partitionsFile. readLine ( ) ) ! = null) { Integer.parseInt(tmp); 1 else partitionsNumber = 1; sFrame.textOut.append("Númerode particiones = "+String.valueOf(partitionsNumber)+ catch(I0Exception excep) { sFrame.textOut.append("Nose pudo leerel archivo de particiones:'I + excep t l'\n") ; System.exit ( O ) ; 1 Se realiza la conexión a la base de datos por medio del puente JDBC-ODBC. try I Class. forName ( "sun.jdbc. odbc. JdbcOdbcDriver" ) ; 1 catch(C1assNotFoundException el) { sFrame.textOut.append("Error interno. Driver JDBC System.exit(1); no encontrado!! \n"); 1 Se crea el arreglo de lasbases de datos que se encuentran disponibles para su consulta posterior stmt = new Statement[partitionsNumberl; sFrame.textOut.append("Conectándosea las particiones lde a base boolean mirror = false; for (int count=l; count c = partitionsNumber; { String url="jdbc:odbc:db"; String num= String.valueOf (count) ; url+=num.trimO ; de datos . . . \ n"); if (mirror) url = url+"s"; sFrame. textout .append ("Abriendo base de 'db" datos + url + It . . . \n"); try I con = DriverManager.getconnection (url , I' ' I , I"' ) ; stmt [count-11 = con. createstatement () ; mirror = false; count++ : } catch (SQLException e2) { if (mirror) { sFrame.textOut.append("Error de conexión a las bases de datos!\n"); sFrame.textOut.append("No se pudo realizar una conexión viable la con base de datos : + url +"\n"); return; 'I } else { sFrame.textOut.append("Error al intentar conectarsea la base dedatostt + url + "\n"); sFrame.textOut.append("Se procede réplica . . . \n") a conectarse a la base de datos ; mirror = true; 113 DISENO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDOPARA UN BUSCADOR DE WEB Se calcula el número de letras que contiene cada partición para que posteriormente se calcule la ubicación de cada palabra de la solicitud dentro de las particiones de la base de datos. if (26 % partitionsNumber > O ) +l; divisor = (int) (26/partitionsNumber) else divisor = (int) (26/partitionsNumber) ; En caso de que el vector de palabras de la solicitud sólo tengauna palabra, entonces se hace la búsqueda directamente en la partición de la base de datos en que se encuentra la palabra. if (keysvector.size0 == 1) { word = (String) keysVector.elementAt ( O ); plural = word.trim() + "es"; lettercode try pos I = = (word.toLowerCase0 .charAt( O ) - ASCII-A) + 1; (int)(letterCode/divisor); sql = "SELECT TableRelacion.Weight, TableToken.Token,"+ TableURL.URL, TableURL.Title, TableURL.Contenido FROM (TableToken + "INNER JOIN TableRelacion ON TableToken.CveToken = TableRelacion.CveToken)I' + = TableURL.CveURL WHERE + INNER JOIN TableURL ON TableRelacion.CveURL ( (TableToken. Token = 'I + word. trim() + It ) OR (TableToken.Token = I' + plural I' It + l l ' ) ) " ; Se ejecuta el query contruido y se guardan los resultados en una instancia de la clase ResulSet para que posteriormente sean devueltos los resultados e interpretados: results = stmt [pos] . executeQuery (sql); } catch (SQLException e3) { sFrame.textOut.append("Excepci6n SQLException al ejecutar la solicitud: \nit ) + e3 + ; } catch (Exception e4) { sFrame.textOut.append("Excepci6n general ejecutando la solicitud:'I + e4 + En el caso de que la solicitud de búsqueda contenga más de una palabra, entonces se construye una sentencia SQL compuesta que depende de las palabras en la solicitud y de su ubicación en las particiones de la base de datos. else { keysEnum = keysVector.elements0; int i=1; Este ciclo crea un conjunto de consultas temporales que tienen los resultados de cada palabra en la solicitud: while(keysEnum.hasMoreElements0) { word = (String) keysEnum. nextElement () ; plural = word.trim0 + tres11 ; 114 MANUAL TECNICO lettercode ASCII-A) + = (word.toLowerCase0.charAt(O) - 1; Se calcula la partición en la que se realizar la búsqueda de la palabra: pos = (int)(letterCode/divisor)+l; strPos= String.valueOf(pos).trim(); String Se crea la sentencia de SQL para buscar en la base de datos: try { sql = "DROP TABLE TEST"+String.valueOf (i). trim0 ; stmt [ O ] .executeUpdate(sql); } catch (SQLException e3) { sFrame.textOut.append("OOPS!: Esa tabla no existe!\n"); 1 Se crea la sentencia de SQL para buscar en la base de datos una palabra de la solicitud del cliente: try I sql = "CREATE VIEW TEST"+String.valueOf (i++)+"AS " ; sql + = "SELECT VTableRelacion"+strPos+".Weight, VTableToken"+strPos+" .Token, + VTableURL"+strPos+" .URL, VTableURL" +strPos+" .Title, VTableURL"+strPos+" .Contenido FROM (VTableToken"+strPos+" + .CveToken = "INNER JOINVTableRelacion"+strPos+"ON VTableToken"+strPos+" VTableRelacion"+strPos+". CveToken) I' + INNER JOIN VTableURL"+strPos+" ON VTableRelacion"+strPos+".CveURL = VTableURL"+strPos+".CveURL WHERE'I + ( (VTableToken"+strPos+" .Token It + word. trim()+ I ) OR (VTableToken"+strPos+" .Token = I " + plural + I ) ) ' I ; I' 'I It It = I 'I Se ejecuta el query construido: stmt [O] .executeUpdate(sql); } catch (SQLException e3) { sFrame.textOut.append("Excepci6n SQLException ejecutando la solicitud: 'I + e3 } catch (Exception e4) { sFrame.textOut.append("Excepci6n general ejecutando la solicitud:'I + e4 + Ahora que las consultas temporales almacenan los resultados de las búsquedas de cada una de las palabras de la solicitud, se procede a construir la sentencia SQL que devuelva correctamente losresultados dependiendo de los operadores lógicos utilizados: operEnum = operVector.elements0; String lastOper, actualOper=tlll; pos = 1; int numOfKeys = keysVector.size0; ; sql = String sqll = '"', sq12 = " " , sq13 = ' I " ; while(operEnum.hasMoreElements0) { lastOper = actualoper; actualOper = (String) operEnurn.nextElement0; if (actualOper.equals("and")){ if (lastOper.equals("")) { '"1 115 DISENO E IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDOPARA UN BUSCADOR DE WEB sqll = "SELECT TEST"+String.valueOf (pos) .trim0 + I 1 .URL, TEST"+String.valueOf (pos) .trim()+".Title,TESTIt+String.valueOf (pos).trim()+".Contenido,I ! ; sq12 = [TEST'I+String.valueOf (pos).trim0 +"I ! [Weight]+ [TEST"+String.valueOf(pos+l).trim()+"I ! [Weigh tl 1'; sq13 = "TEST"+String.valueof(pos).trim( ) + " INNER JOIN = TEST"+String.valueOf (pos+l) .trim()+'' ON TEST"+String.valueOf .trim()+".URL (pos) TEST"+String.valueOf (pos+l) .trimo+".URL"; pos++; } else if (lastOper.equals("or")){ sq12 += [TEST"+String.valueOf (pos) .trimO+"]! [Weight]I f ; sq13 += 'I INNER JOIN TEST"+String.valueOf (pos). trim0 +'I ON TEST"+String.valueOf(pos-1) .trim()+".URL = TEST"+String.valueOf(pos) .trirn()+lt.URL1r; } else { sq12 += [TEST"+String.valueOf(pos). trim()+ll]! [Weight]I t ; sq13 = (1g+sq13+'1) INNER JOIN TEST"+String.valueOf (pos) .trim()+"ON TEST"+String.valueOf (pos-1) .trim()+".URL = TEST"+String.valueOf (pos) .trim()+lg.URLtt; If+ It 1 pos++; } else if (actualoper. equals ( lrorll ) { if (!lastOper.equals("")) { sql=sqll+sql2+"AS Weight FROM "+sq13 ; sql += " UNION ; sqll = "SELECT TESTTg+String.va1ueOf (pos) .trim() + " .URL, TEST"+String.valueOf (pos) .trim()+".Title,TEST'I+String.valueOf (pos) .trim()+".Contenido,' I ; sq12 = "[TEST"+String.valueOf (pos) .trim()+"]! [Weight] sq13 = lqTEST1t+String.valueOf (pos) .trim() ; I' 'I; } else { if ( ! operEnum. hasMoreElements () ) { sqll = "SELECT TESTI'+String.valueOf (pos) . trim0 + " .URL, TESTIl+String.valueOf(pos).trim()+".Title,TEST"+String.valueOf (pos) .trim()+".Contenido," ; sq12 = [TEST"+String.valueOf (pos) .trim()+"]! [Weight]" ; sq13 = flTEST1t+String.valueOf (pos) .trim() ; sql=sqll+sql2+"AS Weight FROM "+sq13 ; sqll = "SELECT TEST"+String.valueOf (pos+l).trim()+ ' I .URL, TEST"+String.valueOf(pos+l) .trim()+".Title, TEST"+String.valueOf (pos+l) .trim()+".Contenido, I1 . sq12 = 'I [TEST'I+String.valueOf (pos+l). trim()+"]! [Weight]' I ; sq13 = "TEST"+String.valueOf (pos+l) . trim0 ; sql += 'I UNION " ; } else { sqll = IISELECT TEST"+String.valueOf (pos) . trim0 + I ' .URL, TEST"+String.valueOf (pos) .trim() + " .Title, TEST"+String.valueOf (pos) .trim() +I' .Contenido, " ; sq12 = I f [TEST"+String.valueOf (pos) .trim()+"]! [Weight]' I ; sq13 = "TESTrl+String.valueOf (pos) .trim() ; sql=sqll+sql2+"AS Weight FROM "+sq13+" UNION " ; 1 1 pos++; 1 1 sql+=sqll+sql2+"AS Weight FROM "+sq13; sFrame.textOut.append("La cláusula SQL parala solicitud es: \n" + s q l ) ; try { Se ejecuta el query sobre las consultas temporales y se guarda el' resultado en una instancia de la clase ResultSet para que posteriormente sea devuelto a la clase que lo solicite: 116 MANUAL TECNICO } catch (SQLException excep3){ sFrame. textout. append("Excepci6n SQLException JOIN:en I' + excep3 + "\nit) ; 1 El método getResults0 devuelve en el objeto ResultSet con los resultados de la solicitud del cliente: public Resultset getResults0 { return(resu1ts); 1 Clase Searchserver: java.lang.0bject I +-----java.lang.Thread I +-------Searchserver Public class Searchserver Extends Thread Código: import import import import java.io.*; java.net.*; java.util.*; java.sql.*; La clase Searchserver es la clase que actúa como Servidor de búsqueda que atiende las solicitudes de los clientes por medio del Agente Distribuidor de Solicitudes. Espera conexiones, produce hilos de ejecución para manejar las conexiones. class Searchserver extends Thread{ private final static int default-port= 7676; Se especifica el prefijo del url de la base de datos a la que se va a conectar para realizar las búsquedas: private final static String url-db = new String ('Ijdbc:odbc:db'l); public Serversocket sSocket= null; = null; privateServersFrame public Searchserver (Server frame) { sFrame = frame; start O ; 117 DISEÑO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WE0 EL método run0 funciona como un manejador principal, crea un socket, escucha por éI y produce un hilo de ejecución por cada conexión que se realiaze. Si el puerto no se especifica el servidor usar el puerto 7676. public void run0 { Se crea el socket del servidor: ssocket = new ServerSocket(p0rt) ; while (true) { Se hace la conexión con el socket cliente (en este caso el cliente es el Agente Distribuidor de Solicitudes) y se crea un hilo de ejecución para despachar la solicitud: Socket client = sSocket.accept0; .start(); new SearchServerThread(client, ++client-num, url-db, sFrame) 1 } catch (IOException e) { / / no se pudo abrir el socket cliente sFrame. textout. append ("Error: excepcion de E/S: I' + e +tt\nll) ; El método stopserver0 debe ser llamado antes de detener a SearchServerThreadmanulmente (ver Server.class). public void stopserver0 { try { sSocket .close () ; } catch (IOException e) { } Clase SearchServerThread: java.lang.0bject I +-----java.lang.Thread I +---""SearchServerThread Public class SearchServerThread Extends Thread 118 MANUAL TPCNICO Código: import import import import java.io.*; java.net.*; java.util.*; java . sql . * ; La clase SearchServerThread es un hilo de ejecución que maneja la conexión del servidor de búsqueda con el cliente, lee la ó las palabras que el cliente solicita (proveniente de el Agente Distribuidor de Solicitudes), y realiza la búsqueda de las palabras a la base de datos. Envía los resultados al cliente en el formato solicitado. class SearchServerThread extends Thread { private Socket client; private String url-datab; private my-id; int private Vector wordsvector; private Server sFrame= null; / / socket cliente del / / base de datos de / / identificador hilo de URLs de ejecución El constructor de SearchServerThreadrecibe como argumentos: o El parámetro S es el socket de conexión con el cliente. o El parámetro id es el identifícador del hilo de ejecución. 0 El parámetro url-db es el URL de la base de datos. public SearchServerThread (Socket client = S ; my id = id; ur¡-datab = url-db; sFrame = frame; S, int id, String url-db, Server frame){ 1 En el método run0 comienza el hilo de ejecución: recibe la solicitud del cliente, busca en la base de datos y envía los resultados ya sea en el formato corto o en el formato largo: public void r u n 0 { DataInputStream is = null; Printstream os = null; String line,word; / / flujo de entrada / / flujo salida de try { //flujo de salida del socket cliente os = new PrintStream(client.getOutputStream0); / / o s = new PrintStream(newFileOutputStream("datos.dat")); //flujo de entrada del socket cliente is = new DataInputStream(client.getInputStream()); / / guarda el f l u j o de entrada line = is.readLine ( ) ; / / y analiza su contenido / / S y s t e m . o u t . p r i n t l n ( " R e q u e s t to search: "+line); if ((line == null) 1 I (line.equals(""))){ / / verifica contenido os .print111 ("l\tError de protocolo\t ; os.println("0"); / / fin lista de os.close ( ) ; / / se cierra el flujo de salida / / se cierra el flujo de entrada is. close ( ) ; return; } 'I) 119 DISEÑO E IMPLEMENTAC16N DEUN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB Se guarda el string que contiene la solicitud proveniente del cliente eliminando la petición de formato corto o largo (ler. carácter). word = line.substring(1); wordsVector = getWordsVector(word); / / si no se encuentra la petición del formato o... if (((line.charAt(0) ! = ' S ' ) && (line.charAt(0) ! = Ill)) II //si no hay que buscar ... (word == null) I 1 (word.equals(llfl) ) ) { os .println("l\tError de protocolo \t ' I ) ; os.println("0"); / / lista de fin os.close ( ) ; / / se cierra el flujo de salida is. close ( ) ; / / se cierra el flujo de entrada return; 1 Se crea una instancia de la clase DataBase con los datos requeridos para realizar la búsqueda en la base de datos: DataBase db = new DataBase(ur1-datab, wordsVector, plural, sFrame); sFrame.textOut.append("E1 objeto DataBase con los resultados se ha creado . . . \ n"); Se obtienen los resultados de la búsqueda realizada por la instancia de la clase DataBase: ResultSet results = db.getResults0; try { if ( !results .next ()) { / / si no hay resultados. . . os.println("l\tPalabra no encontrada\t ! I ) ; o~.println("0~~) ; / / fin de lista os.close ( 1 ; / / secierra el flujo desalida is.close ( ) ; / / se cierra el flujodeentrada return; 1 Se envían los resultados al cliente (por medio del socket) en el formato que se solicitó (corto o largo): switch (line.charAt(0)) { results / / corto o largo / / envía al socket los resultados en el formato corto case ' S I : { do I o s . p r i n t l n ( r e s u l t s . g e t S t r i n g ( " W e i g h t " ) + "\t" + .getstring ("URL") + "\t1I+ results.getString("Title") + '!\tTg) ; } while(resu1ts.next0 ) ; os .println("O"); } / / fin case ' S ' break ; / / envía al socketlos resultados en el formato largo case '11 : { do I ~s.println(results.getString(~~Weight") + "\t" + results .getstring ("URL") + I1\tt1 + resu1ts.getString(llTitle") + "\t" + results.getString("Contenido")); } while(results.next0); os.println("0"); 120 MANUAL TECNICO } //fin case ' 1 ' break; / / en otro caso... default: //se esperaba ' S ' o ' 1 ' os.println ("l\tError de protocolo \t } //fin switch } catch (SQLException e) { sFrame. textout. append("Error de excepción #2 : + e + "\n'I); } catch (Exception e) { sFrame. textout .append ( "Excepción general : + e + "\n"); } } catch (IOException e) { sFrame.textOut.append("Error:Excepción de E/S en el hilo de ejecución'I + my-id + " : + e +"\n"); return; ' I ) ; 'I 'I I' 1 try I client.close ( ) ; } catch (IOException e) { } El método getWordsVector0 se encarga de interpretar el string de la solicitud proveniente del cliente y regresa un vector que contiene cada una de las palabras contenidas: private Vector getWordsVector(String line) { Vector wordsvector= new StringTokenizer st = new Vector(); StringTokenizer(line, , ; ( ) & I I' 'I) ; while (st.hasMoreElements ( ) ) { wordsVector.addElement(st.nextToken0) ; 1 return wordsvector; Clase Server: Java.lang.Object I +----java.awt.Component I +----java.awt.Container I +- - - java .awt . Window I + - - - - java .awt . Frame I +-----Server 121 DISENO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDO PARA UNBUSCADOR DE WEB Public class Server Extends Frame Runnable Código: import java . awt . * ; import java.awt.event.*; La clase Server muestra la interface gráfica que se despliega y muestra datos importantes en la pantalla, así como los mensajes de ejecución que se producen: public class Server extends Frame { El constructor de Server inicializa la forma (ventana gráfica): public Server0 { initcomponents 0 pack 0 ; ; 1 En metodo initcomponents0es componentes: llamado desde el constructor para inicializar la ventana gráfica y sus private void initcomponents 0 { setTitle (IIServidor de solicitudes"); setResizable (false); setBackground (new Color (157, 185, 200)); setFont (new Font ("Dialog", O , 12)) ; setName ( tlserverFramel' ; addWindowListener (new WindowAdapter 0 { public void windowClosing (WindowEvent evt){ exit Form ( evt ) ; 1 1 ); setLayout (new com.netbeans.developer.awt.Abso1uteLayout 0 ) ; panell = new Panel 0 ; panell.setLayout (new com.netbeans.developer.awt.Abso1uteLayout 0 ) ; labell = new Label 0 ; labell. setText("Servidor de solicitudes") ; labell. setFont(new Font ("Serif' I , 3 , 24) ; panell.add (labell, new com.netbeans.developer.awt.Abso1uteConstraints( O , 10, -1, 1)) ; label2 = new java.awt .Label (1 ; label2. setText ( IIDireccion IPactual : '' ) ; panell.add (label2, newcom.netbeans.developer.awt.Abso1uteConstraints ( O , 70, 110, 20)) ; textIPAddr = new TextField 0; textIPAddr.setName ("textIPAddr") ; textIPAddr.setEditable(fa1se); textIPAddr.setBackground(Co1or.white); 122 MANUAL TECNICO panell.add (textIPAddr, new com.netbeans.developer.awt.AbsoluteConstraints(110, 70, 140, 2 0 ) ) ; label4 = new java. awt .Label ( ) ; label4.setText ("Numero de solicitudes atendidas:"); panell.add (label4, new com.netbeans.developer.awt.Abso1uteConstraints (O, 100, 190, 20)) ; textNumQuerys = new java.awt.TextField0 ; textNumQuerys. setName ("textNumQuerys") ; textNumQuerys.setEditable(fa1se) ; textNumQuerys.setBackground(Co1or.white); panell.add (textNumQuerys, newcom.netbeans.developer.awt.Abso1uteConstraints (190, 100, 60, 20)); textout = new java.awt.TextArea 0; textout .setName ("textOut"); textOut.setEditable(fa1se); textOut.setBackground(Co1or.white); panell.add (textout, new com.netbeans.developer.awt.Abso1uteConstraints ( O , 150, 430, 170)); buttonstart = new java.awt.Button 0 ; buttonstart. setLabel ("Iniciar Servidor"); buttonStart.setBackground (new java.awt.Color (157, 185, 200)); buttonStart.setFont (new java.awt.Font ("Dialog",1, 12)); buttonstart. setName ('IbuttonStart"); panell.add (buttonstart, newcom.netbeans.developer.awt.Abso1uteConstraints (280, 60, 150, 3 0 ) ) ; buttonstop = new java.awt.Button 0 ; buttonstop. setLabel ("Detener servidor"); buttonStop.setBackground (new java.awt.Color (157, 185, 200)); buttonstop. setFont (new java. awt .Font ( "Dialog", 1, 12 ) ; buttonstop. setName (I1buttonStoplt) ; panell.add (buttonstop, newcom.netbeans.developer.awt.Abso1uteConstraints(280, 100, 150, 30)); () ; label5 = new java.awt .Label label5. setText ( "Ventana de salida : 'I ) ; panell.add (label5, new com.netbeans.developer.awt.AbsoluteConstraints( O , 120, -1, - 1)); add (panell, new com.netbeans.developer.awt.AbsoluteConstraints(30, 20, 460, 350)); El método exitForm0 es llamado cuando el evento que cierra la ventana sucede. Éste método se encarga sólo de terminar la aplicación: private void exitForm(java.awt.event.WindowEvent evt) { System.exit ( O ) ; 1 El método action() se encarga de interceptar algunos eventos que se realizan en la interface gráfica. Éste método se utilizapara llamar los procedimientos necesarios cuando los botones de la ventana son presionados: public synchronized boolean action(java.awt.Event e, Object arg) { if (e.target==buttonStart) { initserver ( ) ; 123 DISEÑO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDOPARA UN BUSCADOR DE WEB buttonStart.setEnabled(fa1se); buttonStop.setEnabled(true) ; return true; 1 if (e.target==buttonStop) { stopserver ( ) ; buttonstart. setEnabled (true) ; buttonStop. setEnabled(fa1se) ; return true; return false; 1 El método initserver0 crea una nueva instancia de la clase Searchserver (thread) y ésta se autoejecuta: private void initserver 0 { serverThread = new SearchServer(this); 1 El método stopserver0 detiene de forma adecuada la ejecución del Servidor de Solicitudes: private void stopServer0 { serverThread.stopSerer0; serverThread. stop () ; serverThread = null; textIPAddr.setText ( ' I f ' ) ; textNumQuerys . setText ( '' I' ) ; textout. setText ( I' It) ; 1 private java.awt.Pane1 panell; private java.awt.Labe1 labell; private java.awt.Labe1 label2; private java.awt.TextField textIPAddr; private java.awt.Labe1 label4; private java.awt.TextField textNumQuerys; public java.awt.TextAreatextout; private java.awt.Button buttonstart; private java.awt.Button buttonStop; private java.awt.Labe1 label5; private Searchserver serverThread = null; El método main0 crea una nueva instancia de la clase Server, la ejecuta y la muestra: public static void main(java.lang.String[l args) { new Server ( ) .show( ) ; Código fuente del Agente Distribuidor de Solicitudes A continuación se explica el código del Agente Distribuidor de Solicitudes. El código del Agente Distribuidor consta de 3 clases: AgentServer.class, AgentServerThread.classy CheckHost.class. A continuación se explica en detalle cada una de las clases: 124 MANUAL TKCNICO Clase Agentserver: Java.lang.Object I +----java.awt.Component I +----java.awt.Container I + - - - java . awt .Window I +----java.awt.Frame I +-----Agentserver Public class Agentserver Extends Frame Runnable Código: import import import import import java.io.*; java.net.*; java.util.*; java.sql.*; java.awt.*; La clase Agentserver actúa como una interfaz entre el applet cliente y el Servidor de Búsqueda, distribuye las solicitudes entre los servidores que atienden según las cargas y revisa periódicamente el estado de los servidores. class Agentserver extends Frame { / / Variables de declaración - do not modify//GEN-BEG1N:variables private java.awt.Pane1 panell; private java.awt.Labe1 labell; private java.awt.Labe1 label2; private java.awt.Labe1 label3; public java.awt.Button buttonstart; public java.awt.Button buttonstop; public java.awt.TextArea textout; private java.awt.Labe1 label4; private java.awt.Labe1 label5; public java.awt.List 1istPrimServ; public java.awt.List 1istSecServ; public java.awt.List listlisteningserv; / / Termina declaraciónde variables//GEN-END:variables / / Puerto por defectode Agentserver final static int default-port= 7777; final static int searchserverport= 7676; 125 DISEÑO E IMPLEMENTACI6N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB / / El objeto CheckHost es un agente que se encarga de verificar / / periódicamente el estado de los servidores primarios y secundarios private CheckHost checkserver private boolean run = false; = null; / / Contructor de la clase Agentserver () { public Agentserver initcomponents ( 1 ; pack 0 ; / / Crea una instancia CheckHost y comienza la ejecución del hilo / / que revisa cuáles servidores de búsqueda están activos. textOut.append("Inicializando el verificador de servidores . . . \ n"); checkserver = new CheckHost(searchServerPort, this) 1 El método initComponents0 se llama por el constructor para inicializar la forma. Es importante no modificar el código de este método ya que contenido de este método se regenera siempre por el editor de la forma. El método inicializa los componentes de la ventana en la que se visualiza el estado de los servidores de búsqueda. private void initcomponents 0 {//GEN-BEG1N:initComponents setTitle ("Agente Distribuidor de solicitudes") ; setResizable (false); setBackground (new java.awt.Co1or (215, 212, 244)); ; setName ("agentFrame") addWindowListener (new java.awt.event.WindowAdapter 0 { public void windowClosing (java.awt.event.WindowEventevt) { exitForm (evt); I 1 ); setLayout (new com.netbeans.developer.awt.Abso1uteLayout( 1 1 ; panell = new java.awt.Pane1 O ; panell.setBackground (new java.awt.Color (215, 212,244)); panel1.setLayout (new com.netbeans.developer.awt.Abso1uteLayout ( ) ) ; labell = new java.awt .Label () ; labell. setText ("Servidores primarios") ; panell.add (labell, new com.netbeans.developer.awt.Abso1uteConstraints(30, 40, -1, 1)); label2 = new java.awt .Label 0; label2. setText ("Servidores secundarios") ; panell.add (label2, new com.netbeans.developer.awt.Abso1uteConstraints (190, 40, - 1 , 1)); label3 = new java.awt.Labe1 O ; label3. setText (l'Servidores atendiendo"); panell.add (label3, new com.netbeans.developer.awt.Abso1uteConstraints(350, 40, -1, 1 ) ) ; buttonstart = new java.awt.Button 0; buttonStart.setForeground (java.awt.Color.white); buttonStart.setLabe1 ("Iniciar distribuidoro1); buttonStart.setBackground (new java.awt.Color (138, 124, 239)); buttonStart.setFont (new java.awt.Font ("Dialog",1, 1 2 ) ) ; buttonstart .setName ("buttonStart") ; panell.add (buttonstart, newcom.netbeans.developer.awt.Abso1uteConstraints(510, 70, 130, 30)); buttonstop = new java.awt.Button 0 ; buttonStop.setForeground (java.awt.Co1or.white); ( "Detener distribuidor" ) ; buttonstop. setLabel buttonStop.setBackground (new java.awt.Color (133, 119, 239)); buttonStop.setFont (new java.awt.Font ('lDialog", 1, 12)) ; buttonstop. setName ( I'buttonStop"); 126 MANUAL T&NICO panell.add (buttonstop, newcom.netbeans.developer.awt.Abso1uteConstraints (510, 110, 130, 30)); textout = new java .awt .TextArea () ; textout .setName ("textOut"); panell.add (textout, newcom.netbeans.developer.awt.Abso1uteConstraints( 3 0 , 190, 6 1 0 , 170)) ; label4 = new java .awt .Label (1 ; label4. setText ("Pantalla de salida") ; panell.add (label4, new com.netbeans.developer.awt.Abso1uteConstraints(30, 170, - 1 , 1)); label5 = new java.awt.Labe1 ( ) ; label5.setText ("Agente Distribuidor de solicitudes") ; label5.setFont (new java.awt.Font ("Serif", 3 , 24)) ; panell.add (label5, new com.netbeans.developer.awt.Abso1uteConstraints(30, O , -1, - 1 ) ) ; 1istPrimServ = new java.awt.List O ; 1istPrimServ.setBackground (java.awt.Color.white); ; 1istPrimServ.setName ("1istPrimServ") panell.add (listPrimServ, newcom.netbeans.developer.awt.AbsoluteConstraints(30, 7 0 , 140, 9 0 ) ) ; listsecserv = new java.awt.List 0; 1istSecServ.setBackground (java.awt.Co1or.white); ; listSecServ. setName ("1istSecServ") panell.add (listSecServ, newcom.netbeans.developer.awt.Abso1uteConstraints(190, 70, 140, 90)); 1istListeningServ = new java.awt.List 0; 1istListeningServ.setBackground (java.awt.Co1or.white); 1istListeningServ.setName ("1istListeningServ"); panell.add (listListeningServ, newcom.netbeans.developer.awt.Abso1uteConstraints(350, 70, 140, 9 0 ) ) ; add (panell, new com.netbeans.developer.awt.Abso1uteConstraints( O , }//GEN-END:initComponents 40, 680, 390)); / * * Sale de la aplicación* / /***********/ private void exitForm(java.awt.event.WindowEventevt) {//GEN-F1RST:event-exitForm System.exit ( O ) ; }//GEN-LAST:event-exitForm En el método startAgent0 es donde comienza la ejecución del Agente Distribuidor. Se puede proporcionar el puerto por el cual se realizarán las conexiones u omitir este parámetro para que se seleccione el valor por omisión indicado por defaultqort. public void startAgent (String [ argv I ) { int port, client-num = O ; if (argv.length > 1) { textout. append ( "Error: Uso : Searchserver System.exit (1); [puerto] \n") ; 1 if (argv.length = = 1) { / / si se escribe sólo un argumento . . . try I //Verifica que sea un puerto válido (un entero). port = Integer .valueof (argv [ O ] ) . intvalue ( 1 ; } catch (NumberFormatException e) { port = defaultgort; / / establece el puerto por defecto. } } else { / /encuentra no si argumento un (puerto) port = defaultgort; / / establece el puerto por defecto. I if (port < O ) port = defaultgort; / / cuando el argumento es negativo / / establece el puerto por defecto. 127 DISEÑO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB textOut.append(lt1nicializando Agente . . . \n"); textout .append ('!esperando puerto\ntt en + port) ; Serversocket agserver=null; try { agserver = new ServerSocket(port); / / crea el socket del servidor while (true) { / / se hace la conexión con el socket cliente Socket client = agserver.accept(); / / comienza el hilo de ejecución quese encargará de atender / / la solicitud del cliente que se acaba de conectar new AgentServerThread(client, ++client-num, checkserver, this).start(); 1 } catch (IOException e) { / / No se pudo abrirel socket cliente ; textout .append( "Error: excepcion de : E/S+ e +11\n91) 1 } / / fin del método startAgent El método main0 (método principal): Crea una instancia de Agentserver y se ejecuta inmediatamente / / Comienza la ejecución public static void main (String argv[l){ new Agentserver ( ) . show ( ) ; 1 } / / fin de la clase Agentserver Clase AeentServerThread: lang .Ob ject j ava. I +-----java.lang.Thread I +-----"AgentServerThread Public class AgentServerThread Extends Thread import import import import import java.io.*; java.net.*; java.util.*; java.sql.*; java.lang.*; AgentServerThread es un hilo deejecuciónquemaneja la conexión entre el cliente y el Servidorde Búsqueda. Recibe los datos del cliente y decide con cual Servidor de Búsqueda debe hacer la conexión y se los envía. A continuación recibe la respuesta del Servidor de Búsqueda y entonces los envía al cliente para ser desplegados (Ver SearchServer.java). El constructor crea una instancia del hilo de ejecución AgentServerThread. El parámetro "S" es el socket para el cliente. El parámetro "id" es el identificador del hilo de ejecución. 128 MANUAL T k N I C O class AgentServerThread extends Thread ( private int searchServerPort= 7676; / / Puerto por defecto del los servidores de biisqueda. private CheckHost checkserver; / / socket del cliente private Socket agclient, client; my-id; private int ejecución / / de identificador hilo de private String line,word; private Agentserver aFrame= null; /**************/ / / Constructor de AgentServerThread public AgentServerThread (Socket S , int id, CheckHost chkServer, Agentserver Frame) { client = S ; my-id = id; checkserver = chkServer; aFrame = Frame; 1 El método run(), comienza el hilo de ejecución: recibe la solicitud del cliente, la transmite alAgente Distribuidor de Solicitudes y devuelve los resultados del Servidor de Búsqueda. Este método obtiene el servidor más adecuado para atender la petición dependiendo del estado en que se encuentre el sistema y después intenta conectarse con el servidor de búsqueda que indica selectedSewer. public void run 0 { DataInputStream cis = null; / / flujo de entrada del cliente printstream cos = null; / / flujo de salida al cliente String selectedserver= " I ' ; try I //flujo de salida del socket cliente COS = new PrintStream(client.getOutputStream0); //flujo de entrada del socket cliente cis = new DataInputStream(client.getInputStream~)); / / Lee la línea de la solicitud y analiza SU contenido line = cis.readLine ( ) ; / / verifica contenido y si hay problemas en la solicitud envía / / un mensaje al cliente ( if ((line = = null) 1 1 (line.equals(tllr))) ; cos.println ("\t \t Error de protocolo") cos.println("0"); /lista / de fin / / se cierra el flujo de salida cos. close ( ) ; / / se cierra el flujo de entrada cis.close ( 1 ; return; 1 } catch (IOException e) ( aFrame. textout. append( + \nl' ) ; return; "Error: hilo de ejecucion " + my-id + " exCepCiÓn deE / S " + e 1 boolean notFinished = true; selectedserver = '"I ; while (notFinished) { / / Se obtiene el servidor más adecuado dependiendo del estado del sistema selectedserver = checkServer.getBestServerAddr(se1ectedServer) ; long initTime = System.currentTimeMillis(); while (selectedServer.equaIs("") && ((System.currentTimeMillis0-initTime)<10000)) selectedserver = checkServer.getBestServerAddr(se1ectedServer); aFrame.textOut.append("The server + selectedserver + 'I has been given. 'I ................................ 129 DISEÑOE IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB if (selectedServer.equaIs("")) { try I c~s.println(~~\t \t Error al intentar conectarse con el servidor, intente más ; tarde. . . I' ) cos.print In ( " O ) ; / / findelmensaje cos.close ( 1 ; / / se cierra el flujo de salida cis .close ( ) ; / / cierra se el flujo de entrada } catch(I0Exception e) { aFrame.textOut.append("Error al cerrar conexión con el cliente!\n"); 1 return; 1 / / Intenta conectarse con el servidor de bdsqueda que indica selectedserver. try { agclient = new Socket(selectedServer, searchserverport); System.out.println("\n'l + "Conexión conel host: + selectedserver + lI\n"); checkServer.incLoadToServer(se1ectedServer); } catch(Exception e) { System.out.println(l1Erroral tratar de conectarse conel servidor de búsqueda " + e +'I\n''); continue ; 'I 1 Printstream sos = null; DataInputStream sis = null; try { sos = new PrintStream(agclient.getOutputStream0 ) ; sis = new DataInputStream(agclient.getInputStream()) ; sos.println(line); while( (line= sis.readLine0 !=null) { aFrame. textout .append("Resultado: " + line +"\n"); cos .print111 (line); checkServer.decLoadToServer(se1ectedServer); notFinished = false; selectedserver ='I 'I ; } catch(I0Exception e) { aFrame. textout .append ("Error al enviar la solicitud checkServer.decLoadToServer(se1ectedServer); continue ; al servidor. . . ' I + e +ll\nll); 1 } / / fin While } / / Termina run } / / fin de la clase Clase CheckHost: 1 java . lang .Ob ject I +-----java.lang.Thread I +-------checkHost 130 MANUAL TECNICO Public class checkHost Extends Thread Código: import import import import java.net.*; java.io.*; java.lang.*; java.util.*; CheckHost obtiene unalista de los servidores de búsqueda (archivo "servers.dat"). Revisa si es posible establecer una conexión con ellos y crea un arreglo que contiene los servidores primarios existentes y en otros los servidores secundarios existentes (de acuerdo a la configuración escrita en los archivos servers.dat y mirrors.dat). También crea un arreglo en el que almacena y actualiza periódicamente las direcciones de los servidores que están disponibles para atender las solicitudes provenientes del cliente. class CheckHost extends Thread { Vector Availservers = new Vector(); Vector AvailMirrors = new Vector(); Hashtable Loads = new HashtableO; Hashtable Servers = new Hashtable(); Vector listservers = new Vector(); Agentserver aFrame = null; int port; // // // // Arreglo de Arreglo de Arreglo de Servidores servidores disponibles servidores secundarios disponibles servidores secundarios disponibles existentes /***************/ public CheckHost(int newport, AgentServer Frame){ port = newport; aFrame = Frame; start ( ) ; 1 El método getBestServerAddr0 devuelve la dirección del servidor más apropiado para atender la solicitud del cliente. El criterio utilizado para la selección se basa principalmente en la carga del servidor, el servidor que tenga menor carga es el elegido, siempre y cuando no sea el que se recibe como argumento. public synchronized StringgetBestServerAddr(String actualserver) { String bestServer=""; int minLoad=64000; Enumeration enumAvailServers= AvailServers.elements0; while (enumAvailServers.hasMoreElements()) { String server= (String) enumAvailServers .nextElement () ; if (server == actualserver) continue; . intValue( ) ; int load= ( (Integer) Loads .get )(server) if (load < minload) { minLoad = load; bestserver = server: 1 return bestserver; 1 El método incLoadToServer0 incrementa la carga en 1 al servidor que se especifica en el argumento de la función. 131 DISEÑO E IMPLEMENTACI6N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB public synchronized void incLoadToServer(String strServerName){ if (Loads.containsKey(strServerName)){ Loads.put(strServerName, new Loads .get (strServerName) ) . intValue ( ) + 1 ) ) ; Integer ( ( (Integer) 1 System.out.println("La cargade "+strServerName+" esde: "+Loads.get (strServerName)) ; 1 El método decLoadToServer0 decrementa la carga en 1 al servidor que se especifica en el argumento de la función. public synchronized void decLoadToServer(String strServerName){ { if (Loads.containsKey(strServerName)) Loads.put(strServerName, new Integer( ((1nteger)Loads.get (strServerName) .intValue() -1)); 1 System.out.println("La carga de "+strServerName+"de: es"+Loads.get (strServerName) ) ; 1 El método run() es en donde comienza la ejecución del hilo. Intenta leer los servidores primarios existentes del archivo y los agrega al vector de servidores existentes. Inicializa el arreglo se servidores disponibles agrega las direcciones de los servidores que atienden a la lista en el Frame. / / Comienza el hilo public void run ( ) { String tmp= I t It ; String strServer = " " ; String strMirror = " " ; / / Intenta leer los servidores primarios existentes del archivo / / y los agrega al vector de servidores existentes. try I FileInputStream S = new FileInputStream(ltservers.datrt) ; FileInputStream s2 = new FileInputStream(r'mirrors.dat"); DataInputStream ds2 = new DataInputStream(s2); DataInputStream ds = new DataInputStream(s); while ( (strserver = ds.readLine ( ) ) !=null) { strMirror = dsZ.readLine0; Servers.put(strServer,strMirror); / / se inicializan las cargas de los servidores ; Loads.put (strServer,new Integer(0)) Loads.put(strMirror,new Integer(0)) ; aFrame.listPrimServ.add(strServer); aFrame.listSecServ.add(strServer); 1 } catch(Exception e) { aFrame.textOut.append("Error al leer el archivo de direcciones de servidores.\nl'); 1 / / Inicializa el arreglo se servidores disponibles del tamaño / / número de servidores existentes. while (true) { listServers.removeAllElements0; AvailServers.removeAllElements(); Enumeration enurnservers = Servers.elements0; while (enumServers.hasMoreElements0) { strServer = (String) enumServers.nextElement (1 ; / / Trata de conectarse con el servidor de búsqueda primario 132 MANUAL Tk2NICO try { Socket S = new Socket (strserver, port) ; / / si está activo agrega el Url AvailServers.addElement(strServer) ; listServers.addElement(strServer+"(prim)"); //System.out.println(" PRIMARIO I' + strServer + I' ACTIVO"); s.close0; } catch(Exception el) { / / si no est activo pone vacío. //Availableservers.addElement ( ) ; System.out.println(" PRIMARIO 'I + strServer + INACTIVO: "+el); } / / Trata de conectarse conel servidor de búsqueda secundario try { strMirror = (String)Servers.get(strserver); Socket S = new Socket (strMirror, port) ; / / Si est activo agrega el Url AvailMirrors.addElement(strMirror) ; //System.out.println(I'Secundario ( I + strMirror + Activo"); s.close ( ) ; 'I 'I 'I } catch(Exception el) { / / Si no está activo pone vacío. //AvailableMirrors[i] = " " ; //System.out.println("Secundario + strMirror 1 + 'I Inactivo: "+el); 1 I / / si un servidor primario está caído ... if (Availservers. size ( ) c Servers. size (1 ) { enurnservers = Servers.keys0; / / en este ciclo se busca el servidor que está caído while(enumServers.hasMoreElements0){ strServer = (String)enumServers.nextElement(); / / se encuentra el servidor caído. . . if ( !AvailServers.contains (strserver) ) { / / se verifica queel mirror del servidor esté levantado strMirror = (String)Servers.get(strServer); if (AvailMirrors.contains(strMirror)) { / / si lo está, se agrega el mirror del servidor para la / / atención de clientes AvailServers.addElement(strMirror); listservers .addElement (strMirror+" (sec) ; I' 1 1 / / se agregan las direcciones de los servidores que atiendena la lista en el Frame aFrame.listListeningServ.clear0; Enumeration enumListServers= listServers.elements0 ; while (enumListServers.hasMoreElements0){ String elem = (String)enumListServers.nextElementO; aFrame.listListeningServ.add(e1em); } }//Termina el run CheckHost. }//Termina la clase CheckHost. 133 DISENO E IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDO PARAUN BUSCADOR DE WEB Código fuente de la Interfaz de Usuario (Cliente) A continuación se explica el código del Cliente. El código del Cliente consta de 5 clases: SearchApplet.class, SearchTemplate.class, ClientRequestEntry.class,Request.class, QuickSort.class y una interfaz Comparable.class. A continuación se explica en detalle cada una de las clases: Clase SearchAmlet: java . lang .Object I +--java.awt.Component I +--java.awt.Container I +--java.awt.Panel I +--java.applet.Applet I +--SearchTemplate I +--SearchApplet Public class SearchApplet Extends SearchTemplate Código: import java.io.*; import java.net.*; import java.util.*; La función de SearchApplet es actuar como una interfaz de usuario. Este applet, crea una instancia deRequest y hace la conexión conel Searchserver (Servidos de búsqueda) para enviar la palabra a buscar y posteriormente despliega las coincidencias que se encontraron paralasolicituddelusuario.También,depuralabúsqueda haciendo un análisis más detallado en el caso de que el usuario decida extender la búsqueda. Recibe como parámetros el “Sitio” y el “Puerto” del Searchserver. public class SearchApplet extends SearchTemplate { / / S i el usuario introduce palabras adicionales para perfeccionar / / la búsqueda, las siguientes son las variables que actúan para / / este caso. private String interestingwords = ““; / / Palabras de ‘Configurar’ = null; / / Palabras de ‘Palabras adicionales’ private String[] addwords / / Hashtable se utiliza para palabras extras = new HashtableO; private Hashtable words / / Constructor vacío public SearchApplet () 134 { 1 MANUAL TECNICO El métod search se extiende del método SearchTemplate.search. Se llama siempre que se presiona el botón "Buscar". Además, se conecta con el Servidor de Búsqueda y le pregunta por la palabra, opcionalmente realiza un análisis extra. El parámetro que recibe es la palabra a buscar. public void search (String what) { / / Checa la legalidad de'what' if (what .equals ( " I 1 ) ) { addLink ( "No-Search-Word-Error. html" , "No ha proporcionado una palabra para buscar", 1.0) ; } else if (what.indexOf(" " ) ! = -1) { addLink ( "Not-One-Word. html" , "Unicamente puede proporcionar una palabra vez", a la 1.0); ) else { / / Convierte 'what' a mayúsculas what = what. toLowerCase (1 ; / / Checa si se debe enviar una solicitud larga o corta if (considerAdditionalWords( ) 1 addwords = additionalwords(); makeHashTable ( ) ; I ! interestingwords .equals (" ") ) { Request r = new Request(what, words,getServerName0, getServerPort0, (SearchTemplate) this) ; 1 } / / Termina void search (String what) El método getServerName determina el nombre del Servidor de Búsqueda con el que se debe contactar y lo regresa. En caso de que no encuentre parámetros, toma el nombre del sito por defecto. private String getServerName () { / / Es en donde se retorna el nombre del servidor String toReturn = " " ; / / Se usa para analizarlos parámetros String hostVal = ll"; / / Obtiene el sitio, o retorna el puerto por defecto hostVal = getPararneter("host"); if (hostVal ! = null) { toReturn = hostVal; ) else { toReturn = getCodeBase0 .getHostO; 1 / / En caso de falla if (toReturn.equals("")) { toReturn = "localhost"; 1 return (toReturn) ; } / / Termina getServerNarne0 El método getserverport determina el número de puerto con el que se debe conectar y lo regresa. En caso de que no encuentre parámetros, toma el número de puerto por defecto. private int getserverport0 { / / Este es el número de puerto que debemos retornar por default int toReturn = 7777; / / Se utiliza para analizar parámetros 135 DISENO E IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDO PARAUN BUSCADOR DE WEB String portVal= ""; / / Obtiene el puerto,si no es el de default portVal = getparameter ("port") ; if (portVal ! = null) { try I toReturn = Integer.parseInt(portVa1); 1 catch (NumberFormatException e) ( System.err.println("Puerto no valido! Se usara el puerto por defecto."); ) 1 ) )// return (toReturn) ; / / Termina getserverport ( ) Termina el SearchApplet.java ClaseSearchTemplate: java.lang.0bject I +----java.awt.Component I +""- java.awt.Container I +"" java.awt.Pane1 I +""java.applet.Applet I +---"SearchTemplate Public class SearchTemplate Extends Applet Implements Runnable Código: import import import import java.awt.*; java.applet.*; java.util.*; java.net.*; SearchTemplate tiene una apariencia de una herramienta de búsqueda. Contiene lossiguientes elementos: 1) Una caja de texto 'keyword' donde se introduce la palabra clave para la búsqueda. 2) Un botón 'Buscar' el cual inicia el motorde la búsqueda. 3) Un área endonde elapplet despliega los url's encontrados. 4) Dos botones, 'Anterior' y 'Siguiente'por medio de loscuales el usuario se muevea través delosurl's retornados por el servidor de búsqueda. public class SearchTemplate extends Applet implements Runnable ( 136 MANUAL TECNICO private private private private private private private private private private private Font font = null; TextField keywordText = null; Button submitButton = null; Button nextButton = null; Button prevButton = null; Panel display = null; Vector links = new Vector(); int firstLink=O; / / Primer liga desplegada en la actual pantalla. int lastlink=-1; / / Indice para la última liga desplegada en la actual pantalla Stack firstLinks=newStack(); Thread engineThread= null; El método init0 inicializa la configuración del applet. public final void init () { GridBagConstraints c = new GridBagConstraintsO; GridBagLayout gridbag= new GridBagLayoutO ; setLayout (gridbag) ; c.fill = GridBagConstraints.HORIZONTAL; c.insets = new Insets(5,5,5,5); c.weightx = 1.0; conf igureButton = new Button ( r'Conf igurar") ; resetButton = new Button("Restab1ecer") ; c.gridwidth = GridBagConstraints.RELATIVE; keywordText = new Text Field ( U ,20) ; gridbag. setconstraints (keywordText, c) ; add(keywordText1 ; c.gridwidth = GridBagConstraints.REMA1NDER; submitButton = new Button("Buscar"); gridbag.setConstraints(submitButton, c); add(submitButton); additionalCheckbox = new CheckboxO; additionalText = new TextField("" ,20) ; c.gridwidth = GridBagConstraints.RELATIVE; prevButton = new Button(rlAnterior") ; gridbag.setConstraints(prevButton, c); add(prevButton); prevButton.disable 0 ; c.gridwidth = GridBagConstraints.REMAINDER; ("Siguiente") ; nextButton = new Button gridbag.setConstraints(nextButton, c); ; add (nextButton) nextButton. disable ( ; c.ipady = 300; c.fill = GridBagConstraints.BOTH; c.gridwidth = GridBagConstraints.REMA1NDER; display = new Panel( ) ; gridbag.setConstraints(display, c) ; add (display) ; } / / Termina init ( ) El método paint0 dibuja el applet cada vez que sea necesario. public void paint(Graphics g) g = display.getGraphics0; g.setColor(Color.red); g.drawRect(O,O,display.size).width-1,display.size( ) .height-1); ( ) .height-3) ; g.drawRect(l,l,display.size ).width-3,display.size drawLinks ( ) ; 1 137 DISEA0 E IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB El método action0 recibe como parámetro el evento provocado por el usuario (presionar un botón del applet o una tecla), lo analiza y manda a ejecutarla acción indicada por el usuario. public synchronized boolean action(Event e, Object arg) ( if (e.id==lOOl) enterpressed ( ) ; if (e.target==submitButton I I ((e.target instanceof TextField)& & e.id==lOOl)) submit ( ) ; return true; 1 if (e.target==nextButton) ( nextLinks ( ) ; return true; 1 if (e.target==prevButton) ( previousLinks ( ) ; return true; 1 return false; 1 { /***********/ public void enterpressed0 1 ( El método mouseDown0 detecta cuandose hace click con el mouse sobre un url (retornado dela búsqueda). public boolean mouseDown(Event e, int x, int y) I Rectangle r= display.bounds(); if (x<r.x I I x>r.x+r.width I I y<r.y I1 y>r.y+r.height) return false; if (links==null I I links.isEmpty0) return true; x-=r. x; y-=r. y; ( O )) .height( ) ; int step= ( (Link) 1inks.elementAt int index = (int) (y/step)+firstLink; if (index+l>links size ( ) ) return true; Link link= (Link) links. elementAt (index) ; jumpToPage (link.ur1) ; System.out.println(link.ur1); return true; . } El método nextLinks0 hace un scroll y despliega los siguientes url’s encontrados en el caso de que en número de url’s retornados sea mayor de los que se pueden desplegar enla ventana. private void nextLinks () { firstLinks.push(new Integer(firstLink)); firstLink=lastLink+l; prevButton.enable(); repaint ( ) ; } El método previousLinks0 hace un scroll y despliega los anteriores url’s encontrados encaso que sea necesario. private void previouslinks0 { if (firstLinks.isEmpty0) return; lastLink=firstLink-1; / / redundante 138 MANUAL T!%NICO firstLink = ( (Integer)firstLinks .pop ( ) if (firstLink==O prevButton. disable () ; nextButton. enable () ; repaint ( ) ; ) . intValUe ( ; 1 El método submit0 pone a correr el hilo de ejecución private void submit 0 { if (engineThread==null 1 I !engineThread.isAliveO) { engineThread=new Thread(this); () ; engineThread. start 1 1 El método run0 pone en marcha el applet con la configuración indicada en init(). public final voidr u n 0 { if (getKeyword() ==null) return; keywordText .disable ( ; additionalText.disable0; additionalCheckbox.disable0; submitButton. disable () ; resetButton. disable () ; configureButton.disable0; nextButton.disable0; prevButton. disable () ; links = new Vector 0; firstLink=O; lastlink=-1; firstLinks=new Stack (1 ; firstLinks.push(new Integer(firstLink)); search(getKeyword0) ; repaint ( ) ; keywordText .enable ( ; additionalText .enable () ; additionalCheckbox.enable0; submitButton. enable () ; resetButton. enable () ; configureButton.enable0; 1 El método getKeyword0 consigue la solicitud que el usuario captura en el campo ‘buscar’. private String getKeyword () { String line = keywordText.getText0; StringTokenizer st = new StringTokenizer(line, ‘I ,;0 & I if (!st.hasMoreElements()) return null; return st .nextToken( ) ; ”) ; 1 El método jumpToPage0 hace la conexión con la página indicada por el url que se selecciono. private void jurnpToPage(String url){ try I URL document = new URL (url); getAppletContext().showDocument(docurnent); 139 DISENOE IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB catch (Exception exc) ( I Cuando el usuario presiona el botón Buscar, se llama al método search(String what), what contiene la palabra clave para la búsqueda. public void search(String what){ ) Elmétodo addLink0 se utiliza para desplegarla lista deligas a losurl’sencontrados, se usaelmétodo y la addLink(String url, String descripción, double score). Los parámetros son: el url, la descripción del url, calificación para la búsqueda. public final void addLink(String ur1,String description,double score) ( links.addElement(new L i n k ( u r l , d e s c r i p t i o n , s c o r e ) ) ; } El método drawLinks0 dibuja en la ventana los url’s retornados por el servidor de búsqueda. private void drawLinks () { Graphics g = display.getGraphics(); g.clearRect(3,3,display.sizeO .width-6,display.size() int x=O; int y=5; int n=links. (size ) ; int i; for (i=firstLink; i<n; i++) { Link link= (Link) links. elementAt; (i) link.draw(g,x,y); y+=link. height () ; if (y>display.size().height-link.height()+lO) ( nextButton.enable0; lastLink=i-1; break; I I if (i>=n) nextButton.disable0; ) .height-6); / / Termina SearchTemplate ........................................................ Link es una subclase que recibe los datos de los resultados (url, descripción y peso) y los junta en una cadena para después desplegarlos en la ventana conel formato quese requiere. class Link { private static final int LEFT-MARGIN = 60; private static final int LINE-SPACE = 20; private static final int MAX-RECTS-NUM = 6; String url; String description; double score; public Link(String ur1,String description, double score) this.url=url; 140 ( MANUAL TECNICO this.description=description; if (score>l.O I I score<O.o) score=0.0; this.score=score; / / Este método concatenala cadena conel formato de salidaa pantalla. public String tostring0 { String S = 'I ("+url+", "+description+l1, Il+score+ll)' I ; return S ; /************/ public int height0 { return 60; 1 /************/ public void draw(Graphicsg, int x, int y) { y+=LINE-SPACE; / / Dibuja el url de la liga. g.setcolor (Color.blue) ; g.drawString(url,x+LEFT_MARGIN,y); / / Dibuja la descripción de la liga. if (description!=null) { g.setColor(Color.black); g.drawString(description,x+LEFT-MARGIN+lO,y+LINE_SPACE); 1 / / Dibuja la calificación dela liga. int rectNum = (int) Math.round(score*MAX-RECTS-NUM); g.setColor(new Color(0,126,66)); for (int i = O ; i<rectNum; i++) g.fillRect(x+LEFT-MARGIN-lO-i*7,y-7,4,4); } 1 / / Termina link Label es una subclase en donde se configura la etiqueta de presentación del applet. class MyLabel extends Label{ public MyLabel (String caption) { super (caption) ; this.setAlignment(Labe1.LEFT); Font font= new Font ( "Helvetica",Font.BOLD,16) ; this.setFont (font); 1 1 TextField es una subclase en donde se configura la caja de texto en donde se capturan las solicitudes. class MyTextField extends TextField { public MyTextField( 1 { Font font = new Font ( ltHelvetica", Font. this.setFont(font); 1 BOLD, 16) ; 1 141 DISENO E IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDO PARAUN BUSCADOR DE WEB Clase ClientRequestEntrv: java.lang.Object I +----Comparable I +----ClientRequestEntry Public class SearchTemplate Implements Comparable import java.io.*; Esta clase representa una línea de respuesta proveniente del servidor. El constructor de la clase, crea un objeto ClientRequestEntry para la línea de respuesta retornada porel servidor. El par metro 'line' corresponde ala línea que el servidor nos manda El par metro '1ongRequest' es lalínea de respuesta para unasolicitud larga. public class ClientRequestEntry implements Comparable ( / / El tamaño de esta entrada Double weight = new Double ( O .O ) ; / / El url de esta entrada String URL , / / El título del url . String title I / / El documento comprimido correspondiente a este url (en de caso una solicitud larga) String doccontext= ""; I,I, . 11 I, /*****************/ ClientRequestEntry (String line, boolean 1ongRequest){ int index = O; int newindex= O ; / / Obtiene el tamafío ; newindex = line. indexof ("\t", index) weight = Double.valueOf(line.substring(index, newindex)); index = newindex + 1; / / Checa si hay error if ( !weight. equals ("O. O")) { / / Obtiene el url newindex = line. indexof ("\t", index) ; URL = line.substring(index, newindex); = newindex + 1; index if ( ! 1ongRequest) { / / Obtiene el título para este url (esta es una respuesta corta) title = line.substring(index); } else { / / Obtiene el título (esta es una respuesta larga) newindex = line. indexof ("\t", index) ; title = line.substring(index, newindex); index = newindex + 1; / / Obtiene el resto de la línea (el contenido HTML comprimido) 142 MANUAL TECNICO doccontext = line.substring (index) ; 1 } } / / Termina ClientRequestEntry (Stringline, boolean long) El método getweight es llamadocuando su antecesor tiene que desplegar los pesos correspondientes a coincidencias encontradas. Retorna el peso para una entrada. public double getWeight(doub1e maxweight){ if (maxweight == O . O) return (weight .doublevalue () ) ; else { weight = new Double (weight.doubleValue() / maxweight); return (weight.doublevalue ( ) ; 1 1 El método getUrl retorna el Url para una entrada. public String getURL 0 ( return (URL); El método getTitle retorna el título para una entrada public String getTitle () ( return (title) ; 1 El método getDocContext retorna el documento HTML enformato comprimido para esta entrada. public String getDocContext0 { return (doccontext) ; 1 El método gt checa si este objeto es mejor que otro objeto. El parámetro 'other' es el otro objeto con el que se compara. Regresa verdadero si este objeto es mejor que otro y falso en otro caso. public final boolean gt (Comparable other) ( return (weight .doublevalue 0 > ( (ClientRequestEntry) } other) .getweight (O.O) ; El método incWeight incrementa el valor del tamaño de la variable por uno. Es llamada cuando esta entrada contiene una palabra interesante para el usuario. public void incWeight 0 { weight = new Double (weight .doublevalue () + 1); 1 J } / / Fin de la clase 143 DISENO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DEWEB Clase Reauest: java.lang.0bject I +----Request Public class Request Extends Object Código: import java.io.*; import java.net.*; import java.util.*; La clase Request, llamada en SearchApplet, maneja las comunicaciones con el servidor. Envía las solicitudes al servidor, interpreta las respuestas y pasa los resultados a su antecesor para desplegarlos (ver SearchApplet y ClientRequest.) El constructor inicializa la comunicación y pasa los resultados a la subfunción. El parámetro searchFor- es la palabra acerca de la cual pregunta del servidor. El parámetro words - es una HashTable de palabras significativas las cuales modifican el tamaño del resultado. El parámetro ServerName- Es el nombre del servidor a contactar. El parámetro serverport - es el puerto a contactar en el servidor. El parámetro myFather - Es el SearchApplet que estacorriendo y donde se pueden desplegar los resultados. public class Request { / / El Applet que hizo la llamada private SearchTemplate father= null; /*************/ public Request (String SearchFor, Hashtable words, String serverName, int ServerPort, Object myFather){ / / Inicializa las variables internas father = (SearchTemplate) myFather; try t / / Abre el socket Socket S = null; try { S = new Socket(serverName, serverport); 1 catch (Exception e) { father.addLink("Error de conexih", "NO es posible la conexión con el servidor: " + e, 1.0); return; ) / / Abre el flujo de 110 Printstream os = new Printstream (s.getOutputStream0); DataInputStream is = new DataInputStream (s.getInputStream0 ); / / Manda la petición if (words ! = null) os.println("1" + searchFor); ) else { os .println("s" + searchFor); 144 MANUAL TECNICO 1 os.flush0; / / Proceso a través del cualel entra el servidor if (words.isEmpty ( ) ) { interpretShortAnswer(is); } else { interpretLongAnswer (is, words) ; 1 / / Desconexión os.close ( ) ; is. close () ; s.close ( ) ; } catch (IOException e) { father.addLink("Errorde conexión", "Se perdió la conexión conel servidor: 'I + e, 1.0); 1 } / / Termina Request El método interpretShortAnswer lee las líneas del servidor y las interpreta como una respuesta corta (esto es cuando no hay palabras adicionales). private void interpretShortAnswer(Data1nputStream is) { / / Una línea obtenida del servidor ClientRequestEntry reply= null; / / La línea que se analizar String line = " ' I ; / / Variables para father.addLink0 Double weight= new Double ( O .O) ; String URL = 'I"; String title = " ' I ; / / Obtiene las líneas del servidor try { line = is.readLine ( 1 ; System.out .println(line) ; / / Hace un loop a través de todas las líneas { while ((line ! = null) && !line.equals(8'O")) reply = new ClientRequestEntry(line, false); / / Despliega el resultado. if (reply.getTitle().equals("") I I reply.getURL().equals("")) { father.addLink ("Error de lecturaNo. l", "Error al leer del } else { if (weight .doublevalue ( ) = = O. O ) { weight = new Double (reply.getWeight (O.O)) ; servidor! " , l. O ) ; father.addLink(reply.getURL0, reply.getTitle0, reply.getWeight(weight.doubleValue0)); 1 line = is. readLine () ; System.out.println(line); } / / termina while } catch (IOException e) { father.addLink ("Error de lecturaNo. 2 " , "Error al leer del servidor! I t , 1 . O) ; 1 } / / termina interpretShortAnswer(Data1nputStream is) El método interpretLongAnswer toma las líneas de respuesta del servidor y las pone dentro del objeto ClientRequestEntry. Luego busca el valor de estos objetos para determinar si contienen cualquiera de las palabras especiales que son interesantes en la búsqueda. private void interp.retLongAnswer(Data1nputStream is, Object hash) { Hashtable words = (Hashtable) hash; 145 DISEÑOE IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB / / La línea que se tiene que analizar String line = " " ; int j = O; / / Variables para addLink double weight = O ; StringURL = ""; String title = ' I " ; / / Las respuestas recibidas del cliente son introducidas en esta pila. Stack replystack= new Stack(); = O; int replyNum / / La actual respuesta del servidor. = null; ClientRequestEntry reply / / Obtiene las líneas del servidor. try I line = is. readLine () ; while ((line ! = null) && ! (line.equals(tlO1t))) { reply = new ClientRequestEntry(line, true); / / Despliega los resultados. if (reply.getTitle0 .equals("") 1 I reply.getURL0 .equals(ll'l)) { father .addLink ("Error de lecturaNo. 3", "Error al leer del servidor!' I , 1 . O ) ; 1 / / Todas las palabras en el documento. String doccontext = reply.getDocContext0; = Io' ; String docword / / Para moverse a través de doccontext int index = O; int newindex = O ; / / Hace un loopa través de las palabras interesantes del usuario. while (newindex ! = -1) { newindex = doccontext.indexof ( (I ' I , index) ; if (newindex == -1) docword = doccontext. substring (index) ; else docword = docContext.substring(index, newindex); index = newindex + 1; docword = docWord.toLowerCase0; && ! docword. equals ( wII) ) { if (words.containsKey (docword) reply. incWeight () ; 1 } / / termina while ; replystack. push (reply) replyNum++; line = is.readLine ( 1 ; } / / termina while / / El arreglo que se Coloca en replies ClientRequestEntry replies[]= new ClientRequestEntry[replyNum] ; for ( j = O ; j c replyNum; j + + ) { try { replies [jI = (ClientRequestEntry) replyStack.pop () ; } catch (EmptyStackException e) { System.err.println ( "Error. A l accesar la pila! ") ; 1 1 / / Ordena los resultadosen replies Quicksort.sort (replies); / / El peso máximode una respuesta. double maxWeight= replies [ O ] .getweight( O . O;) / / Despliega todas las respuestas for ( j = O ; j < replyNum; j++) { reply = replies [ j I ; father.addLink(reply.getURL(), reply.getTitle0, reply.getWeight(maxWeight)); 1 146 MANUAL TECNICO } catch (Exception e) { father.addLink ("Error delectura No. 4", "Error al leer del servidor! M , 1. O) ; 1 } / / Termina interpretLongAnswer(Data1nputStream is, Hashtable words) ) / / Termina Request Clase Quicksort: java.lang.0bject I +----Quicksort Public class Quicksort Extends Object Código: Esta clase implementa Quicksort sobre un arreglo de Comparable (ver Comparab1e.java). class Quicksort { El método sort ordena un arreglo de Comparable. El parámetro a[] es el arreglo a ordenar. public static void sort (Comparable a[]){ quick-sort (a,O,a.length- 1); 1 El método quick-sort ordena un segmento del arreglo. El parámetro a es el arreglo Camparable. El parámetro p es el índice del primer elemento en el segmento. El parámetro r es el índice del último elemento en el segmento (ver #sort, y #partition). protected static void quick-sort (Comparable a[] , int p , int r) ( int q; if ( p a ) { q = partition (a,p,r); ; quick-sort (a,p,q) quick-sort (a, q+l, r) ; 1 1 El método partition particiona el segmento y devuelve el pivote. El parámetro a es el arreglo Comparable. El parámetro p es el índice del primer elemento en el segmento. El parámetro r es el índice del último elemento en el segmento. Regresa el índice para el elemento pivote. (ver #quick-sort). protected static int partition (Comparable a[] , int p , int r) { Comparable x = a[pl ,tmp; int i = p - 1, j = r + 1; while (true) { do { j - - ; } while (x.gt(a[jl)); do { i++; } while (aril .gt (x)); if (i<j) { tmp = a[il ; 147 DISENO E IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB a[i] = a[jl; a[jl = tmp; } else return Cj ) ; Interfaz ComDarable: java.lang.Object I +----Comparable interface Comparable Extends Object Código: Esta interfaz define el tipo de datos Comparable, un Comparable es un objeto que puede ser comparado con otro en orden lineal. interface Comparable { gt checa si elobjeto es demás peso que algún otro objeto El parámetro other es el otro objeto para comparar Regresa verdadero si el objeto es de mayor peso que el otro, falso en otro caso boolean gt (Comparable other) ; eq checa si el objeto es de igual peso que otro El parámetro other es el otro objeto para comparar Regresa verdadero se los objetos son iguales, falso en otro caso boolean eq (Comparableother); 1 148 Glosario API Application Program Interface (Interfaz de Programación de Aplicaciones). Es el método específico establecido por el sistema operativo de una computadora o por otro programa de aplicación por el que un programador que escribe un programa de aplicación puede hacer solicitudes del sistema operativo o de otra operación. Applet Es una pequeña aplicación hecha en el lenguaje de programación Java a la que se accede en un servidor de Internet, se transmiten a través de la red, se instalan automáticamente y se ejecutan in situ como parte de un documento de la red. Esta aplicación tiene acceso limitado a los recursos del cliente por lo que no existe ningún riesgo al ejecutarse. Arpanet Fue desarrollada por la agencia ARPA (Advanced Research Projects Agency, o Agencia de Proyectos Avanzados de Investigación) en 1969 con la idea de conseguir una red de tecnología tal que asegurase que la información siempre llegara a su destino a pesar de que parte de la red estuviera fuera de servicio. Se puede considerar que Arpanet es el padre de Internet. CCITT Comité Consultivo Internacional para la Telefonía y Telegrafia. Es una organización internacional de normalización en temas de telecomunicaciones. A este organismo pertenecen todas las normas de la serie V sobre los módem o todas las de la serie X sobre las redes públicas de comunicación de paquetes. Cliente Es una aplicación de software que permite a un usuario obtener un servicio de un servidor localizado en la red. Un ejemplo pudiera ser un aparato telefónico como el cliente de la red y la compañía telefónica como servidor. DNS Domain Name System (Sistema de Nombre de Dominio). Es la manera en que los nombres de dominio de Internet son localizados y traducidos a direcciones IP. Un nombre de dominio es un identificador significativo y fácil de recordar para una dirección de Internet. Debido a que el mantenimiento de una lista central de correspondencias entre nombre/direcciones IP de dominio sería impráctica, la lista de nombres de dominio y direcciones IP son distribuidas a través de Internet en una jerarquía de autoridad. DoD Department of Defense (Departamento de Defensa de los Estados Unidos). El DoD desarrolló lared Arpanet a través de la agencia Arpa. Finger Es un programa que indica el nombre asociado a una dirección de correo electrónico (e-mail). Puede indicar también si un usuario se ha conectado o no a este sistema o, también, puede decir cuándo he la última vez que éste se conectó al sistema, incluso podrá dar otro tipo de información dependiendo de los datos que se mantengan acerca de un usuario en esa computadora. 149 DISEÑO E IMPLEMENTAC16N DE UN SISTEMA DISTRIBUIDO PARA UNBUSCADOR DE WEB Hipertexto Hipertexto es un método para representar información donde es posible seleccionar algunas palabras de texto que pueden ser “expandidas” en cualquier momento para proporcionar otra información sobre la palabra. Esto significa que estas palabras forman “vínculos” (conocidos como ligas de hipertexto) con otros documentos que pueden ser texto, archivos, imágenes, etc. Un problema bajo este esquema radica en la escasez de herramientas para construir la estructura de vínculos. La mayoría de los documentos en hipertexto actualmente disponibles se construyeron manualmente. Los editores de hipertexto se han vuelto muy comunes; conforme pase el tiempo, aparecerán más documentos en hipertexto y mejores herramientas. HTML HyperText Mark-up Language (Lenguaje de Marcado de HiperTexto). Se trata de un formato especial de archivos sobre el que está basada la estructura de las aplicaciones en la WWW. HTTP HyperText Transfer Protocol (Protocolo de Transferencia de HiperTexto). Es el conjunto de reglas para intercambiar archivos (texto, imágenes, sonido, video, y otros archivos multimedia) en el Web. Se relaciona con el protocolo TCP/IP (el cual es la base para el intercambio de información en Internet). HTTP es un protocolo de aplicación. InterNIC Internet Network Information Center (Centro de Información de la Red de Internet). Es la organización responsable de registrar y mantener los nombres de dominio com, edu, gov, net, y org en la WWW. Si se desea tener un sitio Web para el que se quiera un nombre de dominio propio, se debe registrar dicho nombre de dominio en el InterNIC. (En la actualidad, el registro real lo realiza una compañía llamada Network Solutions, Inc.). IP Las siglas significan Internet Protocol (Protocolo de Internet). IP es el protocolo de nivel de red (inter red) usado en Internet. Mediante el protocolo IP, cualquier paquete de datos puede viajar a través de las distintas redes de Internet hasta llegar a su destino final. IP es la clave de funcionamiento de Internet. ISDN Integrated Services Digital Network (Red Digital de Servicios Integrados). Conjunto de normasde construcción que garantizan a los usuarios y sus aplicaciones el acceso a los servicios digitales de comunicación con independencia de las redes a las que se suscriban, es decir, garantizando una compatibilidad internacional a nivel de la interfaz de conexión. La ISDN ofrece, entre otras cosas, servicios de transporte de información, servicios de valor agregado relacionados con el contenido de la información transportada y su aplicación (correo electrónico y conferencia múltiple, por ejemplo). IS0 Las siglas corresponden a la International Standards Organization, que en español sería la Organización Internacional para la Normalización. Esta organización ha definido los protocolos de comunicaciones conocidos como ISO/OSI,utilizados por las redes públicas de conmutación de paquetes. Módem Es un equipo que se conecta a una computadora para poder transmitir datos por una línea de transmisión. El módem suele ser utilizado en las comunicaciones de datos por línea telefónica. Éste convierte las 150 GLOSARIO señales digitales propias de la computadora en señales analógicas, más aptas para ser transmitidas por una línea telefónica. Newsgroup Los intercambios de noticias de Usenet se llevan a cabo dentro de lo que se llama un grupo de noticias (o Newsgroup). Cada grupo de noticias trata un temaparticular, y contiene toda una relación de artículos que son enviados por sus participantes individuales. NFS Network File System (Sistema de Archivos de Red). Se trata de un protocolo desarrollado por Sun Microsystems para permitir que una computadora pueda acceder a los archivos de otra como si éstos fuesen propios. El protocolo NFS está incorporado dentro del propio sistema operativo, y con é1 se evitan las extrañas sintaxis que a menudo deben utilizar los usuarios para acceder a archivos deotras computadoras dentro de una red. Este protocolo es ampliamente utilizado en Internet. NNTP Network News Transfer Protocol (Protocolo de Transferencia de Noticias de Red). Es el protocolo utilizado para transferir los artículos de Usenet. os1 Open Systems Interconnection (Interconexión de Sistemas Abiertos). Se trata de una serie de protocolos normalizados por la Organización Internacional para la Normalización (ISO). Se piensa que estos protocolos sustituirán un día al protocolo IP. Palabra Clave Palabra que se utiliza para encontrar documentos en los que esté contenida dicha palabra. Protocolo Es un conjunto de normas que indican cómo deben actuar las computadoras para comunicarse unas con otras. Los protocolos definen desde para qué se va a usar cada hilo de un conector, hasta el formato de los mensajes de correo electrónico. RFC Request For Comments (Solicitud Para Comentarios). Es un conjunto de documentos en los cuales los estándares de Internet, los estándares propuestos y, generalmente, las ideas en proceso de aceptación son documentados y publicados. Servidor Se trata de un software instalado en una computadora, llamada remota, que le permite a ésta ofrecer un servicio a otra computadora, llamada local. La computadora local contacta con la computadora remota gracias a otro software llamado cliente. También puede recibir el nombre de servidor la propia computadora donde está instalado el software servidor. SMTP Simple Mail Transfer Protocol (Protocolo de Transferencia de Correo Simple). Es un protocolo de TCP/IP utilizado para enviar y recibir correo electrónico. Sin embargo, debido a sus limitaciones para almacenar mensajes recibidos, éste es usado junto con otros protocolos como POP3 o IMAP,que permiten al usuario 151 DISEÑO E IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDO PARA UN BUSCADOR DE WEB guardar sus mensajes en un servidor de apartado y disponer de ellos periódicamente. En otras palabra, los usuariosutilizan normalmente unprogramaqueutiliza el protocolo SMTP paraenviarcorreos electrónicos y, POP3 o MAP para recibirlos en un servidorlocal. Telnet Es una aplicación que se ejecuta en una computadora local y que utiliza la red Internet para conectarse a una computadora remota que se le indique. Telnet actúa de intermediario entre la computadora local y la remota. De esta manera, elteclado y monitordelacomputadoralocal se conviertenen el teclado y monitor de lacomputadora remota. TCP Transmission Control Protocol, en español, Protocolo de Control deTransmisión. Es uno de los protocolos fundamentales sobre el que estáasentado Internet. Usenet Es una colección de grupos de discusión (llamados Newsgroups) que está disponible para los usuarios de Internet. Sepuede accesar a newsgroupsdeUsenet a travésde cierto software especialllamado newsreader. Veronica Es un servicio muy similar a Archie, que forma parte de Gopher. Del mismomodo que Archie permite al usuario buscar archivos en los servidores FTP anónimo, Veronica permite buscar en todos los servidores de Gopher (archivos, directorios y otros recursos). White Pages Son las listas de usuarios de Internet, a las cuales se puede tener acceso a través de la red. Existen varios tipos de servicios y servidores White Pages que seutilizan para encontrar personas. WHOIS Es un servicio de Internet de las llamadas páginas blancas (o White Pages). Mediante Whois se puede acceder a una base de datos de nombres y direcciones de correo electrónico. x.121 Es un conjunto de estándares desarrollados porelComitéConsultivoInternacionaldeTelefonía y Telegrafia (CCllT) y la Organización para la Estandarización Internacional (ISO, en inglés: International Standards Organization) para un plan internacional de numeraciónpara redes de datos públicos. 152 Referencias [CARJ94] Carballar Falcón, J. A. INTERNET. El mundo en sus manos Segunda edición Ed. Addison-Wesley Iberoamericana, S. A. Madnd, España, 1994 [COUG94] Coulouris, George; Dollimore Jean y Kindberg Tim Distributed Systems, Concepts and Design Second edition Addison-Wesley 1994 [CRUC90] Crumlich, Chstian The ABCs of the Internet Ed. SYBEX 1990 [EMTA92] Emtage, A.y Deutsch P. Archie: AnElectronic Directory Service for The Internet Pp 95-1 13 Usenix Sunset Beach, Calif., 1992 [HAHH94] Hahn, Harley The Internet Complete Reference Second edition Ed. McGraw-Hill Interamericana de España, S.A. España, 1994 [HOWG91] Howard, Gany S. Introduction to Internet Ed. Prima Press. 1991 [INTO881 International Organization for Standardization. Information Processing System - Open Systems Interconnection The Directory. DIS 9594. 153 DISEÑO E IMPLEMENTAC16NDE UN SISTEMA DISTRIBUIDO PARA UN BUSCADORDE WEB Part1 : Overview of Concepts, Models and Service Part2: Models Part3: Abstract Service Definition Part4: Procedures for Distributed Operation Part5: Protocol Specifications Part6: Selected Attribute Types Part7: Selected Object Classes Parts: Authentication Framework Abril, 1988 También publicado como: International Consultative Committee for Telephone and Telegraph. Open Systems Interconnection - The Directory Recommendations X.500, X.501, X.509, X.511, X.518, X.519, X.520, X.521 1988 [KOSM98] Koster, Martin The Web Robot pages httr,://info.webcrawler.com/mac/proiets/robots/robots.html Acceso: febrero de 1998 [LYND93] Lynch, Daniel C. y Rose Marshall T. Internet System-Handbook Ed. Addison-Wesley 1993 [OREA92] O’Reilly & Associates The whole Internet users guide and catalog Second edition Ed. Krol California 1992 [OVRK93] Ovraczka, Katia; Danzig Peter B. y Li Shih-Hao Internet Resource Discovery Services University of Southern California COMPUTER, Vol. 5, NO.9, PP. 8-22 Sep. 1993 [PEW971 Perrochon, Louis A quick tutorial on searching and evaluating Internet resources University of Humbolt IEEE Communication Magazine Junio de 1997 154