- Alejandro Klever Clemente C411
- Laura Tamayo Blanco C411
DScraPy (Distributed Scraper in Python) es un sistema de scraping distribuido con un manejo de cache de las url la informacion que busca en la web dado una url.
El proyecto tiene 2 capas principales. La primera es una la capa de usuario que se encarga de atender las demandas del usuario y las segunda es la gestion de la cache de forma descentralizada.
Para la creacion de este sistema hemos usado las bibliotecas:
Pyro5
para gestionar la comunicacion entre los diferentes recursosrequests
para la obtencion del html de la pagina asociada al urltyper
para creacion una cli api que nos permita controlar nuestro sistema y ver informacion de este
Como todo sistema distribuido los nodos la comunicacion entre nodos es fundamental. En DScraPy contamos con 3 tipos de nodos:
-
ClientNode
: Encargados de aceptar las peticiones de los usuarios. Este recibe una lista de url y hace peticiones en demanda al losRouterNodes
en caso de que la informacion de la url no este almacenada en la DHT. -
RouterNode
: Su funcion es simplemente manejar la biblioteca de requests para obtener la info de la url. -
ChordNode
: Los nodos encargados de la gestionar los recursos cacheados asi como la comunicacion entre los diferentes nodos del anillo de chord.
Hemos implementado el Algoritmo y Protocolo de Comunicacion Chords para gestionar la cache del sistema como una tabla de hash decentralizada.
La implementacion realizada utiliza una establilizacionperiodica como medida de tolerancia a fallas, y al almacenarun conjunto de llaves en un nodo tambien se almacenaran en su sucesor para que en el caso de que algun nodo sedesconecte de la red la info almacenanda no se pierda (esta tecnica es extensible al almacenar la info de un node en k sucesores).
Con todo esto en mente podemos darnos cuenta de que sin importar que hayan problemas en los nodos, o estos sean eliminados o agregados la informacion se mantendra consistente.
El algoritmo de hash utilizado es md5
de la biblioteca hashlib
de python.
Para crear e interactuar con un sistema montado con DScraPy hemos creado una cli API que es el archivo main.py
. Al ejecutar python main.py --help
veremos algo como esto:
Usage: main.py [OPTIONS] COMMAND [ARGS]...
Options:
--install-completion [bash|zsh|fish|powershell|pwsh]
Install completion for the specified shell.
--show-completion [bash|zsh|fish|powershell|pwsh]
Show completion for the specified shell, to
copy it or customize the installation.
--help Show this message and exit.
Commands:
create-chord-node
create-client-node
create-router-node
disconnect-chord-node
finger-table
hash-table
start-name-service
Para ver como usar cada uno de los comandos tan solo escriba python main.py [COMMAND] --help
.
Por ultimo decir que el tamaño del chord ring puede ser modificado cambiando la variable CHORD_RING_SIZE
del archivo main.py
, por defecto y para el ejemplo es 3, lo que implica que el tamaño del anillo sera de 8 nodos.
En el archivo test_system.py
crea un sistema sencillo de 4 nodos chords en un sistema de tamaño 8 y se realizan los request de las url puestas en una lista dentro del ejemplo. Luego se eliminan los nodos prograsivamente y se van imprimendo las finger tables, asi como la llaves asociadas a cada nodo.