
[Musica]
ok grazie mille Ciao Bridget
tutti i benvenuti a Jepsen nove di
sensazione di affondamento che è il funzionario
pronuncia per la chiamata di sistema dovrebbe
ne hai mai avuto bisogno , mi chiamo Kyle
Kingsbury e potresti conoscermi dal
internet come fer è il mio lavoro di giorno che ottengo
per rompere i database che è fondamentalmente
la cosa più bella del mondo, ma
Prima di rompere i database, in realtà ero
un ingegnere che lavora su api e api
non sono come normali, conosci prodotti o
servizi che otterresti nel
mondo di tutti i giorni non puoi andare al
agenzia di adozione e trova un piccolo carino
API e portarlo a casa non è possibile acquistarne uno
al negozio ci sono servizi che tu
tipo di vedi nel cielo e tu
interagire con voi lo sguardo su di loro e
ammirali da una distanza che puoi
mai toccare così dove API è questo è questo
illusione questo arcobaleno nel cielo ma
è supportato dal codice in cui sono scritte le cose
Rubino o C o Scala sono questi acciaio
travi che reggono un arcobaleno
e quelle travi a loro volta sono supportate
su alcuni pali di legno cose come la
il Ruby ZM or o il compilatore di Scala
librerie open-source che inseriamo e
quelli sono radicati in una solida base di
servizi persistenti che abbiamo trovato
fondamentalmente in giro su internet
o qualunque cosa abbiamo visto nelle notizie degli hacker
settimana
questi database qui rappresentati dal
fondazione di un mucchio di pneumatici e come
chiunque abbia mai lavorato con il
il database conosce la pila di pneumatici
di solito in fiamme e mentre la nostra operazione
il personale sta gridando e sta provando a riparare il
problema tirando le gomme fiammate
del mucchio e spingendo le gomme fresche su
speriamo di sostituirli abbastanza velocemente
che l’incendio alla fine si spegne
andando a preservare l’illusione per gli utenti
che tutto va bene, vogliamo che gli utenti lo facciano
essere in grado di fare richieste e ottenere
risposte e ricevere tutto è
bene anche se il sistema internamente
è costituito da questi errori terribili
componenti questo processo di scalare il
scala di astrazione sempre più in alto
è lontano dalle fiamme sotto di noi
poiché l’informazione che nasconde è un nucleo
principio dei sistemi moderni
Non penso solo ai database che sono
anche parlando della scoperta di Q.
i servizi queste cose colpiscono la paura e
terrore nei cuori degli ingegneri
perché fanno cose terribili giuste
entrano nel cervello diviso dove due
credono diversi lati della rete
diverse verità si rompono
vincoli di chiave estera in cui vai
ottenere un oggetto a cui si fa riferimento in alcuni
parte del database e il problema
i riferimenti non sono più presenti o tu
hanno anomalie temporali transitorie dove
tu scrivi qualcosa nel database
e poi vai a leggerlo e non lo è
lì dici che aspetto l’ho scritto a tutti
è stato un errore e tu lo hai letto
ancora e si presenta sarà ancora
Lì la prossima volta non lo so così noi
vogliono essere in grado di guardare questi
anomalie che sappiamo essere
teoricamente possibile in alcuni modelli
ma capisci se sono presenti nel nostro
sistemi del mondo reale fino a che punto
questi problemi contano davvero e il
l’unico modo in cui penso di scoprire è di andare
e misura I sono un sperimentalista di
cuore e ho lavorato su
costruire strumenti di misurazione per la distribuzione
sistemi il cui maggior successo è
Jepsen Jepsen è una libreria open-source
per scrivere test per distribuito
sistemi e tratta il sistema come tutto
i sistemi dovrebbero essere trattati come
interazione tra un ambiente e un
sistema stesso il sistema sta per essere
composto da diverse profezie e a
rete e computer e tanto movimento
pezzi delicati ma insieme nel loro insieme
dovrebbe fornire l’illusione di alcuni
entità coerente come un database SQL o
un negozio di valore chiave e al di fuori del
ambiente che è tutti i clienti e
strati di persistenza ora altre cose che
interagire con il sistema al confine
tra l’ambiente e il sistema
di per sé dovrebbero esserci alcuni invarianti
ciò vale ad esempio nella mia casa che ho
ho avuto tre gatti giusti e ogni volta
Aprii la porta, dove i gatti amano
corri fuori ma se mai ne vedessi più di
tre gatti corrono fuori dalla mia porta di fila
e nessun gatto è tornato in quello è un
violazione invariante suggerisce questo
da qualche parte nella mia casa c’è un buco
dove i gatti stanno tornando dove sei
i gatti si teletrasportano da fuori
casa dentro casa qualcosa è sparita
sbagliato
ora misureremo questi invarianti
gestendo un gruppo di clienti al di fuori del
sistema che questi client simuleranno
partecipanti effettivi in distribuzione
sistema
come fingere di essere utenti al loro
i computer che fanno alcune richieste o
fingendo di essere
Nodi API che richiedono dati da alcuni
strato di persistenza e quello che stiamo per fare
eseguire tutti i client sulla stessa JVM così
che sappiamo esattamente quanto ognuno fa
e quando è importante che li facciamo
tutto nello stesso posto, quindi sappiamo esattamente
quali sono le relazioni temporali
tra queste operazioni perché in alcuni
i casi che vogliamo sapere sono in tempo reale
garanzie sulla visibilità del database
di solito sarà una raccolta di
tre cinque sette nodi probabilmente corrono
Linux probabilmente comunica su IP ma
potrebbe essere qualsiasi cosa
Jepson è un po ‘ agnostico su ciò che siamo
andando a testare e faremo richieste a
il database ora è un po ‘complicato su questo
è che non abbiamo necessariamente accesso
a tutti gli strumenti che vorremmo se lo fosse
testare un database arbitrario voi
potrebbe non essere in grado di trovare un formale
specifica del suo algoritmo così
ciò potrebbe escludere l’utilizzo di una prova
assistente o un correttore di modello che potresti
voglio introdurre una sorta di
annotazioni o forse una statica speciale
sistema di analisi del programma che farebbe
esecuzione simbolica o probabilistica
esecuzione ma non possiamo impiegarli
tecniche su tutti i tipi di database se
non abbiamo il codice sorgente o se lo è
non scritto in una lingua o uno stile
che è suscettibile di analisi quindi sono
risalire e prendere una sorta di nero
approccio alla scatola diciamo che non sappiamo nulla
a tutto ciò che accade all’interno del
database e tutti si arriva a vedere è con
i client che interagiscono con il
il database osserva così come fanno i nostri clienti
generare operazioni randomizzate come
scrivi il numero cinque o leggi il
valore corrente e si applicheranno al
sistema e tornare con qualche risultato
e quel risultato potrebbe essere uno di
fondamentalmente tre cose che potresti avere successo
nel qual caso sappiamo che l’operazione è stata eseguita
posto che potrebbe fallire e quindi sappiamo
che non ha avuto luogo o potrebbe
timeout o crash o fare qualcos’altro
e questa è una cosa molto difficile
la gente suppone che un timeout o un dove
un crash significa che l’operazione no
capita ma non è necessariamente il
caso potrebbe essere l’ operazione è
da qualche parte nella rete o forse ha ottenuto
scritto su una coda su disco e quando questo
il box si riavvierà e guarderà la sua coda
su disco e improvvisamente reiniettato
operazione di nuovo nel sistema così
operazioni che il timeout potrebbe richiedere
effetto ore settimane dopo e noi
devono pianificare in modo che quando il nostro
l’analisi li tratterà come tre
separato
contingenze eseguirà questi client
contemporaneamente così gli straordinari con un po ‘
storia concomitante bit di ciascuno
client a thread singolo che eseguono più operazioni
operazioni contro il sistema e questo
la storia è una specie di astratto che dice
hey ho letto tre ho scritto cinque o hey I
in coda questo disco e hey I DQ’d
questa registrazione è completamente disaccoppiata
dal sistema di base stesso e noi
può analizzare quella struttura dati come se fosse
erano una sorta di esecuzione o storia astratta
di un programma e questo significa che possiamo
eseguire un correttore che forse cerca di trovare un
percorso attraverso queste transazioni e
lungo quel percorso dovrebbe avere senso e
se è un sistema linearizzabile forse quello
il percorso deve sempre andare avanti nel tempo se
è un sistema serializzabile forse possiamo
andare avanti e indietro nel tempo se
stiamo cercando l’ isolamento dello snapshot maggio
essere i vincoli più deboli si applicano così a seconda
sugli invarianti misuriamo e il
il tipo di sistema che stiamo analizzando funzionerà
escogitare diverse pedine ma tutte
loro opereranno essenzialmente sul
storia osservabile dei sistemi
interagire con i clienti
quindi il nostro programma generale è qui
generare record di operazioni randomizzate a
storia di quelle operazioni come erano
applicato al sistema e quindi verificare
quella storia è coerente con alcuni
modello astratto come un negozio di valore chiave
e mentre questo sta succedendo, lo faremo
tiriamo fuori le nostre grandi cesoie di rete e lo siamo
tagliare i cavi che stiamo per
pausa processi che stiamo per scivolare
droghe per dormire nel loro tè della sera
stiamo andando a scarabocchiare sul loro
calendari e assicurati che vadano al
pratica bambino sbagliato il calcio che faremo
Praticamente cercherò di rendere le loro vite davvero
difficile e assicurarsi che il sistema
obbedisce tutte le invarianti corretti anche
in condizioni di stress così fa questo
lavoro quando abbiamo iniziato a farlo nel 2013
con la reazione abbiamo scoperto che l’ ultima destra vince
la modalità predefinita comporterebbe la perdita dei diritti
ma puoi fare degli aggiornamenti commutativi sicuri
di C o D T MongoDB ha perso dati
i livelli di preoccupazione in scrittura leggono una sentinella
quando dividere il cervello e buttare via tutto
diritti su un lato di una partizione
cassandra ha l’ultima vittoria e vince
non c’è l’ opzione CRT T aveva anche a
sistema di isolamento a livello di riga che non lo era
in realtà isolato aveva anche un
sistema transazionale basato su Paxos
quale sarebbe deadlock per sempre dopo come
dieci transazioni e non eseguire mai più e
quando quell’errore era stato risolto, era morto
perdita Bo dovuta alla doppia applicazione
transazioni Nuodb ha affermato di essere il cap
teorema bufferizzando tutto richiesto
Ram per la durata di una partizione questo
ovviamente non è disponibile Kafka ha avuto un
La replica NSYNC imposta il set di nodi che
attualmente sta servendo richieste che
potrebbe ridursi arbitrariamente a solo a
nodo singolo che riconosce tutto il tuo
operazioni e se quel nodo si blocca quindi
no le tue operazioni vanno con esso
passato da zookeeper che considero
qualcosa di un fallimento personale al CD
e consolare entrambe le letture stantie esposte
quindi potresti vedere i dati del passato
elasticsearch ha perso dati in ogni anatra
classe di partizione abbiamo testato RabbitMQ
come Redis è andato in split brain e
ha perso enormi quantità di dati su un lato
del suo cluster aerospike ha affermato di essere
un datastore acido ma si è rivelato essere
l’ultima destra vince, naturalmente, ha perso i diritti
per elasticsearch a 1: 5 ancora perso 8 in
ogni singolo test, tuttavia questa volta
ha perso meno di quello che hanno escogitato
bug nel 2015 a MongoDB abbiamo testato animali domestici
di nuovo e avevano chiuso la giusta perdita
problema ma abbiamo scoperto due fenomeni
sia stanti letture e letture sporche così tu
può vedere i dati dal passato e dati che
non avrebbe mai dovuto esistere
Cronos avrebbe un sistema di pianificazione delle attività
non riescono a pianificare le attività per sempre dopo di esso
ha perso il suo quorum in un certo modo per
Kona extra per essere in abbagliamento un ammasso
le librerie dalla mia replica sequel avevano
un sistema isolato di istantanee in cui
le istantanee non erano né istantanee né
il database di risincronizzazione isolato ha passato la sua chiave di base
i test dei negozi di valore, ma se rapidamente
riconfigurare il cluster
aggiunta e rimozione di nodi durante
partizioni in rete che puoi indurre a
certo tipo di bug che potrebbe ospitare il
cluster volt DB 6: 3 ha affermato di essere a
rigoroso sistema SQL serializzabile ma in
fatto esibito stantio legge letture sporche
e le scritture perse fanno più bug in
replica cassa IO basa su
mostra elasticsearch risolve elastico
cerca fenomeni così nel 2016 ha avuto
stantio legge letture sporche perse e corrotte
aggiornamenti e anche scarafaggio degli inserti persi
DB nel 2017 ha mostrato non serializzabile
Anomalie di uno di loro era un fantasma
potrebbe non riuscire a osservare la storia del
sistema in modo serializzabile e un altro
uno era possibile inserire un record e
ottenere più copie di esso
MongoDB abbiamo rianalizzato nel 2017 è andato a
un po ‘più profondo e abbiamo trovato un elemento fondamentale
difetto nel protocollo di replica di Visia
il che significava che i dati persi se c’erano
un orologio skew purtroppo questo bug è stato
presente anche nel protocollo di sostituzione
v1 che ha portato a molti bug di perdita di dati
anche lì
e ora per qualcosa completamente
diverso
dopo la nostra litania di paure passate mi piacerebbe
per sottolineare che molti di questi bug in
infatti quasi tutti questi bug sono ora
i venditori fissi sono stati incredibilmente
reattivo nel risolvere questi problemi e
in una certa misura non dovremmo essere sorpresi
ci sono così tanti problemi perché fare
sistemi distribuiti è davvero difficile così
Non intendo minimizzarmi
particolare fornitore per questo è solo
parte del gioco, ma io voglio
sottolinea che facendo un po ‘di
il test può rivelare risultati sorprendenti
quello che vorrei parlare di oggi è un po ‘
del lavoro recente che ho fatto finita
l’ ultimo anno in tre nuovi distribuiti
sistemi il primo è tenero con menta a O 10
– che è una replica di transazione
sistema con macchine a stati inseribili e
offre tolleranza ai guasti bizantina
lo spezzeremo un po ‘
molto ci puoi pensare un po ‘
come l’ algoritmo di consenso della zattera si incontra
un sistema di blockchain come Raph
formare transazioni di ordini linearizzabili
ciò significa che le transazioni avvengono in a
ordine totale in modo da fare uno due tre quattro
sai sempre che due vengono prima
tre mai il contrario e
raggrupperai queste transazioni
in blocchi e poi agganciarli insieme
con le firme crittografiche così loro
forma una catena di blocchi nel tempo è
anche tollerante ai guasti bizantino che è a
proprietà tipica per i sistemi blockchain
e questo significa che se qualcuno dei tuoi
i nodi sono come Regina George e loro lo sono
cercando di diffondere pettegolezzi e menzogne
tu puoi evitarli per tutto il tempo che tu
avere la collaborazione di un legale e e
gruppo rispettoso della legge dei nodi che è
più dei due terzi delle votazioni
il potere finalmente offre lo stato di innesto
macchine così non ti danno un
database dice che qui ci sono transazioni
ci sono dei blocchi opachi che spetta a te
interpretali così i validatori in
menta tenera sono i programmi che
in realtà genera la storia di
transazioni e poi su un RPC
meccanismo ti passeranno il
operazioni da eseguire e quindi è possibile
interpretali come preferisci tu
potrebbe creare un archivio di valori chiave o a
criptovaluta o non so
simulatore di trading gatto, ma quello che
stiamo per testare si chiama Merkel occhi
questo è un sì eh-eh questo
un negozio di valore-chiave basato su alberi Merkel
e lo testeremo con due
diversi carichi di lavoro uno di loro è di
guardandolo come se fosse un singolo
registrati così useremo esattamente uno
chiave alla volta e poi faremo le letture
e scrive e confronta e imposta
operazioni su quel registro ma il
l’analizzatore per quel sistema è nello spazio X.
è np-rigido in modo da gestire un elevato
rendimento che potrebbe esporre più razza
condizioni che avremo un
ulteriore test più debole che è a
aggiungi semplicemente un gruppo di numeri a un set
e poi prova a leggerlo e a farlo
certo che tutto ciò che abbiamo aggiunto appare
e lo faremo leggendo
il valore corrente a cui aggiungeremo qualcosa
quel record e poi lo scriveremo di nuovo
se e solo se non ha cambiato questo
ha portato a una condizione di gara negli occhi di Merkel
dove se hai mutato rapidamente uno
frazione o un solo percorso nell’albero b
su disco potrebbe decidere di averne bisogno
per spazzare raccogliere quel ramo anche
anche se ci serviva un concorrente
aggiornamento e che potrebbe portare a corruzione
stato testato con skew dell’orologio sia a
sbattere contro l’orologio e farlo lampeggiare
rapidamente avanti e indietro di dire 30 secondi
questo è davvero un 15 ogni millisecondi
cosa interessante da fare ai computer
perché un sacco di volte assumiamo il
i timeout si accendono approssimativamente in tempo
e se il tuo orologio è stroboscopico e
avanti di 30 secondi ogni volta che Billie
significa che tutti i tuoi timeout sono
andando fuoco quasi immediatamente in modo che
sanguina attraverso alcuni davvero interessanti
condizioni di gara ma non ha rotto dieci
Derman, siamo tutti rimasti con gli incidenti che puoi
uccidi tutti i nodi e porta indietro
e funziona bene, puoi isolare il singolo
nodi è possibile tagliare la rete a metà
puoi creare anelli intersecanti dove
ogni nodo stagione maggior parte dei nodi ma
no gradi su ciò che la maggioranza è
e tutti funzionano altrettanto bene nell’unico caso
avevamo scoperto dove si potevano perdere i dati
con i validatori duplicati così tu corri
due copie di un singolo nodo logico e
li lasci evolvere in modo indipendente e
questo per simulare un malintenzionato
validatore che è come promettente oh sì
sicuro che George andrò da te
festa di compleanno di domenica e poi
qualcuno ha detto hey che avrai del ghiaccio
crema con me al sole come sì, vado
per prendere un gelato con te domenica
hai fatto queste promesse contraddittorie
nei log ma se c’è una partizione
questo permette a quei due contraddittori
promette di
sei visibile su nodi separati e il
validatore maligno ha una maggioranza
allora puoi ancora impegnarti su entrambi i lati
di partizione e ottenere blocco contraddittorio
catene come risultato così quando questi nodi
tornate insieme che realizzeranno oh no
abbiamo mentito sul fatto che un ha firmato
transazioni che sono in conflitto e lo faranno
sorta di perdere dati o o o uccidere
se stessi, ma questo è un po ‘da essere
atteso perché tenorman esplicitamente
specifica che non puoi avere più di 1/3
dei nodi in termini di potere di voto essere
malizioso abbiamo un altro predefinito che
è quello di uccidere i nodi e poi troncarne i loro
registri su disco e quindi per riportarli indietro
questo simula i casi in cui il
il file system potrebbe non essere in grado di eseguire il journal
cose correttamente questo trovato ammortizzato
incidente che è in realtà nella biblioteca
Vai a livello DB si scopre il credulone DB
non fa il suo recupero perfetto in tutto
casi a volte se tronchi o destra
nel bel mezzo della scrittura sarà solo
esplodere e rifiutarsi di recuperare e it
risulta che questo è applicato a sì questo
è applicato a diversi sistemi di produzione
non solo menta tenera c’è anche a
vulnerabilità teorica e tenera
è giusto che il registro sia andato a finire
non essere proprio avanti , era giusto ogni volta
quindi avevamo una colonna di sink TANF che risolve
che puoi anche dinamicamente
riconfigura i gruppi di appartamenti in modo che tu possa
aggiungi e rimuovi i validatori al volo
che è davvero bello operativo
proprietà ma in realtà non risulta
nei problemi quindi sono davvero felice
che anche i bug di crash di corruzione dei dati
sono in qualche modo prevedibili questo è un
prodotto molto giovane era ancora in beta
stavamo testando e il team di tenorman
ha lavorato per risolvere questi problemi
al prossimo voglio parlare del cast di Hazel
delle versioni 383 della casta dei noccioli è un
griglia dati in memoria che è un modo elegante
di dire server di strutture dati così è
andando a darti la possibilità di avere
mappe distribuite e set e code
quel tipo di vivere in una nuvola di macchine
e non sono necessariamente persistenti
disco ma dovrebbero essere al sicuro finchè
i nodi continuano a funzionare la maggior parte del tempo così
ottieni set che ottieni set che ottieni liste
ottieni ID in modo da poter generare univoco
ID per i quali ottieni semafori e serrature
controllo della concorrenza che ti viene distribuito
code e atomiche lunghe in modo che tu possa mutare
un certo numero atomico
tutti questi primitivi veramente piacevoli come
questo è il toolkit che vogliamo come
sviluppatori di sistemi disturbanti ma è così
avuto un problema difficile e questo è tutto
quando una petizione di rete si verifica due
i componenti possono funzionare indipendentemente ora
risolvere il conflitto tra indipendente
gestendo i cluster puoi unire le cose
insieme ma la funzione di fusione non lo è
necessariamente sarà sempre
commutativo in modo da poter perdere gli aggiornamenti
da un lato o fare qualcosa che non fa
ha senso, c’è un cervello diviso
sistema di protezione che si suppone
uccidere i nodi in minoranza questo è
una tattica comune contro cui difendersi
partizioni ma non è mai sicuro perché
si attiva solo dopo aver rilevato
la partizione e potrebbe prendere forse
decine di secondi il primo tipo di dati noi
testato è una serratura e dice che blocca
sono garantiti per essere eseguiti da solo
un thread nel cluster così potrebbe
Supponiamo che tu possa acquisire una corsa di sicurezza
qualche codice rilascia il lucchetto e quello
nessun altro avrebbe corso mentre tu detenevi
questo blocco è il modo in cui pensiamo
mutex purtroppo puoi vedere a
processo acquisire il blocco e mentre è
detenerlo potrebbero farlo altri tre processi
acquisisci anche la serratura e continua a tenere
così pure questo è l’opposto di a
bloccare è che non è un blocco questo è pari
se fosse una serratura sarebbe sbagliato
perché anche se si tengono queste cose
esclusivamente il motivo per cui tieni il lucchetto
è quello di fare alcuni effetti collaterali lato destro
effetti che entrano nella rete e
potrebbe richiedere arbitrariamente a lungo per completare
quindi non puoi controllare esclusivamente cosa
l’ordine sarebbe questo è il motivo per cui bloccare
servizi e sistemi di distribuzione no
esiste davvero ogni volta che ne vedi uno tu
dovrebbe eseguire leggere la carta chubbie per a
visione più sfumata e accurata di quello
libero code polemiche aggressive dicono che
puoi aggiungere un oggetto in una macchina e
rimuovilo da un altro è così
vorremmo fare in modo che le code funzionassero, così tu metti
nei numeri 1 2 3 e 4 sono tutti
riconosciuto questo successo e cosa
viene fuori è 1 1 2 4 così hai
copie multiple di una che va bene
bene ma non hai copie di 3 che
è un po ‘preoccupante così potresti
vedere come il 2% di record duplicati 2% persi
record e questo in realtà peggiora il
timeout predefiniti questo è il massimo
opzione di sicurezza aggressiva che potrei scegliere
questo è con il rilevamento delle partizioni
con il GUP
roba abilitata e con brevi timeout
per tutto c’è un atomico
tipo di riferimento un tipo lungo atomico che
dice che puoi avere un atomico garantito
confrontare e impostare attraverso il cluster così io
potrebbe usare questo per cambiare un valore se e
solo se attualmente è un altro valore
e quelle operazioni dovrebbero essere atomiche
e non si sovrappongono mai
quindi il modo in cui questo dovrebbe funzionare è
che ho un valore come due e in
la prima transazione che leggerò e io
voglio rispedire 3 così ho intenzione di
incrementare per ottenere 3 e riscriverlo se
e solo se è ancora 2 e quello
ha successo perché il valore è ancora 2
contemporaneamente questa transazione di fondo
leggerà per incrementare per ottenere 3 e
rispondi e ti dice hey sei ancora
– oh mi dispiace il valore è cambiato così
Non ho intenzione di scrivere e questo assicura
che possiamo fare incrementi in una cassaforte
modo atomico non perdiamo alcun aggiornamento ma
cosa accadrà realmente nella casta dei noccioli
è che anche l’altro commit andrà
attraverso e ora abbiamo preso due e
aggiunto 1 + 1 e ottenuto 3 quindi abbiamo chiaramente
non fatto qualcosa atomicamente questo è
bene questo ha un po ‘più senso quando
si considera che lo stato del
il sistema è stato biforcato in più copie
ci sono dei nodi che pensano al valore
è 2 su entrambi i lati e puoi
indipendentemente da ciascuno di loro e da te
può continuare ad evolversi quindi forse su uno
lato si incrementa il comando Unione in modo da voi
ottenere 3 4 5 sull’altro cluster sul
in basso hai 3 e dipende da chi
stai parlando con te potresti vedere il
il valore oscilla tra 3 e 5 3 e 5 quindi
potresti persino vedere non monotoni
risultati e peggio ancora quando si recupera
c’è una specie di decisione opaca
che semplicemente sceglie un valore per te basato
su alcune euristiche quindi potresti vedere il tuo
valore va da 5 indietro a 3 e ora hai
esibito in un sistema che aggiunge solo a
il numero che torna indietro nel tempo intendo
come quello che quello che stai facendo come
guarda la tua vita guarda le tue scelte
lo è il punto centrale di un oggetto atomico
2p atomico quindi per favore usa un
algoritmo in realtà lo fa tu
potrebbe dire okay, andiamo indietro
una prova più facile proviamo ID
generazione così
quindi tu faresti qualcosa di simile
un identificativo del fiocco sappiamo che questo è il coordinamento
gratis ti dà aggiornamenti che sono
relativamente veloce ma sfortunatamente lo faccio
il generatore è supportato da un atomico lungo così
fa esattamente la stessa cosa che farà
aumenterà su entrambi i lati ottenere il
stessi ID e consegnali a due
persone diverse in modo da poter generare
come ottocentotrenta quattromila
identificatori ma 91 mila di quelli
saranno duplicati tra loro in a
trenta mappe Secondo Periodo di Offerta questi
operazioni come mettere se assente e quello
dice come impostare K a V solo se non lo è
impostare al momento o si potrebbe sostituire dire
imposta K su V Prime
solo se è attualmente V questo è come AK
come operazione e un diritto ma ora lo è
generalizzato alle mappe e se pensi
su di esso l’esistenza di questi
le funzioni implicano che esiste un
attuale valore singolare per quella mappa come
cosa significa mettere se assente se
la mappa contiene e anche no
contenere l’ oggetto giusto questi
le strutture di dati concorrenti semplicemente no
ha senso nel contesto di questi
funziona ma sono comunque lì
sono documentati per funzionare se ci provi
anche loro come i dati anche con il quorum
protezione però se usi una custom
unisci funzione e usa confronta e imposta
su ogni replica indipendente tu
può costruire C o D T che uniscono i dati
di nuovo insieme in modo sicuro e uniforme
aggiornamenti commutativi ma solo per la mappa
tipi come del tempo che ho scritto questo
raccomandazioni di analisi in generale se
stai scrivendo un sistema distribuito
scegliere un algoritmo di replica che sia
appropriato per il tuo tipo di dati, quindi se
si sta andando a costruire un lungo atomica voi
sapere che ci deve essere probabilmente
sequenziale ed eventualmente linearizzabile
quegli algoritmi richiedono qualcosa di simile
un Paxos o una zattera o uno zap quindi scegline uno
di quelli non provano a sostenerlo da alcuni
cosa più debole o alla fine coerente
per cose come la generazione di ID puoi
usa gli ID dei fiocchi per i contatori che potresti
avere contatori alla fine coerenti come
Contatori PN c’è un’intera famiglia di
algoritmi qui che potrebbero essere applicabili
se sei un utente di casta nocciola dovresti
non fare affidamento sulla casta dei noccioli per nulla
che ha a che fare con la sicurezza come no
usarlo come un servizio di blocco ma
purtroppo usi della casta nocciola Canon
usa queste funzioni così come sono
documentato senza veramente capire
la console
Pence è come la prima cosa che ho visto
sul post del blog del partner su hazel
Cass era un cattivo avido B e una cattiva avidità
essere internamente genera transazione
identificatori che utilizzano un generatore di ID da
casta nocciola che significa che a volte
genererà due transazioni con
lo stesso ID come chi sa cosa succede
e quello succede
aurilla DB li metteva tutti
stato del cluster e tutto il transazionale
gestione attraverso nocciola cast pure
e avevano così tanti problemi di dati
la perdita che hanno indietreggiato hanno quasi
rimosso ma è ancora usato per il
gestione dello stato del cluster e quando
mandatemi una email, sono come se la intendeste
può fare questo comportamento come sì, sorpresa
quindi stai attento a queste cose come il nocciolo
la casta viene comunemente implementata come cache in
In questo caso, questo è assolutamente perfetto
le cache dovrebbero essere sfocate e
smarrito ma se usi cose del genere
le serrature a riferimenti atomici che potresti
voglio guardare due volte dal momento di
questa analisi nocciola di casta è fondamentalmente
arretrato e sventrato tutto quello che hanno
aggiornato la documentazione che hanno
aggiunto il supporto per credo ID dei fiocchi
e nuovi tipi di dati C o DT che sono simili
ah fantastico e penso che stiano lavorando
un’implementazione della zattera pure così tanto
di questo dovrebbe cambiare e imminente
rilascia finalmente chiunque stia provando a
ti vendono un blocco distribuito sta cercando di
vendi segatura e bugie che non sono
vero smettere di provare a usarli ogni blocco
il sistema è progettato per controllare il lato
effetti quindi è necessario accoppiare il lato
effettua da sé il sistema sottostante
stai provando che è tutto diverso
parlare ma voglio buttarlo là fuori
infine, ma non meno importante, parlerò dell’era
spike 3 no no 3 abbiamo sibilato siamo tornati
e testato questo nel 2015 è stato un
shard distribuito un archivio di documenti che
significa che è un negozio di valore chiave , ma non c’è
qualche struttura ai valori e
sosteneva di essere un data store acido ma lo era
in realtà l’ultima vittoria vince così è emersa
cose basate sul timestamp o fondamentalmente
il numero di modifiche su un singolo
replica e quindi ovviamente ha perso molto
di dati durante la perdizione ma loro
in realtà è tornato al tavolo da disegno
dopo l’analisi e hanno speso il
due anni scorsi e ridisegnare
tutti i loro interni e così il numero
delle cose che escono da questo hanno
in realtà sono notevolmente migliorati
la probabilità di perdita di dati così il
frequenza e gravità sono questi problemi
diminuito e questo è davvero importante
perché per molti utenti sei
disposto a tollerare un certo grado di perdita
ma tu perdi un po ‘ di soldi ogni
tempo che accada
quindi forse stai costruendo una macchina
modello di apprendimento e diventa meno preciso
quando si rilasciano record in modo che si verifichi
questi clienti potrebbero essersi sviluppati come
tecniche di modellazione sofisticate per
decidere è abbastanza dati o meno e
e ogni piccolo pezzo di coerenza
può aggiungere li aiuta a fare meglio così c’è
già un bel risultato per questo ma il
l’altra cosa che hanno fatto è aggiungere un
protocollo consensuale personalizzato e in a4o
stanno rilasciando una consistenza forte
modalità che offre capacità di linearizzazione e
è quello che sono venuto per testare il primo
la cosa che abbiamo trovato in Eric’s Beck era quella
potresti iniziare un test con a
ardesia completamente vuota e il molto
la prima operazione che fai è leggere – è
come comprare un frigorifero dall’apertura di Sears
e trovando come una testa di lattuga
come se provenisse da um bene se
guardi attentamente la tua storia
potremmo vedere che prima c’era un
diritto di – ma ha fallito così ovviamente
il tuo sistema di visualizzazione non funzionava
effettivamente renderlo e se si inizia a
pensa che forse ti manchi
in realtà ha avuto luogo nel modo in cui ciò accade
è che un cliente fa una richiesta – giusto
– al server ma il server no
possedere i dati che stai modificando
lo trasmetterò in avanti ad alcuni
altro server che fa sui dati dove
viene applicato ma il riconoscimento
il messaggio è perso
così sarà il server proxy originale
timeout e riprova a farlo funzionare
emette un tentativo e quindi il telecomando
assistente dice oh mi dispiace non lo faccio io non
accettare che a destra più non ho più
possedere i dati o altri errori
successo ma non è assolutamente
accadendo non ho assolutamente fatto domanda
hai ragione questa volta e poi il
server proxy ha ricondizionato diligentemente il
client che l’operazione non è riuscita ma
trascurato di pensare era forse
la sua richiesta precedente aveva in realtà
è riuscito così la cosa che vuoi essere
attento a fare sistemi proxy
riprova è quello di assicurarsi che tu prenda
lo stato di errore più indeterminato come
il tuo come codice di ritorno, quindi non lo fai
promettere accidentalmente gli utenti che
qualcosa sicuramente non è successo quando
in realtà potrebbe avere questo è lo stesso
bug che ha un po ‘di scarafaggio DB ti abbiamo visto
potrebbe inserire un record
a causa di qualche tipo di noncuranza di
esattamente quali potrebbero essere le operazioni
ripetuto e quando puoi finire
riprovare un’operazione di inserimento multipla
tempi vedendo un fallimento definito e
riprovare anche se in realtà
internamente riuscito quindi questo è un tipo
di modello comune penso che questo sia corretto
in tre nove uno cinque evviva
quindi vogliamo testare il nodo si blocca così noi
lascerebbe cadere i pianoforti sui nodi e, si spera
il resto del cluster andrebbe in giro
la loro giornata e si poteva uccidere un nodo che
Funzionerebbe bene uccidere due lavori di nodi
bene uccidi tre che smette di funzionare e
questo è normale e atteso perché la maggior parte
i sistemi coerenti funzionano con la maggioranza
quorum quello che non ti aspetteresti è
che quando riavvii tutti i nodi
non torna mai che è un
un po ‘ atipico e in effetti il
la partizione è morta , è completamente morta e basta
deve essere rianimato in modo da andare in picchiata come il
operatore che gridi eroi non muoiono mai e
e resuscitare la partizione con un
comando amministrativo ma quando arriva
indietro non è tutto lì
operazioni potrebbero essere stati persi in modo che sia
un po ‘un problema e deriva da
errore picco non operazioni di flussaggio a
disco e questo è un comportamento documentato
in aerospike per motivi di prestazioni
hanno fatto affidamento principalmente sull’avere multipli
copie su diversi nodi in memoria come
contrario ad avere copie stabili
stoccaggio durevole e l’idea era quella
la maggior parte dei clienti che preferivano
trade-off però a volte davvero
voglio durabilità perché ti pensi
potrebbe perdere ogni nota in una volta e così ora
c’è una modalità che puoi abilitare in 321
che effettivamente si svuota sul disco correttamente
l’altro problema che abbiamo trovato è quell’orologio
skew può portare a aggiornamenti persi all’interno di
errore spike c’è un record di metadati
che ha come l’orologio logico per a
registrare e forse alcune informazioni su
la sua posizione e quell’orologio è compreso
di tre parti c’è un regime logico
che è come il termine e Raft è
è incrementato ogni volta che c’è un
elezioni così ogni leader per il cluster
ha il suo regime e c’è un nodo
orologio da parete locale su quel leader che è
monotonicamente applicato e che dà
tu un ordine per ogni regime e poi se
devi fare più aggiornamenti
all’interno dello stesso orologio a muro, quindi utilizzare a
contrastare comunque per motivi di prestazioni
questa intera struttura dati deve adattarsi a
linea cache più un sacco di altre cose
il che significa che ci sono pochissimi bit
disponibile per spremere questa struttura dati
in realtà ci sono solo sei bit
disponibile per un gene che significa quello
puoi fare solo 32 elezioni prima del tuo
il tuo contatore di regime si esaurisce
ora ovviamente la maggior parte di noi farà di più
di 32 elezioni nella vita per i cluster
e così alla fine dovranno reimpostare
il contatore si azzera e ricomincia da capo
ma quando ciò accade potresti confrontare
due regimi e vedere che un più recente
il regime in realtà aveva un numero inferiore okay
come facciamo a risolvere questo bene noi
sapere che ci vuole un certo numero di
secondi per fare un’elezione, quindi diciamo
che se hai avuto più di 27 secondi
tra queste cose poi conosci il
il contatore di regime potrebbe essersi ribaltato così
se vedi una differenza maggiore di 27 secondi
allora sceglieremo l’orologio da muro se noi
vedere meno di quello che è bevanda
anche e fino a quando tutti i nostri orologi
le code sono sotto i 27 secondi, va bene
cosa succede lì in oltre 27 secondi
ottiene un po ‘di immaginazione sottile nodo a è un
primario per regime 1 e riceve a
destra W 1 e si ferma immediatamente
su quel rosso e il nodo Ram B su testo
quel nodo a non risponde ed è
eletto un nuovo primario al regime 2 ed è
in grado di servire le scritture, quindi è giusto
W 2 scrive il numero 2 sul disco
e dice che devo farlo al regime 2 e basta
è il momento in cui il nodo 0 si sveglia e dice hey
Ho questo diritto giusto fresco va bene
quindi scrive in basso che uno assume
è ancora un primario perché non lo è
conoscere meglio
e invia quella destra W 1 a B
ora B vede questo diritto di 1 a regime 1
e dice bene, sono due in modo regime di
Certo che lo rifiuterò sono un altro
recente primario di quello che sei e poi di
Certo che dice oh mi dispiace, mio male e
inoltra questo al cliente ma esso
in realtà non lo elimina localmente così via
disco c’è ancora questo record di uno a
regime 1 e tempo 27 perché eravamo
addormentato così in un secondo momento lì
essere un processo di riconciliazione quando questi
due nodi scambiano solo informazioni
di routine per guarire tutto ciò che potrebbe
sono divergenti e lo scopriranno
una copia del disco era a I’m 27 the
l’altro era al tempo zero e lo faranno
preferisco il tempo 27 copia dal vecchio
regime che ci fa preservare a
fallito correttamente ed elimina un successo
riconosciuto uno un po ‘difficile intendo
mi piace davvero, okay, davvero perché hey
questo è un difetto noto è documentato in
il manuale è un compromesso se loro
fatto per ragioni di prestazioni da preservare
quel problema di cache line e loro lo sanno
che mentre liberano bit nei dati
struttura possono aumentare le dimensioni
aumentare la tolleranza di skew dell’orologio e la maggior parte
l’inclinazione dell’orologio è nell’ordine del forse
centinaia di millisecondi a decine di
secondi solo di rado vedi
orologio obliquo di ore mmm davvero e così
questo è per lo più okay
finché rimani in questi equilibri
in realtà passa usare la bandiera duratura
rimani nel bilanciamento degli orologi err err
il rispetto ora fornisce capacità linearizzate
che è come un salto davvero grande per due
anni di lavoro ingegneristico continuate a lavorare
mente se il tuo utente che attraversa lo stato e
replica tutto ciò che fa più
registrare scansioni e funzioni definite dall’utente
non sono stati completamente integrati in
consistenza forte, ma che sta per
accadere nelle versioni future per ricapitolare quando
scegli un database come ingegnere
stanno essenzialmente firmando un contratto anche
se usi un database open-source a destra
ti stai chiudendo in operatività
perizia le librerie client in un certo modo
di fare le cose e in sostanza noi siamo
firma aerea un contratto con un venditore
Ursula la strega del mare e se non lo facciamo
leggi la stampa fine della documentazione
con attenzione potremmo scoprire che lì
sono certi avvertimenti per l’utilizzo di questo
database particolare come se non lo facessi
baciare le stampe entro il terzo giorno quindi
tutti i dati viene incamerata così abbiamo bisogno
leggere la documentazione con molta attenzione
per cercare questi fallimenti o momenti
capire cosa stiamo veramente ricevendo
dentro e poi buttare via tutto
le informazioni sono state testate perché
spesso anche i venditori non lo sanno
cerca parole come severe
consistenza acido consistenza forte se
questa è l’ unica descrizione che vedi
una pagina di prodotto è un suggerimento che il
persone che lo hanno progettato
sai cosa significano quelle parole che vuoi
cercare uno specifico veramente formale
garantire come acido potrebbe significare leggere
uncommitted che è un livello in ANSI SQL
ma non è molto utile
potrebbe significare serializzabile potrebbe essere
in rigorosamente serializzabile quindi prova a capire
fuori esattamente ciò che il tempo e
garanzie logiche sono intorno al sistema I.
voglio incoraggiare entrambi gli utenti e
ingegneri che stanno costruendo i sistemi
diventare un po ‘più formale diventa a
poco più familiare con questi
definizioni in modo che possiamo specificare
esattamente che tipo di garanzie abbiamo bisogno
e fornire e quindi capire il
invarianza di cui hai effettivamente bisogno perché no
ogni carico di lavoro richiede il 100% di sicurezza no
tutti devono evitare di rubare letture
non tutti hanno bisogno di conservare tutti i dati
ci sono un sacco di applicazioni che siamo
perdere il 10% del tuo riso è perfettamente
accettabile ed in effetti desiderabile nel
il nome dell’efficienza considera infine il tuo
modalità di errore perché non è sufficiente
testare questi sistemi solo per il felice
Astuccio
quindi prova crash del processo esegui kill – 9
durante il test prova a introdurre il nodo
fallimento usando il tuo cloud
fornitore o andare e capovolgere il potere
gli interruttori si può anche provare a sincronizzare l’orologio
con una data o con un precarico LD
lo shim li ha chiamati tempo finto che mente
circa l’orologio per il sottostante
processo puoi fare garbage collection io
si ferma con sig stop mentre l’ acido continua
scopre la garbage collection o l’I / O
lo stallo tende ad assomigliare molto a
petizione in rete perché il processo
smette di rispondere per molto tempo e
potrebbe innescare un’elezione e questo
il processo ritorna pensando che sia ancora un
leader ma forse lo stato passato che possiamo
anche introdurre partizioni di rete che
Penso che il fallimento più interessante
questa modalità si verifica è più utile
perché quando hai una partizione il
le scale temporali coinvolte sono lunghe proprio così
nei sistemi concorrenti sei spesso
in cerca di condizioni di gara e il tuo
la finestra temporale è molto breve ma con un
L partizione i tempi di ritardo del messaggio sono
misurato in secondi due minuti e
questo è un sacco di tempo per te da raggiungere
lì dentro e osservare una specie di razza
in questo caso prova le tabelle IP con – J drop
rilascia tutti i pacchetti da un nodo da a
il cliente ha provato a vedere quattro sistemi
non sono basati su TCP che puoi introdurre
gocce e ritardi probabilistici in
pacchetti alla fine voglio testare
i sistemi end-to-end non guardano solo
i singoli sistemi non pensano
il database da solo ma anche circa
la composizione del database ed è
servizio di memorizzazione nella cache e l’API ha scritto sopra
di esso
fa il servizio di registrazione dell’utente
garantisci che puoi registrarne solo uno
nome utente una volta o puoi darlo a
più persone che è un invariante che
ci preoccupiamo e come ci ricorda Tolstoy
se cerchi la perfezione non lo farai mai
essere contento ad un certo punto che dobbiamo
accetta che testare questi sistemi
sarà esaustivamente bollente
il problema dell’oceano dobbiamo accettarne alcuni
grado di fallimento ma facendo un po ‘
di testare un po ‘di QA in anticipo
posso migliorare notevolmente le cose così io
voglio difendere la proprietà basata
test di ricerca per il livello elevato
l’invarianza al tuo sistema ha bisogno di generare
input casuali e quindi verificare il
sistema soddisfa quegli invarianti con
modalità di guasto dei sistemi distribuiti questo
non sarebbe stato possibile senza il
assistenza finanziaria di menta tenera il
assistenza di persone al calco nocciola
inclusi utenti come Jordan Altman Luigi
del Aguila Luca guru Li e Dennis
Aerospike Socorro Slav ha finanziato il
ricerca sul loro database e Peter
Alvaro è stata la mia ricerca instancabile
consigliere di UC Santa Cruz grazie a
Bridgette e tutti vanno per
invitando me e grazie per il tuo tempo se
vuoi saperne di più su questo
ricerca si può andare a Jepsen IO dove
ci sono correzioni complete e
link alla fonte e sarò felice
per fare un paio di domande
discorso meraviglioso Kyle e io ne immagino alcuni
le persone potrebbero avere qualche domanda o
hanno appena fatto esplodere le loro menti
o dicendo che ho così tanto da fare adesso ma
curioso se ho persone che hanno
domande tutti sono come ho così
molto che ho bisogno di fare ora, um davvero
avere una domanda veloce per iniziare
che ci hai mostrato un sacco di cose
sono terrificanti e tu
ha detto che le persone hanno bisogno di tipo di
capire dove sono i vincoli giusti
sono per loro dove è giusto
quanta perdita di dati terrificante va bene
per loro come consiglieresti le persone
anche iniziare a capire quale sia la risposta
a questo è per loro, mi sembra di figurare
la quantità di perdita di dati va bene è ordinata
di un problema irrisolto e noi ancora
non so in sistemi distribuiti
la ricerca può garantire la sicurezza con
livelli di isolamento più deboli come il tuo
carico di lavoro ok on read committed o do
hai bisogno di serializzare che è un open
problema c’è del lavoro in
linguaggi di specifica verso quello ma
davvero non lo sappiamo e inoltre è
anche un problema probabilistico proprio così
è necessario sviluppare un modello di quanto spesso
i tuoi appunti falliscono
quante volte si verificano le petizioni di rete
vostri orologi spunti sono e queste cose
richiedono sia l’osservazione che la cistica
strumenti di modellazione le persone fanno questo lo so
Conosco almeno un gruppo in una tecnologia pubblicitaria
quello fa la modellistica rigorosa del
fallimenti e ho il sospetto sul numero
delle banche lo fanno anche io, ma non credo
è come uno standard di settore ancora
interessante quindi una zona per il lavoro futuro
Allora, qual è il prossimo
puoi darci un’anteprima di qualsiasi cosa
su cui stai lavorando o che ti piace venire
fuori con puoi darci un’anteprima di
qualsiasi cosa su cui stai lavorando bene
ora sta arrivando quello che è il prossimo
su cosa sto lavorando ora sono
sfornare analisi il più velocemente possibile
possibilmente andare e sto anche lavorando su a
coppia progetti di ricerca uno di loro è
Ho un correttore generalizzato per
capacità di linearizzazione che posso dire di averne
struttura dei dati che ti piace specificare
supportato da questo sistema sottostante tu
puoi scrivere una stecca potresti scrivere una chiave
archivio valori è possibile scrivere una tabella SQL
qualunque cosa tu voglia e posso verificarlo
tu
transazioni arbitrarie che non posso fare
è quello per la serializzabilità
e non posso farlo per l’ isolamento dello snapshot
quindi sto cercando di escogitare pedine che
verificherà in modo efficiente queste proprietà
su livelli di isolamento più deboli e sullo stato
lo spazio è esponenziale per il facile
problema ed è ancora più esponenziale
per questi altri problemi quindi sono ancora
cercando di lavorare la mia strada fino a quel che è
eccezionale
okay, siamo solo fuori tempo ma
it.we prima diamo un altro giro di
applausi alla nostra meravigliosa tessera di conversazione
Kingsbury
ok grazie mille Ciao Bridget
tutti i benvenuti a Jepsen nove di
sensazione di affondamento che è il funzionario
pronuncia per la chiamata di sistema dovrebbe
ne hai mai avuto bisogno , mi chiamo Kyle
Kingsbury e potresti conoscermi dal
internet come fer è il mio lavoro di giorno che ottengo
per rompere i database che è fondamentalmente
la cosa più bella del mondo, ma
Prima di rompere i database, in realtà ero
un ingegnere che lavora su api e api
non sono come normali, conosci prodotti o
servizi che otterresti nel
mondo di tutti i giorni non puoi andare al
agenzia di adozione e trova un piccolo carino
API e portarlo a casa non è possibile acquistarne uno
al negozio ci sono servizi che tu
tipo di vedi nel cielo e tu
interagire con voi lo sguardo su di loro e
ammirali da una distanza che puoi
mai toccare così dove API è questo è questo
illusione questo arcobaleno nel cielo ma
è supportato dal codice in cui sono scritte le cose
Rubino o C o Scala sono questi acciaio
travi che reggono un arcobaleno
e quelle travi a loro volta sono supportate
su alcuni pali di legno cose come la
il Ruby ZM or o il compilatore di Scala
librerie open-source che inseriamo e
quelli sono radicati in una solida base di
servizi persistenti che abbiamo trovato
fondamentalmente in giro su internet
o qualunque cosa abbiamo visto nelle notizie degli hacker
settimana
questi database qui rappresentati dal
fondazione di un mucchio di pneumatici e come
chiunque abbia mai lavorato con il
il database conosce la pila di pneumatici
di solito in fiamme e mentre la nostra operazione
il personale sta gridando e sta provando a riparare il
problema tirando le gomme fiammate
del mucchio e spingendo le gomme fresche su
speriamo di sostituirli abbastanza velocemente
che l’incendio alla fine si spegne
andando a preservare l’illusione per gli utenti
che tutto va bene, vogliamo che gli utenti lo facciano
essere in grado di fare richieste e ottenere
risposte e ricevere tutto è
bene anche se il sistema internamente
è costituito da questi errori terribili
componenti questo processo di scalare il
scala di astrazione sempre più in alto
è lontano dalle fiamme sotto di noi
poiché l’informazione che nasconde è un nucleo
principio dei sistemi moderni
Non penso solo ai database che sono
anche parlando della scoperta di Q.
i servizi queste cose colpiscono la paura e
terrore nei cuori degli ingegneri
perché fanno cose terribili giuste
entrano nel cervello diviso dove due
credono diversi lati della rete
diverse verità si rompono
vincoli di chiave estera in cui vai
ottenere un oggetto a cui si fa riferimento in alcuni
parte del database e il problema
i riferimenti non sono più presenti o tu
hanno anomalie temporali transitorie dove
tu scrivi qualcosa nel database
e poi vai a leggerlo e non lo è
lì dici che aspetto l’ho scritto a tutti
è stato un errore e tu lo hai letto
ancora e si presenta sarà ancora
Lì la prossima volta non lo so così noi
vogliono essere in grado di guardare questi
anomalie che sappiamo essere
teoricamente possibile in alcuni modelli
ma capisci se sono presenti nel nostro
sistemi del mondo reale fino a che punto
questi problemi contano davvero e il
l’unico modo in cui penso di scoprire è di andare
e misura I sono un sperimentalista di
cuore e ho lavorato su
costruire strumenti di misurazione per la distribuzione
sistemi il cui maggior successo è
Jepsen Jepsen è una libreria open-source
per scrivere test per distribuito
sistemi e tratta il sistema come tutto
i sistemi dovrebbero essere trattati come
interazione tra un ambiente e un
sistema stesso il sistema sta per essere
composto da diverse profezie e a
rete e computer e tanto movimento
pezzi delicati ma insieme nel loro insieme
dovrebbe fornire l’illusione di alcuni
entità coerente come un database SQL o
un negozio di valore chiave e al di fuori del
ambiente che è tutti i clienti e
strati di persistenza ora altre cose che
interagire con il sistema al confine
tra l’ambiente e il sistema
di per sé dovrebbero esserci alcuni invarianti
ciò vale ad esempio nella mia casa che ho
ho avuto tre gatti giusti e ogni volta
Aprii la porta, dove i gatti amano
corri fuori ma se mai ne vedessi più di
tre gatti corrono fuori dalla mia porta di fila
e nessun gatto è tornato in quello è un
violazione invariante suggerisce questo
da qualche parte nella mia casa c’è un buco
dove i gatti stanno tornando dove sei
i gatti si teletrasportano da fuori
casa dentro casa qualcosa è sparita
sbagliato
ora misureremo questi invarianti
gestendo un gruppo di clienti al di fuori del
sistema che questi client simuleranno
partecipanti effettivi in distribuzione
sistema
come fingere di essere utenti al loro
i computer che fanno alcune richieste o
fingendo di essere
Nodi API che richiedono dati da alcuni
strato di persistenza e quello che stiamo per fare
eseguire tutti i client sulla stessa JVM così
che sappiamo esattamente quanto ognuno fa
e quando è importante che li facciamo
tutto nello stesso posto, quindi sappiamo esattamente
quali sono le relazioni temporali
tra queste operazioni perché in alcuni
i casi che vogliamo sapere sono in tempo reale
garanzie sulla visibilità del database
di solito sarà una raccolta di
tre cinque sette nodi probabilmente corrono
Linux probabilmente comunica su IP ma
potrebbe essere qualsiasi cosa
Jepson è un po ‘ agnostico su ciò che siamo
andando a testare e faremo richieste a
il database ora è un po ‘complicato su questo
è che non abbiamo necessariamente accesso
a tutti gli strumenti che vorremmo se lo fosse
testare un database arbitrario voi
potrebbe non essere in grado di trovare un formale
specifica del suo algoritmo così
ciò potrebbe escludere l’utilizzo di una prova
assistente o un correttore di modello che potresti
voglio introdurre una sorta di
annotazioni o forse una statica speciale
sistema di analisi del programma che farebbe
esecuzione simbolica o probabilistica
esecuzione ma non possiamo impiegarli
tecniche su tutti i tipi di database se
non abbiamo il codice sorgente o se lo è
non scritto in una lingua o uno stile
che è suscettibile di analisi quindi sono
risalire e prendere una sorta di nero
approccio alla scatola diciamo che non sappiamo nulla
a tutto ciò che accade all’interno del
database e tutti si arriva a vedere è con
i client che interagiscono con il
il database osserva così come fanno i nostri clienti
generare operazioni randomizzate come
scrivi il numero cinque o leggi il
valore corrente e si applicheranno al
sistema e tornare con qualche risultato
e quel risultato potrebbe essere uno di
fondamentalmente tre cose che potresti avere successo
nel qual caso sappiamo che l’operazione è stata eseguita
posto che potrebbe fallire e quindi sappiamo
che non ha avuto luogo o potrebbe
timeout o crash o fare qualcos’altro
e questa è una cosa molto difficile
la gente suppone che un timeout o un dove
un crash significa che l’operazione no
capita ma non è necessariamente il
caso potrebbe essere l’ operazione è
da qualche parte nella rete o forse ha ottenuto
scritto su una coda su disco e quando questo
il box si riavvierà e guarderà la sua coda
su disco e improvvisamente reiniettato
operazione di nuovo nel sistema così
operazioni che il timeout potrebbe richiedere
effetto ore settimane dopo e noi
devono pianificare in modo che quando il nostro
l’analisi li tratterà come tre
separato
contingenze eseguirà questi client
contemporaneamente così gli straordinari con un po ‘
storia concomitante bit di ciascuno
client a thread singolo che eseguono più operazioni
operazioni contro il sistema e questo
la storia è una specie di astratto che dice
hey ho letto tre ho scritto cinque o hey I
in coda questo disco e hey I DQ’d
questa registrazione è completamente disaccoppiata
dal sistema di base stesso e noi
può analizzare quella struttura dati come se fosse
erano una sorta di esecuzione o storia astratta
di un programma e questo significa che possiamo
eseguire un correttore che forse cerca di trovare un
percorso attraverso queste transazioni e
lungo quel percorso dovrebbe avere senso e
se è un sistema linearizzabile forse quello
il percorso deve sempre andare avanti nel tempo se
è un sistema serializzabile forse possiamo
andare avanti e indietro nel tempo se
stiamo cercando l’ isolamento dello snapshot maggio
essere i vincoli più deboli si applicano così a seconda
sugli invarianti misuriamo e il
il tipo di sistema che stiamo analizzando funzionerà
escogitare diverse pedine ma tutte
loro opereranno essenzialmente sul
storia osservabile dei sistemi
interagire con i clienti
quindi il nostro programma generale è qui
generare record di operazioni randomizzate a
storia di quelle operazioni come erano
applicato al sistema e quindi verificare
quella storia è coerente con alcuni
modello astratto come un negozio di valore chiave
e mentre questo sta succedendo, lo faremo
tiriamo fuori le nostre grandi cesoie di rete e lo siamo
tagliare i cavi che stiamo per
pausa processi che stiamo per scivolare
droghe per dormire nel loro tè della sera
stiamo andando a scarabocchiare sul loro
calendari e assicurati che vadano al
pratica bambino sbagliato il calcio che faremo
Praticamente cercherò di rendere le loro vite davvero
difficile e assicurarsi che il sistema
obbedisce tutte le invarianti corretti anche
in condizioni di stress così fa questo
lavoro quando abbiamo iniziato a farlo nel 2013
con la reazione abbiamo scoperto che l’ ultima destra vince
la modalità predefinita comporterebbe la perdita dei diritti
ma puoi fare degli aggiornamenti commutativi sicuri
di C o D T MongoDB ha perso dati
i livelli di preoccupazione in scrittura leggono una sentinella
quando dividere il cervello e buttare via tutto
diritti su un lato di una partizione
cassandra ha l’ultima vittoria e vince
non c’è l’ opzione CRT T aveva anche a
sistema di isolamento a livello di riga che non lo era
in realtà isolato aveva anche un
sistema transazionale basato su Paxos
quale sarebbe deadlock per sempre dopo come
dieci transazioni e non eseguire mai più e
quando quell’errore era stato risolto, era morto
perdita Bo dovuta alla doppia applicazione
transazioni Nuodb ha affermato di essere il cap
teorema bufferizzando tutto richiesto
Ram per la durata di una partizione questo
ovviamente non è disponibile Kafka ha avuto un
La replica NSYNC imposta il set di nodi che
attualmente sta servendo richieste che
potrebbe ridursi arbitrariamente a solo a
nodo singolo che riconosce tutto il tuo
operazioni e se quel nodo si blocca quindi
no le tue operazioni vanno con esso
passato da zookeeper che considero
qualcosa di un fallimento personale al CD
e consolare entrambe le letture stantie esposte
quindi potresti vedere i dati del passato
elasticsearch ha perso dati in ogni anatra
classe di partizione abbiamo testato RabbitMQ
come Redis è andato in split brain e
ha perso enormi quantità di dati su un lato
del suo cluster aerospike ha affermato di essere
un datastore acido ma si è rivelato essere
l’ultima destra vince, naturalmente, ha perso i diritti
per elasticsearch a 1: 5 ancora perso 8 in
ogni singolo test, tuttavia questa volta
ha perso meno di quello che hanno escogitato
bug nel 2015 a MongoDB abbiamo testato animali domestici
di nuovo e avevano chiuso la giusta perdita
problema ma abbiamo scoperto due fenomeni
sia stanti letture e letture sporche così tu
può vedere i dati dal passato e dati che
non avrebbe mai dovuto esistere
Cronos avrebbe un sistema di pianificazione delle attività
non riescono a pianificare le attività per sempre dopo di esso
ha perso il suo quorum in un certo modo per
Kona extra per essere in abbagliamento un ammasso
le librerie dalla mia replica sequel avevano
un sistema isolato di istantanee in cui
le istantanee non erano né istantanee né
il database di risincronizzazione isolato ha passato la sua chiave di base
i test dei negozi di valore, ma se rapidamente
riconfigurare il cluster
aggiunta e rimozione di nodi durante
partizioni in rete che puoi indurre a
certo tipo di bug che potrebbe ospitare il
cluster volt DB 6: 3 ha affermato di essere a
rigoroso sistema SQL serializzabile ma in
fatto esibito stantio legge letture sporche
e le scritture perse fanno più bug in
replica cassa IO basa su
mostra elasticsearch risolve elastico
cerca fenomeni così nel 2016 ha avuto
stantio legge letture sporche perse e corrotte
aggiornamenti e anche scarafaggio degli inserti persi
DB nel 2017 ha mostrato non serializzabile
Anomalie di uno di loro era un fantasma
potrebbe non riuscire a osservare la storia del
sistema in modo serializzabile e un altro
uno era possibile inserire un record e
ottenere più copie di esso
MongoDB abbiamo rianalizzato nel 2017 è andato a
un po ‘più profondo e abbiamo trovato un elemento fondamentale
difetto nel protocollo di replica di Visia
il che significava che i dati persi se c’erano
un orologio skew purtroppo questo bug è stato
presente anche nel protocollo di sostituzione
v1 che ha portato a molti bug di perdita di dati
anche lì
e ora per qualcosa completamente
diverso
dopo la nostra litania di paure passate mi piacerebbe
per sottolineare che molti di questi bug in
infatti quasi tutti questi bug sono ora
i venditori fissi sono stati incredibilmente
reattivo nel risolvere questi problemi e
in una certa misura non dovremmo essere sorpresi
ci sono così tanti problemi perché fare
sistemi distribuiti è davvero difficile così
Non intendo minimizzarmi
particolare fornitore per questo è solo
parte del gioco, ma io voglio
sottolinea che facendo un po ‘di
il test può rivelare risultati sorprendenti
quello che vorrei parlare di oggi è un po ‘
del lavoro recente che ho fatto finita
l’ ultimo anno in tre nuovi distribuiti
sistemi il primo è tenero con menta a O 10
– che è una replica di transazione
sistema con macchine a stati inseribili e
offre tolleranza ai guasti bizantina
lo spezzeremo un po ‘
molto ci puoi pensare un po ‘
come l’ algoritmo di consenso della zattera si incontra
un sistema di blockchain come Raph
formare transazioni di ordini linearizzabili
ciò significa che le transazioni avvengono in a
ordine totale in modo da fare uno due tre quattro
sai sempre che due vengono prima
tre mai il contrario e
raggrupperai queste transazioni
in blocchi e poi agganciarli insieme
con le firme crittografiche così loro
forma una catena di blocchi nel tempo è
anche tollerante ai guasti bizantino che è a
proprietà tipica per i sistemi blockchain
e questo significa che se qualcuno dei tuoi
i nodi sono come Regina George e loro lo sono
cercando di diffondere pettegolezzi e menzogne
tu puoi evitarli per tutto il tempo che tu
avere la collaborazione di un legale e e
gruppo rispettoso della legge dei nodi che è
più dei due terzi delle votazioni
il potere finalmente offre lo stato di innesto
macchine così non ti danno un
database dice che qui ci sono transazioni
ci sono dei blocchi opachi che spetta a te
interpretali così i validatori in
menta tenera sono i programmi che
in realtà genera la storia di
transazioni e poi su un RPC
meccanismo ti passeranno il
operazioni da eseguire e quindi è possibile
interpretali come preferisci tu
potrebbe creare un archivio di valori chiave o a
criptovaluta o non so
simulatore di trading gatto, ma quello che
stiamo per testare si chiama Merkel occhi
questo è un sì eh-eh questo
un negozio di valore-chiave basato su alberi Merkel
e lo testeremo con due
diversi carichi di lavoro uno di loro è di
guardandolo come se fosse un singolo
registrati così useremo esattamente uno
chiave alla volta e poi faremo le letture
e scrive e confronta e imposta
operazioni su quel registro ma il
l’analizzatore per quel sistema è nello spazio X.
è np-rigido in modo da gestire un elevato
rendimento che potrebbe esporre più razza
condizioni che avremo un
ulteriore test più debole che è a
aggiungi semplicemente un gruppo di numeri a un set
e poi prova a leggerlo e a farlo
certo che tutto ciò che abbiamo aggiunto appare
e lo faremo leggendo
il valore corrente a cui aggiungeremo qualcosa
quel record e poi lo scriveremo di nuovo
se e solo se non ha cambiato questo
ha portato a una condizione di gara negli occhi di Merkel
dove se hai mutato rapidamente uno
frazione o un solo percorso nell’albero b
su disco potrebbe decidere di averne bisogno
per spazzare raccogliere quel ramo anche
anche se ci serviva un concorrente
aggiornamento e che potrebbe portare a corruzione
stato testato con skew dell’orologio sia a
sbattere contro l’orologio e farlo lampeggiare
rapidamente avanti e indietro di dire 30 secondi
questo è davvero un 15 ogni millisecondi
cosa interessante da fare ai computer
perché un sacco di volte assumiamo il
i timeout si accendono approssimativamente in tempo
e se il tuo orologio è stroboscopico e
avanti di 30 secondi ogni volta che Billie
significa che tutti i tuoi timeout sono
andando fuoco quasi immediatamente in modo che
sanguina attraverso alcuni davvero interessanti
condizioni di gara ma non ha rotto dieci
Derman, siamo tutti rimasti con gli incidenti che puoi
uccidi tutti i nodi e porta indietro
e funziona bene, puoi isolare il singolo
nodi è possibile tagliare la rete a metà
puoi creare anelli intersecanti dove
ogni nodo stagione maggior parte dei nodi ma
no gradi su ciò che la maggioranza è
e tutti funzionano altrettanto bene nell’unico caso
avevamo scoperto dove si potevano perdere i dati
con i validatori duplicati così tu corri
due copie di un singolo nodo logico e
li lasci evolvere in modo indipendente e
questo per simulare un malintenzionato
validatore che è come promettente oh sì
sicuro che George andrò da te
festa di compleanno di domenica e poi
qualcuno ha detto hey che avrai del ghiaccio
crema con me al sole come sì, vado
per prendere un gelato con te domenica
hai fatto queste promesse contraddittorie
nei log ma se c’è una partizione
questo permette a quei due contraddittori
promette di
sei visibile su nodi separati e il
validatore maligno ha una maggioranza
allora puoi ancora impegnarti su entrambi i lati
di partizione e ottenere blocco contraddittorio
catene come risultato così quando questi nodi
tornate insieme che realizzeranno oh no
abbiamo mentito sul fatto che un ha firmato
transazioni che sono in conflitto e lo faranno
sorta di perdere dati o o o uccidere
se stessi, ma questo è un po ‘da essere
atteso perché tenorman esplicitamente
specifica che non puoi avere più di 1/3
dei nodi in termini di potere di voto essere
malizioso abbiamo un altro predefinito che
è quello di uccidere i nodi e poi troncarne i loro
registri su disco e quindi per riportarli indietro
questo simula i casi in cui il
il file system potrebbe non essere in grado di eseguire il journal
cose correttamente questo trovato ammortizzato
incidente che è in realtà nella biblioteca
Vai a livello DB si scopre il credulone DB
non fa il suo recupero perfetto in tutto
casi a volte se tronchi o destra
nel bel mezzo della scrittura sarà solo
esplodere e rifiutarsi di recuperare e it
risulta che questo è applicato a sì questo
è applicato a diversi sistemi di produzione
non solo menta tenera c’è anche a
vulnerabilità teorica e tenera
è giusto che il registro sia andato a finire
non essere proprio avanti , era giusto ogni volta
quindi avevamo una colonna di sink TANF che risolve
che puoi anche dinamicamente
riconfigura i gruppi di appartamenti in modo che tu possa
aggiungi e rimuovi i validatori al volo
che è davvero bello operativo
proprietà ma in realtà non risulta
nei problemi quindi sono davvero felice
che anche i bug di crash di corruzione dei dati
sono in qualche modo prevedibili questo è un
prodotto molto giovane era ancora in beta
stavamo testando e il team di tenorman
ha lavorato per risolvere questi problemi
al prossimo voglio parlare del cast di Hazel
delle versioni 383 della casta dei noccioli è un
griglia dati in memoria che è un modo elegante
di dire server di strutture dati così è
andando a darti la possibilità di avere
mappe distribuite e set e code
quel tipo di vivere in una nuvola di macchine
e non sono necessariamente persistenti
disco ma dovrebbero essere al sicuro finchè
i nodi continuano a funzionare la maggior parte del tempo così
ottieni set che ottieni set che ottieni liste
ottieni ID in modo da poter generare univoco
ID per i quali ottieni semafori e serrature
controllo della concorrenza che ti viene distribuito
code e atomiche lunghe in modo che tu possa mutare
un certo numero atomico
tutti questi primitivi veramente piacevoli come
questo è il toolkit che vogliamo come
sviluppatori di sistemi disturbanti ma è così
avuto un problema difficile e questo è tutto
quando una petizione di rete si verifica due
i componenti possono funzionare indipendentemente ora
risolvere il conflitto tra indipendente
gestendo i cluster puoi unire le cose
insieme ma la funzione di fusione non lo è
necessariamente sarà sempre
commutativo in modo da poter perdere gli aggiornamenti
da un lato o fare qualcosa che non fa
ha senso, c’è un cervello diviso
sistema di protezione che si suppone
uccidere i nodi in minoranza questo è
una tattica comune contro cui difendersi
partizioni ma non è mai sicuro perché
si attiva solo dopo aver rilevato
la partizione e potrebbe prendere forse
decine di secondi il primo tipo di dati noi
testato è una serratura e dice che blocca
sono garantiti per essere eseguiti da solo
un thread nel cluster così potrebbe
Supponiamo che tu possa acquisire una corsa di sicurezza
qualche codice rilascia il lucchetto e quello
nessun altro avrebbe corso mentre tu detenevi
questo blocco è il modo in cui pensiamo
mutex purtroppo puoi vedere a
processo acquisire il blocco e mentre è
detenerlo potrebbero farlo altri tre processi
acquisisci anche la serratura e continua a tenere
così pure questo è l’opposto di a
bloccare è che non è un blocco questo è pari
se fosse una serratura sarebbe sbagliato
perché anche se si tengono queste cose
esclusivamente il motivo per cui tieni il lucchetto
è quello di fare alcuni effetti collaterali lato destro
effetti che entrano nella rete e
potrebbe richiedere arbitrariamente a lungo per completare
quindi non puoi controllare esclusivamente cosa
l’ordine sarebbe questo è il motivo per cui bloccare
servizi e sistemi di distribuzione no
esiste davvero ogni volta che ne vedi uno tu
dovrebbe eseguire leggere la carta chubbie per a
visione più sfumata e accurata di quello
libero code polemiche aggressive dicono che
puoi aggiungere un oggetto in una macchina e
rimuovilo da un altro è così
vorremmo fare in modo che le code funzionassero, così tu metti
nei numeri 1 2 3 e 4 sono tutti
riconosciuto questo successo e cosa
viene fuori è 1 1 2 4 così hai
copie multiple di una che va bene
bene ma non hai copie di 3 che
è un po ‘preoccupante così potresti
vedere come il 2% di record duplicati 2% persi
record e questo in realtà peggiora il
timeout predefiniti questo è il massimo
opzione di sicurezza aggressiva che potrei scegliere
questo è con il rilevamento delle partizioni
con il GUP
roba abilitata e con brevi timeout
per tutto c’è un atomico
tipo di riferimento un tipo lungo atomico che
dice che puoi avere un atomico garantito
confrontare e impostare attraverso il cluster così io
potrebbe usare questo per cambiare un valore se e
solo se attualmente è un altro valore
e quelle operazioni dovrebbero essere atomiche
e non si sovrappongono mai
quindi il modo in cui questo dovrebbe funzionare è
che ho un valore come due e in
la prima transazione che leggerò e io
voglio rispedire 3 così ho intenzione di
incrementare per ottenere 3 e riscriverlo se
e solo se è ancora 2 e quello
ha successo perché il valore è ancora 2
contemporaneamente questa transazione di fondo
leggerà per incrementare per ottenere 3 e
rispondi e ti dice hey sei ancora
– oh mi dispiace il valore è cambiato così
Non ho intenzione di scrivere e questo assicura
che possiamo fare incrementi in una cassaforte
modo atomico non perdiamo alcun aggiornamento ma
cosa accadrà realmente nella casta dei noccioli
è che anche l’altro commit andrà
attraverso e ora abbiamo preso due e
aggiunto 1 + 1 e ottenuto 3 quindi abbiamo chiaramente
non fatto qualcosa atomicamente questo è
bene questo ha un po ‘più senso quando
si considera che lo stato del
il sistema è stato biforcato in più copie
ci sono dei nodi che pensano al valore
è 2 su entrambi i lati e puoi
indipendentemente da ciascuno di loro e da te
può continuare ad evolversi quindi forse su uno
lato si incrementa il comando Unione in modo da voi
ottenere 3 4 5 sull’altro cluster sul
in basso hai 3 e dipende da chi
stai parlando con te potresti vedere il
il valore oscilla tra 3 e 5 3 e 5 quindi
potresti persino vedere non monotoni
risultati e peggio ancora quando si recupera
c’è una specie di decisione opaca
che semplicemente sceglie un valore per te basato
su alcune euristiche quindi potresti vedere il tuo
valore va da 5 indietro a 3 e ora hai
esibito in un sistema che aggiunge solo a
il numero che torna indietro nel tempo intendo
come quello che quello che stai facendo come
guarda la tua vita guarda le tue scelte
lo è il punto centrale di un oggetto atomico
2p atomico quindi per favore usa un
algoritmo in realtà lo fa tu
potrebbe dire okay, andiamo indietro
una prova più facile proviamo ID
generazione così
quindi tu faresti qualcosa di simile
un identificativo del fiocco sappiamo che questo è il coordinamento
gratis ti dà aggiornamenti che sono
relativamente veloce ma sfortunatamente lo faccio
il generatore è supportato da un atomico lungo così
fa esattamente la stessa cosa che farà
aumenterà su entrambi i lati ottenere il
stessi ID e consegnali a due
persone diverse in modo da poter generare
come ottocentotrenta quattromila
identificatori ma 91 mila di quelli
saranno duplicati tra loro in a
trenta mappe Secondo Periodo di Offerta questi
operazioni come mettere se assente e quello
dice come impostare K a V solo se non lo è
impostare al momento o si potrebbe sostituire dire
imposta K su V Prime
solo se è attualmente V questo è come AK
come operazione e un diritto ma ora lo è
generalizzato alle mappe e se pensi
su di esso l’esistenza di questi
le funzioni implicano che esiste un
attuale valore singolare per quella mappa come
cosa significa mettere se assente se
la mappa contiene e anche no
contenere l’ oggetto giusto questi
le strutture di dati concorrenti semplicemente no
ha senso nel contesto di questi
funziona ma sono comunque lì
sono documentati per funzionare se ci provi
anche loro come i dati anche con il quorum
protezione però se usi una custom
unisci funzione e usa confronta e imposta
su ogni replica indipendente tu
può costruire C o D T che uniscono i dati
di nuovo insieme in modo sicuro e uniforme
aggiornamenti commutativi ma solo per la mappa
tipi come del tempo che ho scritto questo
raccomandazioni di analisi in generale se
stai scrivendo un sistema distribuito
scegliere un algoritmo di replica che sia
appropriato per il tuo tipo di dati, quindi se
si sta andando a costruire un lungo atomica voi
sapere che ci deve essere probabilmente
sequenziale ed eventualmente linearizzabile
quegli algoritmi richiedono qualcosa di simile
un Paxos o una zattera o uno zap quindi scegline uno
di quelli non provano a sostenerlo da alcuni
cosa più debole o alla fine coerente
per cose come la generazione di ID puoi
usa gli ID dei fiocchi per i contatori che potresti
avere contatori alla fine coerenti come
Contatori PN c’è un’intera famiglia di
algoritmi qui che potrebbero essere applicabili
se sei un utente di casta nocciola dovresti
non fare affidamento sulla casta dei noccioli per nulla
che ha a che fare con la sicurezza come no
usarlo come un servizio di blocco ma
purtroppo usi della casta nocciola Canon
usa queste funzioni così come sono
documentato senza veramente capire
la console
Pence è come la prima cosa che ho visto
sul post del blog del partner su hazel
Cass era un cattivo avido B e una cattiva avidità
essere internamente genera transazione
identificatori che utilizzano un generatore di ID da
casta nocciola che significa che a volte
genererà due transazioni con
lo stesso ID come chi sa cosa succede
e quello succede
aurilla DB li metteva tutti
stato del cluster e tutto il transazionale
gestione attraverso nocciola cast pure
e avevano così tanti problemi di dati
la perdita che hanno indietreggiato hanno quasi
rimosso ma è ancora usato per il
gestione dello stato del cluster e quando
mandatemi una email, sono come se la intendeste
può fare questo comportamento come sì, sorpresa
quindi stai attento a queste cose come il nocciolo
la casta viene comunemente implementata come cache in
In questo caso, questo è assolutamente perfetto
le cache dovrebbero essere sfocate e
smarrito ma se usi cose del genere
le serrature a riferimenti atomici che potresti
voglio guardare due volte dal momento di
questa analisi nocciola di casta è fondamentalmente
arretrato e sventrato tutto quello che hanno
aggiornato la documentazione che hanno
aggiunto il supporto per credo ID dei fiocchi
e nuovi tipi di dati C o DT che sono simili
ah fantastico e penso che stiano lavorando
un’implementazione della zattera pure così tanto
di questo dovrebbe cambiare e imminente
rilascia finalmente chiunque stia provando a
ti vendono un blocco distribuito sta cercando di
vendi segatura e bugie che non sono
vero smettere di provare a usarli ogni blocco
il sistema è progettato per controllare il lato
effetti quindi è necessario accoppiare il lato
effettua da sé il sistema sottostante
stai provando che è tutto diverso
parlare ma voglio buttarlo là fuori
infine, ma non meno importante, parlerò dell’era
spike 3 no no 3 abbiamo sibilato siamo tornati
e testato questo nel 2015 è stato un
shard distribuito un archivio di documenti che
significa che è un negozio di valore chiave , ma non c’è
qualche struttura ai valori e
sosteneva di essere un data store acido ma lo era
in realtà l’ultima vittoria vince così è emersa
cose basate sul timestamp o fondamentalmente
il numero di modifiche su un singolo
replica e quindi ovviamente ha perso molto
di dati durante la perdizione ma loro
in realtà è tornato al tavolo da disegno
dopo l’analisi e hanno speso il
due anni scorsi e ridisegnare
tutti i loro interni e così il numero
delle cose che escono da questo hanno
in realtà sono notevolmente migliorati
la probabilità di perdita di dati così il
frequenza e gravità sono questi problemi
diminuito e questo è davvero importante
perché per molti utenti sei
disposto a tollerare un certo grado di perdita
ma tu perdi un po ‘ di soldi ogni
tempo che accada
quindi forse stai costruendo una macchina
modello di apprendimento e diventa meno preciso
quando si rilasciano record in modo che si verifichi
questi clienti potrebbero essersi sviluppati come
tecniche di modellazione sofisticate per
decidere è abbastanza dati o meno e
e ogni piccolo pezzo di coerenza
può aggiungere li aiuta a fare meglio così c’è
già un bel risultato per questo ma il
l’altra cosa che hanno fatto è aggiungere un
protocollo consensuale personalizzato e in a4o
stanno rilasciando una consistenza forte
modalità che offre capacità di linearizzazione e
è quello che sono venuto per testare il primo
la cosa che abbiamo trovato in Eric’s Beck era quella
potresti iniziare un test con a
ardesia completamente vuota e il molto
la prima operazione che fai è leggere – è
come comprare un frigorifero dall’apertura di Sears
e trovando come una testa di lattuga
come se provenisse da um bene se
guardi attentamente la tua storia
potremmo vedere che prima c’era un
diritto di – ma ha fallito così ovviamente
il tuo sistema di visualizzazione non funzionava
effettivamente renderlo e se si inizia a
pensa che forse ti manchi
in realtà ha avuto luogo nel modo in cui ciò accade
è che un cliente fa una richiesta – giusto
– al server ma il server no
possedere i dati che stai modificando
lo trasmetterò in avanti ad alcuni
altro server che fa sui dati dove
viene applicato ma il riconoscimento
il messaggio è perso
così sarà il server proxy originale
timeout e riprova a farlo funzionare
emette un tentativo e quindi il telecomando
assistente dice oh mi dispiace non lo faccio io non
accettare che a destra più non ho più
possedere i dati o altri errori
successo ma non è assolutamente
accadendo non ho assolutamente fatto domanda
hai ragione questa volta e poi il
server proxy ha ricondizionato diligentemente il
client che l’operazione non è riuscita ma
trascurato di pensare era forse
la sua richiesta precedente aveva in realtà
è riuscito così la cosa che vuoi essere
attento a fare sistemi proxy
riprova è quello di assicurarsi che tu prenda
lo stato di errore più indeterminato come
il tuo come codice di ritorno, quindi non lo fai
promettere accidentalmente gli utenti che
qualcosa sicuramente non è successo quando
in realtà potrebbe avere questo è lo stesso
bug che ha un po ‘di scarafaggio DB ti abbiamo visto
potrebbe inserire un record
a causa di qualche tipo di noncuranza di
esattamente quali potrebbero essere le operazioni
ripetuto e quando puoi finire
riprovare un’operazione di inserimento multipla
tempi vedendo un fallimento definito e
riprovare anche se in realtà
internamente riuscito quindi questo è un tipo
di modello comune penso che questo sia corretto
in tre nove uno cinque evviva
quindi vogliamo testare il nodo si blocca così noi
lascerebbe cadere i pianoforti sui nodi e, si spera
il resto del cluster andrebbe in giro
la loro giornata e si poteva uccidere un nodo che
Funzionerebbe bene uccidere due lavori di nodi
bene uccidi tre che smette di funzionare e
questo è normale e atteso perché la maggior parte
i sistemi coerenti funzionano con la maggioranza
quorum quello che non ti aspetteresti è
che quando riavvii tutti i nodi
non torna mai che è un
un po ‘ atipico e in effetti il
la partizione è morta , è completamente morta e basta
deve essere rianimato in modo da andare in picchiata come il
operatore che gridi eroi non muoiono mai e
e resuscitare la partizione con un
comando amministrativo ma quando arriva
indietro non è tutto lì
operazioni potrebbero essere stati persi in modo che sia
un po ‘un problema e deriva da
errore picco non operazioni di flussaggio a
disco e questo è un comportamento documentato
in aerospike per motivi di prestazioni
hanno fatto affidamento principalmente sull’avere multipli
copie su diversi nodi in memoria come
contrario ad avere copie stabili
stoccaggio durevole e l’idea era quella
la maggior parte dei clienti che preferivano
trade-off però a volte davvero
voglio durabilità perché ti pensi
potrebbe perdere ogni nota in una volta e così ora
c’è una modalità che puoi abilitare in 321
che effettivamente si svuota sul disco correttamente
l’altro problema che abbiamo trovato è quell’orologio
skew può portare a aggiornamenti persi all’interno di
errore spike c’è un record di metadati
che ha come l’orologio logico per a
registrare e forse alcune informazioni su
la sua posizione e quell’orologio è compreso
di tre parti c’è un regime logico
che è come il termine e Raft è
è incrementato ogni volta che c’è un
elezioni così ogni leader per il cluster
ha il suo regime e c’è un nodo
orologio da parete locale su quel leader che è
monotonicamente applicato e che dà
tu un ordine per ogni regime e poi se
devi fare più aggiornamenti
all’interno dello stesso orologio a muro, quindi utilizzare a
contrastare comunque per motivi di prestazioni
questa intera struttura dati deve adattarsi a
linea cache più un sacco di altre cose
il che significa che ci sono pochissimi bit
disponibile per spremere questa struttura dati
in realtà ci sono solo sei bit
disponibile per un gene che significa quello
puoi fare solo 32 elezioni prima del tuo
il tuo contatore di regime si esaurisce
ora ovviamente la maggior parte di noi farà di più
di 32 elezioni nella vita per i cluster
e così alla fine dovranno reimpostare
il contatore si azzera e ricomincia da capo
ma quando ciò accade potresti confrontare
due regimi e vedere che un più recente
il regime in realtà aveva un numero inferiore okay
come facciamo a risolvere questo bene noi
sapere che ci vuole un certo numero di
secondi per fare un’elezione, quindi diciamo
che se hai avuto più di 27 secondi
tra queste cose poi conosci il
il contatore di regime potrebbe essersi ribaltato così
se vedi una differenza maggiore di 27 secondi
allora sceglieremo l’orologio da muro se noi
vedere meno di quello che è bevanda
anche e fino a quando tutti i nostri orologi
le code sono sotto i 27 secondi, va bene
cosa succede lì in oltre 27 secondi
ottiene un po ‘di immaginazione sottile nodo a è un
primario per regime 1 e riceve a
destra W 1 e si ferma immediatamente
su quel rosso e il nodo Ram B su testo
quel nodo a non risponde ed è
eletto un nuovo primario al regime 2 ed è
in grado di servire le scritture, quindi è giusto
W 2 scrive il numero 2 sul disco
e dice che devo farlo al regime 2 e basta
è il momento in cui il nodo 0 si sveglia e dice hey
Ho questo diritto giusto fresco va bene
quindi scrive in basso che uno assume
è ancora un primario perché non lo è
conoscere meglio
e invia quella destra W 1 a B
ora B vede questo diritto di 1 a regime 1
e dice bene, sono due in modo regime di
Certo che lo rifiuterò sono un altro
recente primario di quello che sei e poi di
Certo che dice oh mi dispiace, mio male e
inoltra questo al cliente ma esso
in realtà non lo elimina localmente così via
disco c’è ancora questo record di uno a
regime 1 e tempo 27 perché eravamo
addormentato così in un secondo momento lì
essere un processo di riconciliazione quando questi
due nodi scambiano solo informazioni
di routine per guarire tutto ciò che potrebbe
sono divergenti e lo scopriranno
una copia del disco era a I’m 27 the
l’altro era al tempo zero e lo faranno
preferisco il tempo 27 copia dal vecchio
regime che ci fa preservare a
fallito correttamente ed elimina un successo
riconosciuto uno un po ‘difficile intendo
mi piace davvero, okay, davvero perché hey
questo è un difetto noto è documentato in
il manuale è un compromesso se loro
fatto per ragioni di prestazioni da preservare
quel problema di cache line e loro lo sanno
che mentre liberano bit nei dati
struttura possono aumentare le dimensioni
aumentare la tolleranza di skew dell’orologio e la maggior parte
l’inclinazione dell’orologio è nell’ordine del forse
centinaia di millisecondi a decine di
secondi solo di rado vedi
orologio obliquo di ore mmm davvero e così
questo è per lo più okay
finché rimani in questi equilibri
in realtà passa usare la bandiera duratura
rimani nel bilanciamento degli orologi err err
il rispetto ora fornisce capacità linearizzate
che è come un salto davvero grande per due
anni di lavoro ingegneristico continuate a lavorare
mente se il tuo utente che attraversa lo stato e
replica tutto ciò che fa più
registrare scansioni e funzioni definite dall’utente
non sono stati completamente integrati in
consistenza forte, ma che sta per
accadere nelle versioni future per ricapitolare quando
scegli un database come ingegnere
stanno essenzialmente firmando un contratto anche
se usi un database open-source a destra
ti stai chiudendo in operatività
perizia le librerie client in un certo modo
di fare le cose e in sostanza noi siamo
firma aerea un contratto con un venditore
Ursula la strega del mare e se non lo facciamo
leggi la stampa fine della documentazione
con attenzione potremmo scoprire che lì
sono certi avvertimenti per l’utilizzo di questo
database particolare come se non lo facessi
baciare le stampe entro il terzo giorno quindi
tutti i dati viene incamerata così abbiamo bisogno
leggere la documentazione con molta attenzione
per cercare questi fallimenti o momenti
capire cosa stiamo veramente ricevendo
dentro e poi buttare via tutto
le informazioni sono state testate perché
spesso anche i venditori non lo sanno
cerca parole come severe
consistenza acido consistenza forte se
questa è l’ unica descrizione che vedi
una pagina di prodotto è un suggerimento che il
persone che lo hanno progettato
sai cosa significano quelle parole che vuoi
cercare uno specifico veramente formale
garantire come acido potrebbe significare leggere
uncommitted che è un livello in ANSI SQL
ma non è molto utile
potrebbe significare serializzabile potrebbe essere
in rigorosamente serializzabile quindi prova a capire
fuori esattamente ciò che il tempo e
garanzie logiche sono intorno al sistema I.
voglio incoraggiare entrambi gli utenti e
ingegneri che stanno costruendo i sistemi
diventare un po ‘più formale diventa a
poco più familiare con questi
definizioni in modo che possiamo specificare
esattamente che tipo di garanzie abbiamo bisogno
e fornire e quindi capire il
invarianza di cui hai effettivamente bisogno perché no
ogni carico di lavoro richiede il 100% di sicurezza no
tutti devono evitare di rubare letture
non tutti hanno bisogno di conservare tutti i dati
ci sono un sacco di applicazioni che siamo
perdere il 10% del tuo riso è perfettamente
accettabile ed in effetti desiderabile nel
il nome dell’efficienza considera infine il tuo
modalità di errore perché non è sufficiente
testare questi sistemi solo per il felice
Astuccio
quindi prova crash del processo esegui kill – 9
durante il test prova a introdurre il nodo
fallimento usando il tuo cloud
fornitore o andare e capovolgere il potere
gli interruttori si può anche provare a sincronizzare l’orologio
con una data o con un precarico LD
lo shim li ha chiamati tempo finto che mente
circa l’orologio per il sottostante
processo puoi fare garbage collection io
si ferma con sig stop mentre l’ acido continua
scopre la garbage collection o l’I / O
lo stallo tende ad assomigliare molto a
petizione in rete perché il processo
smette di rispondere per molto tempo e
potrebbe innescare un’elezione e questo
il processo ritorna pensando che sia ancora un
leader ma forse lo stato passato che possiamo
anche introdurre partizioni di rete che
Penso che il fallimento più interessante
questa modalità si verifica è più utile
perché quando hai una partizione il
le scale temporali coinvolte sono lunghe proprio così
nei sistemi concorrenti sei spesso
in cerca di condizioni di gara e il tuo
la finestra temporale è molto breve ma con un
L partizione i tempi di ritardo del messaggio sono
misurato in secondi due minuti e
questo è un sacco di tempo per te da raggiungere
lì dentro e osservare una specie di razza
in questo caso prova le tabelle IP con – J drop
rilascia tutti i pacchetti da un nodo da a
il cliente ha provato a vedere quattro sistemi
non sono basati su TCP che puoi introdurre
gocce e ritardi probabilistici in
pacchetti alla fine voglio testare
i sistemi end-to-end non guardano solo
i singoli sistemi non pensano
il database da solo ma anche circa
la composizione del database ed è
servizio di memorizzazione nella cache e l’API ha scritto sopra
di esso
fa il servizio di registrazione dell’utente
garantisci che puoi registrarne solo uno
nome utente una volta o puoi darlo a
più persone che è un invariante che
ci preoccupiamo e come ci ricorda Tolstoy
se cerchi la perfezione non lo farai mai
essere contento ad un certo punto che dobbiamo
accetta che testare questi sistemi
sarà esaustivamente bollente
il problema dell’oceano dobbiamo accettarne alcuni
grado di fallimento ma facendo un po ‘
di testare un po ‘di QA in anticipo
posso migliorare notevolmente le cose così io
voglio difendere la proprietà basata
test di ricerca per il livello elevato
l’invarianza al tuo sistema ha bisogno di generare
input casuali e quindi verificare il
sistema soddisfa quegli invarianti con
modalità di guasto dei sistemi distribuiti questo
non sarebbe stato possibile senza il
assistenza finanziaria di menta tenera il
assistenza di persone al calco nocciola
inclusi utenti come Jordan Altman Luigi
del Aguila Luca guru Li e Dennis
Aerospike Socorro Slav ha finanziato il
ricerca sul loro database e Peter
Alvaro è stata la mia ricerca instancabile
consigliere di UC Santa Cruz grazie a
Bridgette e tutti vanno per
invitando me e grazie per il tuo tempo se
vuoi saperne di più su questo
ricerca si può andare a Jepsen IO dove
ci sono correzioni complete e
link alla fonte e sarò felice
per fare un paio di domande
discorso meraviglioso Kyle e io ne immagino alcuni
le persone potrebbero avere qualche domanda o
hanno appena fatto esplodere le loro menti
o dicendo che ho così tanto da fare adesso ma
curioso se ho persone che hanno
domande tutti sono come ho così
molto che ho bisogno di fare ora, um davvero
avere una domanda veloce per iniziare
che ci hai mostrato un sacco di cose
sono terrificanti e tu
ha detto che le persone hanno bisogno di tipo di
capire dove sono i vincoli giusti
sono per loro dove è giusto
quanta perdita di dati terrificante va bene
per loro come consiglieresti le persone
anche iniziare a capire quale sia la risposta
a questo è per loro, mi sembra di figurare
la quantità di perdita di dati va bene è ordinata
di un problema irrisolto e noi ancora
non so in sistemi distribuiti
la ricerca può garantire la sicurezza con
livelli di isolamento più deboli come il tuo
carico di lavoro ok on read committed o do
hai bisogno di serializzare che è un open
problema c’è del lavoro in
linguaggi di specifica verso quello ma
davvero non lo sappiamo e inoltre è
anche un problema probabilistico proprio così
è necessario sviluppare un modello di quanto spesso
i tuoi appunti falliscono
quante volte si verificano le petizioni di rete
vostri orologi spunti sono e queste cose
richiedono sia l’osservazione che la cistica
strumenti di modellazione le persone fanno questo lo so
Conosco almeno un gruppo in una tecnologia pubblicitaria
quello fa la modellistica rigorosa del
fallimenti e ho il sospetto sul numero
delle banche lo fanno anche io, ma non credo
è come uno standard di settore ancora
interessante quindi una zona per il lavoro futuro
Allora, qual è il prossimo
puoi darci un’anteprima di qualsiasi cosa
su cui stai lavorando o che ti piace venire
fuori con puoi darci un’anteprima di
qualsiasi cosa su cui stai lavorando bene
ora sta arrivando quello che è il prossimo
su cosa sto lavorando ora sono
sfornare analisi il più velocemente possibile
possibilmente andare e sto anche lavorando su a
coppia progetti di ricerca uno di loro è
Ho un correttore generalizzato per
capacità di linearizzazione che posso dire di averne
struttura dei dati che ti piace specificare
supportato da questo sistema sottostante tu
puoi scrivere una stecca potresti scrivere una chiave
archivio valori è possibile scrivere una tabella SQL
qualunque cosa tu voglia e posso verificarlo
tu
transazioni arbitrarie che non posso fare
è quello per la serializzabilità
e non posso farlo per l’ isolamento dello snapshot
quindi sto cercando di escogitare pedine che
verificherà in modo efficiente queste proprietà
su livelli di isolamento più deboli e sullo stato
lo spazio è esponenziale per il facile
problema ed è ancora più esponenziale
per questi altri problemi quindi sono ancora
cercando di lavorare la mia strada fino a quel che è
eccezionale
okay, siamo solo fuori tempo ma
it.we prima diamo un altro giro di
applausi alla nostra meravigliosa tessera di conversazione
Kingsbury
Please follow and like us: