Calcolo distribuito: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
→Altri problemi: Aggiunto wikilink |
m Corretto il collegamento Nodo (disambigua) con Nodo (telecomunicazioni) (DisamAssist) |
||
| (40 versioni intermedie di 30 utenti non mostrate) | |||
Riga 1:
Il '''calcolo distribuito''' è un campo dell'[[informatica]] che studia i
== Storia ==
L'uso di processi concorrenti che comunicano con il passaggio di messaggi ha le sue radici nelle architetture di [[Sistema operativo|sistemi operativi]] studiati negli anni 1960. Il primo sistema distribuito diffuso è stato il [[Local area network|local-area network]] come [[Ethernet]] che è stato inventato negli anni 1970.
[[ARPANET]], il predecessore di [[Internet]], è stato introdotto nei tardi anni 1960 e l'ARPANET e-mail è stata inventata nei primi anni 1970. La posta elettronica divenne l'applicazione di maggior successo di ARPANET ed è probabilmente il primo esempio di applicazione distribuita su larga scala. In aggiunta ad ARPANET ed al suo successore Internet, altre prime reti di computer in tutto il mondo sono state [[Usenet]] e [[Fidonet]] dagli anni 1980, entrambe le quali sono state utilizzate per sostenere sistemi distribuiti di discussione.
Lo studio del calcolo distribuito divenne propriamente branca dell'informatica nei tardi anni 1970 e primi 1980. La prima conferenza nel campo “Simposio dei principi del calcolo distribuito”, risale al 1980 e la sua controparte europea “Simposio internazionale sul calcolo distribuito” fu per la prima volta tenuta nel 1985.
== Descrizione ==
La parola distribuito in termini come “sistema distribuito”, “programmazione distribuita”, e “[[algoritmo distribuito]]” originariamente si riferiva a [[rete di computer|reti di computer]] dove singoli computer erano fisicamente distribuiti in certe aree geografiche. I termini sono oggi utilizzati in un più ampio senso, anche quando si riferiscono a [[Processo (informatica)|processi]] autonomi che sono eseguiti sullo stesso computer fisico ed interagiscono tra loro tramite il passaggio di messaggi.
Mentre non c'è una singola definizione di sistema distribuito, le seguenti proprietà sono comunemente usate:
* Ci sono molte
* Le entità comunicano tra loro con il [[passaggio di messaggi]].
In questa trattazione, le entità computazionali verranno chiamate computer o [[Nodo (
Un sistema distribuito può avere un obiettivo comune, come risolvere un grande problema computazionale. Alternativamente, ogni computer può avere il proprio utente con bisogni individuali, e lo scopo del sistema distribuito è di coordinare l'uso delle risorse condivise o fornire servizi di comunicazione all'utente.
Altre tipiche proprietà dei sistemi distribuiti sono
* Il sistema tollera guasti a singoli computer.
* La struttura del sistema ([[topologia di rete]], latenza di rete, numero di computer) non è conosciuta in anticipo, il sistema può consistere in differenti tipi di computer e collegamenti di rete, e può cambiare durante l'esecuzione del programma distribuito.
* Ogni computer ha solamente una vista limitata ed incompleta del sistema. Ogni computer conosce solo una parte dell'input.
=== Calcolo parallelo o distribuito? ===
I termini “calcolo concorrente”, “[[calcolo parallelo]]”, e “calcolo distribuito” hanno molte sovrapposizioni, e non esiste nessuna chiara distinzione tra di loro. Lo stesso sistema può essere caratterizzato sia come “parallelo” sia come “distribuito”; i processori in un sistema distribuito tipico elaborano concorrentemente, in parallelo. Il calcolo parallelo può esser visto come una forma particolare strettamente unita al calcolo distribuito, ed il calcolo distribuito può esser visto come una forma particolare strettamente unita al calcolo parallelo. Tuttavia è possibile classificare sistemi concorrenti come “paralleli” o “distribuiti” tramite i seguenti criteri:
* Nel calcolo parallelo tutti i processori devono accedere ad una [[memoria condivisa]]. La memoria condivisa può essere usata per lo scambio di informazioni tra i processori.
* Nel calcolo distribuito ogni processore ha la propria memoria privata ([[memoria distribuita]]). Le informazioni sono scambiate grazie al passaggio di messaggi tra i processori.
L'immagine a destra illustra la differenza tra sistemi distribuiti e sistemi paralleli. [[
(c) Sistema parallelo.]] La figura (a) è la vista schematica di un tipico sistema
La situazione è ulteriormente complicata dai tradizionali usi dei termini algoritmo parallelo e distribuito che non corrispondono alla definizione di sistemi paralleli e distribuiti. Tuttavia, come regola generale, il calcolo parallelo ad alte prestazioni con memoria condivisa multiprocessore usa algoritmi paralleli mentre per la coordinazione di sistemi distribuiti su larga scala si usano algoritmi distribuiti.
== Fondamenti teorici ==
Riga 77 ⟶ 54:
'''Algoritmi paralleli nel modello a passaggio di messaggi'''
* Il progettista dell'algoritmo sceglie la struttura della rete nonché il programma eseguito da ogni computer
* Sono usati modelli come circuiti booleani e reti di ordinamento. Un [[
'''Algoritmi distribuiti nel modello a passaggio di messaggi'''
* Il progettista dell'algoritmo sceglie solamente il programma. Tutti i computer eseguono lo stesso programma. Il sistema deve funzionare correttamente a prescindere dalla struttura della rete.
* Un modello comunemente usato è il grafo con
Nel caso di algoritmi distribuiti i problemi computazionali sono tipicamente legati ai grafi. Spesso il grafo che descrive la struttura della rete di computer è l'istanza del problema. Questo caso è illustrato nel seguente esempio.
Riga 88 ⟶ 65:
'''Algoritmi centralizzati'''
* Il grafo G è codificato come una stringa, e la stringa è data come input ad un computer. Il programma trova una colorazione del grafo, codifica la colorazione come una stringa e
'''Algoritmi paralleli'''
Riga 107 ⟶ 84:
Negli algoritmi paralleli un'altra risorsa in aggiunta a tempo e spazio è il numero di computer. Infatti, spesso c'è un bilanciamento tra il tempo d'esecuzione ed il numero di computer: il problema può essere risolto velocemente se ci sono più computer che elaborano in parallelo. Se un problema decisionale può essere risolto in tempo polilogaritmico usando un numero polinomiale di processori allora il problema si dice che sia in classe NC. La classe NC si può definire altrettanto bene usando il formalismo PRAM o i circuiti booleani. Le macchine PRAM possono simulare efficientemente circuiti booleani e viceversa.
Nelle analisi degli algoritmi distribuiti è data solitamente più attenzione
Questa misura di complessità è strettamente collegata al diametro della rete. Sia D il diametro della rete. Da un lato, qualsiasi problema computazionale può essere risolto banalmente in un sistema sincrono distribuito in
Dall'altro lato, se il tempo d'esecuzione dell'algoritmo è molto inferiore a D turni di comunicazione, allora i nodi della rete devono produrre i loro risultati senza avere la possibilità di ottenere informazioni circa le parti lontane della rete. In altre parole, i nodi devono prendere decisioni a livello globale basate su informazioni che sono disponibili nei loro paraggi. Molti algoritmi distribuiti sono conosciuti con il tempo d'esecuzione molto più piccolo di D turni, e la comprensione di quali problemi possono essere risolti da tali algoritmi è uno degli obiettivi centrali della ricerca di questo campo.
Riga 116 ⟶ 93:
=== Altri problemi ===
I problemi computazionali
Ci sono anche fondamentali sfide che sono uniche per il calcolo distribuito. Il primo esempio è la sfida riguardante il fault-tolerance. Esempi di problemi connessi includono problemi di consenso, Byzantine fault tolerance, e auto stabilizzazione.
Riga 133 ⟶ 110:
== Architetture ==
Per il calcolo distribuito sono usate varie architetture hardware e software.
La programmazione distribuita di solito cade in uno dei numerosi elementi architettonici di base o categorie: Client-server, architettura 3-tier, architettura N-tier, oggetti distribuiti, loose coupling, tight coupling.
* [[Client server|Client-server]] – Il codice client contatta il server per i dati, che formatta e mostra all
* [[architettura three-tier|Architettura 3-tier]] – Il sistema 3-tier sposta l'intelligenza del client ad un livello intermedio in modo che il client senza stato possa essere utilizzato. Questo semplifica lo spostamento delle applicazioni. La maggior parte delle [[Applicazione web|applicazioni web]] è 3-Tier.
* [[Architettura
* Tight coupled (clustered) – Si riferisce solitamente ad un cluster di macchine che lavorano insieme eseguendo un processo condiviso in parallelo. Il compito è suddiviso in parti che sono
* [[Peer-to-peer]] – Un'architettura dove non sono presenti particolari macchine che forniscono un servizio o gestiscono le risorse di rete. Invece tutte le responsabilità sono uniformemente divise tra tutte le macchine conosciute come "peer". I
* Space based
Un altro aspetto basilare delle architetture di calcolo distribuito è il metodo di comunicazione ed i lavori di coordinamento tra processi concorrenti. Tramite vari protocolli di scambio messaggi, i processi possono comunicare direttamente con un altro, tipicamente con relazione master/slave. Alternativamente, un'architettura con database centrale potrebbe rendere il calcolo distribuito eseguito senza nessuna forma di comunicazione inter processo, utilizzando un database condiviso.
== Applicazioni ==
Ci sono due principali ragioni per usare sistemi distribuiti ed il calcolo distribuito. Primo, la natura dell'applicazione può richiedere l'uso di un network di comunicazione che collega più computer. Per esempio, i dati sono prodotti in una certa locazione fisica e servono in un'altra locazione.
Secondo, sono molti i casi in cui l'uso di un singolo computer sarebbe possibile in linea di principio, ma l'uso di un sistema distribuito è vantaggioso per motivi pratici. Per esempio, può essere più efficiente ottenere il livello prestazionale desiderato usando un [[Computer cluster|cluster]] di diversi computer di fascia bassa, in confronto con un sistema non distribuito e non ci sono single point of failure. Inoltre, un sistema distribuito può essere più facile da espandere e dirigere confronto ad un sistema uniprocessore monolitico.
Esempi di sistemi distribuiti ed applicazioni di calcolo distribuito sono inclusi di seguito:
* Reti di [[Telecomunicazione|telecomunicazioni]]:
** [[Rete telefonica|Reti telefoniche]] e reti cellulari
** Reti di computer come Internet
** [[Wireless sensor network|Reti di sensori senza fili]]
** Algoritmi di [[routing]]
* Applicazioni di rete:
** [[World wide web]] e reti peer-to-peer
** Giochi online multiplayer e comunità di realtà virtuale
** [[Database distribuiti]] e sistemi di gestione di database distribuiti
** [[File System|File systems]] di rete
** Sistemi di elaborazione di informazioni distribuite come sistemi bancari e sistemi di prenotazione delle compagnie aeree.
* Controllo in tempo reale:
** Sistemi di controllo aereo
** Sistemi di controllo industriali
* Calcolo parallelo:
** [[Calcolo scientifico]], incluso il cluster computing, il [[grid computing]] ed altri vari progetti di calcolo volontario; vedere la [[lista dei progetti di calcolo distribuito]].
** Rendering distribuito in computer grafica
== Note ==
Riga 166 ⟶ 167:
'''Siti web'''
* Godfrey, Bill (2002). [http://www.bacchae.co.uk/docs/dist.html A primer on distributed computing] {{Webarchive|url=https://web.archive.org/web/20100225154106/http://www.bacchae.co.uk/docs/dist.html |date=25 febbraio 2010 }}.
* Peter, Ian (2004). [http://www.nethistory.info/History%20of%20the%20Internet/ Ian Peter's History of the Internet]. Retrieved 2009-08-04.
Riga 174 ⟶ 175:
* [[Grid computing]]
* [[BOINC]]
* [[Distribuited thinking]]
* [[Algoritmo dello spaccone]]
== Altri progetti ==
{{interprogetto|
== Collegamenti esterni ==
* {{Collegamenti esterni}}
{{Controllo di autorità}}
{{Portale|Telematica}}
[[Categoria:Calcolo distribuito| ]]
| |||