Un sistema distribuito nella sua definizione più semplice è un gruppo di computer che lavorano insieme e che appaiono come uno all'utente finale. Le macchine condividono uno stato comune, funzionano contemporaneamente e possono funzionare in modo indipendente senza influire sul tempo di attività dell'intero sistema. La verità è che la gestione di tali sistemi è un argomento complesso pieno di insidie.
Panoramica del sistema
Il sistema distribuito consente la condivisione delle risorse (incluso il software) connesse alla rete contemporaneamente.
Esempi di distribuzione del sistema:
- Pila tradizionale. Questi database sono archiviati nel file system di una macchina. Ogni volta che l'utente desidera ricevere informazioni, comunica direttamente con questa macchina. Per distribuire questo sistema di database, è necessario eseguirlo su più PC contemporaneamente.
- Architettura distribuita.
Sistema distribuitoconsente di scalare orizzontalmente e verticalmente. Ad esempio, l'unico modo per gestire più traffico sarebbe aggiornare l'hardware che esegue il database. Questo è chiamato ridimensionamento verticale. Il ridimensionamento verticale è buono fino a un certo limite, dopo il quale anche le migliori apparecchiature non possono far fronte a fornire il traffico richiesto.
Ridimensionare orizzontalmente significa aggiungere più computer, non aggiornare l'hardware su uno. Il ridimensionamento verticale aumenta le prestazioni alle più recenti funzionalità hardware nei sistemi distribuiti. Queste opportunità non sono sufficienti per le aziende tecnologiche con carichi di lavoro da moderati a pesanti. La cosa migliore del ridimensionamento orizzontale è che non ci sono limiti di dimensione. Quando le prestazioni peggiorano, viene semplicemente aggiunta un' altra macchina, che, in linea di principio, può essere eseguita all'infinito.
A livello aziendale, un sistema di controllo distribuito spesso prevede vari passaggi. Nei processi aziendali nei luoghi più efficienti della rete informatica aziendale. Ad esempio, in una distribuzione tipica che utilizza un modello di sistema distribuito a tre livelli, l'elaborazione dei dati viene eseguita su un PC presso la posizione dell'utente, l'elaborazione aziendale viene eseguita su un computer remoto e l'accesso al database e l'elaborazione dei dati vengono eseguiti su un computer completamente diverso che fornisce accesso centralizzato per molti processi aziendali. Tipicamente, questo tipo di calcolo distribuitoutilizza il modello di interazione client-server.
Compiti principali
I compiti principali di un sistema di controllo distribuito includono:
- Trasparenza: ottieni un'unica immagine di sistema senza nascondere agli utenti la posizione, l'accesso, la migrazione, la concorrenza, il failover, il trasferimento, la persistenza e i dettagli delle risorse.
- Apertura: semplifica la configurazione e le modifiche della rete.
- Affidabilità - Rispetto a un singolo sistema di controllo, dovrebbe essere affidabile, coerente e avere un' alta probabilità di mascherare gli errori.
- Prestazioni - Rispetto ad altri modelli, i modelli distribuiti forniscono un aumento delle prestazioni.
- Scalabile: questi sistemi di controllo distribuito devono essere scalabili in termini di territorio, amministrazione o dimensioni.
I compiti dei sistemi di distribuzione includono:
- La sicurezza è un grosso problema in un ambiente distribuito, specialmente quando si utilizzano reti pubbliche.
- Tolleranza ai guasti: può essere difficile quando il modello è costruito con componenti inaffidabili.
- Coordinamento e distribuzione delle risorse - può essere difficile se non ci sono protocolli adeguati o politiche richieste.
Ambiente informatico distribuito
(DCE) è uno standard industriale ampiamente utilizzato che supporta tale calcolo distribuito. Su Internet, fornitori di terze parti offrono alcuni servizi generici,che si adattano a questo modello.
Grid computing è un modello di calcolo con un'architettura distribuita di un gran numero di computer associati alla risoluzione di un problema complesso. Nel modello di grid computing, i server o i personal computer svolgono attività indipendenti e sono liberamente collegati tra loro tramite Internet o reti a bassa velocità.
Il più grande progetto di grid computing è SETI@home, in cui i singoli proprietari di computer si offrono volontari per eseguire alcuni dei loro cicli di elaborazione multitasking utilizzando il proprio computer per il progetto Search for Extraterrestrial Intelligence (SETI). Questo problema informatico utilizza migliaia di computer per scaricare e cercare i dati del radiotelescopio.
Uno dei primi usi del grid computing è stato quello di violare il codice crittografico da parte di un gruppo ora noto come distribuito.net. Questo gruppo descrive anche il proprio modello come calcolo distribuito.
Ridimensionamento del database
La diffusione di nuove informazioni dal master allo slave non avviene all'istante. In effetti, esiste una finestra temporale in cui è possibile ottenere informazioni obsolete. In caso contrario, le prestazioni di scrittura ne risentirebbero, poiché i sistemi distribuiti dovrebbero attendere in modo sincrono la propagazione dei dati. Vengono con alcuni compromessi.
Utilizzando un approccio di database slave, è possibile aumentare in una certa misura il traffico di lettura. Ci sono molte opzioni qui. Ma devi solo dividere il traffico di scrittura in piùserver perché non può gestirlo. Un modo è utilizzare una strategia di replica multi-master. Lì, invece degli slave, ci sono diversi nodi principali che supportano la lettura e la scrittura.
Un altro metodo è chiamato sharding. Con esso, il server è suddiviso in diversi server più piccoli, chiamati shard. Questi shard hanno voci diverse, vengono create regole su quali voci vanno in quale shard. È molto importante creare una regola tale che i dati siano distribuiti uniformemente. Un possibile approccio a questo è definire gli intervalli in base ad alcune informazioni sul record.
Questa chiave shard dovrebbe essere scelta con molta attenzione, poiché il carico non è sempre uguale alle basi di colonne arbitrarie. L'unico frammento che riceve più richieste degli altri è chiamato hotspot e cercano di impedirne la formazione. Una volta divisi, i dati di ricalibrazione diventano incredibilmente costosi e possono comportare notevoli tempi di inattività.
Algoritmi di consenso del database
I DB sono difficili da implementare nei sistemi di sicurezza distribuiti perché richiedono che ogni nodo negozi l'interruzione corretta o l'azione di commit. Questa qualità è nota come consenso ed è un problema fondamentale nella costruzione di un sistema di distribuzione. Raggiungere il tipo di accordo necessario per il problema del "commit" è semplice se i processi coinvolti e la rete sono completamente affidabili. Tuttavia, i sistemi reali sono soggetti a un certo numero dipossibili guasti dei processi di rete, messaggi persi, danneggiati o duplicati.
Questo pone un problema e non è possibile garantire che il consenso corretto venga raggiunto entro un periodo di tempo limitato su una rete inaffidabile. In pratica, ci sono algoritmi che raggiungono il consenso piuttosto rapidamente in una rete inaffidabile. Cassandra in re altà fornisce transazioni leggere attraverso l'uso dell'algoritmo Paxos per il consenso distribuito.
Il calcolo distribuito è la chiave per l'afflusso di elaborazione di big data che è stata utilizzata negli ultimi anni. È un metodo per scomporre un compito enorme, come un totale di 100 miliardi di record, di cui nessun singolo computer è in grado di fare praticamente qualsiasi cosa da solo, in molti compiti più piccoli che possono essere inseriti in una singola macchina. Lo sviluppatore suddivide il suo enorme compito in molti altri più piccoli, li esegue su molte macchine in parallelo, raccoglie i dati in modo appropriato, quindi il problema originale verrà risolto.
Questo approccio ti consente di scalare orizzontalmente - quando c'è un compito importante, aggiungi semplicemente più nodi al calcolo. Queste attività sono state eseguite per molti anni dal modello di programmazione MapReduce associato all'implementazione per l'elaborazione parallela e la generazione di grandi set di dati utilizzando un algoritmo distribuito su un cluster.
Attualmente, MapReduce è in qualche modo obsoleto e porta alcuni problemi. Sono emerse altre architetture che affrontano questi problemi. Vale a dire, Lambda Architecture per distribuitosistemi di elaborazione del flusso. I progressi in quest'area hanno portato nuovi strumenti: Kafka Streams, Apache Spark, Apache Storm, Apache Samza.
Sistemi di replica e archiviazione file
I file system distribuiti possono essere considerati archivi di dati distribuiti. Questo è lo stesso del concetto: archiviare e accedere a una grande quantità di dati su un cluster di macchine che sono un'unica entità. Di solito vanno di pari passo con il calcolo distribuito.
Ad esempio, Yahoo è noto per aver eseguito HDFS su oltre 42.000 nodi per archiviare 600 petabyte di dati dal 2011. Wikipedia definisce la differenza in quanto i file system distribuiti consentono l'accesso ai file utilizzando le stesse interfacce e semantica dei file locali, anziché tramite un'API personalizzata come Cassandra Query Language (CQL).
Hadoop Distributed File System (HDFS) è un sistema utilizzato per l'elaborazione sull'infrastruttura Hadoop. Diffuso, viene utilizzato per archiviare e replicare file di grandi dimensioni (dimensioni GB o TB) su molte macchine. La sua architettura consiste principalmente di NameNodes e DataNodes.
NameNodes è responsabile della memorizzazione dei metadati sul cluster, ad esempio quale nodo contiene blocchi di file. Agiscono come coordinatori di rete, individuando dove archiviare e copiare i file, tenendo traccia dello stato di salute del sistema. I DataNode archiviano semplicemente i file ed eseguono comandi come replica file, nuova scrittura e altri.
Non sorprende che HDFS sia utilizzato al meglio con Hadoop per l'informatica, poiché fornisce consapevolezza delle informazioni sulle attività. I lavori specificati vengono quindi eseguiti sui nodi che archiviano i dati. Ciò consente di utilizzare la posizione dei dati: ottimizza i calcoli e riduce la quantità di traffico sulla rete.
L'Interplanetary File System (IPFS) è un nuovo entusiasmante protocollo/rete peer-to-peer per file system distribuito. Utilizzando la tecnologia Blockchain, vanta un'architettura completamente decentralizzata senza un unico proprietario o punto di errore.
IPFS offre un sistema di denominazione (simile a DNS) chiamato IPNS e consente agli utenti di recuperare facilmente le informazioni. Memorizza il file tramite la versione storica, proprio come fa Git. Ciò consente l'accesso a tutti gli stati precedenti del file. È ancora in fase di forte sviluppo (v0.4 al momento in cui scrivo) ma ha già visto progetti interessati a costruirlo (FileCoin).
Sistema di messaggistica
I sistemi di messaggistica forniscono una posizione centrale per l'archiviazione e la distribuzione dei messaggi all'interno di un sistema comune. Consentono di separare la logica dell'applicazione dalla comunicazione diretta con altri sistemi.
Scala nota: il cluster Kafka di LinkedIn ha elaborato 1 trilione di messaggi al giorno con picchi di 4,5 milioni di messaggi al secondo.
In parole povere, la piattaforma di messaggistica funziona in questo modo:
- Messaggiopassato dall'applicazione che potenzialmente lo crea, chiamato producer, entra nella piattaforma e viene letto da più applicazioni, chiamate consumer.
- Se devi archiviare un determinato evento in più luoghi, come la creazione di un utente per un database, l'archiviazione, il servizio di invio e-mail, la piattaforma di messaggistica è il modo più pulito per distribuire quel messaggio.
Ci sono diverse piattaforme di messaggistica di prim'ordine popolari.
RabbitMQ è un broker di messaggi che ti consente di ottimizzare il controllo delle loro traiettorie utilizzando regole di routing e altri parametri facilmente configurabili. Può essere definito un broker "intelligente" perché ha molta logica e monitora da vicino i messaggi che lo attraversano. Fornisce opzioni per AP e CP da CAP.
Kafka è un broker di messaggi un po' meno funzionale in quanto non tiene traccia di quali messaggi sono stati letti e non consente logiche di routing complesse. Aiuta a raggiungere prestazioni sorprendenti e rappresenta la più grande promessa in questo spazio con lo sviluppo attivo di sistemi distribuiti da parte della comunità open source e il supporto del team Confluent. Kafka è più popolare tra le aziende high-tech.
Applicazioni di interazione con la macchina
Questo sistema di distribuzione è un gruppo di computer che lavorano insieme per apparire all'utente finale come un computer separato. Queste macchine sono in condizioni generali, funzionantisimultaneamente e può funzionare in modo indipendente senza influire sul tempo di attività dell'intero sistema.
Se consideri il database distribuito, solo se i nodi interagiscono tra loro per coordinare le loro azioni. In questo caso è qualcosa come un'applicazione che esegue il proprio codice interno su una rete peer-to-peer ed è classificata come un'applicazione distribuita.
Esempi di tali applicazioni:
- Scala conosciuta - BitTorrent scia a 193.000 nodi per l'episodio Il Trono di Spade.
- Tecnologia di registrazione di base dei sistemi Blockchain distribuiti.
I registri distribuiti possono essere considerati come un database immutabile di sola applicazione che viene replicato, sincronizzato e condiviso su tutti i nodi della rete di distribuzione.
La nota scala - la rete Ethereum - ha registrato 4,3 milioni di transazioni al giorno il 4 gennaio 2018. Usano il modello Event Sourcing, che consente di ripristinare lo stato del database in qualsiasi momento.
Blockchain è l'attuale tecnologia sottostante utilizzata per i libri mastri distribuiti e ne ha effettivamente segnato l'inizio. Questa più recente e più grande innovazione nello spazio distribuito ha creato il primo protocollo di pagamento veramente distribuito, bitcoin.
Blockchain è un libro mastro distribuito con un elenco ordinato di tutte le transazioni che hanno avuto luogo sulla sua rete. Le offerte sono raggruppate e archiviate in blocchi. L'intera blockchain è essenzialmente un elenco collegato di blocchi. Blocchi specificatisono costosi da creare e sono strettamente collegati tra loro attraverso la crittografia. In poche parole, ogni blocco contiene un hash speciale (che inizia con X numero di zeri) del contenuto del blocco corrente (sotto forma di un albero Merkle) più l'hash del blocco precedente. Questo hash richiede molta potenza della CPU.
Esempi di sistemi operativi distribuiti
I tipi di sistema vengono visualizzati dall'utente perché sono sistemi a utente singolo. Condividono la memoria, il disco e l'utente non ha problemi a navigare tra i dati. L'utente memorizza qualcosa nel suo PC e il file viene archiviato in più posizioni, ad esempio computer collegati, in modo che i dati persi possano essere facilmente recuperati.
Esempi di sistemi operativi distribuiti:
- Windows Server 2003;
- Windows Server 2008;
- Windows Server 2012;
- UbuntuLinux (server Apache).
Se un computer si avvia più in alto, cioè se vengono scambiate molte richieste tra i singoli PC, ecco come avviene il bilanciamento del carico. In questo caso, le richieste vengono propagate al PC adiacente. Se la rete diventa più carica, può essere espansa aggiungendo più sistemi alla rete. Il file e le cartelle di rete vengono sincronizzati e vengono utilizzate convenzioni di denominazione in modo che non si verifichino errori durante il recupero dei dati.
La memorizzazione nella cache viene utilizzata anche durante la manipolazione dei dati. Tutti i computer utilizzano lo stesso spazio dei nomi per assegnare un nome ai file. Mail file system è valido per ogni computer. Se sono presenti aggiornamenti al file, viene scritto su un computer e le modifiche vengono propagate a tutti i computer, quindi il file ha lo stesso aspetto.
I file sono bloccati durante il processo di lettura/scrittura, quindi non c'è deadlock tra computer diversi. Si verificano anche sessioni, come leggere, scrivere file in una sessione e chiudere la sessione, quindi un altro utente può fare lo stesso e così via.
Vantaggi dell'utilizzo
Un sistema operativo progettato per semplificare la vita quotidiana delle persone. Per i vantaggi e le esigenze dell'utente, il sistema operativo può essere a utente singolo o distribuito. In un sistema di risorse distribuito, molti computer sono collegati tra loro e condividono le proprie risorse.
Vantaggi di questa operazione:
- Se un PC in un tale sistema è difettoso o danneggiato, un altro nodo o computer se ne occuperà.
- Più risorse possono essere facilmente aggiunte.
- Risorse come le stampanti possono servire più computer.
Questa è una breve descrizione del sistema di distribuzione, perché viene utilizzato. Alcune cose importanti da ricordare: sono complessi e vengono scelti in base alla scala e al prezzo e sono più difficili da lavorare. Questi sistemi sono distribuiti in diverse categorie di archiviazione: sistemi informatici, di file e di messaggistica, registri, applicazioni. E tutto questo è solo molto superficiale riguardo a un sistema informativo complesso.