# data[].attributes.headline
Organizzazione del server: livelli (o tier)

# data[].attributes.subject
Organizzazione del server: livelli (o tier)

# data[].attributes.body
le architetture client-server  sono organizzate in livelli (tier)  dove ogni livello  funziona da server per i suoi client e viceversa
ci sono tre tipi di funzionalita :
FRONT-END  o  presentation tier  : e l' interfaccia verso l utente
il middle tier
bsck-end : accesso a risorse e dati detto anche data tier

PRESENTATION  LAYER ;   e composto dall insieme  delle procedure o moduli dedicate all acquisizione e alla presentazione dell utente
RESOURCE MANAGEMENT LAYER :   gestisce i dati cioe memorizza e recupera le informazioni persistenti dagli archivi di massa  delle base di dati
BUSINESS LOGIC  LAYER  :  comprende la logica della elaborazione e le definizioni delle relazioni esistenti tra le diverse entita

ARCHITETTURA AD 1 livvelo
l elaborazione era effettuata dall elaboratore centrale e i terminali servivano solo per le fasi di inpout ed output .

ARCHITETTURA A 2 LIVELLI :
ci sono due livelli
un livello server
ed un livello client
abbiamo due modelli il modello thin-client dove il server e responsabile della logica applicativa e gestione dei dati ed il client e responsabile dell esecuzione del softwar di prestazioni
il modello THICK- CLIENT dove il server e responsabile della gestione dei dati mentre il client e responsabile di presentazione e logica applicativa
ARCHITETTURA A 3 LIVELLI:

Una soluzione three-tier tipica prevede, per esempio, un PC dedicato all'interfaccia utente grafica, una workstation o un application server per la business logic e un database server o un mainframe per la gestione dei dati.

Lo schema "three-tier" può essere definito un design pattern, e presenta diverse analogie con il pattern Model-View-Controller. Come MVC, l'architettura three-tier svolge un ruolo importante nella progettazione di applicazioni Web, specialmente basati su Web service.

# data[].attributes.body
I sistemi distribuiti pervasivi sono una nuova generazione di sistemi che solitamente hanno una connessione di rete wireless e sono sottoparti di sistemi più grandi: come i sistemi domestici, le personal area network (PAN), le wearable computing e le reti di sensori.

# data[].attributes.body
es. il WEB (il più grande sistema informativo distribuito) e il DNS (Domain Name System)

# data[].attributes.body
I sistemi di calcolo distribuiti sono generalmente configurati per il calcolo ad alte prestazioni (es. analisi di sistemi complessi, metereologia e calcolo scientifico).
Si possono suddividere in due configurazioni differenti:
-Cluster computing
-Grid computing

# data[].attributes.body
Un sistema distribuito è costituito da un insieme di applicazioni logicamente indipendenti che collaborano attraverso una infrastruttura di comunicazione HW e SW (rete) al perseguimento di obiettivi comuni.
Un sistema informatico si definisce DISTRIBUITO se le applicazioni risiedono su più host che collaborano tra loro (elaborazione distribuita) e il patrimonio informativo viene ospitato da più host diversi (base di dati distribuita).

# data[].attributes.body
-COMPLESSITA'
I sistemi distribuiti sono più complessi di quelli centralizzatii in quanto richiedono strumenti per l' interconnessione degli host e tecniche per l' instradamento corretto dei messaggi e dei dati
-PRODUZIONE DEI NUOVI SOFTWARE
I programmatori hanno dovuto modificare il proprio stile di programmazione per poter realizzare applicazioni distribuite
-SICUREZZA
Si potrebbe creare la possibilità di accedere a dati e e risorse anche a chi non ne ha il diritto nascondendo una evidente debolezza rispetto ai sistemi centrallizzati
-COMUNICAZIONE
Il trasferimento a distanza delle informazioni richiede nuove tipologie di sistemi di telecomunicazioni, sia cablati che wireless

# data[].attributes.body
-AFFIDABILITA'
Principale vantaggio garantito dalla ridondanza che permette il continuo funzionamento del sistema distribuito anche in presenza di guasti; è possibile prevenire le situazioni indesiderate con l'utilizzo di strumenti appositi (es. algoritmi)
-INTEGRAZIONE
Permette l'integrazione di componenti di tipologia HW e SO, il sistema distribuito tramite l'interfaccia rende "trasparenti" i componenti dello strato inferiore permettendogli di comunicare tra di loro
-TRASPARENZA
Il sistema distribuito appare come un singolo elaboratore agli occhi dell'utente
-ECONOMICITA'
Il sistema distribuito possiede un rapporto qualità/prezzo rispetto al sistema centralizzato, grazie alla sua capacità di integrazione
-APERTURA
Permette di avere HW e SW di fornitori diversi:
1) Interoperabilità - elaboratori di diverso tipo possono comporre un unico sistema
2) Portabilità - applicazioni funzionano in differenti SO mantenendo la stessa interfaccia
3) Ampliabilità - crescita del sistema tramite aggiunta di componenti HW e SW
-CONNETTIVITA' E COLLABORAZIONE
I sistemi distribuiti hanno la possibilità di condividere risorse HW e SW, il che porta a vantaggi economici
-PRESTAZIONI E SCALABILITA'
L' aggiunta di risorse e componenti fornisce al sistema distribuito un miglioramento delle prestazioni chiamato "scalabilità orizzontale": la scalabilità permette al sistema distribuito un infinito aumento di risorse, sempre che sia in grado di espandersi
-TOLLERANZA AI GUASTI
La presenza di un guasto non interrompe le funzionalità del sistema, ma al limite ne rallenta i tempi di risposta

