Progetto di Reti di Calcolatori

(A.A 1998/1999)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Sistema di gestione filiali bancarie

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Magnanini Pietro

Matr. 2146 50363

pietmgn@usa.net

Descrizione del progetto

Il progetto prevede la realizzazione di un sistema distribuito con il compito di gestire la contabilità di una banca. Le entità che fanno parte della banca sono:

 

 

Requisiti da soddisfare

Il programma realizza un sistema che deve avere le seguenti caratteristiche:

 

 

Risorse utilizzate

La realizzazione prevede l’utilizzo del protocollo UDP per lo scambio di informazioni tra le varie entità che costituiscono il sistema. Si è optato per questo protocollo perché il costo del servizio è più basso, visto che i messaggi da scambiare sono tutti dello stesso tipo, impiegano lo stesso tempo sul server e sono di breve durata.

L’implementazione è in linguaggio C in ambiente UNIX. La gestione del database è effettuata tramite la libreria NDBM.

 

Schema di funzionamento.

Dopo che il gestore di nomi è stato messo in esecuzione, è pronto per accettare le registrazioni da parte dei vari server (azioni a e b). I terminali possono cominciare a richiedere i servizi messi a disposizione. I passi da seguire per la richiesta di un servizio sono pertanto:

  1. Il processo terminale richiede al gestore di nomi di accedere ad un servizio in base alle richieste dell’utente.
  2. Il gestore di nomi (NS), consultando la propria tabella di servizi registrati, restituisce l’indirizzo IP e la porta del server richiesto dal processo terminale.
  3. Il processo terminale provvedere a inviare un messaggio UDP al server di cui ha ottenuto l’indirizzo, contenente il servizio che vuole utilizzare.
  4. In base al comando ricevuto, il server interrogato restituisce i dati richiesti al processo terminale, che li visualizza sulla console.

Inoltre ogni server, prima di terminare l’esecuzione provvede a richiedere un’azione di cancellazione di servizio al gestore di nomi.

Descrizione del gestore di nomi (NS)

Le funzioni che prevede sono:

Inoltre, per garantire la scalabilità e l’affidabilità del sistema, è possibile che i servizi messi a disposizione possano essere replicati: è quindi possibile che vi siano più server che gestiscano la stessa base di dati (filiale). Il NS provvede ha distribuire il carico sui server che appartengono alla stessa classe di servizi (stessa filiale).

Inoltre viene implementato un sistema di sincronizzazione per accedere ai di dati in scrittura, questo perché la libreria usata come supporto (NDBM), prevede che il file di dati sia aperto in scrittura in modo esclusivo. Per questo motivo è stato necessario realizzare di un protocollo di sincronizzazione per accedere alla risorsa condivisa; è implementata quindi un’ulteriore funzione:

Descrizione del programma terminale

Ogni programma terminale non conosce staticamente gli indirizzi IP e le porte dei servizi richiesti, ma provvede, ad ogni richiesta di servizio, a richiedere l’indirizzo e la porta al gestore di nomi.

I parametri di avvio sono: il nome del NS, che viene ricercato in /etc/hosts, e il nome logico della filiale a cui collegarsi.

Il processo terminale mette a disposizione le seguenti funzioni:

A seconda che l’azione richiesta sia di lettura o di scrittura, il programma richiede il servizio al server della filiale impostata, dopo avere interrogato il NS per conoscere l’indirizzo IP e porta di collegamento.

Descrizione del server filiale

Il server filiale si occupa di fornire servizi ai client che vogliono accedere al database dei clienti. E’ necessario che garantisca la mutua esclusione nell’acceso ad uno stesso record presente nel database. Per questo motivo si è utilizzata la libreria si supporto NDBM. Ogni server, all’atto dell’esecuzione, si registra sul NS indicando il proprio indirizzo IP, la porta e il tipo di servizio che offre. Dopodiché si mette in attesa di eventuali richieste da parte dei processi terminali.

I parametri di invocazione del programma prevedono:

In base hai parametri indicati, viene creata un’istanza che fornisce funzioni che dipendono dal tipo di azione da svolgere (lettura o scrittura). Un server lettore, mette a disposizione le seguenti funzionalità:

Per il server scrittore, le funzionalità messe a disposizione sono:

Da notare che per limitazioni della libreria NDBM, il server scrittore ha necessità di accedere in modo esclusivo alla base dati, per questo motivo, come prima azione, notifica la sua esigenza di aprire il file dati al server di nomi, che dà conferma solo quando le condizioni di apertura in scrittura sono verificate. A servizio completato, il file viene richiuso e viene notificato al NS.

All’atto dell’uscita dal programma, è necessario notificare al NS che il servizio non è più disponibile, per questo motivo è istallato un handler collegato con il segnale di CTRL-C, che gestisce la chiusura corretta del programma. Le azioni da svolgere sono diverse a seconda che il server sia un lettore o uno scrittore.

 

Osservazioni e risultati

Le specifiche di progetto iniziali puntavano a realizzare un sistema basato su TCP/IP, con completa trasparenza nella gestione dei dati. Le considerazioni sul tipo di dati da trasferire, la loro lunghezza e il tempo di elaborazione contenuto, hanno indicato il protocollo UDP come il più adatto all’uso, per via del suo più basso overhead di trasmissione.

Un altro problema che è emerso durante le fasi di realizzazione, è stata la limitazione della libreria NDBM, che grazie alla sua semplicità di utilizzo era stata adottata. La libreria non prevede che la base dati possa essere aperta in lettura quando è aperta da uno scrittore. Questa limitazione è emersa in una fase avanzata dello sviluppo delle applicazioni che compongono il programma, per questo motivo è stato implementato un nuovo protocollo di sincronizzazione per l’accesso ai dati, che è descritto nelle righe precedenti. Non è stato comunque alterato il funzionamento globale dell’applicazione distribuita, che rimane fortemente concorrente nelle operazioni di lettura.