Che cos'è esattamente il calcolo distribuito? [chiuso]


14

Cosa costituisce esattamente il calcolo distribuito e in cosa differisce dal calcolo parallelo / simultaneo?

L'uso di mutex e semafori in più thread paralleli che cercano di sincronizzare per l'accesso a una risorsa costituisce un problema nel dominio dell'elaborazione distribuita?

Risposte:


8

Cosa costituisce esattamente il calcolo distribuito?

Il calcolo distribuito è una raccolta intrinsecamente parallela di elementi di elaborazione che comunicano tra loro per affrontare uno o più problemi. Tali elementi di elaborazione sono sufficientemente separati l'uno dall'altro da non essere pratico costruire un tessuto di messaggistica affidabile e tempestivo tra loro, e quindi diventa impossibile che ci sia una conoscenza globale dello stato del sistema. Particolari caratteristiche di messaggistica con sistemi distribuiti sono che i messaggi verranno persi, sarà ottenere incomprensibili, sarà arrivare in ritardo - soluzioni in questo spazio devono tener 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 aggirare i problemi è rendere speciale un singolo elemento di elaborazione, ovvero autorevole per una particolare informazione. Quindi gli altri elementi possono fare riferimento ad esso ogni volta, oppure memorizzare nella cache le informazioni e sperare che non scadano (dal momento che non possono contare sul fatto di essere informati delle modifiche). Questa è la classica architettura client / server.

L'Informatica Internet è un'elaborazione distribuita, ma senza la capacità di controllare ciò che la maggior parte dei nodi distribuiti fa realmente.

Più thread paralleli che provano a sincronizzare per l'accesso a una risorsa costituiscono un problema nel dominio del calcolo distribuito?

Costituiscono una possibile soluzione utile per la creazione del modello client / server, ma a un costo di un aumento potenzialmente drammatico della contesa di risorse. Per le letture, questo non è un grosso problema (a condizione che ci sia abbastanza hardware) ma per le scritture è davvero un grosso problema.

Ciò che si tenta di evitare, tuttavia, sono i blocchi distribuiti. La mancanza di una messaggistica tempestiva affidabile uccide assolutamente i protocolli decisionali distribuiti, a meno che non si usi qualcosa come il protocollo Paxos , ma questo ha molti avvertimenti. Il problema fondamentale con il calcolo distribuito è che "le cose cattive accadono ai messaggi". I protocolli di livello relativamente basso, come TCP, riducono i problemi, ma è ancora possibile rimanere bloccati.


6

Più thread paralleli che provano a sincronizzare per l'accesso a una risorsa costituiscono un problema nel dominio del calcolo distribuito?

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


1
I thread in esecuzione su macchine diverse in pratica non possono essere sincronizzati nel modo tradizionale di mutex e semafori.
Jan Hudec,

@JanHudec Penso che questo sia stato il punto della domanda dell'intervistatore. Senza istruzioni atomiche di test-and-set o di confronto e scambio o memoria condivisa, il calcolo distribuito deve fare affidamento sulla messaggistica tra le macchine per la sincronizzazione. Fortunatamente, ci sono algoritmi che realizzano questo.
Caleb,

Non sono d'accordo con il "fortunatamente". Gli algoritmi sono complicati e non tollerano i guasti, quindi dovrebbero essere evitati.
Jan Hudec,

5

Il calcolo distribuito è un sistema di elaborazione che ha elaborazioni che si verificano 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 generalmente connessioni di rete (socket TCP, ad esempio), ma spesso utilizzano altri protocolli e dispositivi di comunicazione (come DeviceNET, BACNet, SECS-2, Modbus, ecc.) O addirittura protocolli personalizzati per un dispositivo specifico.

I sistemi distribuiti sono in genere molto più complicati dei sistemi progettati per funzionare su un singolo computer. Oltre ai problemi di concorrenza e blocco delle risorse che le applicazioni multi-thread devono affrontare, i sistemi distribuiti devono gestire gli errori di comunicazione e l'elaborazione degli errori dei nodi. 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 di livello N di solito ha almeno N processori diversi (con applicazioni diverse). I sistemi distribuiti sono utilizzati anche in molti sistemi di automazione di fabbrica.

