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.
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.
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.
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' è 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.
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à.
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.
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.
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.
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).
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.
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.
|