# Servizio di directory

Un servizio di directory, in informatica, è un programma o un insieme di programmi che provvedono ad organizzare, gestire e memorizzare informazioni e risorse centralizzate e condivise all'interno di reti di computer (es. su server o mainframe), rese disponibili agli utenti tramite la rete stessa, fornendo anche un controllo degli accessi sull'utilizzo delle stesse utile al lavoro dell'amministratore di sistema. I servizi di directory forniscono dunque uno strato di astrazione intermedio tra le risorse da una parte e gli utenti dall'altra.

## Differenze con le basi di dati relazionali

Una directory viene considerata, per analogia, un database organizzato, da un punto di vista logico, secondo una modalità gerarchica. Si tratta di un particolare tipo di database, un database specializzato, che ha caratteristiche differenti dai tradizionali database relazionali.
Per prima cosa, una directory, per sua stessa natura, riceve quasi esclusivamente accessi in lettura; la fase di scrittura è limitata agli amministratori di sistema o ai proprietari delle singole informazioni. Per questo motivo, le directory sono ottimizzate per la lettura, mentre i tradizionali database relazionali devono supportare sia la lettura sia la scrittura dei dati (ad esempio in un sistema di prenotazioni aeree o in applicazioni bancarie).
Ne consegue che le directory non sono adatte per immagazzinare informazioni aggiornate di frequente. Ad esempio, il numero di processi in coda in fase di stampa non va memorizzato in una directory, visto che per offrire un dato accurato il numero deve essere aggiornato continuamente. La directory può invece contenere l'indirizzo di una stampante remota che è inserita nel processo di stampa; una volta trovata la stampante con una ricerca nella directory, si può ottenere poi il numero di processi in attesa. L'informazione nella directory (indirizzo della stampante) è statica, mentre il numero richiesto è dinamico e quindi non adatto per stare in una directory.
Un'altra differenza tra directory e database relazionali è che la maggior parte delle implementazioni di directory non supporta le transazioni, ovvero operazioni atomiche, che devono essere eseguite interamente o non eseguite per niente, come ad esempio avviene per le operazioni bancarie di trasferimento di denaro. Sono comunque supportate nel LDAP, anche se sono limitate a transazioni tra directory LDAP e non includono altre transazioni, come operazioni tra database. I tradizionali database relazionali di solito supportano queste transazioni, che però complicano la loro implementazione.
Un'altra importante differenza sta nel metodo di accesso alle informazioni. La maggior parte dei database relazionali supporta un metodo d'accesso potente e standardizzato che è SQL. SQL permette aggiornamenti e interrogazioni elaborati a discapito delle dimensioni del programma e della complessità dell'applicazione. Le directory invece, in particolare le directory LDAP, usano un protocollo di accesso semplificato e ottimizzato che può essere usato in applicazioni snelle e relativamente semplici. Visto che le directory non hanno l'intento di fornire lo stesso numero di funzioni di un tradizionale database relazionale, possono essere ottimizzate per consentire a più applicazioni di accedere ai dati in grandi sistemi distribuiti nel modo più rapido possibile.

## Directory client e server

L'accesso alle directory di solito utilizza il modello di comunicazione client/server. Un'applicazione che vuole leggere o scrivere informazioni in una directory non vi accede direttamente, ma invoca una funzione o un'interfaccia (API, application programming interface) che genera l'invio di un messaggio ad un altro processo. Questo secondo processo accede alle informazioni della directory per conto dell'applicazione che ne ha fatto richiesta via TCP/IP. La porta TCP/IP di default è 636 per le comunicazioni sicure crittografate e 389 per le comunicazioni non crittografate. Il risultato dell'operazione di lettura o di scrittura è restituito quindi all'applicazione.
Una richiesta è di solito fatta dal directory client, e il processo che cerca l'informazione nella directory è chiamato directory server. In generale, i server forniscono un servizio specifico ai client. Qualche volta un server può diventare un client di altri server, per ottenere le informazioni necessarie per soddisfare la richiesta. Client e server possono risiedere o meno sulla stessa macchina.
Un server può soddisfare diversi client; più server possono eseguire richieste in parallelo. Si possono avere anche code di processi quando i server sono occupati mentre stanno eseguendo un'altra richiesta. Un API definisce l'interfaccia di programmazione che un particolare linguaggio usa per accedere ad un servizio. Il formato e il contenuto dei messaggi scambiati tra client e server deve rispettare un protocollo concordato, come LDAP.

## Tipologie

Una directory può essere locale o globale, a seconda se si tratti di un'area limitata o estesa all'universo di interesse, che può essere un'azienda, una nazione o tutto il mondo. I client che accedono ad una directory possono essere locali o remoti. I client locali si trovano nello stesso edificio, o comunque possono accedere alla stessa LAN. I client remoti possono invece trovarsi in qualsiasi punto del pianeta.
Una directory inoltre può essere centralizzata o distribuita, a seconda che si tratti di un server in un solo posto o di più server sparsi. Quando una directory è distribuita, le informazioni contenute possono essere partizionate o replicate. Quando l'informazione è partizionata, ogni directory server contiene una parte di informazione unica e non sovrapponibile. Cioè ogni entry della directory è contenuta in uno e un solo server. Una delle tecniche di partizione è quella di usare riferimenti LDAP; questi permettono agli utenti di rivolgere le richieste LDAP a server differenti. Quando l'informazione è replicata, la stessa entry è contenuta in più server. In una directory distribuita ci possono essere informazioni partizionate e replicate insieme. La distribuzione dei directory server e la modalità in cui i dati sono partizionati o replicati determina il livello di prestazione e di disponibilità della directory.