Che cosa è esattamente il calcolo distribuito? [chiuso]

14

Che cosa costituisce esattamente il calcolo distribuito e in che cosa differisce dal calcolo parallelo / concorrente?

L'uso di mutex e semafori in più thread paralleli che tentano la sincronizzazione per l'accesso a una risorsa costituisce un problema nel dominio del calcolo distribuito?

    
posta rdasxy 19.10.2011 - 05:06
fonte

8 risposte

8

What exactly constitutes distributed computing?

Il calcolo distribuito è una raccolta di elementi di elaborazione in intrinsecamente che comunicano tra loro per affrontare uno o più problemi. Questi elementi di elaborazione sono sufficientemente separati l'uno dall'altro da non essere pratico costruire tra loro un tessuto di messaggistica affidabile e tempestivo, e quindi diventa impossibile che ci sia una conoscenza globale dello stato del sistema. Particolari caratteristiche della messaggistica con sistemi distribuiti sono che i messaggi saranno persi, saranno ingarbugliati, saranno ritardati - le soluzioni in questo spazio devono essere prese conto di questo. Pertanto, la programmazione distribuita riguarda la gestione di reti e messaggi, il parallelismo e la mancanza di informazioni globali.

Il metodo più semplice per risolvere i problemi è rendere speciale un singolo elemento di elaborazione, cioè autorevole per una particolare informazione. Quindi gli altri elementi possono rinviarlo ogni volta, o memorizzare le informazioni nella cache e sperare che non vadano fuori data (dato che non possono contare sul fatto di essere informati delle modifiche). Questa è la classica architettura client / server.

L'elaborazione informatica è computerizzata, ma senza la capacità di controllare ciò che la maggior parte dei nodi distribuiti realmente fa.

Do multiple parallel threads trying to synchronize for access to a resource constitute a problem in the domain of distributed computing?

Costituiscono una possibile soluzione che è utile quando si costruisce il modello client / server, ma a un costo di un aumento potenzialmente drammatico del conflitto di risorse. Per le letture, non è un grosso problema (a patto che ci sia abbastanza hardware), ma per le scritture è un grosso problema.

Quello che cerchi di evitare è il blocco distribuito. La mancanza di una messaggistica affidabile e affidabile elimina assolutamente i protocolli decisionali distribuiti, a meno che non si utilizzi qualcosa come il protocollo Paxos , ma c'è un sacco di avvertimenti. Il problema fondamentale del calcolo distribuito è che "le cose brutte capitano ai messaggi". Protocolli di livello relativamente basso, come il TCP, riducono i problemi, ma puoi ancora venire scollato.

    
risposta data 19.10.2011 - 10:40
fonte
6

Do multiple parallel threads trying to synchronize for access to a resource constitute a problem in the domain of distributed computing?

Lo fanno se questi thread possono essere eseguiti su macchine diverse, o anche se sono in esecuzione sulla stessa macchina ma in processi diversi.

    
risposta data 19.10.2011 - 05:22
fonte
6

Il calcolo distribuito è un sistema informatico che ha un'elaborazione che si verifica su computer diversi (ad esempio su un sistema distribuito). I singoli programmi comunicano tra loro attraverso una serie di canali di comunicazione. Questi canali sono in genere connessioni di rete (ad esempio socket TCP), ma spesso utilizzano altri protocolli e dispositivi di comunicazione (come DeviceNET, BACNet, SECS-2, Modbus, ecc.) O persino protocolli personalizzati per un dispositivo specifico.

I sistemi distribuiti sono solitamente molto più complicati dei sistemi progettati per essere eseguiti su un singolo computer. Oltre ai problemi di concomitanza e di blocco delle risorse che le applicazioni multi-threading devono affrontare, i sistemi distribuiti devono gestire gli errori di comunicazione e l'elaborazione degli errori del nodo. Anche le transazioni (e il rollback) che richiedono l'esecuzione di più processori possono essere complicate.

I sistemi distribuiti assumono molte forme e sono attualmente utilizzati in molte applicazioni. Le applicazioni Web sono sistemi distribuiti. Un sistema N-Tiered di solito ha almeno N processori diversi (con diverse applicazioni). I sistemi distribuiti vengono utilizzati anche in molti sistemi di automazione industriale.

La scrittura sull'informatica distribuita in Wikipedia vale la pena leggere.

