Che si parli di sistemi centralizzati o di sistemi distribuiti è molto importante avere un sistema efficiente per identificare le varie risorse dei sistemi stessi.

Cos’è il naming

Il naming è un sistema che permette di identificare le risorse in uso in un sistema. In particolare, quindi, serve per:

  • identificare univocamente un’entità;
  • individuare la posizione di un’entità.

Ci sono vari esempi di sistemi di naming, quello più studiato è il DNS oppure i file system.

Ad ogni modo in questo paragrafo parliamo di naming in genericamente, quindi per entità si indica una risorsa qualsiasi che può essere:

  • un servizio;
  • un processo;
  • un file;
  • una qualsiasi altra risorsa che richiede un’identificatore univoco per l’accesso.

Per identificatore, invece, si intende un nome (facente parte del namespace di interesse) che fa riferimento ad una sola risorsa e che non viene riutilizzato. Questo non deve dipendere minimamente dalla locazione della risorsa stessa.

Un sistema di naming associa un’entità ad un identificatore.

Il processo inverso che permette di individuare un’entità a partire dal suo identificatore è chiamato risoluzione dei nomi.

L’associazione identificatore-entità avviene tramite il mapping.

Associazione entità-identificatore nei sistemi di Naming

Associazione entità-identificatore nei sistemi di Naming.

Sistemi di naming distribuiti

Ad oggi, tutti noi siamo a conoscenza dell’importanza dei sistemi distribuiti. Per fortuna molti dei sistemi di naming realizzati tanti anni fa, come il DNS, sono stati pensati come dei sistemi distribuiti abbattendo tutti i limiti dei sistemi centralizzati, in primis efficienza e tolleranza ai guasti.

Nulla di sorprendente: in un sistema distribuito l’implementazione di un sistema di naming è distribuita su più macchine con l’obiettivo di ottenere vantaggi come, scalabilità, efficienza, affidabilità, ecc…

Nei sistemi distribuiti è fondamentale avere un sistema di naming efficiente in quanto permette di localizzare le varie entità, ovvero permette di individuare l’indirizzo fisico di un’entità all’interno del sistema.

Esempi di sistemi di naming distribuiti

Ad esempio, nei DNS (domain name system) questo significa individuare l’indirizzo IP di un server a partire dal suo nome di dominio.

Un altro esempio di sistemi di sistemi distribuiti sono i file system (DFS) come:

  • NFS;
  • AFS;
  • Coda;
  • HDFS;
  • xFS;
  • Lustre;
  • GFS;
  • XtreemFS;
  • GPFS;
  • LizardFS.

Si tratta di file system che non sono memorizzati su un unico disco ma sui dischi di un insieme di computer connessi in rete, che però consentono all’utente di accedervi come se fosse un sistema di file centralizzato.

Approccio gerarchico dei sistemi di naming

La maggior parte dei sistemi di naming distribuiti utilizza un approccio gerarchico tramite una struttura ad albero.

I nodi nella parte più alta dell’albero sono i più sovraccarichi di richieste, per questo motivo è utile che siano replicati. Di conseguenza i figli vengono divisi tra le varie repliche dei nodi.

Lo spazio dei nomi è suddiviso in più livelli:

  • Globale, si tratta del nodo root e dei nodi directory di alto livello. Questo livello è replicato in almeno 20 copie, altamente disponibili a fare caching;
  • Amministrativo, nodi di livello intermedio che sono gestiti dalla stessa amministrazione o azienda. Tale livello è replicato in 2/3 copie;
  • Gestionale, nodi di livello più basso che hanno la caratteristica di cambiare più frequentemente. Avere un sistema di caching a questo livello non è conveniente in quanto i dati vengono aggiornati spesso.
livelli gerarchici del naming

Livelli gerarchici del Naming.

Nel DNS i vari livelli prendono il nome di livello root, TLD (top level domain) e livello amministrativo.

Risoluzione dei nomi

La risoluzione dei nomi in un sistema di naming distribuito consiste nell’identificare e nel raggiungere la risorsa a partire dal nome di essa.

Esistono due metodi principali per la risoluzione dei nomi: la risoluzione iterativa e quella ricorsiva.

Vediamo come funzionano prendendo il DNS come esempio: ipotizziamo di voler conoscere l’indirizzo IP dell’URL www.amazon.com.

In questo caso il meccanismo di chiusura dei DNS afferma che per la risoluzione del nome bisogna partire da destra.

Risoluzione dei nomi iterativa

Utilizzando la risoluzione dei nomi iterativa, volendo scoprire l’indirizzo IP di www.amazon.com:

  1. viene contattato il server root dal client che restituisce il nome del server del livello successivo (TLD) che gestisce i domini con estensione .com da contattare;
  2. viene contattato il server TLD di interesse che restituisce il nome del server di livello amministrativo che gestisce il dominio;
  3. viene contatto il server amministrativo di interesse e viene restituito l’indirizzo IP di www.amazon.com.

Soluzione ideale per situazioni in cui il client si trovi vicino al server root, al TLD e al server amministrativo.

Risoluzione dei nomi ricorsiva

Nel caso, invece, della risoluzione dei nomi ricorsiva:

  1. viene contattato il server root;
  2. il server root contatta direttamente il server TLD di interesse;
  3. il server TLD di interesse contatta il server amministrativo di interesse che restituisce l’indirizzo IP di www.amazon.com;
  4. il server TLD restituisce il l’indirizzo appena ricevuto al server root che lo ha contattato;
  5. il server root restituisce al client l’indirizzo IP di www.amazon.com.

Soluzione ideale per situazioni in cui il client si trovi vicino al server root ma distante da tutti gli altri server, i quali, invece, si trovano vicino al server root.

Categorie: Informatica