Concetto: Pattern di distribuzione
I pattern di distribuzione evidenziano l'importanza degli aspetti della distribuzione della soluzione del sistema e fino a che punto influenzano le altre decisioni strutturali.
Relazioni
Descrizione principale

Nodi, processori e unità

I processori e le unità sono degli stereotipi comuni di nodo. La distinzione fra i due può sembrare difficile da valutare, poiché molte unità ora contengono le proprie CPU. Tuttavia la distinzione fra processori e unità risiede nel tipo di software che viene eseguito su di essi. I processori eseguono programmi/software scritti esplicitamente per il sistema in corso di sviluppo. I processori sono dei dispositivi di calcolo per scopi generici che dispongono di capacità di calcolo, memoria e capacità di esecuzione.

Le unità eseguono il software scritto che controlla la funzionalità dell'unità stessa. Le unità in genere sono collegate ad un processore che le controlla. Di solito eseguono del software incluso e non sono in grado di eseguire programmi di tipo generico. La loro funzionalità viene controllata da software driver.

Pattern di distribuzione

Nei sistemi esistono diversi tipi di pattern distribuzione tipici, a seconda della funzionalità del sistema e del tipo di applicazione. In molti casi il pattern di distribuzione viene utilizzato informalmente per descrivere l'"architettura" del sistema, anche se l'architettura completa comprende questo e molte altre cose. Ad esempio, molte volte un sistema viene descritto come sistema con 'architettura client-server', anche se questo è solo l'aspetto di distribuzione dell'architettura. Questo serve ad evidenziare l'importanza degli aspetti di distribuzione del sistema e fino a che punto influenzano le altre decisioni strutturali.

I pattern di distribuzione descritti di seguito implicano determinate caratteristiche di sistema, caratteristiche di prestazione e architetture del processo. Ognuna risolve determinati problemi ma pone anche delle sfide uniche.

Architetture client/server

Nelle cosiddette "architetture client/server" esistono dei nodi processore di rete specializzati denominati client e dei nodi denominati server. I client sono dei fruitori di servizi forniti da un server. Un client spesso serve un unico utente e spesso gestisce i servizi di presentazione utente finale (GUI), mentre il server in genere fornisce i servizi a diversi client contemporaneamente; i servizi forniti di solito sono servizi di database, di sicurezza e di stampa. La "logica dell'applicazione", o logica di business, in questi sistemi viene in genere distribuita sia nel client che nel server. La distribuzione della logica di business viene denominata partizionamento dell'applicazione.

Nella figura che segue, il client A mostra un esempio di architettura a 2 livelli, con la maggior parte della logica applicativa ubicata sul server. Il client B mostra una tipica architettura a 3 livelli, con i servizi di business implementati su un server di oggetti business. Il client C mostra una tipica applicazione basata su web.

Il diagramma è descritto nel contenuto.

Variazioni delle architetture client-server

Nei sistemi client/server tradizionali, la maggior parte della logica di business viene implementata sui client; ma determinate funzionalità si adattano meglio ad essere collocate sul server, ad esempio la funzionalità che accede spesso ai dati memorizzati sul server. Facendo ciò, è possibile diminuire il traffico di rete, che nella maggior parte dei casi è abbastanza dispendioso (è di un ordine di grandezza o due più lento rispetto alla comunicazione fra processi).

Alcune caratteristiche:

  • Un sistema può essere composto da diversi tipi di client, per esempio:
    • Workstation utente
    • Computer di rete
  • I client ed i server comunicano utilizzando varie tecnologie, come le tecnologie CORBA/IDL o RPC (Remote-Procedure Call).
  • Un sistema può essere composto da diversi tipi di server differenti, per esempio:
    • Server di database, che gestiscono le macchine database come Sybase, Ingres, Oracle, Informix
    • Server di stampa, che gestiscono la logica driver come la coda di una stampante specifica
    • Server di comunicazione (TCP/IP, ISDN, X.25)
    • Server Window Manager (X)
    • Server di file (NFS sotto UNIX)

L'architettura a 3 livelli

L''Architettura a 3 livelli' è un caso speciale di architettura client/server in cui la funzionalità nel sistema è suddivisa in 3 partizioni logiche: servizi applicativi, servizi di business e sevizi di dati. Le 'partizioni logiche' di fatto possono essere associate a 3 o più nodi fisici.

