Teorema della PAC - Disponibilità e tolleranza alla partizione


207

Mentre provo a comprendere la "Disponibilità" (A) e la "Tolleranza alle partizioni" (P) in CAP, ho trovato difficoltà a comprendere le spiegazioni di vari articoli.

Ho la sensazione che A e P possano andare insieme (so che non è così, ed è per questo che non riesco a capire!).

Spiegando in termini semplici, quali sono A e P e la differenza tra loro?


1
ecco un articolo che spiega la PAC in inglese ksat.me/a-plain-english-introduction-to-cap-theorem
Tushar Saha,

2
non andare per le risposte pronte. Leggi, visualizza e capisci ogni C, A, P separatamente. Progettare un'architettura cluster distribuita (forse 3 DB) e applicare ora la propria comprensione. Vedi cosa succede a C, A, P quando si verificano guasti ai distribuiti (DB). Una volta capito, quindi controlla le risposte e applica con la tua logica. Ricorda: anche se capisci, potrebbe non essere chiaro. quindi, pensa e applica la tua comprensione. Grazie
Fanciulla

1
In qualche modo il link ksat.me sopra va a 404 url ​​perché termina con '/'. ksat.me/a-plain-english-introduction-to-cap-theorem Funziona bene ed è una spiegazione molto dettagliata di ciascuna di 'C', 'A', 'P'
vivek.m

Risposte:


402

Coerenza significa che i dati sono gli stessi in tutto il cluster, quindi è possibile leggere o scrivere da / su qualsiasi nodo e ottenere gli stessi dati.

Disponibilità indica la possibilità di accedere al cluster anche se un nodo nel cluster si arresta.

La tolleranza della partizione significa che il cluster continua a funzionare anche se esiste una "partizione" (interruzione della comunicazione) tra due nodi (entrambi i nodi sono attivi, ma non possono comunicare).

Per ottenere la disponibilità e la tolleranza della partizione, è necessario rinunciare alla coerenza. Considera se hai due nodi, X e Y, in una configurazione master-master. Ora, c'è una pausa tra le comunicazioni di rete tra X e Y, quindi non possono sincronizzare gli aggiornamenti. A questo punto puoi:

A) Consentire ai nodi di uscire dalla sincronizzazione (rinunciando alla coerenza), oppure

B) Considera il cluster "inattivo" (rinuncia alla disponibilità)

Tutte le combinazioni disponibili sono:

  • CA : i dati sono coerenti tra tutti i nodi - purché tutti i nodi siano online - e puoi leggere / scrivere da qualsiasi nodo ed essere sicuro che i dati siano gli stessi, ma se sviluppi una partizione tra i nodi, i dati saranno fuori sincrono (e non si sincronizzerà nuovamente una volta risolta la partizione).
  • CP : i dati sono coerenti tra tutti i nodi e mantengono la tolleranza della partizione (impedendo la desincronizzazione dei dati) diventando non disponibili quando un nodo si arresta.
  • AP : i nodi rimangono online anche se non sono in grado di comunicare tra loro e risincronizzeranno i dati una volta risolta la partizione, ma non si garantisce che tutti i nodi disporranno degli stessi dati (durante o dopo la partizione)

Si noti che i sistemi CA non esistono praticamente (anche se alcuni sistemi dichiarano di esserlo).


1
In AP perché non abbiamo garantito che tutti i nodi avessero gli stessi dati? Ok, perché non abbiamo la "C" ma .. questo non è chiaro per me ... Voglio sapere perché questo accade ...
grep

3
@grep Ci scusiamo per la risposta tardiva. Se si dispone sia della disponibilità (il cluster non scende) sia della tolleranza della partizione (il database può sopravvivere ai nodi che non sono in grado di comunicare), non è possibile garantire che tutti i nodi disporranno sempre di tutti i dati (coerenza), poiché i nodi sono attivi e accettano le scritture, ma non possono comunicare tra loro.
Chris Heald,

4
In ritardo alla festa, ma vale la pena mostrare alcuni esempi in ciascuna categoria, ad es. blog.nahurst.com/visual-guide-to-nosql-systems
bitinn

sarebbe di grande aiuto includere una semplice illustrazione / esempio sui cluster di nodi qui intesi. è un sistema o una tabella di dati / raccolte distribuite su sistemi diversi o qualcos'altro?
Shrotavre,

Pragmaticamente, i nodi sono spesso singoli sistemi (o software in esecuzione su tali sistemi) collegati da un meccanismo di rete.
Chris Heald,

43

Considerare P in termini uguali con C e A è un po 'un errore, piuttosto la nozione di "2 su 3" tra C, A, P è fuorviante. Il modo in cui vorrei spiegare il teorema di CAP è: "In un archivio di dati distribuiti, al momento della partizione di rete devi scegliere Consistenza o Disponibilità e non puoi ottenere entrambe". I sistemi NoSQL più recenti stanno cercando di concentrarsi sulla disponibilità, mentre i database ACID tradizionali si sono concentrati maggiormente sulla coerenza.

