Casa abierta al tiempo

Anuncio
.
..
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
Descargar