In risposta alla domanda su se un'applicazione multithreading costituisce un'applicazione distribuita - se i thread sono in esecuzione su un singolo computer, il sistema non viene distribuito. Deve risolvere alcuni dei problemi inerenti ai sistemi distribuiti, ma non tutti.

    
risposta data 19.10.2011 - 09:02
fonte
3

In senso stretto "calcolo distribuito" è una soluzione che implica l'elaborazione di una singola transazione / richiesta / calcolo su più di un computer.

Si incontrerà anche il termine "Sistemi distribuiti", che è un termine generico per Windows, Unix e altri server di piccoli sistemi che inizialmente sarebbero stati distribuiti al di fuori del centro dati centrale. Sebbene sia più normale che questi sistemi vengano implementati all'interno del data center, in questi giorni il termine è rimasto bloccato.

    
risposta data 19.10.2011 - 06:27
fonte
3

Per rispondere alla tua domanda generale su cosa costituisce il calcolo distribuito, ti consiglio il documento Una nota sul calcolo distribuito di Ann Wollrath, Geoff Wyant, Jim Waldo e Samuel C. Kendall . Copre la storia recente dei sistemi distribuiti e dei suoi fallimenti, e propone che l'informatica distribuita richieda di pensare in modo diverso ai problemi coinvolti.

Sebbene nel documento non siano menzionati né mutex né semafori, fornisce informazioni preziose sulla corretta progettazione di un sistema software distribuito.

Per quanto riguarda il motivo per cui il tuo intervistatore ha chiesto di mutex e semafori, sono d'accordo con @Caleb:

They do if those threads could be running on different machines, or even if they're running on the same machine but in different processes.

L'unica cosa che aggiungerei è che i mutex e i semafori sono primitive di blocco a basso livello che consentono di distribuire il lavoro su più dispositivi informatici, e il loro funzionamento è (di solito) vitale per il successo dell'applicazione. Ovviamente, dipende dalla lingua e dalla tecnologia utilizzata. Se stai usando Erlang o Scala, probabilmente utilizzerai la concorrenza basata sul modello degli attori piuttosto che la concorrenza tradizionale basata su lock.

    
risposta data 19.10.2011 - 13:05
fonte
2

La parola dice tutto. È necessario eseguire alcune operazioni di elaborazione e se è possibile distribuire parti di questo calcolo in modo tale che ogni elaborazione funzioni indipendentemente dall'altra elaborazione e, al termine, si combini il risultato di ogni elaborazione per ottenere la risposta del calcolo principale. Esempio: Map-Reduce

    
risposta data 19.10.2011 - 08:11
fonte
1

Abbiamo avuto un corso su "sistemi distribuiti" e mentre non ricordo esattamente la definizione, era sulla falsariga di:

  1. può essere eseguito su più nodi separati che comunicano tramite messaggi (non può condividere memoria)
  2. Gli oggetti
  3. possono essere migrati tra i nodi
  4. Gli oggetti
  5. mantengono la loro identità durante la migrazione e possono essere indirizzati in modo trasparente durante la migrazione
  6. Gli oggetti
  7. non dipendono dal nodo che li ha creati
  8. il sistema può gestire l'aggiunta e la rimozione di nodi

(Credo che ce ne fossero ancora e io non sono sicuro dell'ultimo punto)

Ora nel corso abbiamo imparato come implementare la transazione distribuita e il blocco distribuito. La lezione è che il blocco distribuito è fondamentalmente implementato usando la transazione distribuita, che è il contrario rispetto a ciò che si fa localmente, e che non è intrinsecamente tollerante ai guasti, il che piuttosto sconfigge lo scopo di avere un sistema distribuito in primo luogo. p>

Modifica: Quella definizione è per "sistema distribuito" nel senso stretto del sistema operativo o del sistema di database e al contrario del semplice sistema client-server. Qualunque cosa soddisfi la prima condizione può essere chiamata distribuita in alcuni contesti.

Per coincidenza la definizione corrisponde alla differenza tra i sistemi di controllo di versione distribuiti e tradizionali, che sono tutti almeno client-server e spesso anche replicati.

    
risposta data 19.10.2011 - 11:48
fonte
0

Il calcolo distribuito è il termine "non di marcatura" per l'informatica aziendale che puoi sentire molto di più nella vita reale. Tuttavia, l'idea generale evidenziata da altri è "stai usando più di un computer per lavorare"

    
risposta data 19.02.2012 - 22:04
fonte

Leggi altre domande sui tag