# data[].attributes.body
COMUNICAZIONE UNICAST :
Il server comunica con un solo client alla volta accettando una richiesta di connessione  solo se non c’è un altro client connesso
COMUNICAZIONE MULTICAST :
il server comunica con più client alla volta e posso essere connessi più client contemporaneamente

# data[].attributes.body
Si tratta di una nuova tipologia di sistema distribuito in sviluppo negli ultimi anni, le caratteristiche sono:

Nodi di piccole dimensioni(spesso sono sensori);

Nodi spesso mobili;

Tipicamente wireless.

Degli esempi sono i sistemi domotici, i sistemi elettronici sanitari e le reti di sensori di monitoraggio ambientale.

# data[].attributes.body
È costituito da un insieme di host che gestiscono una o più risorse i serventi o server e da un insieme di clienti o (client ) che richiedono L accesso ad alcune risorse che sono gestite dal server , inoltre anche un processo server puo diventare client per richiedere una risorsa gestita da un altro server.
Il modello client server gestisce applicazioni con le seguenti caratteristiche:
- più utenti che richiedo servizi
- una logica complessa
- archivi di grandi dimensioni con organizzazione di dati complessa e distribuita
- notevoli requisiti di sicurezza
-sistemi transazionali
FUNZIONAMENTO CLIENT-SERVER :
Il client manda la richiesta al server
Il server (in attesa) riceve la richiesta
Il server esegue il servizio richiesto dal client
Il server manda la risposta al client
Il client riceve la risposta.

# data[].attributes.body
Si distinguono in:

Cluster Computing (calcolo scientifico-ingegneristico);

Grid Computing (SETI);

Cluster Computing
È composto da un insieme di nodi di rete con le stesse caratteristiche Hardware e Software. Questi nodi di rete si trovano nello stesso posto fisico (RACK) e sono collegati da una LAN rapida (>10Gb/s). Il sistema è gestito da un computer.

Grid Computing
È un sistema decentralizzato geograficamente composto da molti nodi collegati a griglia. Hanno componenti Hardware e Software diversi da dispositivo a dispositivo. Questo sistema viene adottato dagli enti che, pur non avendo il budget per un Cluster Computing, necessitano di un sistema distribuito in grado di fornire alte prestazioni di condivisione ed analisi dei dati.

# data[].attributes.body
Sono distinti in tre categorie:

1. Sistemi Distribuiti Informativi (Client-Server e Peer-To-Peer);

2. Sistemi Distribuiti di Calcolo;

3. Sistemi Distribuiti Pervasivi;

# data[].attributes.body
E' uno strato SW collocato tra i sistemi operativi ed i programmi applicativi. Ha lo scopo di realizzare la comunicazione e la interazione tra i diversi componenti SW di un sistema distribuito, mascherando la complessità allo sviluppatore, tramite le API, fornendogli operazioni primitive di sistema.

# data[].attributes.body
Tutte le macchine che eseguono più istruzioni su più flussi di dati(Es. una macchina con un multiprocessore).
Si distinguono in:

Multiprocessore (la memoria interna è condivisa tra i processori);

Multicomputer (la memoria è privata per ogni dispositivo);

# data[].attributes.body
Tutte le macchine che eseguono più istruzioni su un unico flusso di dati(Es. modello usato nel criptaggio).

# data[].attributes.body
Tutte le macchine che compiono la stessa istruzione su flussi di dati differenti(Es. scheda video).

# data[].attributes.body
Tutte le macchine che eseguono un'istruzione alla volta su un flusso di dati(Es. una macchina con un solo processore).

# data[].attributes.body
Con il miglioramento tecnologico, i processori hanno raggiunto il limite fisico di potenza di calcolo e, per aumentarne ulteriormente la potenza, si è passati da sistemi centralizzati a sistemi distribuiti.
La Classificazione di Flynn li distingue per il:

Flusso di dati;

Flusso d' informazioni (d'istruzioni);