Gestire transazioni miste con NTFS in Windows Server 2008

di Ugo Lattanzi, in Windows Server,

Con l'uscita di Windows Vista, e, successivamente, di Windows 2008 Server (conosciuto con il codename Longhorn), è stata introdotta una nuova funzionalità chiamata Transactional NTFS.
Conosciuta anche come TxF, che a differenza della maggior parte delle sigle non è un acronimo ma si forma dall'unione della parola Transaction con quella NTFS, questa tecnologia entra a far parte delle applicazioni Enterprise in maniera prorompente, in quanto consente ad un'applicazione di raggiungere un grado di efficienza mai raggiunta in precedenza per la piattaforma Windows.
La motivazione che ha spinto Microsoft ad investire risorse nello sviluppo di questa nuova tecnologia è la necessità che le moderne applicazioni hanno: non si limitano più a dialogare con il database, ma abbracciano diverse forme di storage, di tipo diverso. Basti pensare a MySpace, che oltre a memorizzare informazioni, ha un repository di oggetti multimediali come video o foto.
In questo articolo andremo a vedere cosa ci permette di fare TxF, se integrato a dovere nelle nostre applicazioni, come è possibile utilizzarlo e come cambia il modo di pensare le transazioni in un'applicazione che ne faccia utilizzo.

Come funzionano le transazioni

In un precedente articolo abbiamo spiegato le caratteristiche che una transazione deve rispettare, caratteristiche indicate dall'acronimo ACID (Atomic, Consistent, Isolated, Durable): come per le transazioni "classiche", anche le transazioni su File System devono rispettare queste necessità.
In particolare, la cosa interessante è che le operazioni atomiche non riguardano soltanto la scrittura di file su disco, ma si estendono ad una serie di funzionalità che vanno ben oltre la semplice creazione e modifica dei file, come elencato di seguito:

  • operazioni su file system differenti;
  • operazioni sul registro di sistema;
  • operazioni su database;
  • Distributed Transaction Coordinator (DTC) transaction (XA Transactions, Oracle);
  • chiamate ai servizi Web (WS-AtomicTransaction);
  • WCF (OleTransactionProtocol)

Per rendere il discorso il più semplice possibile, se c'è una tecnologià che rientra nell'ordina del DTC, allora TxF l'abbraccia al 100%.

È necessario sapere che c'è un'integrazione totale di queste operazioni con il sistema operativo stesso, come la gestione della quota su disco, del SiS (Single Instance Storage), fino ad arrivare all'antivirus.

Il livello di isolamento dei dati è lo stesso delle transazioni classiche, Read-Committed, che permette l'accesso alla risorsa nel momento in cui la transazione si è conclusa.
In una situazione in cui, nello stesso contesto transazionale si hanno diverse operazioni, e, di conseguenza, il tempo tra la prima operazione ed il commit è lungo, si può accedere ad una risorsa creata o modificata soltanto se si è all'interno dello stesso contesto transazionale.

Proviamo a guardare questa sequenza di operazioni:

  • inizio transazione;
  • creazione del file;
  • operazioni su database;
  • modifica file;
  • fine transazione.

A partire dal punto 4 è possibile accedere alle operazioni previste dal punto 2, anche se la transazione non è ancora conclusa.

Un esempio reale

Il setup di un'applicazione è l'esempio più calzante in cui Transaction NTFS può fare la differenza.
Ci basti pensare che ad ogni installazione o disinstallazione di un applicativo vengono creati, cancellati e modificati dei file nel sistema; nella maggior parte dei casi viene modificato anche il registro di configurazione, e, in caso di aggiornamenti, possono avvenire anche delle modifiche ad un database.
Cosa accade se durante l'installazione qualcosa non dovesse andare a buon fine?
Se la transazione fosse solo a livello di database, ci troveremmo ad avere un database identico alla situazione antecedente al setup, ma al tempo stesso un hard disk ed un registro di configurazione con dei dati sporchi.

È proprio in queste situazioni che si può sfruttare al massimo TxF, in quanto essendo l'operazione atomica o tutto va a buon fine (file, database, servizi, ecc), oppure nulla verrà completato con successo.
Utilizzando TxF questo problema non si presenterebbe: il sistema tornerebbe alla situazione originaria, come se il setup non fosse mai stato eseguito.
Non è un caso che Windows Vista e Windows Server 2008 per i servizi di update, ripristino configurazione di sistema e per l'utilità di pianificazione utilizzi internamente TxF!

Integrazione con il Distributed Transaction Coordinator

Come già scritto nelle righe precedenti, le transazioni su file system si integrano perfettamente con il DTC (Distributed Transaction Coordinator) di Windows, il che si traduce in una marcata semplicità di utilizzo, in quanto il codice necessario per sfuttare TxF non è poi molto distante da quello utilizzato per le transazioni distribuite a livello di database.
Questo è possibile in quanto le operazioni di transazione vengono gestite a livello di kernel, caratteristica che permette un'integrazione con il DTC.
Per poter sfruttare queste funzionalità è necessario appoggiarsi a COM, quindi è necessario ricorrere all'utilizzo di P/Invoke all'interno del nostro codice, che può essere sostituito da un wrapper non presente nella class library del .NET Framework, ma scaricabile da questo sito.

Per capirne meglio il funzionamento è necessario dare prima uno sguardo a questa immagine:

In questo articolo non mostrerò il codice necessario alla realizzazione del wrapper, già ben illustrato a questo indirizzo, ma mi limiterò a mostrare il codice che sfrutterà il wrapper per gestire le transazioni su File System.

3 pagine in totale: 1 2 3
Contenuti dell'articolo

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

Nessuna risorsa collegata