Gestire transazioni miste con NTFS in Windows Server 2008

3 pagine in totale: <<Indietro 1 2 [3]

Integrazione con i servizi

Un'altra caratteristica di rilievo è l'integrazione della transazione anche verso i servizi. Questo non vuol dire che il servizio ha una transazione, mentre il proxy chiamante ne ha una sua, ma che più semplicemente entrambi convivono nella stessa, anche se sono due applicazioni ben distinte tra loro che molto probabilmente non hanno nulla in comune.
Per capire meglio proviamo a guardare il seguente diagramma:

Abbiamo un server con due applicazioni ben distinte (MyApplication e My WCF Service); queste due applicazioni eseguono operazioni analoghe (scrittura su file e scrittura su database), ma il servizio WCF esegue le stesse su richiesta dell'applicazione MyApplication.
La transazione parte da chiamante e si estende anche per le operazioni effettuate dal servizio e, nel caso di rollback, questo avverrà sia per le operazioni di MyApplication che per quelle di MyWCFService.
Parlando in termini di codice, all'interno del TransactionScope basta inserire la chiamata del proxy verso il servizio, al resto penserà il Distributed Transaction Coordinator di Windows Server 2008.

Le Performance di TxF

Una domanda che comunemente nasce quando si parla di transazioni su file system è quella legata alle performance, ossia quanto incide in termini prestazionali un'implementazione con queste caratteristiche.
Dare un valore numerico ad una domanda del genere non è per nulla facile, ci sono diversi fattori che incidono in questo contesto (hardware della macchina prima di tutto), ma Microsoft ritiene che l'overhead minimo di un'implementazione con TxF si aggiri intorno ad un valore compreso tra l'1% ed il 2%.
Un costo irrisorio se si pensa all'enorme vantaggio, giustificato dalle modalità utilizzata da questa tecnologia.

Per prima cosa è necessario dire che, come per le transazioni su database, nel caso l'oggetto presente nel contesto transazionale sia uno soltanto, il contesto transazionale non viene aperto e viene eseguita direttamente l'operazione, guadagnandone in performance.

Un'altra caratteristica che influisce in maniera positiva è il fatto che TxF è ottimizzato per il Commit: tutte le operazioni che deve eseguire su file vengono precedentemente effettuate in memoria e successivamente, solo in fase di commit, vengono salvate su disco, in modo da evitare I/O inutile fino a transazione ultimata.

Per tradurre in un esempio pratico, proviamo a pensare ad una transazione in cui dobbiamo scrivere un file di qualche GB, e, quando siamo arrivati al 90% della scrittura, l'operazione fallisce per un qualche motivo: se si fosse già scritto su disco, per tornare indietro sarebbe stato necessario cancellare tutte le modifiche fatte, al fine di ripristinare la situazione iniziale; al contrario, grazie all'architettura di TxF, questo problema di overhead su disco non si presenta, in quanto la scrittura su disco non avviene finchè la transazione non è andata a buon fine.

La scalabità delle applicazioni basate su TxF

La prima cosa che verrebbe da dire sull'utilizzo di TxF nelle nostre applicazioni è che rende la vita molto più facile e alleggerisce di tutta quella parte necessaria alla gestione degli errori relativi ad eventuali operazioni di I/O su file system.
Con la rimozione di tutto questo codice superfluo con TxF si ha un'alleggerimento dell'applicazione e una riduzione della sua complessità.

Tutto questo ovviamente va ad incidere anche sulla stabilità, che insieme alla scalabilità è una delle caratteristiche principali delle applicazioni enterprise.

Sfruttando il DTS di Windows le transazioni su file system vanno di pari passo e convivono in maniera del tutto trasparente con le transazioni su database e su eventuali servizi WCF, come mostrato precedentemente.

Questo vuol dire che in un contesto transazionale posso avere 3 operazioni su disco, 2 su database e, nel caso l'ultima non vada a buon fine, effettuare un rollback sia della parte del database che della parte di file system.

Conclusioni

Nonostante il gran numero di vantaggi esposti fino ad ora, ci sono delle situazioni in cui è consigliabile evitare l'utilizzo delle transazioni su file system.
Classici esempi potrebbero essere il caso in cui si abbiano transazioni troppo lunghe che obbligano il sistema a tenere i file interessati dalla transazione in stato di lock.
Purtroppo non ci sono dei valori che ci permettono di capire quando possiamo definire la durata di una transazione troppo lunga, ma abbiamo delle linee guida di Microsoft che ci permettono di stimare questo valore.

In particolare la lunghezza della transazione varia in base alla durata media di tutte le altre transazioni.
Questo vuol dire che in alcuni casi una transazione può essere considerata troppo lunga se si hanno migliaglia di transazioni brevissime (in ordine di millisecondi), mentre in altri scenari più complessi si può considerare una transazione troppo lunga parlando in ordine di giorni e non secondi.
Quest'ultima situazione si può avere in ambienti con uno numero molto basso di transazioni, che hanno la necessità di un feedback di alcune operazioni per poter chiudere le operazioni.

Un'altra situazione in cui è sconsigliato l'utilizzo di TxF è in tutti gli scenari in cui si ha un'elevata concorrenza nell'accesso ai file, che causa lock su questi ultimi, impedendo l'accesso alla risorsa in scrittura, per qualsiasi altro processo.

Approfondimenti

Lo speciale completo su Visual Studio 2008, Windows Server 2008 e SQL Server 2008

3 pagine in totale: <<Indietro 1 2 [3]

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.



TUTORIALS


IN EVIDENZA
MISC