Skip to content
This repository has been archived by the owner on Sep 19, 2023. It is now read-only.
/ Chord_SDCC Public archive

Implementazione di un'overlay network strutturata basata sul protocollo Chord.

License

Notifications You must be signed in to change notification settings

simonefesta/Chord_SDCC

Repository files navigation

Implementazione dell'algoritmo/protocollo di Chord

  • Corso: Sistemi Distribuiti e Cloud Computing
  • Facoltà di Ingegneria Informatica Magistrale, Università di Roma Tor Vergata.
  • Ambiente di sviluppo: Linux, in particolare Fedora Linux 38. Testato con Docker Desktop 4.22.0, GO version go1.20.6 e Python 3.11.4 .
  • Autore 👨‍💻: Simone Festa

Breve introduzione del sistema

Il seguente progetto riproduce una overlay network strutturata basata sul protocollo di Chord. Mediante un client, è possibile, passando per un server registry, memorizzare/ricercare/eliminare stringhe sui nodi componenti l'anello. La rimozione controllata di un nodo è supportata totalmente. Viene gestito anche il crash di un nodo, per consentire al sistema di rimanere consistente, senza però attuare un meccanismo di replicazione per mantenere le risorse del nodo caduto.

ring

Esecuzione del programma

Start-up del sistema

Il programa richiede l'avvio in background del Docker Server.
Il progetto prevede un file di configurazione : config.json
In questo file è possibile definire due parametri:

  • bits: numero di bits usati per identificare un nodo. Permette di creare fino a $2^{bits}$ nodi.
    (se $bits=5$, è possibile creare fino a 32 nodi.)

  • nodes: numero di nodi da creare all'avvio del sistema. Devono essere $\leq2^{bits}$.

Nel caso si modifichino questi parametri, per applicarli al progetto è necessario digitare da terminale, immettendosi nella directory principale del progetto (Chord_SDCC):

python generate-compose.py

per poter aggiornare il file docker-compose.yml

Dalla stessa directory, eseguire il build con:

docker-compose build

e l'avvio con:

docker-compose up

Questo permette la creazione di un numero definito di container e di un server registry nella stessa rete. I nodi entreranno nel sistema, e calcoleranno le loro
Finger Table, che verranno mostrate sul terminale. Dopo il calcolo delle tabelle, il sistema sarà pronto per accettare richieste da parte del client.

Avvio del client

Aprendo una nuova istanza del terminale, e sempre partendo dalla directory
principale Chord_SDCC, è possibile avviare il client recandosi nella cartella client mediante comando:

cd client

e procedere all'avvio mediante:

go run client.go

per avere un'interfaccia per la gestione dell'anello.

Avvio di un nodo dopo lo start-up

E' supportata l'aggiunta postuma di un nodo singolarmente.
Su un nuovo terminale, localizzandoci presso la directory principale Chord_SDCC, basterà eseguire il comando:

./start_node.sh

E' possibile aggiungere ulteriori nodi, uno alla volta, tramite stesso comando, ma, per permettere una corretta gestione delle porte, bisognerà specificare un flag crescente, che parte da 1. Ad esempio:

  • ./start_node.sh istanzia il primo nodo postumo,
  • ./start_node.sh 1 istanzia il secondo nodo postumo,
  • ./start_node.sh 2 istanzia il terzo nodo postumo.

Esecuzione del programma con AWS - EC2

Disclaimer:
L'istanza richiede l'installazione di Docker, Golang e Python.
Per accedere ai servizi Amazon EC2 sono richieste delle credenziali per AWS.
La guida fa uso delle credenziali memorizzate nel file AWSKeypair.pem poste nella cartella .ssh di Linux.

Steps da seguire :
Recarsi sul sito: https://awsacademy.instructure.com/courses/28710/modules/items/2385832

  1. Effettuare il login se necessario.

  2. Premere 'Start Lab'.

  3. Quando la scritta 'AWS' presenta un cerchio verde, premere 'AWS' per entrare in 'AWS Management Console'.

  4. Recarsi nel pannello di controllo EC2.

  5. Avviare una nuova istanza, o mantenerne una precedentemente creata. (nome di esempio: ec2).

  6. Da terminale (presso qualsiasi cartella), collegarsi all'istanza EC2 mediante il comando sottostante e confermare il collegamento con 'yes'. In questo terminale potremo avviare il sistema negli step successivi.

    ssh -i ~/.ssh/AWSKeypair.pem ec2-user@<ipv4_public_address>   
    
  7. Per copiare il progetto in remoto, aprire una nuova istanza del terminale (il terminale nel punto 6 è infatti collegato in modo remoto ad AWS), recarsi nella directory genitore della directory contenente il progetto. (Se il progetto è nella folder 'Scaricati', posizionarsi in 'Scaricati').
    Da terminale:

    scp -i ~/.ssh/AWSKeypair.pem -r Chord_SDCC ec2-user@<ipv4_public_address>:/home/ec2-user/
    

    Quando il progetto è stato copiato, è possibile avviarlo con i comandi già visti usando il terminale visto nel punto 6, che sarà collegato all'istanza di Amazon EC2):

    • docker-compose build
      
    • docker-compose up
      
    • Con una nuova istanza terminale, collegato nello stesso modo esposto nel
      punto 6, recarsi nella cartella client del progetto remota ed avviare il client
      come già visto in precedenza.
      Terminati i test, puliamo l'ambiente dei container tramite il comando:

      docker container prune
      

      Per scollegarsi dall'istanza, usare il comando exit

NOTE

  • E' possibile incorrere in collisioni durante la creazione dei container.
    Un nodo mappato su in identificativo già usato verrà terminato.
    Il sistema funzionerà normalmente.
    Se ciò si verifica durante l'avvio del nodo singolo, è necessario avviare lo script come se si stesse creando un altro nodo, quindi col suffisso "1", "2", etc... (vedi sezione "Avvio dopo lo start-up"). Questo perchè rieseguire lo script senza suffissi porterà al build di un nodo con stesso indirizzo ip e porta, e quindi stesso identificato che ha già causato la collisione.

About

Implementazione di un'overlay network strutturata basata sul protocollo Chord.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published