# Architettura multi-tier

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).

## Descrizione

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 il sistema 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.

## Architettura three-tier

Three-tier è un sistema client/server in cui l'interfaccia utente, i processi logico funzionali ("regole aziendali"), l'archiviazione informatica dei dati e l'accesso ai dati sono sviluppate e mantenute come moduli indipendenti, la maggior parte delle volte su piattaforme separate. È stata sviluppata da John J. Donovan nell'Open Environment Corporation (OEC), una società di strumenti da lui fondata a Cambridge, Massachusetts.
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.

### Livello applicazione (business logic, la logica di primo livello, l'accesso ai dati di secondo livello, o di livello intermedio)

    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.

### Utilizzo dello sviluppo web

Nel campo web development, il three-tier è spesso utilizzato per fare riferimento a websites, comunemente commercio elettronico, che sono costruiti utilizzando tre livelli:
* 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.
* Un medio processo di contenuti dinamici e generazione del livello di application server, per esempio Java EE, ASP.NET, PHP, Ruby, piattaforma ColdFusion.
* Un back-end database, che comprende due serie di dati e il database management system o RDBMS il software che gestisce e fornisce l'accesso ai dati.

### Altre considerazioni

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.