File System Distribuiti

Transcript

File System Distribuiti
Sistemi di memorizzazione e alcune proprietà
File System Distribuiti
Replicazione dei dati: gestione e manutenzione di un insieme di copie dei dati
condivisione
Motivazioni:
persistenza
cache/repliche
consistenza
distribuite
Esempio
-
disponibilità
Memoria principale
Sì
Sì
Sì
1
RAM
-
tolleranza ai guasti
File system
Sì
M
Sì
1
UNIX file system
-
prestazioni
File system distribuito
M
M
M
M
Sun NFS
Web
M
M
M
Sì
Web server
Memoria condivisa distribuita
M
Sì
M
M
Ivy (DSM)
Emula le funzionalità di un file system non distribuito
Oggetti remoti (RMI/ORB)
M
Sì
Sì
1
CORBA
Specifica di interfacce
Magazzino di oggetti permanenti
M
M
Sì
1
Gestione della eterogeneità
Sistema di memoria peer-to-peer
M
M
M
D
CORBA Persistent
Object Service
OceanStore
Un file system distribuito permette di memorizzare ed accedere a file remoti come
se fossero locali
Meccanismi di controllo di accesso ai dati e condivisione dei dati
Modello architettura di un f.s.d.
Tipi di consistenza
1: esattamente una copia. M: garanzia media D: garanzia debole
Casi di studio: NFS (Sun network File System), AFS (Andrew File System), CODA
S. Balsamo A.A. 2005-2006 - Università Ca’ Foscari di Venezia
SD12.2
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
Requisiti di un file system
Moduli del file system
Sistemi monoutente:
monoprogrammato: consistenza dello spazio dei nomi
interfaccia per le applicazioni
mapping nome testuale ->indirizzo fisico
integrità
multiprogrammato: + controllo della concorrenza
Un file system gestisce
- l’organizzazione, memorizzazione e accesso a file
- la gestione dei nomi
- la condivisione e la protezione dei file
Sistemi multiutente multiprogrammato: + sicurezza, protezione dei dati (e.g. Unix)
Un file system è organizzato in moduli
Ogni file contiene dati e un insieme di attributi
Sistema distribuito:
+ interfaccia per gli utenti
trasparenza
tolleranza ai guasti (disponibilità)
Uso di tecniche di progettazione dei sistemi distribuiti
caching
replicazione
trasferimenti a blocchi (granularità)
crittografia
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
SD12.3
Modulo Directory :
Associa i nomi di file a IDs
Modulo File :
associa ID a file particolari
Modulo Controllo Accesso:
Controlla il permesso delle operazioni richieste
Modulo Accesso al File:
Letture o scritture di dati o attributi di file
Modulo Blocchi:
Accede e alloca blocchi di dischi
Modulo periferiche:
operazioni I/O su disco e buffering
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
SD12.4
1
Struttura dei record di attributi di file
Operazioni dello UNIX file system
Lunghezza File
filedes = open(name, mode)
filedes = creat(name, mode)
Timestamp di creazione
Apre un file esistente con dato name.
Crea un nuovo file con un dato name.
Entrambe le op. restituiscono un rif. a descrittore di file
con mode è read, write o entrambi
Chiude il file aperto filedes.
Read timestamp
Write timestamp
status = close(filedes)
count = read(filedes, buffer, n)
Timestamp dell’attributo
count = write(filedes, buffer, n)
Reference count
Proprietario
pos = lseek(filedes, offset,
whence)
Tipo di file
status = unlink(name)
List di controllo degli accessi
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
SD12.5
status = link(name1, name2)
Rimuove il file name dalla struttura della directory. Se il file
non ha altri nomi, è cancellato
Aggiunge un nuovo nome (name2) ad un file (name1).
status = stat(name, buffer)
Restituisce gli attributi del file name nel buffer.
SD12.6
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
Requisiti di un file system distribuito
Architettura del file service
Nei f.s. non distribuiti le funzioni sono solitamente eseguite da funzioni di libreria
per l’I/O e dal supporto del s.o., incluse le informazioni sullo stato dei file.
Requisiti di un f.s.d.
trasparenza di accesso uso di interfacce omogenee
di locazione modificabilità e indipendenza dalla locazione
di mobilità
di prestazioni variazioni del carico
di scalabilità
concorrenza
replicazione
per requisiti di prestazioni e affidabilità
eterogenteità
piattaforme (hw e s.o.) diverse
consistenza
semantica e gestione delle replicazioni
tolleranza ai guasti tolleranza di errori di accesso, uso di op. idempotenti
serventi stateless, per ripristinare il servizio senza stato
sicurezza
controllo della autorizzazione all’accesso
efficienza
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
Trasferice n bytes dal file rif. da filedes al buffer.
Trasferice n bytes dal file rif. da filedes dal buffer.
Entrambe le op. restituiscono il numero di bytes trasferiti
realmente e avanzano il puntatore read-write
Spostano il punt. read-write all’offset (relativo o assoluto,
in base a whence).
SD12.7
Modello architetturale per f.s.
componenti:
modulo cliente
modulo servente: flat file service
modulo servente: directory service
Client computer
Programma Programma
Applicativo
Applicativo
Server computer
Directory service
Flat file service
Modulo cliente
Interfaccia per l’accesso ai dati
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
Mapping fra nomi testuali e UFID
Operazioni sul contenuto del file
UFID Unique File IDentifier
SD12.8
2
Operazioni del servizio flat file
Read(FileId, i, n) -> Data
— throws BadPosition
Write(FileId, i, Data)
— throws BadPosition
Create() -> FileId
Delete(FileId)
GetAttributes(FileId) -> Attr
SetAttributes(FileId, Attr)
Operazioni del directory service
Se 1 ≤ i ≤ Length(File): legge una sequenza fino ad n pos.
da un file a partire dalla posizione i e restituisce in Data.
Se 1 ≤ i ≤ Length(File)+1: scrive una sequenza di Data in un
file, dalla posizione i, e se necessario estende il file.
Crea un nuovo file di lunghezza 0 e restituisce un UFID
Elimina il file
Restituisce gli attributi del file
Imposta gli attributi del file
Lookup(Dir, Name) -> FileId
— throws NotFound
Cerca il nome testuale della directory e restituisce
UFID, se esiste, altrimenti una eccezione
AddName(Dir, Name, FileId)
— throws NameDuplicate
Se Name non è nella directory vi aggiunge (Name, File)
e aggiorna il record di attributo del file
Se Name è già nella directory: eccezione.
UnName(Dir, Name)
— throws NotFound
Se Name è nella directory: rimuove Name
Se Name non è nella directory: eccezione
GetNames(Dir, Pattern) -> NameSeq
Restituisce tutti i nomi della directory Dir che corrispondono
alla espressione regolare Pattern
Note:
Operazioni idempotenti (eccetto create)
Interfaccia per possibile uso di server senza stato
SD12.9
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
Architettura NFS
Client computer
UNIX
system calls
Architettura NFS
Server computer
identificatori di file: file handle derivati dall’i-node di Unix
Filesystem ID
i-node number del file
Programma Programma
applicativo
applicativo
Virtual file system
Local
Remote
Altri
file system
i-node generation number
I clienti NFS sono integrati nel nucleo
Nucleo UNIX
UNIX
file
system
SD12.10
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
NFS
client
Accesso ad NFS con semplici chiamate di sistema
Virtual file system
NFS
server
NFS
protocol
Un solo cliente serve tutti processi sulla u.e. ed usa una sola cache
UNIX
file
system
Sicurezza uso della chiave da parte di servente NFS per autenticare i clienti NFS
il servente senza stato verifica che il cliente si autorizzato ogni volta
varie versioni
Protocollo NFS: comunicazione client-server basata su Sun RPC su TCP oppure UDP
Trasparenza per l’accesso a file remoti per clienti in sistemi Unix o altri
Interfaccia identica per diversi file system locali e remoti
Eterogeneità: progetto indipendente dal s.op. (e.g. Windows, MacOs, Unix, Linux,…)
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
SD12.11
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
SD12.12
3
Operazioni del server NFS
1/2
Operazioni del server NFS
lookup(dirfh, name) -> fh, attr
Restituisce il file handle e attributi del file name nella directory
dirfh
create(dirfh, name, attr) ->
newfh, attr
Crea un nuovo nome di file nella directory dirfh con attributi attr e
restituisce il nuovo file handle e gli attributi
2/2
symlink(newdirfh, newname, string) Crea un record newname nella directory newdirfh di tipo
-> status
link simbolico con valore string. Il server non interpreta la
string ma crea un file link simbolico
readlink(fh) -> string
Restituisce la stringa associata al symbolic link file
identificato da fh.
remove(dirfh, name) status
Elimina il file name dalla directory dirfh.
getattr(fh) -> attr
Restituisce gli attributi del file fh
mkdir(dirfh, name, attr) ->
newfh, attr
Crea una nuova directory name con attributi attr e restituisce il
nuovo file handle e attributi
setattr(fh, attr) -> attr
Pone gli attributi (mode, user id, group id, size, access time e
modify time di un file). Porre la dimensione a 0 tronca il file
rmdir(dirfh, name) -> status
Cancella la directory name vuota dal padre dirfh.
Errore se la dir. non è vuota.
read(fh, offset, count) -> attr, data
Restituisce fino a count bytes di dati da un file iniziando a offset
e restituisce gli ultimi attributi del file.
readdir(dirfh, cookie, count) ->
entries
write(fh, offset, count, data) -> attr
Scrive count bytes di dati nel file iniziando a offset. Restituisce gli
attributi del file dopo la write
Restituisce fino a count bytes di record di directory dalla directory
dirfh. Ognuno ha il nome di un file, un file handle, e un opaque
pointer al record successivo, detto cookie, che è usato in successive
chiamate readdir per iniziare a leggere dal punto seguente
Se il valore del cookie è 0, legge dall’inizio.
statfs(fh) -> fsstats
Restituisce informazioni del file system (es. dimensione blocchi, no. di
blocchi liberi) che contiene il file fh.
rename(dirfh, name, todirfh, toname) Modifica il nome del file name nella directory dirfh in toname nella
-> status
directory todirfh.
link(newdirfh, newname, dirfh, name) Crea un record newname nella directory newdirfh riferito al
-> status
file name nella directory dirfh
SD12.13
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
File systems locale e remoto accessible su un cliente NFS
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
SD12.14
File systems locale e remoto accessible su un cliente NFS
Per usare un f.s. remoto si usa il processo mount service disponibile su ogni servente NFS
Ogni server ha il file di configurazione
/etc/export
con la lista dei f.s. esportabili
Ogni cliente monta un f.s. remoto con mount indicando il
- nome del server,
- i percorsi nei f.s. locale (dove montare) e remoto (dove si trova) delle directory
Server 1
Client
(root)
(root)
export
...
bob
usr
nfs
Remote
people
big jon
vmunix
Server 2
(root)
mount
...
Remote
students
x
staff
mount
users
jim ann jane joe
Note:
Il file system montato a /usr/students nel cliente è in realtà un sottoalbero a /export/people nel Server 1;
il file system montato a /usr/staff nel cliente è in realtà un sottoalbero a /nfs/users nel Server 2.
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
SD12.15
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
SD12.16
4
Caching in NFS: servente
Caching in NFS: cliente
Le implementazioni di NFS sfruttano una cache sia nel client che nel server
Caching nel cliente
Caching nel server
- Il cliente trattiene in cache i risultati delle operazioni di lettura e scrittura
-> riduce il numero di richieste spedite al server
Per il server, la cache funziona come di consueto
- blocchi di files appartenenti ai filesystem esportati sono trattenuti in memoria
-> diminuisce il tempo di risposta al client per richieste consecutive dello stesso blocco
Possibile problema:
esistenza di versioni differenti dello stesso file in nodi diversi della rete
Consistenza in scrittura:
Due meccanismi per garantire la consistenza
(le operazioni di scrittura di un cliente possono non venire propagate immediatamente nel
server e alle copie trattenute in cache da altri clienti)
Write Through
i blocchi vengono scritti su disco quando il server riceve la richiesta di scrittura da un client
Soluzione:
assegnare al cliente la responsabilità di verificare la consistenza
dei dati nella sua cache
nota:
Write Back
ad ogni accesso ad un file condiviso occorre verificare la
condizione di validità della cache
i blocchi non vengono subito scritti su disco al ricevimento della richiesta di scrittura.
NFS versione 3, usa questo tipo di cache, implementa una nuova primitiva commit( ) con la
quale il client può chiedere la scrittura di tutti i blocchi in cache
SD12.17
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
SD12.18
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
Caching in NFS: cliente
Andrew File System
Caching nel cliente
- Sviluppato nel 1983 da Carnegie Mellon University e IBM AFS
condizione di validità della cache
ogni elemento nella cache del cliente ha
Tc
tempo dell'ultima validazione
Tm
tempo dell'ultima modifica
- come NFS, consente alle applicazioni l'accesso a file system remoti, senza bisogno
di ricompilazioni
(T-Tc < t)
Il tempo trascorso dall'ultima
validazione non deve superare
un dato valore t
∨
- AFS rispetto a NFS pone maggiore enfasi sulla scalabilità
( Tm(server) = Tm(client) )
- diverse scelte implementative e architettura rispetto ad NFS.
Il tempo dell'ultima modifica registrata dal server
deve coincidere con
il tempo dell'ultima modifica registrata dal cliente
- caratteristiche principali:
- i file vengono trasferiti interamente dai server ai clienti in un unica operazione
(in AFS-3, file più grandi di 64K vengono trasferiti in blocchi di 64K)
Prestazioni di NFS
Limitazioni alle prestazioni su server NFS
- frequente uso di getattr(), per ricevere da ogni cliente per validare la propria cache,
controllando il tempo dell'ultima modifica nel server.
- limite dell’efficienza delle operazioni di scrittura sul server, a causa del write-through
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
SD12.19
- i clienti mantengono nella cache locale copie dei file (interi) ricevuti dai server
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
SD12.20
5
Distribuzione dei processi nell’Andrew File System
Workstations (Clienti)
Venus
Componenti di Andrew File System
Servers
AFS è formato da due componenti
Programma
utente
Nucleo UNIX
Venus è un cliente operante a livello utente su ogni workstation
Vice
Vice è un server, operante a livello utente
Nucleo UNIX
Venus
Programma
Il filesystem di ogni workstation è diviso in due parti
Network
utente
Nucleo UNIX
- la parte locale è visibile localmente, e non viene condivisa
- la parte condivisa è memorizzata su un server, e può esistere in varie copie
parziali sparse nelle cache dei cliente
Vice
Venus
Programma
utente
Nucleo UNIX
I file condivisi si trovano sempre nella sottodirectory /afs
Nucleo UNIX
Scalabilità
obbiettivo principale di AFS
diminuire la comunicazione cliente-servente
Trasferimento dei file in un’unica operazione
Uso di caching dei file ricevuti nei clienti
CODA: evoluzione di AFS
SD12.21
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
Spazio dei nomi di file visto dai clienti di AFS
Funzionamento di Andrew File System
Filesystem di ogni workstation è composta da
f.s. locale visibile solo localmente
f.s. condiviso memorizzato su un servente con eventuali copie nelle cache dei clienti
i file condivisi sono nella sottodirectory /afs ed è un sottoalbero del servente Vice
Locale
SD12.22
Condiviso
/ (root)
Funzionamento di AFS
- Quando un processo su una WS cliente apre un file remoto, e non ne esiste una copia
nella cache locale, il file viene localizzato e ne viene richiesta una copia La copia viene
memorizzata nel file system locale alla WS
- Successive operazioni di lettura/scrittura del processo agiscono sulla copia locale
- Quando il processo chiude il file, se la copia locale è stata modificata, questa viene
rispedita al server.
La copia locale alla WS viene mantenuta, per eventuali successive richieste.
Note:
tmp
bin
. . .
vmunix
- I file raramente aggiornati, o utilizzati in lettura/scrittura da un solo utente, possono rimanere
validi a lungo nella cache dei cliente
afs
- La cache locale di ciascuna WS può essere molto capiente (risiede sul disco locale)
bin
- L'implementazione di AFS si basa su alcune considerazioni sul presunto utilizzo dei file in UNIX:
- La maggior parte dei file sono piccoli
- Operazioni di lettura sono molto più frequenti di operazioni di scrittura
- L'accesso sequenziale è quello comunemente usato
- La maggior parte dei file vengono modificati da un solo utente
- I file vengono usati in burst
Symbolic
links
- I database tipicamente non hanno queste caratteristiche
=> non si prestano bene ad essere condivisi tramite AFS
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
SD12.23
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
SD12.24
6
Intercettazione delle chiamate di sistema in AFS
Consistenza della cache in AFS
1/2
Consistenza della cache in AFS
Workstation
Quando un modulo Vice (server) fornisce un file a Venus (cliente), invia anche una
callback promise
Programma
utente
UNIX file
system calls
operazioni
su file remoti
promessa da parte del server a ricontattare il cliente nel caso il file venga modificato
da parte di altri client
Venus
Ad ogni file nella cache dei cliente è associato il callback
che può avere due stati
Valid: Il server non ha ancora comunicato modifiche al file, che quindi è da ritenersi valido
Cancelled: Il server ha richiamato, comunicando di invalidare la copia locale del file perchè è stata
modificata
UNIX kernel
UNIX file system
Quando un server riceve la richiesta di modifica di un file, manda un avviso a tutti i clienti ai quali ha
promesso un callback
Local
disk
=> a differenza di NFS, i server AFS non sono stateless
Quando è necessario un file non in cache si recupera e la copia memorizzata nel f.s. locale del cliente
Operazioni del processo utente solo sulla copia locali
Solo alla fine se necessario, si invia il file modificato al server
SD12.25
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
Consistenza della cache in AFS
2/2
Una volta contattato dal server, il cliente provvede a porre il callback associato a quel file come
cancelled
Implementazione delle chiamate di sistema a file in AFS
Processo utente
Tolleranza ai guasti
Quando una WS riparte dopo un crash, deve cercare di mantenere la maggior parte del
contenuto della propria cache
open(FileName,mode)
Nucleo UNIX
Se FileName è nello
spazio condiviso passa
la richiesta a Venus
Potrebbe aver perso alcuni dei callback da parte dei server
⇒la cache va rivalidata
(Ri)validazione della cache
Venus manda una cache validation request contenente
- il file da validare
- la data di ultima modifica, come risulta dal cliente
Se il server verifica che non ci sono state modifiche a partire dalla data indicata dal
cliente, il file (e relativo callback) viene validato
Altrimenti, il callback viene posto a cancelled.
Apri il file locale e
restituisci il descrittore
In ogni caso, ciascun cliente deve rivalidare un callback una volta trascorso un certo intervallo
di tempo senza ricevere notifiche dal server
Nota:
questo meccanismo di consistenza si applica solo durante le operazioni di open( ) e close( ).
=> è possibile che clienti diversi tentino di modificare lo stesso file, con risultati inconsistenti
=> i programmi utente devono adottare strategie per garantire la consistenza delle operazioni.
read(FileDescriptor,
Buffer, length)
write(FileDescriptor,
Buffer, length)
close(FileDescriptor)
SD12.27
Venus
Controlla la lista di
file nella cache e se
non c’è una callback
promise valida
manda una richeista
del file al server Vice
relativo
Poni una copia del file
nel f.s. locale, poni il
nome nella lista della
cache locale e
restituisci il nome
locale a Unix
rete
Vice
Trasferisci una copia del
file e callback promise alla
workstation. Log la c.p.
Esegui un normale read
Unix sulla copia locale
Esegui un normale write
Unix sulla copia locale
Chiudi il file locale e
notifica a Venus
(In linea con la semantica delle operazioni standard UNIX sui file, che di default non forza alcuna verifica della concorrenza)
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
SD12.26
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
Se la copia locale è
stata modificata,
mandane copia al
servente Vice,
responsabile del file
Sostituisci il contenuto
del file e manda una
callback a tutti gli altri
clienti che hanno una
callback promise sul file
SD12.28
7
Componenti dell’interfaccia del servizio Vice
Fetch(fid) -> attr, data
Store(fid, attr, data)
Restituisce gli attributi ed eventualmente il contenuto del file
con id. fid e registra una callback promise
Aggiorna gli attributi e (event.) i contenuti del file specificato
Create() -> fid
Crea un nuovo file e registra una callback promise
Remove(fid)
Elimina il file specificato
SetLock(fid, mode)
Pone un lock il file o directory specificata, com mode
condiviso o esclusivo. I locks non cancellati scadono dopo 30 min.
ReleaseLock(fid)
RemoveCallback(fid)
Rilascia il lock del file o directory specificata
Informa il server che un processo Venus ha rimosso un file dalla
cache
Da un server Vice ad un processo Venus: cancella la
callback promise sul file specificato
BreakCallback(fid)
S. Balsamo A.A. 2006-2007 - Università Ca’ Foscari di Venezia
SD12.29
8