Vai al contenuto principale
BlogIl networkingUtilizzate un VLAN o un VPC per proteggere la vostra applicazione con un'architettura a tre livelli

Utilizzate un VLAN o un VPC per proteggere la vostra applicazione con l'architettura a tre livelli

L'architettura a tre livelli utilizza un livello dati, applicazione e presentazione.

L'isolamento della rete in un VPC offre notevoli vantaggi in termini di sicurezza, tra cui la possibilità di collaborare in privato e di archiviare correttamente le informazioni sensibili.

Per quanto riguarda gli sviluppatori, l'isolamento della rete consente anche di distribuire applicazioni web a più livelli. Il tiering dell'applicazione consente di segmentare i livelli con e senza accesso a Internet. Questo viene spesso utilizzato per isolare il livello del database dalla rete Internet pubblica, consentendo al contempo di prelevare le patch e gli aggiornamenti software da un livello superiore anziché direttamente dalla rete Internet pubblica. Oltre a ridurre la superficie di attacco, questo può consentire distribuzioni multiregionali.

Esistono numerosi modi per gestire più livelli, ma in genere si può fare affidamento su alcune forme di base che massimizzano la scalabilità, la sicurezza e l'affidabilità. Uno dei progetti più comuni è l'architettura a tre livelli, particolarmente diffusa negli ambienti basati sul cloud.

Un'applicazione a tre livelli è costituita da tre livelli diversi che risiedono su server diversi e possono essere sviluppati e amministrati con un elevato grado di indipendenza. Queste parti sono:

  1. Presentazione: L'interfaccia esterna che gestisce la comunicazione tra l'utente e l'applicazione, tipicamente costituita da un server web con HTML e codice di sviluppo web.
  2. Applicazione: Un'applicazione personalizzata che fornisce la logica di business necessaria e che unisce l'applicazione.
  3. Dati: Un sistema di database per la memorizzazione e il recupero dei dati utilizzati con l'applicazione.

Questi tre livelli servono come servizi separati che comunicano attraverso API basate sulla rete. Per motivi di sicurezza e di prestazioni, spesso i livelli Applicazione e Dati devono risiedere all'interno della stessa rete locale dietro un firewall comune, ma la separazione di ogni livello offre la possibilità di distribuire ogni componente su hardware diverso o addirittura in luoghi fisici diversi. La flessibilità in questo caso dipenderà drasticamente dai requisiti dell'applicazione.

Il diagramma seguente mostra una visione reale di un'applicazione Web di base a tre livelli. Il server Web nel livello di presentazione fornisce un'interfaccia all'utente che lavora in una finestra del browser. All'estremità opposta, il livello Dati assume la forma di un database, che può essere un singolo sistema o un cluster presentato alla rete come un'unica entità. Le opzioni open source più diffuse per il livello Database includono MySQL, MariaDB e PostgreSQL per l'SQL e MongoDB e Cassandra per il NoSQL.

Figura 1: L'architettura a tre livelli divide un'applicazione web in un livello di presentazione, un livello di applicazione e un livello di dati.

Tra il server web e il database si trova il livello di applicazione, dove probabilmente si trascorrerà la maggior parte del tempo di codifica. Il livello di applicazione contiene il codice personalizzato e la logica di business necessaria affinché l'applicazione raggiunga i suoi obiettivi. Sul front-end, il server web invia le query al livello Applicazione. Il livello Applicazione risponde al server Web e quest'ultimo formatta i dati e li presenta all'utente. Nel back end, il livello applicativo interroga il database, riceve i dati e li elabora per aggiungere informazioni e approfondimenti all'utente.

Per fare un esempio molto semplice, il database potrebbe memorizzare i dati di vendita di un'azienda. L'utente inserisce una richiesta per ricevere le vendite medie giornaliere di un prodotto specifico in una località specifica per un certo intervallo di tempo. Il server Web invia la richiesta al livello Applicazione. L'Application tier formula una query al database, riceve i dati grezzi, esegue i calcoli necessari e invia una risposta al server web.

Figura 2: un utente richiede un insieme di informazioni al livello di presentazione, che viene tradotto in una query al database dal livello applicativo.

Non esiste una soluzione conveniente per il livello Applicazione che sia equivalente, ad esempio, a un server web Apache per il livello Presentazione o a un database MongoDB per il livello Dati. Al contrario, il codice personalizzato viene tipicamente scritto in Python, PHP o Ruby per il livello applicativo. Tuttavia, esistono alcuni framework di programmazione che consentono di scrivere il codice in modo più efficiente, come Django (per Python), Rails (per Ruby) e Symfony (per PHP).

Il livello Applicazione potrebbe, in teoria, essere combinato con il livello Presentazione, fornendo al server Web il codice necessario per le query dirette a un database, ma questo sarebbe poco pratico per la maggior parte della logica aziendale complessa e annullerebbe molti dei vantaggi della segmentazione delle applicazioni.

Uno dei vantaggi più importanti è l'aumento della sicurezza grazie alla riduzione della superficie di attacco. Come mostrato nella Figura 1, una soluzione a tre livelli riduce al minimo la parte dell'applicazione che deve risiedere davanti al firewall. Il server Web comunica attraverso un sistema di sicurezza API. Il resto dell'attività è dietro il firewall e, cosa fondamentale, in uno spazio di indirizzi privato non accessibile da Internet. Le iniezioni SQL, in particolare, sono una delle vulnerabilità più comuni e una delle più distruttive. Queste possono essere prevenute isolando e proteggendo tutte le comunicazioni dirette con il database.

Un altro vantaggio dell'applicazione a tre livelli è l'affidabilità. Un'interruzione in un livello ha meno probabilità di influenzare gli altri livelli quando ogni livello viene eseguito su un server separato o separato ulteriormente su hardware diverso o su un altro centro dati. Questo ci offre anche un potenziale di scalabilità. Poiché i componenti operano in modo indipendente, possono crescere in modo indipendente. Ad esempio, se l'accesso al database è un collo di bottiglia delle prestazioni, è possibile aggiungere nodi al cluster del database con un'interruzione minima del funzionamento complessivo.

Un approccio a tre livelli può anche ottimizzare il processo di sviluppo. Le API che collegano i livelli separano i componenti in modo da favorire l'efficienza nella divisione del lavoro. Gli sviluppatori e gli amministratori del Web possono gestire e mantenere il server Web, mentre gli sviluppatori e gli amministratori del database possono gestire il sistema di database. Nel mezzo, gli specialisti del framework utilizzato per il livello di applicazione possono concentrarsi sul codice dell'applicazione. In uno scenario DevOps, ad esempio, gli sviluppatori di applicazioni possono costruire e testare una nuova versione del codice dell'applicazione offline, cambiandola facilmente con un effetto minimo sulle operazioni.

Se state iniziando a costruire un'applicazione web, prendete in considerazione un'architettura a tre livelli. Negli attuali ambienti container e cloud, è facile separare i componenti su sistemi diversi e i vostri sforzi saranno ricompensati da un'applicazione più affidabile, più sicura e più scalabile.

Iniziate oggi stesso a costruire i vostri livelli applicativi su Linode.

Risorse: Introduzione alle VLAN e alle applicazioni cross-data center

Soluzioni Linode: VLAN | Database gestiti


Commenti (1)

  1. Author Photo

    You can eliminate the “NAT” in Figure 1. It’s not needed in an IPv6 world. A proper firewall will suffice.

Lascia una risposta

Il vostro indirizzo e-mail non sarà pubblicato. I campi obbligatori sono contrassegnati da *