15

Ho lavorato su a project, che è una combinazione di un server di applicazioni e un database di oggetti, ed è attualmente in esecuzione su una sola macchina. Qualche tempo fa ho letto a paper che descrive un database relazionale distribuito e ho trovato alcune idee su come applicare le idee in quel documento al mio progetto, in modo che potessi realizzare una versione ad alta disponibilità su un cluster usando uno .Come progettare e verificare i sistemi distribuiti?

Il mio problema è che non ho esperienza nella progettazione di sistemi distribuiti e dei loro protocolli. Non ho seguito i corsi avanzati di CS sui sistemi distribuiti all'università. Quindi sono preoccupato di essere in grado di progettare un protocollo, che non causa deadlock, inedia, split brain e altri problemi.

Domanda: Dove posso trovare un buon materiale sulla progettazione di sistemi distribuiti? Quali metodi ci sono per verificare che un protocollo distribuito funzioni correttamente? Raccomandazioni di libri, articoli accademici e altri sono benvenuti.

risposta

3

Mi è piaciuto il libro Sistemi distribuiti: Principles and Paradigms di Andrew S. Tanenbaum e Maarten van Steen.

+0

Questo sembra essere lo stesso libro che usano nella mia università. Amazon ha recensioni divergenti a riguardo, quindi potrei non comprarlo, ma dargli un'occhiata nella biblioteca universitaria. –

2

A un livello più astratto e formale, Communicating and Mobile Systems: The Pi-Calculus per Robin Milner fornisce un calcolo per la verifica dei sistemi. Esistono varianti del pi-calcolo per la verifica dei protocolli, come il calcolo SPI (la pagina di wikipedia per cui è scomparsa dall'ultima volta che ho guardato) e implementations, alcuni dei quali sono anche strumenti di verifica.

+0

Interessante. Lo darò un'occhiata. –

9

L'apprendimento dell'informatica distribuita non è facile. È un campo davvero vasto che copre aree di comunicazione, sicurezza, affidabilità, concorrenza, ecc., Ognuna delle quali richiederebbe anni per essere padroneggiata. La comprensione alla fine passerà attraverso molte letture e esperienze pratiche. Lei sembra avere un progetto impegnativo per cominciare, in modo da heres la tua occasione :)

I due libri più popolari sul calcolo distribuito sono, credo:

1) Distributed Systems: Concepts and Design - George Coulouris et al.

2) Distributed Systems: Principles and Paradigms - A. S. Tanenbaum e M. Van Steen

Entrambi questi libri danno un'ottima introduzione ad approcci correnti (inclusi i protocolli di comunicazione) che vengono utilizzati per costruire sistemi distribuiti di successo. Personalmente ho usato principalmente quest'ultimo e ho trovato che fosse un testo eccellente. Se pensi che le recensioni su Amazon non siano molto buone, è perché la maggior parte dei lettori confronta questo libro con altri libri scritti da A.S. Tanenbaum (che IMO è uno dei migliori autori nel campo dell'informatica) che è scritto francamente meglio.

PS: Mi pongo davvero dubbi sulla necessità di progettare e verificare un nuovo protocollo. Se si sta lavorando con server e database di applicazioni, probabilmente è già disponibile ciò di cui si ha bisogno.

+1

La sfida intellettuale è stata la mia ragione principale per l'avvio di questo progetto: è il programma più complesso che ho fatto. Anche se nessuno lo userà, imparerò molte cose sui sistemi distribuiti e su altri argomenti complessi. :) –

12

Ho imparato molto guardando ciò che è stato pubblicato sulle enormi piattaforme basate sul web e in particolare sul modo in cui i loro sistemi si sono evoluti nel tempo per soddisfare la loro crescita.

qui alcuni esempi che ho trovato illuminante:

  • eBay Architecture: Nice storia della loro architettura e le questioni che avevano.Ovviamente non possono usare molto cache per le aste e le offerte, quindi la loro storia è diversa a quel punto da molti altri. A partire dal 2006, hanno distribuito 100.000 nuove linee di codice ogni due settimane e sono in grado di ripristinare una distribuzione in corso in caso di problemi.

  • Paper on Google File System: buona analisi di ciò di cui avevano bisogno, di come lo hanno implementato e di come si comporta in produzione. Dopo aver letto questo, ho trovato meno spaventoso costruire parti dell'infrastruttura per soddisfare esattamente le mie esigenze, se necessario, e che una tale soluzione può e probabilmente dovrebbe essere abbastanza semplice e diretta. C'è anche un sacco di cose interessanti in rete (compresi i video di YouTube) su BigTable e MapReduce, altre parti importanti dell'architettura di Google.

  • Inside MySpace: uno dei pochi siti davvero enormi costruiti nello stack Microsoft. Puoi imparare molto di ciò che non devi fare con il tuo livello dati.

Un ottimo inizio per la ricerca di molte più risorse su questo argomento è la sezione Real Life Architectures sul sito web "Elevata scalabilità". Ad esempio sono un buon riassunto sull'architettura Amazons.

+1

L'URL di "Paper on Google File System" non è valido. Quello corretto è http://research.google.com/archive/gfs.html. –

1

Un buon libro è Birman Reliable Distributed Systems, sebbene abbia i suoi detrattori.

Se si desidera verificare formalmente il protocollo, è possibile consultare alcune delle tecniche di Lynch Distributed Algorithms.

È probabile che qualsiasi protocollo che si sta tentando di implementare sia stato progettato e analizzato in precedenza. Mi limiterò a collegare il mio blog, che copre ad es. algoritmi di consenso.

2

Dove posso trovare un buon materiale sulla progettazione di sistemi distribuiti?

Non sono mai stato in grado di finire il famoso libro da Nancy Lynch. Tuttavia, trovo che il libro di Sukumar Ghosh Distributed Systems: An Algorithmic Approach sia molto più facile da leggere e, se necessario, rimanda ai documenti originali.

È tuttavia vero che non ho letto i libri da Gerard Tel e Nicola Santoro. Forse sono ancora più facili da leggere ...

Quali metodi ci sono per verificare che un protocollo distribuito funzioni correttamente?

Al fine di esaminare le possibilità (e anche al fine di comprendere la domanda), penso che sia utile per avere una panoramica dei possibili strumenti dal libro Software Specification Methods.

La mia decisione finale era di imparare TLA +. Perché?Anche se il linguaggio e gli strumenti sembrano migliori, ho davvero deciso di provare TLA + perché il ragazzo dietro di esso è Leslie Lamport. Cioè, non solo una figura di spicco sui sistemi distribuiti, ma anche l'autore di Latex! È possibile ottenere il TLA+ book e several examples gratuitamente.