Non puoi davvero scegliere CA, la partizione di rete non è qualcosa che qualcuno vorrebbe avere, è solo una realtà indesiderabile di un sistema distribuito, le reti possono fallire. La domanda è quale trade off scegli per la tua applicazione quando ciò accade. Questo articolo dall'uomo che per primo ha formulato quel termine sembra spiegarlo molto chiaramente.


18

Ecco come sto discutendo della PAC, in particolare riguardo a P.

La CA è possibile solo se si è d'accordo con un database monolitico a server singolo (forse con la replica ma tutti i dati su un "blocco errori" - i server non sono considerati parzialmente falliti).

Se il tuo problema richiede ridimensionamento, distribuzione e multi-server --- possono verificarsi partizioni di rete. Stai già richiedendo P. Pochi problemi a cui mi rivolgo sono suscettibili di paradigmi a server singolo (o, come ha detto Stonebraker, "la posta in gioco è distribuita"). Se riesci a trovare un problema con la CA, soluzioni come un tradizionale RDBMS non scalabile offrono molti vantaggi.

Per me raro: passiamo quindi a discutere di AP vs CP.

Puoi scegliere tra le operazioni AP e CP quando hai una partizione. Se la rete e l'hardware funzionano correttamente, ottieni la torta e la mangi anche tu.

Discutiamo la distinzione AP / CP.

AP: quando è presente una partizione di rete, consentire alle parti indipendenti di operare liberamente.

CP: quando è presente una partizione di rete, chiudere i nodi o non consentire le letture e le scritture in modo che si verifichino errori deterministici.

Mi piacciono le architetture che possono fare entrambe le cose, perché alcuni problemi sono AP e alcuni sono CP - e alcuni database possono fare entrambi. Tra le soluzioni CP e AP, ci sono anche sottigliezze.

Ad esempio, in un set di dati AP, è possibile sia letture incoerenti che generare conflitti di scrittura: si tratta di due diverse modalità AP possibili. Il sistema può essere configurato per AP con elevata disponibilità in lettura ma non consente conflitti di scrittura? Oppure il tuo sistema AP può accettare conflitti di scrittura, con un sistema di risoluzione forte e flessibile? Avrai bisogno di entrambi alla fine, o puoi scegliere un sistema che ne fa solo uno?

In un sistema CP, quanta indisponibilità ottieni con piccole partizioni (server singolo), se ce ne sono? Una maggiore replica può aumentare l'indisponibilità in un sistema CP, come fa il sistema a gestire questi compromessi?

Queste sono tutte domande da porre con CP vs AP.

Un'ottima lettura in questo settore in questo momento è il post "12 anni dopo" di Brewer. Credo che questo porti avanti il ​​dibattito sulla PAC con chiarezza e lo consiglio vivamente.

http://www.infoq.com/articles/cap-twelve-years-later-how-the-rules-have-changed


Il sistema CA è davvero confuso, ho una domanda relativa al tuo esempio CA di un database monolitico. Se si tratta di un solo server, da dove viene la "A", poiché mi sembra che il guasto di detto server non comporterà la disponibilità di alcun servizio?
Chaooder,

1
Buona domanda. I server possono avere un guasto del disco, o persino guasti dei moduli DIMM o guasti degli alimentatori se sono progettati per l'alta disponibilità. Immagina anche di essere su più reti elettriche. Ottieni sempre maggiore disponibilità, ma non c'è mai una "rete" all'interno che abbia la capacità di partizionare ed eseguire con componenti in disaccordo. Mentre esiste più hardware esoterico (cercare SQL NON-STOP), esempi di array RAID con componenti in errore e di ripresa sono ancora comuni in questi giorni e forniscono un'altissima disponibilità in un singolo server.
Brian Bulkowski il

13

Teorema della PAC

Consistenza:

Una lettura è garantita per restituire la scrittura più recente (come ACID) per un determinato client. Se una richiesta arriva durante quel periodo, deve attendere fino al completamento della sincronizzazione dei dati su / nei nodi.


Disponibilità:

ogni nodo (se non fallito) esegue sempre le query e dovrebbe sempre rispondere alle richieste. Non importa se restituisce o meno l'ultima copia.


Partizione di tolleranza:

Il sistema continuerà a funzionare quando si verificano partizioni di rete.


Per quanto riguarda AP , la disponibilità (sempre accessibile) può esistere con ( Cassendra ) o senza ( RDBMS ) tolleranza di partizione

fonte foto


2

Sento che la tolleranza alle partizioni non è spiegata bene in nessuna delle risposte, quindi solo per spiegare le cose in modo più dettagliato il teorema di CAP significa:

C : (Linearizzabilità o forte consistenza) significa approssimativamente

Se l'operazione B è iniziata dopo che l'operazione A è stata completata correttamente, l'operazione B deve vedere il sistema nello stesso stato in cui era al completamento dell'operazione A o in uno stato più recente (ma mai vecchio).

A :

