Cos'è l'architettura di livello N?


193

Recentemente ho visto alcune offerte di lavoro per sviluppatori che includono una frase che recita più o meno in questo modo: "Deve avere esperienza con l'architettura di livello N" o "Deve essere in grado di sviluppare app di livello N".

Questo mi porta a chiedere: cos'è l'architettura di livello N? Come si fa a fare esperienza con esso?


2
Interessante che questo altro post chieda anche che cos'è l'architettura di livello N, ma le risposte sono completamente diverse. stackoverflow.com/questions/7271165/… . Sembra che ci sia l'architettura N-Tier per il software e l'architettura N-Tier per l'hardware.
Noremac,

Risposte:


247

Wikipedia :

Nell'ingegneria del software, l'architettura multilivello (spesso definita architettura n-tier) è un'architettura client-server in cui la presentazione, l'elaborazione delle applicazioni e la gestione dei dati sono processi logicamente separati. Ad esempio, un'applicazione che utilizza il middleware per soddisfare le richieste di dati tra un utente e un database utilizza un'architettura a più livelli. L'uso più diffuso di "architettura multilivello" si riferisce all'architettura a tre livelli.

È discutibile ciò che conta come "livelli", ma secondo me deve almeno attraversare il confine del processo. Altrimenti si chiama strati. Ma non ha bisogno di trovarsi su macchine fisicamente diverse. Anche se non lo consiglio, puoi ospitare livello logico e database nella stessa casella.

testo alternativo

Modifica : un'implicazione è che il livello di presentazione e il livello di logica (a volte chiamato livello di logica aziendale) devono attraversare i confini della macchina "attraverso il filo" a volte su una rete inaffidabile, lenta e / o insicura. Questo è molto diverso dalla semplice applicazione desktop in cui i dati vivono sullo stesso computer dei file o dell'applicazione Web in cui è possibile accedere direttamente al database.

Per la programmazione di livello N, è necessario raggruppare i dati in una sorta di forma trasportabile denominata "set di dati" e farli volare sul filo. La classe DataSet di .NET o il protocollo dei servizi Web come SOAP sono alcuni di questi tentativi di sorvolare oggetti via cavo.


6
"3 livelli" e "N livelli" fanno differenza?
chakrit,

7
Dipende da come conti i "livelli" (logici, fisici, ecc.), Ma puoi facilmente avere più di 3 processi coinvolti per scrivere un'app. UI, piattaforma UI (come Eclipse RCP), servizi Web, BLL, DAL, database, servizi di autenticazione, servizi di reportistica, servizi analitici ...
Eugene Yokota,

6
@chakrit: Ai miei tempi (sono vecchio) più di 2 livelli (client-server) si riferivano automaticamente a n-tier.
Eduardo Molteni,

@EugeneYokota - si dice che i livelli debbano rappresentare sezioni fisiche nell'architettura (che possono o meno essere ulteriormente brevettate, ad esempio in un cluster), e i livelli faranno riferimento al raggruppamento logico dei componenti dell'applicazione.
Eliran Malka,

Mi è stato detto qualcosa che sembra molto simile ma con i livelli che sono livello di presentazione - livello di servizio - livello di integrazione / dati. Sai se queste sono solo parole diverse per la stessa cosa dell'architettura mostrata sopra o qualcosa di diverso? Per quanto riguarda le mie conoscenze, sembrano uguali ma vorrei esserne sicuro.
KayleighArianna,

20

Si basa su come separare il livello di presentazione dalla logica aziendale principale e dall'accesso ai dati ( Wikipedia )

  • 3 livelli significa Livello presentazione + Livello componente + Livello accesso dati.
  • Il livello N è quando vengono aggiunti livelli aggiuntivi oltre a questi, in genere per ulteriore modularità, configurabilità o interoperabilità con altri sistemi.

12
in realtà se uno di questi livelli è ospitato da una parte remota, ad esempio un processore di pagamento, tale livello potrebbe non essere così "inutile"
Zak

1
Hmm. C'è un'enorme differenza tra "livelli" e "servizi". Il livello N viene solitamente utilizzato per indicare che per un determinato livello, tutto ciò che lo supera deve passare attraverso di esso per accedere ai servizi di livello inferiore. Se sono in parallelo, li chiamerei servizi piuttosto che livelli.
Dak

