Nell'ingegneria del software, il termine architettura multi-tier o architettura multi-strato (spesso definita con l'espressione inglese n-tier architecture) indica un'architettura software di tipo client-server per sistemi distribuiti, in cui le varie funzionalità del software sono logicamente separate ovvero suddivise su più strati o livelli software differenti in comunicazione tra loro (nel caso di applicazioni web questi strati sono la logica di presentazione, l'elaborazione dei processi e la gestione della persistenza dei dati).
Ciascuno strato è in comunicazione diretta con quelli adiacenti ovvero richiede ed offre servizi allo strato adiacente in maniera concettualmente simile a quanto accade con le architetture di rete a strati (in linguaggio strettamente informatico si dice che ciascuno strato è client-server per gli strati adiacenti, fatta eccezione per gli strati estremi che sono solo client o solo server). Ad esempio, un'applicazione che utilizza il middleware per gestire le richieste di dati tra un utente e un database, utilizza un'architettura multi-tier. In generale i vari strati possono risiedere sulla stessa macchina oppure su macchine elaboratrici differenti mappando così il relativo sistema informatico che ospita, a livello infrastrutturale, l'applicazione. Negli anni novanta si diffuse l'architettura client-server a due livelli, mentre negli anni 2000 l'impiego più diffuso di un'architettura multi-tier è l'architettura a tre livelli.
L'architettura delle applicazioni N-tier fornisce un modello per gli sviluppatori per creare vantaggiosamente un'applicazione flessibile e riutilizzabile ovvero scalabile. Con la separazione di un'applicazione in livelli, per modificare o aggiungere funzionalità, gli sviluppatori possono infatti modificare solo uno specifico livello, piuttosto che dover riscrivere l'intera applicazione, garantendo dunque una maggiore semplicità di progettazione/implementazione secondo la filosofia del divide et impera ed una maggiore manutenibilità.
I concetti di strato e livello sono spesso usati come sinonimi. Tuttavia un punto di vista abbastanza comune è che uno strato è un meccanismo di strutturazione logica per gli elementi che compongono la soluzione software, mentre un livello è un meccanismo di strutturazione fisica per le infrastrutture di sistema.[1]
Il three-tier è un modello di architettura software e allo stesso tempo uno schema di progettazione software. Oltre ai vantaggi abituali di software modulare con interfacce ben definite, l'architettura three-tier
è destinata a consentire a qualsiasi dei tre livelli di essere aggiornati o sostituiti indipendentemente
dal cambiamento di requisiti o tecnologia. Ad esempio, un cambiamento di sistema operativo nel livello di presentazione interesserebbe solo il codice di interfaccia utente.
In genere, l'interfaccia utente viene eseguita su un desktop PC o workstation e utilizza un'interfaccia utente grafica standard, la logica di processo funzionale può essere costituita da uno o più moduli separati in esecuzione su una workstation o applicazioni server, e un RDBMS in un database server o mainframe contiene i dati di archiviazione logica del computer. Il livello intermedio può essere anche multi-tier (in questo caso l'architettura complessiva si chiama “n-tier architecture”).
Three-tier architecture ha i seguenti tre livelli:
Livello di presentazione
Questo è il livello più alto dell'applicazione. Il livello di presentazione mostra le informazioni relative a servizi come merce online, acquisti, e i contenuti del carrello della spesa. Comunica con altri livelli attraverso i risultati di output al livello browser/client e tutti gli altri livelli della rete.
La logica di primo livello viene tirata fuori dal livello di presentazione e, come suo proprio livello, controlla la funzionalità di un'applicazione eseguendo elaborazioni dettagliate.
Livello dati
Questo livello è costituito da server database. Qui le informazioni vengono memorizzate e recuperate. Questo livello mantiene i dati neutrali e indipendenti da applicazioni server o da logica di business. Fornendo informazioni del proprio livello inoltre migliora la scalabilità e le prestazioni.
Stratificazione del livello presentazione
A prima vista, il three-tier può sembrare un concetto contrapposto a determinati design pattern come il model-view-controller (MVC), o il model-view-viewmodel (MVVM), ma in realtà gli ultimi due riguardano l'architettura del livello presentazione, mentre il primo riguarda l'architettura complessiva dell'applicazione.
Un'applicazione può quindi essere stratificata utilizzando un'architettura three-tier e di questi tre livelli, il livello presentazione può essere stratificato con il pattern MVC o MVVM.
In un'architettura three-tier che utilizza il pattern MVC o MVVM per il livello presentazione, il model (sorgente dei dati) è rappresentato dal livello applicazione o da un servizio che fa da ponte tra il livello presentazione e livello applicazione. In un'architettura single-tier il model può essere invece direttamente rappresentato dal database.
Un front-end web server che fornisce contenuti statici, e potenzialmente, alcuni contenuti nella cached dinamica. In applicazione web based, il front-end è il contenuto visualizzato dal browser. Il contenuto può essere statico o generato dinamicamente.
Il trasferimento dei dati tra più livelli è parte dell'architettura. Protocolli coinvolti possono includere uno o più di SNMP, CORBA, Java RMI, .NET Remoting, Windows Communication Foundation, sockets, UDP, web services altri protocolli standard o proprietari. Spesso middleware viene utilizzato per collegare i livelli separati. Livelli separati spesso (ma non necessariamente) eseguiti su server fisici separati, e ogni livello si può eseguire in un cluster.
Tracciabilità
La tracciabilità end-to-end dei flussi di dati attraverso sistemi di n-tier è un compito arduo che diventa più importante quando i sistemi aumentano di complessità. L'Application Response Measurement definisce i concetti e le API per la misurazione delle prestazioni e la correlazione delle transazioni tra i vari livelli.
Commenti
In generale, il termine livello è usato per descrivere la distribuzione fisica dei componenti di un sistema su server separati, computer o reti (nodi di lavorazione). Una architettura Three-tier allora avrà tre nodi di elaborazione. Livelli riferiti a un raggruppamento logico di componenti che possono o non possono trovarsi fisicamente su un nodo lavorazione.
^Eckerson, Wayne W. "Three Tier Client/Server Architecture: Achieving Scalability, Performance, and Efficiency in Client Server Applications." Open Information Systems 10, 1 (January 1995): 3(20)