Il diagramma è descritto nel contenuto.

Esempio di architettura a 3 livelli

Il partizionamento logico in questi tre 'livelli' riflette un'osservazione su come la funzionalità delle tipiche applicazioni da ufficio tenda ad essere implementata e come cambia. I servizi applicativi, che si occupano principalmente delle problematiche di presentazione GUI, tendono ad andare in esecuzione su workstation di desktop dedicate, con un ambiente grafico di sistema operativo. Le modifiche alla funzionalità tendono ad essere spesso dettate dalla facilità d'uso delle considerazioni estetiche, problematiche essenzialmente di tipo fattore umano.

I servizi di dati tendono ad essere implementati utilizzando la tecnologia server di database, che in genere va in esecuzione su uno o più nodi ad alte prestazioni, ad alta banda larga che servono centinaia o migliaia di utenti, connessi ad una rete. I servizi di dati tendono a cambiare quando cambiano la rappresentazione e le relazioni fra le informazioni memorizzate.

I servizi di business riflettono la conoscenza codificata dei processi di business. Manipolano e sintetizzano le informazioni ottenute dai servizi di dati e le forniscono ai servizi applicativi. I servizi di business in genere vengono utilizzati da molti utenti in comune, quindi tendono ad essere collocati su server specializzati, anche se possono risiedere sugli stessi nodi dei servizi di dati.

Il partizionamento della funzionalità secondo queste linee fornisce un pattern relativamente affidabile per la scalabilità: aggiungendo dei server e riequilibrando l'elaborazione nei server di dati e di business, si raggiunge un alto grado di scalabilità.

'Architettura Client fat'

Il client è "fat" quando quasi tutto viene eseguito su quel client (tranne che in una variazione, denominata 'architettura a 2 livelli', in cui i servizi di dati vengono collocati su un nodo separato). I servizi applicativi, i servizi di business ed i servizi di dati risiedono tutti su una macchina client; il server di database in genere è su un'altra macchina.

Il diagramma è descritto nel contenuto.

Architettura tradizionale a 2 livelli "Client fat"

I 'client fat' sono relativamente semplici da progettare e costruire ma più difficili da distribuire (tendono ad essere grandi e monolitici) e gestire. Poiché le macchine client tendono a collocare i dati localmente nella cache per le prestazioni, la coerenza e la congruenza della cache locale tendono ad essere delle problematiche e delle aree bisognose di particolare attenzione. Le modifiche agli oggetti condivisi posizionati in più cache locali sono difficili e costose da coordinare, poiché implicano la diffusione in rete delle modifiche.

'Architettura server fat'

Nella parte opposta dello spettro rispetto al 'client fat' si trova il 'server fat' o 'client anorexic'. Un tipico esempio è un'applicazione browser web che esegue una serie di pagine HTML, dove sul client è presente un'applicazione quasi nulla. Quasi tutto il lavoro si svolge su uno o più server web e server di dati.

Il diagramma è descritto nel contenuto.

Applicazione web

Le applicazioni web sono facili da distribuire e da modificare. Sono relativamente poco costose da sviluppare e supportare (poiché la gran parte dell'infrastruttura applicativa viene fornita dal browser e dal server web). Tuttavia possono non fornire il grado di controllo desiderato sull'applicazione e tendono a saturare la rete rapidamente se non sono ben progettate (e a volte anche quando sono progettate bene).

Architettura client/server distribuita

In questa architettura i servizi applicativi, di business e di dati risiedono su nodi differenti, potenzialmente con la specializzazione di server nei livelli dei servizi di business e di dati. Una realizzazione completa di un'architettura a 3 livelli.

Architettura Peer-to-Peer

Nell'architettura peer-to-peer, qualsiasi processo o nodo del sistema potrebbe essere sia client che server. La distribuzione della funzionalità si ottiene raggruppando i servizi correlati fra loro per minimizzare il traffico di rete e al contempo massimizzare la produttività e l'utilizzo del sistema. Tali sistemi tendono ad essere complessi e c'è una maggiore necessità di focalizzare l'attenzione su problematiche quali il deadlock (blocco di inattività), starvation fra i processi e gestione degli errori.