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.
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
- Video di Surendra Verma, Development Manager del Kernel Team di Windows Vista Kernel
- Area dedicata a TxF su MSDN
- Webcast introduttivo su TxF (in inglese)
- Screencast su TxF
Lo speciale completo su Visual Studio 2008, Windows Server 2008 e SQL Server 2008
- .NET Framework 3.5 e Visual Studio 2008: cosa c'è di nuovo di Riccardo Golia
- Le novità di C# 3.0 e Visual Basic 9.0 attraverso LINQ di Stefano Mostarda
- Introduzione a LINQ, LINQ to XML, Object e DataSet di Stefano Mostarda

- Introduzione ad ASP.NET 3.5: novità e caratteristiche di Daniele Bochicchio
- Introduzione ad ASP.NET 3.5 di Daniele Bochicchio

- Le novità di Communication e Workflow Foundation e la loro cooperazione nel .NET Framework 3.5 di Cristian Civera
- Windows Presentation Foundation 3.5: 3D interattivo e le altre novità del framework di Marco Leoncini
- Utilizzare Visual Studio 2008 per semplificare lo sviluppo con LINQ to SQL di Andrea Zani
- Uno sguardo a LINQ to SQL di Stefano Mostarda

- Le nuove caratteristiche di IIS 7.0 per sviluppatori e sistemisti di Daniele Bochicchio, Christian Paparelli
- Gestire transazioni miste con NTFS in Windows Server 2008 di Ugo Lattanzi
- LINQ oltre SQL e XML: creare un provider per l'integrazione con Live Search di Alessandro Catorcini
- Tracciare le modifiche ai dati e allineare i datawarehouse con il Change Data Capture in SQL Server 2008 di Luca Bianchi
3 pagine in totale: <<Indietro 1 2 [3]
Contenuti dell'articolo
- Pagina 1
- Pagina 2
- Pagina 3
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.





Difficoltà
Stampa
Download 


10annidi.ASPItalia.com: iscriviti alla competizione e vinci fantastici premi ogni mese!