Quando si costruisce il solito MCV (un'architettura a 3 livelli) si può decidere di implementare l'MCV con interfacce a doppio deck, in modo tale da poter effettivamente sostituire un determinato livello senza dover modificare nemmeno una riga di codice. Ne vediamo spesso i vantaggi, ad esempio negli scenari in cui si desidera poter utilizzare più di un database (nel qual caso si dispone di una doppia interfaccia tra il controllo e i livelli dati). Quando lo metti sul View-layer (presentazione), puoi (tenere premuto !!) sostituire l'interfaccia USER con un'altra macchina, quindi automatizzare l'input REAL (!!!)
David Svarrer

15

È una parola d'ordine che si riferisce a cose come la normale architettura Web con ad esempio Javascript - ASP.Net - Middleware - Livello database. Ognuna di queste cose è un "livello".


4

Le applicazioni dati di livello N sono applicazioni dati separate in più livelli. Chiamate anche "applicazioni distribuite" e "applicazioni a più livelli", le applicazioni a più livelli separano l'elaborazione in livelli discreti distribuiti tra il client e il server. Quando sviluppi applicazioni che accedono ai dati, dovresti avere una chiara separazione tra i vari livelli che compongono l'applicazione.

Una tipica applicazione di livello n include un livello di presentazione, un livello intermedio e un livello dati. Il modo più semplice per separare i vari livelli in un'applicazione di livello n consiste nel creare progetti discreti per ogni livello che si desidera includere nell'applicazione. Ad esempio, il livello di presentazione potrebbe essere un'applicazione Windows Form, mentre la logica di accesso ai dati potrebbe essere una libreria di classi situata nel livello intermedio. Inoltre, il livello di presentazione potrebbe comunicare con la logica di accesso ai dati nel livello intermedio attraverso un servizio come un servizio. La separazione dei componenti dell'applicazione in livelli separati aumenta la manutenibilità e la scalabilità dell'applicazione. Lo fa consentendo una più semplice adozione di nuove tecnologie che possono essere applicate a un singolo livello senza l'obbligo di riprogettare l'intera soluzione. Inoltre,

Tratto dal sito Web Microsoft .


4

Se capisco la domanda, allora mi sembra che l'interrogatore stia davvero chiedendo "OK, quindi il livello 3 è ben compreso, ma sembra che ci sia un mix di clamore, confusione e incertezza su ciò che il livello 4 o generalizzare, le architetture di livello N significano. Quindi ... qual è la definizione di livello N che è ampiamente compresa e concordata? "

In realtà è una domanda abbastanza profonda, e per spiegare perché, devo andare un po 'più a fondo. Sopportami.

La classica architettura a 3 livelli: database, "logica aziendale" e presentazione, è un buon modo per chiarire come onorare il principio di separazione delle preoccupazioni. Vale a dire, se voglio cambiare il modo in cui "l'azienda" vuole servire i clienti, non dovrei guardare attraverso l'intero sistema per capire come fare questo, e in particolare, le decisioni sui problemi aziendali non dovrebbero essere sparse volenti o nolenti attraverso il codice.

Questo modello ha funzionato bene per decenni ed è il classico modello "client-server". Avanzamento rapido verso le offerte cloud, in cui i browser Web sono l'interfaccia utente per un insieme di utenti ampio e distribuito fisicamente e uno finisce per dover aggiungere servizi di distribuzione del contenuto, che non fanno parte della classica architettura a 3 livelli (e che devono essere gestiti a pieno titolo).

Il concetto si generalizza quando si tratta di servizi, micro-servizi, come vengono distribuiti i dati e il calcolo e così via. Il fatto che qualcosa sia o meno un "livello" dipende in gran parte dal fatto che il livello fornisca o meno un'interfaccia e un modello di distribuzione ai servizi che si trovano dietro (o sotto) il livello. Quindi una rete di distribuzione di contenuti sarebbe un livello, ma un servizio di autenticazione non lo sarebbe.

Ora, vai a leggere altre descrizioni di esempi di architetture di livello N con questo concetto in mente e inizierai a capire il problema. Altre prospettive includono approcci basati sul fornitore (ad es. NGINX), bilanciamento del carico sensibile al contenuto, isolamento dei dati e servizi di sicurezza (ad es. IBM Datapower), che possono o meno aggiungere valore a una determinata architettura, implementazione e casi d'uso.


3

Comprendo che N-Tier separa la logica di business, l'accesso client e i dati l'uno dall'altro utilizzando macchine fisiche separate. La teoria è che uno di essi può essere aggiornato indipendentemente dagli altri.


3

Le applicazioni dati di livello N sono applicazioni dati separate in più livelli. Chiamate anche "applicazioni distribuite" e "applicazioni a più livelli", le applicazioni a più livelli separano l'elaborazione in livelli discreti distribuiti tra il client e il server. Quando sviluppi applicazioni che accedono ai dati, dovresti avere una chiara separazione tra i vari livelli che compongono l'applicazione.

E così via in http://msdn.microsoft.com/en-us/library/bb384398.aspx


3

Quando si costruisce il solito MCV (un'architettura a 3 livelli) si può decidere di implementare l'MCV con interfacce a doppio deck, in modo tale da poter effettivamente sostituire un determinato livello senza dover modificare nemmeno una riga di codice.

Ne vediamo spesso i vantaggi , ad esempio negli scenari in cui si desidera poter utilizzare più di un database (nel qual caso si dispone di una doppia interfaccia tra il controllo e i livelli dati).

Quando lo metti sul View-layer (presentazione), puoi (tenere premuto !!) sostituire l'interfaccia USER con un'altra macchina, quindi automatizzare l'input REAL (!!!) - e puoi quindi eseguire noiosi test di usabilità migliaia di volte senza che nessun utente debba toccare e ri-toccare e ri-toccare nuovamente le stesse cose più e più volte.

Alcuni descrivono tale architettura a 3 livelli con 1 o 2 doppie interfacce come architettura a 4 o 5 livelli , implicando implicitamente le doppie interfacce.

Altri casi includono (ma non si limitano a) il fatto che tu, nel caso di sistemi di database replicati semi o completamente replicati, potresti praticamente considerare uno dei database come "master", e quindi avresti un livello comprendente il master e un altro comprendente il database slave.

Esempio mobile

Pertanto, il multi-tier - o N-tier - ha in effetti alcune interpretazioni, mentre sicuramente mi atterrei ai livelli di 3 livelli + extra che comprendono sottili dischi di interfaccia incastrati tra loro per consentire detti swap di livello, e in termini di test (utilizzato in particolare sui dispositivi mobili), è ora possibile eseguire test utente sul software reale, simulando un tocco degli utenti in modi che la logica di controllo non può distinguere da un tocco dell'utente reale. Questo è quasi fondamentale nella simulazione di test utente reali , in quanto è possibile registrare tutti gli input dall'OTA utente e quindi riutilizzare lo stesso input quando si eseguono test di regressione.


2

Quando parliamo di livelli, generalmente parliamo di processi fisici (con spazio di memoria diverso).

Pertanto, nel caso in cui i livelli di un'applicazione siano distribuiti in processi diversi, tali processi differenti saranno livelli diversi.

Ad esempio, in un'applicazione a 3 livelli, il livello aziendale comunica con Mainframe (processo separato) e parla con il servizio di reporting (processo separato), quindi l'applicazione sarebbe a 5 livelli.

Quindi, il nome generico è n-tier.


2

da https://docs.microsoft.com/en-us/azure/architecture/guide/architecture-styles/n-tier

Un'architettura di livello N divide principalmente i pneumatici di un'applicazione in pneumatici logici e livelli fisici e i loro sono divisi in sottoparti. inserisci qui la descrizione dell'immagine

I livelli sono un modo per separare le responsabilità e gestire le dipendenze. Ogni livello ha una responsabilità specifica. Un livello superiore può utilizzare i servizi in un livello inferiore, ma non viceversa.

I livelli sono fisicamente separati, in esecuzione su macchine separate. Un livello può chiamare direttamente un altro livello o utilizzare la messaggistica asincrona (coda messaggi). Sebbene ogni livello possa essere ospitato nel proprio livello, ciò non è necessario. Diversi livelli potrebbero essere ospitati sullo stesso livello. La separazione fisica dei livelli migliora la scalabilità e la resilienza, ma aggiunge anche la latenza dalla comunicazione di rete aggiuntiva.

Un'applicazione tradizionale a tre livelli ha un livello di presentazione, un livello intermedio e un livello di database. Il livello intermedio è facoltativo. Le applicazioni più complesse possono avere più di tre livelli. Il diagramma sopra mostra un'applicazione con due livelli intermedi, che incapsulano diverse aree di funzionalità.

Un'applicazione di livello N può avere un'architettura di livello chiusa o un'architettura di livello aperta:

In a closed layer architecture, a layer can only call the next layer immediately down.
In an open layer architecture, a layer can call any of the layers below it.

Un'architettura a livello chiuso limita le dipendenze tra i livelli. Tuttavia, potrebbe creare traffico di rete non necessario, se un livello passa semplicemente le richieste al livello successivo.


1

Un'applicazione di livello N è un'applicazione che ha più di tre componenti coinvolti. Quali sono questi componenti?

  • nascondiglio
  • Code di messaggi per comportamento asincrono
  • Bilanciatori di carico
  • Server di ricerca per la ricerca di enormi quantità di dati
  • Componenti coinvolti nell'elaborazione di enormi quantità di dati
  • Componenti con tecnologia eterogenea comunemente nota come servizi Web ecc.

Tutte le applicazioni social come Instagram, Facebook, i servizi del settore su larga scala come Uber, Airbnb, enormi giochi multiplayer online come Pokemon Go, le applicazioni con funzionalità fantasiose sono applicazioni di livello superiore.


0

Martin Fowler che dimostra chiaramente:

La stratificazione è una delle tecniche più comuni utilizzate dai progettisti di software per spezzare un sistema software complicato. Lo si vede nelle architetture delle macchine, in cui i livelli discendono da un linguaggio di programmazione con chiamate del sistema operativo in driver di dispositivo e set di istruzioni della CPU e in porte logiche all'interno dei chip. Il networking ha il livello FTP su TCP, che è su IP, su Ethernet.

Quando si pensa a un sistema in termini di livelli, si immaginano i principali sottosistemi nel software disposti in una forma di torta a strati, in cui ogni strato poggia su un livello inferiore. In questo schema il livello superiore utilizza vari servizi definiti dal livello inferiore, ma il livello inferiore non è a conoscenza del livello superiore. Inoltre, ogni strato di solito nasconde i suoi strati inferiori dagli strati sopra, quindi il livello 4 utilizza i servizi del livello 3, che utilizza i servizi del livello 2, ma il livello 4 non è a conoscenza del livello 2. (Non tutte le architetture di stratificazione sono opache come questa , ma la maggior parte è — o meglio la maggior parte è per lo più opaca.)

La scomposizione di un sistema in livelli presenta numerosi vantaggi importanti.

• È possibile comprendere un singolo livello come un insieme coerente senza sapere molto sugli altri livelli. Puoi capire come costruire un servizio FTP su TCP senza conoscere i dettagli di come funziona Ethernet.

• È possibile sostituire i livelli con implementazioni alternative degli stessi servizi di base. Un servizio FTP può essere eseguito senza modifiche su Ethernet, PPP o qualunque altra società via cavo.

• Riducete al minimo le dipendenze tra i livelli. Se la società via cavo cambia il suo sistema di trasmissione fisica, a condizione che faccia funzionare l'IP, non è necessario modificare il nostro servizio FTP.

• I livelli sono buoni posti per la standardizzazione. TCP e IP sono standard perché definiscono come dovrebbero funzionare i loro layer.

• Una volta creato un livello, è possibile utilizzarlo per molti servizi di livello superiore. Pertanto, TCP / IP viene utilizzato da FTP, telnet, SSH e HTTP. Altrimenti, tutti questi protocolli di livello superiore dovrebbero scrivere i propri protocolli di livello inferiore. Dalla biblioteca di Kyle Geoffrey Passarelli

La stratificazione è una tecnica importante, ma ci sono aspetti negativi.

• I livelli racchiudono bene alcune cose, ma non tutte. Di conseguenza, a volte si ottengono modifiche a cascata. L'esempio classico di ciò in un'applicazione enterprise a più livelli è l'aggiunta di un campo che deve essere visualizzato sull'interfaccia utente, deve essere nel database e quindi deve essere aggiunto a ogni livello intermedio.

• Livelli aggiuntivi possono danneggiare le prestazioni. Ad ogni livello le cose in genere devono essere trasformate da una rappresentazione all'altra. Tuttavia, l'incapsulamento di una funzione sottostante spesso fornisce guadagni di efficienza che più che compensano. Un livello che controlla le transazioni può essere ottimizzato e quindi renderà tutto più veloce. Ma la parte più difficile di un'architettura a strati è decidere quali strati avere e quale dovrebbe essere la responsabilità di ogni strato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.