Il write-up sul calcolo distribuito in Wikipedia è la pena di leggere.

In risposta alla tua domanda se un'applicazione multi-thread 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.


3

A rigor di termini "calcolo distribuito" è qualsiasi soluzione che comporta l'elaborazione di una singola transazione / richiesta / calcolo su più di un computer.

Ti imbatterai anche nel termine "Sistemi distribuiti", che è un vero toccasana per windows, unix e altri server di sistemi di piccole dimensioni che originariamente sarebbero stati distribuiti al di fuori del data center centrale. Sebbene sia più normale che questi sistemi vengano implementati all'interno del data center in questi giorni il termine è rimasto bloccato.


3

Per rispondere alla tua domanda generale su ciò che costituisce il calcolo distribuito, consiglierei l'articolo Una nota sul calcolo distribuito di Ann Wollrath, Geoff Wyant, Jim Waldo e Samuel C. Kendall . Copre la storia recente dei sistemi distribuiti e i suoi guasti e propone che il calcolo distribuito richiede di pensare in modo diverso ai problemi coinvolti.

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

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

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

L'unica cosa che aggiungerei è che i mutex e i semafori sono primitivi di blocco di basso livello che ti consentono di distribuire il lavoro su più dispositivi di elaborazione e il loro funzionamento è (di solito) vitale per il successo dell'applicazione. Ovviamente, dipende dal linguaggio e dalla tecnologia utilizzata. Se stai usando Erlang o Scala, probabilmente utilizzerai la concorrenza basata sul modello di Actor anziché la tradizionale concorrenza basata su lock.


2

La parola dice tutto. È necessario eseguire alcune operazioni di elaborazione e se è possibile distribuire parti di tale elaborazione in modo tale che ciascuna elaborazione funzioni indipendentemente dall'altra elaborazione e quindi, quando tutto è completato, si combina il risultato di ciascuna elaborazione per ottenere la risposta del calcolo principale. L'esempio sarebbe: Map-Reduce


1

Avevamo un corso su "sistemi distribuiti" e anche se non ricordo esattamente la definizione, era sulla falsariga di:

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

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

Nel corso del corso abbiamo imparato come implementare transazioni distribuite e blocchi distribuiti. La lezione è che il blocco distribuito è sostanzialmente implementato usando la transazione distribuita, che è il contrario rispetto a ciò che fai localmente, e che non è intrinsecamente tollerante ai guasti, il che sconfigge piuttosto lo scopo di avere il sistema distribuito in primo luogo.

Modifica: tale definizione è per "sistema distribuito" nel senso stretto del sistema operativo o del sistema di database e non solo del sistema client-server. Tutto ciò che soddisfa la prima condizione può essere chiamato distribuito in alcuni contesti.

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


Questo è uno stile particolare di elaborazione distribuita. Ce ne sono altri, e l'unica cosa che condividono davvero è il primo punto. La messaggistica è fondamentale, gli altri ... non così tanto.
Donal Fellows,

1
@DonalFellows: Beh, questo è un sistema distribuito , in un senso di sistema operativo o di database. Lì la migrazione e la tolleranza agli errori sono i punti principali per eseguirli. Il "calcolo" distribuito è tutto ciò che viene eseguito su più nodi.
Jan Hudec,

Bene, in quel caso avrebbe dovuto coprire l'attività di prendere una decisione. È difficile in un sistema distribuito. (Inoltre, la maggior parte dei lavori accademici che ho visto sull'argomento fanno ipotesi totalmente irrealistiche sulla topologia del grafico sottostante, dando conclusioni valide ma inutili.)
Donal Fellows

@DonalFellows: Il corso ovviamente ha riguardato l'attività di decisione e tutto l'arbitrato e ha diviso le cose del cervello (non troppo profondamente, era solo a livello introduttivo). Ma ciò non definisce la proprietà del sistema distribuito. È solo un ostacolo che devi saltare se vuoi crearne uno.
Jan Hudec,

0

Calcolo distribuito il termine "non-marketing" per il calcolo aziendale che potresti sentire molto di più nella vita reale. Tuttavia, l'idea generale come sottolineato da altri è "stai usando più di un computer per fare il lavoro"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.