"Ogni richiesta ricevuta da un nodo [database] non mancante nel sistema deve generare una risposta [non errore]". Non è sufficiente che alcuni nodi siano in grado di gestire la richiesta: qualsiasi nodo non in errore deve essere in grado di gestirla. Molti cosiddetti sistemi "altamente disponibili" (ovvero tempi di inattività ridotti) in realtà non soddisfano questa definizione di disponibilità.

P :

La tolleranza di partizione (terribilmente erroneamente) significa sostanzialmente che stai comunicando su una rete asincrona che può ritardare o eliminare i messaggi. Internet e tutti i nostri data center hanno questa proprietà, quindi non hai davvero alcuna scelta in merito.

Fonte: Awesome di Martin kleppmann lavoro

Solo per fare un esempio: Cassandra può al massimo essere un sistema AP. Ma se lo si configura per leggere o scrivere in base al Quorum, non rimane disponibile CAP (disponibile secondo la definizione del teorema CAP) ed è solo il sistema P.


1

In un semplice teorema della CAP si afferma che è impossibile per un sistema distribuito fornire contemporaneamente tutte e tre le garanzie:

inserisci qui la descrizione dell'immagine

Consistenza

Ogni nodo contiene gli stessi dati contemporaneamente

Disponibilità

Almeno un nodo deve essere disponibile per servire i dati ogni volta

Tolleranza di partizione

Il fallimento del sistema è molto raro

Per lo più ogni sistema può garantire solo due funzioni minime , CA, AP o CP .


0

Coerenza: quando stiamo inviando la richiesta di lettura, se restituisce il risultato, dovrebbe restituire la scrittura più recente fornita dalla richiesta del client. Disponibilità: la tua richiesta di lettura / scrittura dovrebbe sempre avere esito positivo. Tolleranza sulla partizione - Quando si verifica una partizione di rete (si verifica il problema per alcune macchine di comunicare tra loro), il sistema dovrebbe comunque funzionare.

In una distribuzione ci sono possibilità che si verifichi una partizione di rete e non possiamo evitare la "P" di CAP. Quindi scegliamo tra "Coerenza" e "Disponibilità".

http://bigdatadose.com/understanding-cap-theorem/


0

Modo semplice per comprendere il teorema della PAC:

In caso di partizione di rete, è necessario scegliere tra perfetta disponibilità e perfetta coerenza.

Scegliere la coerenza significa non essere in grado di rispondere alla query di un client poiché il sistema non può garantire di restituire la scrittura più recente. Questo sacrifica la disponibilità.

Scegliere la disponibilità significa essere in grado di rispondere alla richiesta di un cliente ma il sistema non può garantire coerenza, ovvero il valore scritto più recente. I sistemi disponibili forniscono la migliore risposta possibile in determinate circostanze.

Questa spiegazione è tratta da questo eccellente articolo . Spero che possa essere d'aiuto.


0

Ho attraversato molti collegamenti, ma nessuno di loro potrebbe darmi una risposta soddisfacente, tranne uno.

Quindi sto descrivendo la PAC in termini molto semplici.

  • Coerenza : deve restituire gli stessi dati , indipendentemente da quale nodo provenga.

  • Disponibilità : il nodo dovrebbe rispondere (deve essere disponibile).

  • Tolleranza alle partizioni : il cluster dovrebbe rispondere (deve essere disponibile), anche se esiste una partizione (ovvero un errore di rete) tra i nodi.

(Anche una delle ragioni principali per cui confonde di più è la cattiva convenzione di denominazione. Se avessi ragione, avrei potuto dare invece il teorema DNC : Coerenza dei dati , Disponibilità dei nodi , Disponibilità dei cluster , dove ciascuno corrisponde rispettivamente a Coerenza , Disponibilità e Tolleranza delle partizioni )

Database CP: un database CP offre coerenza e tolleranza alle partizioni a spese della disponibilità. Quando si verifica una partizione tra due nodi, il sistema deve chiudere il nodo non coerente (ovvero renderlo non disponibile) fino a quando la partizione non viene risolta.

Database AP: un database AP offre disponibilità e tolleranza alle partizioni a scapito della coerenza. Quando si verifica una partizione, tutti i nodi rimangono disponibili ma quelli alla fine errata di una partizione potrebbero restituire una versione precedente dei dati rispetto ad altri. (Quando la partizione viene risolta, i database AP in genere risincronizzano i nodi per riparare tutte le incoerenze nel sistema.)

Database CA: un database CA offre coerenza e disponibilità su tutti i nodi. Non può farlo se esiste una partizione tra due nodi nel sistema, tuttavia, e quindi non è in grado di fornire tolleranza di errore. In un sistema distribuito, le partizioni non possono essere evitate. Quindi, mentre in teoria possiamo discutere di un database distribuito CA, per tutti gli scopi pratici, può esistere un database distribuito CA ma non dovrebbe esistere.

Pertanto, ciò non significa che non è possibile disporre di un database CA per l'applicazione distribuita, se necessario. Molti database relazionali, come PostgreSQL, offrono coerenza e disponibilità e possono essere distribuiti su più nodi mediante la replica.

Fonte: https://www.ibm.com/cloud/learn/cap-theorem

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.