
quindi il titolo di questo discorso è Jepsen per
la speranza nasce eterna, infatti, in realtà no
tre non vanno a guardare avanti
non esiste questo dovrebbe dirti a
un po ‘ su cosa stiamo andando
discutere nel discorso oggi mi chiamo
Kyle Kingsbury potresti conoscermi come a
pelliccia
Sono spaventato, confuso ed eccitato
sui computer tutto il tempo
e oggi lavoro in una nuova società chiamata
stripe siamo una società di carta di credito che
aiutarti a vendere beni e servizi tramite
alcune API che è fenomenale giusto
gli sviluppatori dicono oh voglio prendermi il merito
carte come faccio a farlo bene potrei costruire
tutta questa infrastruttura conforme PCI o
Potrei semplicemente fare una richiesta HTTP a
qualche arcobaleno magico nel cielo e
tutto funzionerà alla grande
abbiamo tutti costruito api giusto che non lo sono
non sono cose vere che sono
astrazioni sono immaginarie
costruisce in modo che questo arcobaleno sia in cima
quello è il nostro che è la nostra API giusta ma è
effettivamente supportato su questa trave d’acciaio
quadro che è il nostro codice che è
scritto in Ruby e poi quel codice riposa
in cima a tutte queste librerie e il
Ruby VM che è qui rappresentata da questo
grande mucchio di bastoncini e quelle cose dentro
gira su una pila di pneumatici che
simboleggia i nostri database e li accusa
un altro sistema distribuito è ora
chiunque abbia usato un database quanti
di voi in realtà molto molto meno bene
di quanto mi aspettassi a chiunque sia abituato
il database sa che tutto è non gestito tutto
il tempo e il nostro lavoro è continuare
costruendo la torre sempre più in alto
prova ad allontanarti dalle fiamme questo è
ha chiamato la gerarchia dell’astrazione così
come una buona notizia che stiamo provando
per isolare le cose terribili che accadono
giù sotto dalle cose buone che
i nostri clienti pensano che stiano accadendo e
idealmente funziona idealmente i clienti
continuano a venire al sito che fanno
richiede correttamente i flussi di dati anche se
i nodi internamente stanno fallendo e stanno male
le cose stanno accadendo alla rete
questo è l’obiettivo che tipo di cose brutte
Sto parlando bene se lo hai mai fatto
usato una coda o un database o qualsiasi
sistema di coerenza che tu sai sempre
possono entrare in scenari di cervello diviso
dove i diversi nodi credono in modo diverso
verità o potrebbe esserci una chiave straniera
problemi dove vai a cercare a
registra ed è sparito o forse vedi
si legge su
dove vai per esaminare un disco e
magari fai una scrittura e fai una lettura
e non è lì e tu ne fai un altro
leggi e torna indietro ne fai un altro
allegato con scrivere infradito interessanti
e stato può verificarsi così di fronte
questi questi problemi che vogliono sapere come
probabilmente sono loro a influenzare in realtà il nostro
sistemi di nostri come il nostro uso del database
è corretto è probabile che il nostro software
mostra questi problemi agli utenti e al
l’unico modo per farlo è misurarli
quindi Jepson è un progetto che ho lavorato
per capire i sistemi distribuiti
meglio è che è una base di codice che è
gli articoli sono discorsi che cercano di mettere
pressione sui venditori che cercano di educare
gli utenti e capire ciò che per me stesso
coerenza significa in realtà in Jepson noi
adottare un approccio basato sui sistemi che cos’è
il sistema bene tutto ciò che puoi mettere a
casella intorno che significa più o meno
tutto è il sistema all’interno del
sistema avremo un po ‘di interazione
componenti che avranno
accadono cose complicate e sfumate
tra di loro, ma il nostro obiettivo è che se noi
disegnare una scatola attorno al sistema nel suo insieme
dovremmo essere in grado di caratterizzare cosa
continua dentro la scatola solo sulla base del
interazioni che ha in questo ambiente
e spero che queste interazioni siano
semplice così al limite quando siamo quando
stiamo spingendo le cose in un sistema e
prendendo le cose
dovremmo avere regole semplici come forse
la materia è conservata o forse per
il momento è conservato o forse se lo metto
le cose in fila escono di nuovo
forse se scrivo dati in un database
dovrebbe essere ancora lì in una settimana quelli
sono quelle semplici regole di alto livello
e poi internamente il database può fare
qualunque tipo di serrature e
trasformazioni che vuole fare quelle
le cose accadono
pensando agli invarianti per un minuto
come quello che tipo di regole di che tipo
di proprietà di alto livello potrebbe essere desiderabile
potremmo pensare a un programma semplice
proprio come allocare una variabile X set
inizialmente ad un leggerà la variabile
stampandolo che stampa a destra
quando il mondo imposterà x è uguale a B print
X sappiamo tutti cosa fa bene
scritto il programma come è prima
cosa ne pensi ciò che fa è si parte
fuori con lo stato a e lo leggeremo
e poi cambieremo lo stato in B di
eseguendo una scrittura e poi leggiamo B
quindi in stampa a e poi B in modo diretto
abbastanza ma questo non è l’ unico possibile
interpretazione di questo programma
potremmo leggere B potremmo leggere un
potremmo fare qualsiasi cosa il programma non faccia
devono obbedire a qualsiasi legge a meno che non lo diciamo
a così l’invarianza nella nostra mappa principale
struttura del programma il tipo di
struttura lessicale del processo al
comportamenti a cui è permesso di sottoporsi
l’invarianza sono i vincoli che si applicano a
la storia del sistema come cosa cosa
possibili ordini di stati potremmo noi
vedere quali possibili modi potrebbero il
le operazioni si incontrano potremmo pensare
non solo un programma a thread singolo
ma concomitante in cui multiplo
i processi interagiscono con lo stato al
stesso tempo, quindi qui un processo top legge a
e poi B che è pazzesco perché lo ha fatto
cambierà cambierà perché a
processo sul fondo eseguito per scrivere
del valore B così singoli processi
potrebbe non avere tutta la storia ma se noi
unificare l’intera storia da tutti
processo dovremmo ottenere qualcosa
segue le stesse regole ma è un po ‘
più complicato di così perché il nostro
i sistemi non sono solo concomitanti
anche distribuito e distributivo
i sistemi hanno alcune caratteristiche
differenza o qualche caratteristica
distanza tra i nodi ci vuole tempo
messaggi da propagare se voglio scrivere
un valore per un registro e DRAM che devo
andare fuori della CPU nella memoria
controller attraverso un mucchio di cache
di nuovo su un filo come 11 interi
centimetri verso la DRAM nel
bit effettivo e si capovolge e quello prende
come quello che un nanosecondo così poi devo
tornare indietro e questo richiede
più tempo quindi ogni volta che stiamo manipolando
Stati da qualche parte sta per prendere un
un po ‘di tempo per andare avanti e indietro
e quel tempo significa che le cose potrebbero essere
ambigui potremmo vedere ordini diversi
per esempio se faccio una scrittura di B e
quindi contemporaneamente inizia una lettura e poi
la scrittura completa e la lettura
completa un possibile ordine
a seconda di come questi messaggi sono
propagato è che vedo il valore B
perché la lettura arriva dopo la scrittura
ma potrei vedere anche se il lettore è
prima a o B aob tutte le modifiche sono
l’ ordine dei messaggi e un
rete asincrona come quella
di solito lavoriamo con un IP
non arrivare a controllare ciò che quelli
gli ordini sono così sia le due storie sia
valido dobbiamo considerare tutto il possibile
intrecci e operazioni concorrenti
ma non è infinitamente cattivo perché
non siamo autorizzati a infrangere le leggi di
fisica non possiamo tornare indietro nel tempo se
in realtà stiamo parlando di un singolo punto
di verità da qualche parte nel sistema allora
il primo stato possibile che potrei
interagire con quello subito dopo
invia la mia richiesta e l’ultima possibile
afferma quello appena prima di ricevere a
risposta in modo da ottenere una finestra tra
invocazione e risposta e questo è il
la gamma di stati che potremmo interagire
con questa proprietà si chiama linearize
abilità ed è una specie di oro
standard sia per distribuito che
sistemi concorrenti che si desidera avere
cose come registri atomici come
mutex che ti danno in tempo reale
garanzie sugli stati di interagire
con un mutex quando non lo blocchi nessuno
altrimenti arriva a reclamarlo fino al tuo rilascio
è una proprietà forte davvero bella
così linearizzare l’abilità significa che qualsiasi
le operazioni che non sono simultanee sono
ordini arretrati tra di loro non è un
l’ordine totale giusto possiamo ancora avere
quelle finestre di concorrenza dove tu
potrebbe ottenere ao B, ma ciò accade solo
quando due operazioni si sovrappongono nel tempo
significa che se faccio un diritto e il diritto
completa e poi comincio a leggere
perché quei due sono concorrenti
leggere è garantito vedere il giusto o
Qualche tempo dopo lo dichiarerò così tutti lo faranno
concordare tutti gli eventi dello stesso ordine
vedi ABCD su cui tutti saranno d’accordo
quando un’operazione è visibile una volta che hai
completato un’operazione che sai
tutti gli altri lo vedranno e questo
significa che otteniamo invarianti piacevoli come no
scala si legge come lotti di esclusione reciproca
dei sistemi si basano su questi questi
proprietà ma non dobbiamo esserlo
forte questa è una cosa davvero rigida
potremmo poterci rilassare il tempo
vincoli che potremmo lasciarti andare
avanti e indietro nel tempo che potresti
leggi qualcosa dal passato e scrivi
qualcosa al futuro bene come stai
scrivi al futuro bene che puoi mettere
il tuo messaggio in una bottiglia e tu butti
nell’oceano qualcuno lo sceglie
se il tuo oceano è ben ordinato come il mio
è
allora funziona tutto bene
arriva in ordine al tuo al tuo
destinatario forse su una costa diversa e
poi applicano le tue operazioni e loro
vedere la stessa storia dei messaggi loro
basta vederli una settimana dopo, quindi tutto il
i partecipanti sono in corso per concordare il
stesso ordine di eventi vedranno tutti ABC
ma potrebbero non essere d’accordo su che ora
quelle cose sono successe potremmo rilassarci
questa invarianza ancora di più se lo sei
pensando a un sistema transazionale
con molte cellule differenti che interagiscono
come un database SQL potremmo avere un
proprietà come serializzabilità dove noi
dire che ogni transazione deve adattarsi
da qualche parte in un’unica storia lineare
ma non dobbiamo essere d’accordo su quando
successo o anche in quale ordine proprio come
a lungo come si può spremere la transazione
da qualche parte
quindi in operazioni di sistema serializzabili
capita in un ordine che non sappiamo cosa
è perfettamente legale per esempio in a
registrati per mettere tutti i tuoi diritti a
l’ infinito del tempo e tutte le tue letture
tempo zero e sarà solo deveneux
il tuo database che non sembra molto
utile, ma è una specie di banale
soluzione se hai un più complesso
sistema come un database SQL dove lo fai
qualcosa come impostare questa riga in questo
colonna particolare per essere tre se e
solo se questa cosa e quella cosa sono
uguale a quest’altra cosa quando il tempo
è qualunque cosa quei commenti quelli
i vincoli sono in realtà molto di più
difficile da conservare e quindi ottieni un
più forte e variante alla fine
non dobbiamo avere solo una linea
di storia potremmo effettivamente avere un
biforcarsi alla fine nella storia divergente
i sistemi coerenti sono vincoli
che le cose devono venire insieme
in qualche modo quindi abbiamo un contatore di questo valore
è 0 quel contatore potrebbe divergere potremmo
avere due copie distinte di esso e ciascuno
uno di essi potrebbe incrementare separatamente
e restituire una delle letture ne mostrerà una
per un po ‘e poi quando i contatori
scambiare informazioni il valore sarà
convergere su se facciamo tutto bene
così alla fine i sistemi coerenti devono
convergere e cosa fa quella convergenza
non significa solo che devo concordare
un certo valore idealmente dovrebbero convergere
su un valore corretto quindi il valore corretto
potrebbe essere il valore scritto più di recente
nel registro potrebbe essere un valore corretto
il numero di incrementi che hanno
si è verificato dipende dalla semantica di
il tipo di dati con cui stai lavorando
finalmente potremmo immaginare una varianza per
basta ordinare due operazioni come una scrittura
e scrivere o scrivere in una lettura otteniamo questo
la famiglia monotona scrive letture monotone
scrive segui letture letture o scritture
diritto monotono dice solo che se io
scrivi un e poi B quelli che devono prendere
effetto nello stesso ordine nel database
e la stessa cosa per la lettura monotona I
dovrebbe leggere ae poi B e poi C
non vedere mai allora B, seguirà una scrittura
legge significa che una volta che ho fatto una lettura
qualsiasi scritto che seguirò
successivamente ad esso e al contrario una lettura
la tua scrittura dice solo oh se io se scrivo
alcuni dati e leggi
vedremo quell’effetto quindi siamo giusti
relativo all’ordine nel programma
la storia ricorda il primo programma
abbiamo parlato di x uguale ax uguale a b
stiamo solo mettendo quei limiti
su qualsiasi coppia di operazioni e tu puoi
mescolare e abbinare queste cose ci sono
infinitamente molte classi di consistenza
sono solo che sono solo set consentiti
di storie quindi se puoi scriverlo
è un modello di coerenza che potremmo
prendi la capacità linearizzata più la proprietà
che dopo un po ‘di tempo conosci tutto
legge ha causato un antico dio calamaro
arrivato nel profondo che è Cthulhu
coerenza è implementata solo in
alcuni archivi di dati ma tendono a
forse cadere in una sorta di gerarchia
non una gerarchia è un ordinamento parziale
ma potremmo dire certe cose
sull’inclusione quindi se ho un sistema
che è linearizzabile ma è da dire
tutto accade in un certo tempo
finestra e tutto avviene nel
stesso ordine perché tutto accade dentro
lo stesso ordine su tutti i nodi lo sappiamo anche noi
quel sistema è sequenzialmente coerente
ed è anche per estensione causalmente
coerente obbedisce a pm che è a
modello di memoria parallela ci dà quelli
quattro proprietà leggono i tuoi diritti
monotonic legge i diritti di scrittura monotona
segui legge tutte quelle cose sono ordinate
di essi escono dal registro unico
ricerca di coerenza che torna indietro
agli anni ’70 e poi sono attualmente nel
la gente del mondo del database stava guardando
sistemi transazionali per database SQL
per i negozi di oggetti e così hanno inventato
cose come leggere non impegnati leggere
commesso il cursore di vista atomico monatomico
letture ripetibili di stabilità
serializzabilità di tutte quelle proprietà
avere il proprio tipo di ordine parziale
il lato destro ora è interessante
roba qui è che c’è in realtà
teoremi che ci dicono che questi sistemi
avere prestazioni diverse e
caratteristiche di disponibilità il motivo
ti rilassi la coerenza è per la velocità ma
capita anche di darti disponibilità
quindi se sei qui, leggi monotoni
scrive un taglio monotono isolante
vista atomica monatomica quelli quelli di sicurezza
i modelli possono effettivamente essere forniti in
sistema che è totalmente disponibile e
vale a dire che ogni richiesta di non
il nodo in errore terminerà correttamente
questa è una proprietà davvero forte, vero
non importa ciò che fa la tua rete
potresti avere nodi come qui e via
Marte che non comunicano tutti
arriva a fare operazioni tutto il tempo
è fenomenale da un’operazione
prospettiva questo
fantastico ma se vogliamo un più forte
proprietà come linearizzare la capacità del cap
Il teorema dice che ce lo dice noi
non posso avere che siamo totalmente disponibili noi
inoltre non può avere maledizione di stabilità o
letture ripetibili che non possiamo nemmeno avere
consistenza sequenziale quelle proprietà
sono raggiungibili solo in sistemi che
alcuni nodi non sono disponibili durante
fallimento forse hanno un privilegio
nodo primario forse usano la maggioranza
quorum nel mezzo abbiamo questa
tipo di una sezione viola che è cose
che sono appiccicosi disponibili così è
totalmente disponibile con il vincolo
che ogni cliente parla sempre con
stesso server e se un server client muore
e quel cliente deve abortire il suo
operazioni e perde quegli invarianti
così diversi modelli di coerenza e e
per deboli intendo quelli che ti permettono
fai più storie quelle che permettono
più ordini possibili quelli sono di più
disponibile di fronte a fallimento e
sono anche più veloci e meno intuitivi
perché lasciano che succedano di più e
non pongono forti vincoli
che tipo di curva quindi i modelli più deboli
richiedono meno coordinamento necessario
parlare tanto se si guardano le CPU per
Ad esempio, riordinano le operazioni
come un matto , in realtà devi chiedere a una CPU
per ottenere una sorta di scrittura linearizzabile o
leggere che dovresti fare un’operazione di offesa
o un atomico confrontare e impostare se solo
scrivi un valore è felice di metterlo in cache e
forse lo vedrai in un secondo momento e
lo fa perché è costoso
coordinare tra i core della CPU, infine I
voglio notare che la debolezza no
significa necessariamente pericoloso dipende da
cosa stai facendo
quindi se sto costruendo un servizio di controcorrente
Posso tollerare un po ‘di perdita
le mie letture possono essere leggermente cadenti
ma alla fine voglio sommare al
numero di incrementi che si sono verificati se
Sto costruendo un servizio di registrazione per
utenti che erano su mutex come una proprietà
la capacità di linearizzare è critica che non posso
usa un evento il sistema coerente così
la sicurezza dipende dal tuo reale
applicazione va bene per ricontestualizzare
per un minuto, perché sono stato?
questo è tutto
conoscenza inutile giusta l’obiettivo di
questi invarianti significa porre dei limiti
sull’interazione di un sistema di database
con l’ ambiente come se tutto il
i clienti e le persone dietro a quelli
clienti e poi vado a testare
se quegli invarianti effettivamente detengono
nei sistemi reali, quindi sto cercando di prendere
risultati teorici da computer
ricerca scientifica e applicarli a
database reali che potresti vedere
fallimenti in natura quindi il nostro database
potrebbe essere composto da cinque nodi forse
eseguire un LXC forse su fisico
hardware e quei nodi sono collegati
da parte di una rete IP, quindi possiamo indurre
fallimenti in quella rete o potremmo
uccidi i processi possiamo mettere in pausa i processi
indurre diversi tipi di eventi e
quindi al di fuori del sistema che stiamo gonna run
cinque processi client e quelli sono
sarà una specie di logicamente single
serie di operazioni filettate contro a
database come numeri incrementali o
leggere e scrivere e ci stiamo provando
osserva il confine e vedi se il
il database preserva noi gli invarianti
Pensa che non abbiamo idea di cosa
accade all’interno del database se si
consegnami un’istanza di reazione o la tua mano
ho un senso di Postgres, non ne ho idea
che tipo di messaggio si sta scambiando
internamente non conosco il suo interno
stato è complicato il suo milioni di
linee di codice ma se ne segue
leggi questi invarianti che non dobbiamo
sai cosa fa e noi interni
guarda cosa succede nel confine e
assicurati che i clienti abbiano a
visione coerente in modo che un cliente possa andare
generare alcune operazioni randomizzate come
scrivi il numero che numero prova sei
forse proverà una lettura forse ci proverò
si muoverà un incremento applicarlo
operazione al database e poi sono
finiremo in uno dei tre modi in cui noi
potremmo riuscire a terminare con successo
e questo è quando conosciamo l’ operazione
ci siamo riusciti, potremmo andare in crash e lo sappiamo
fallito quindi è come se non potessi
anche cercare il database sapere per parlare
per voi sapere che la vostra operazione non ha preso
luogo che chiamiamo un fallimento o potrebbe
essere indeterminato forse c’è una rete
il timeout potrebbe essere un processo che si blocca
solo non so cosa sia successo e poi
dobbiamo considerare che l’operazione come a
possibilità forse si verifica forse
no e potrebbe aver luogo in qualsiasi
tempo in futuro forse è bufferizzato
in alcuni in alcuni hardware di rete e
arriva dieci minuti dopo, così come il
i clienti interagiscono con il sistema che sono
andando a costruire un’immagine nel tempo di
incrementi o di aggiunte a insiemi o di
legge che ognuno di loro avrà un
invocazione e completamento di alcune finestre
di tempo era valido e se si blocca
quella finestra sarà infinita fuori tempo
l’infinito e il nostro lavoro è capire se
queste operazioni insieme hanno un senso
come se stessimo cercando di linearizzare
capacità devo trovare un percorso che richiede
noi attraverso tutto il noto successo
operazioni in modo coerente
con il modello
del sistema e questo significa che se lo avessi
ho un registro per esempio devo
leggere il valore che è attualmente in
registrati lungo quel percorso quindi non lo sono
permesso di leggere essere dal registro
contenente un devo sempre leggere a
dal registro contiene a per fare questo
scriviamo un tipo di dati è una funzione che
ci dice solo quali sono le cose consentite
cosa puoi fare con un dato dato
struttura quindi per il registro si potrebbe dire
Ho un registro contiene un singolo
la cosa chiamata XI ha una funzione di passaggio
che ci dice dato un valore corrente di
il registro c’è un’operazione da applicare
come stiamo andando ad evolvere il sistema informativo
dipende dalla funzione f di
operazione se stiamo facendo una scrittura abbiamo solo
sostituire il registro con uno nuovo che
contiene il valore dato, quindi se scrivo
il numero quattro ti restituisco a
registro che contiene quattro se si fa a
leggere però dipende da se il
valore che abbiamo X è uguale al
valore dall’operazione quindi se ci provi
leggere il numero due da un registro
che contiene due questo è valido e
non cambia il registro così il
registrati solo restituisce immutato quello è
il nostro se cerchi di leggere qualcos’altro
come te tu leggi e vedi
tre ma il valore avrebbe dovuto essere due
lo sai che è incoerente e così
abbiamo restituito lo speciale incoerente
digita questa funzione a thread singolo
incapsula tutto il comportamento di a
registrare questo è il modello l’invariante
di cui abbiamo parlato prima
slide di coerenza è tutto
regole che ci aspettiamo da letture e
scrive contro una variabile e poi lo faremo
applicalo a un determinato tipo di singolo
interpretazione filettata della storia
quindi se ho uno stato come tre, lo farò
diciamo ok, chiamiamo una funzione di passaggio con
il registro che contiene tre lo farò
passare un’operazione come leggere il valore
due perché quelle cose non sono uguali
ritorna incoerente e lo sappiamo
quella particolare linea temporale non è valida così
col passare del tempo mentre ci muoviamo attraverso la storia
prenderemo ogni possibile percorso e lo faremo
vieni con alcune operazioni alcune
alcune storie che sono valide e alcune
che non sono validi e idealmente troveremo
un percorso valido o più di uno valido
percorso che ci porta attraverso il tutto
storia e caricherà il sistema era
linearizzabile
o per costruire un finale coerente
sistema che potrebbe confermare che tutto il
operazioni di incremento di successo e il
alla fine sono i residenti
una lettura o forse se aggiungiamo cose ad essa
impostare tutte le cose che hai inserito dovrebbe essere
eventualmente presente in alcune letture finali così
potresti scrivere diversi tipi di test
diversi controlli contro questo tipo di
storia così generando operazioni casuali
applicando questo database alla ricerca e
vedere cosa succede e poi da quello
storia concorrente noi ne applichiamo alcuni
funzioni che controllano per vedere se o
non ha senso suoni così buoni finora
Va bene così ora per il sangue non sei tu
intrattenuto così abbiamo ottenuto abbiamo un modo
per controllare i sistemi ora e sono stato
lavorando su questo per un paio di anni e
Ho eseguito un bel po ‘di analisi il primo
valeva la pena leggere una sentinella MongoDB
e reagire Redis Sentinel andrà in o
almeno entrerebbe in una vita lunga
split-brain e perdere un sacco di dati
forse fino al 50% a seconda di come
petizioni accadute MongoDB lo ha perso a
ogni livello di giusta consistenza reagisce
le impostazioni predefinite per gli ultimi venti di destra lo hanno causato
perdere dati anche durante la petizione ma
se usi C o D T e permetti mult
vero o fratelli tutto funziona come
progettato questo è in realtà la nostra reazione ha
destinato a funzionare questo è un
risultato ben documentato ma perché il
le inadempienze sono andate perse, vince
potresti provare lo scenario REM se ci hai provato
cambia i dati potresti perdere informazioni
le informazioni del 2013 sono tornate a testare Kafka
nuovo DB e Cassandra anche i guardiani dello zoo
passato Kafka ha avuto un bug nel loro Oh 8
beta prima del rilascio in cui il
algoritmo di replica non riuscirebbe a
conservare i documenti quando è a corto di
nodi di istinto quindi se tu avessi un primario
morire quando è stato isolato lontano dal
rete che lo farebbe scartare
input nuodb dichiara di battere il cap
teorema e il modo in cui lo fece
non fare nulla durante
la perdizione è solo in attesa di loro
essere sopra Cassandra che carica la strategia come
finchè le tue posizioni sono corte
cassandra ha perso i dati nello stesso modo in cui
reagire usa timestamp da fare
risoluzione quindi scarterà di più
recenti scrive se i tuoi timestamp per
i tuoi orologi non sono perfettamente
sincronizzato il sistema di transazione in
Cassandra aveva anche un numero di
uno è che usa per viaggi di andata e ritorno per
ogni messaggio che lo rende un po ‘
lento il prossimo è che lo farebbe
deadlock in modo permanente e hai dovuto
ripristinare manualmente lo stato del cluster
il prossimo libro l’ho trovato una volta risolto
era che sarebbe in realtà la perdita di dati da parte
esecuzione di più copie dell’operazione
più e più volte Cassandra ha da allora
sistemato quelle cose penso che il timestamp
i problemi sono ancora presenti ma penso che
sistema di transazioni più forte 2014
rabbitmq ha diviso di nuovo il cervello quando RabbitMQ
recupera dalla partizione uno dei nodi
semplicemente clobbers l’altro e così tu
perdere tutte le informazioni che sono accadute
su quel nodo alla console CDN sono fortemente
configurazioni coerenti sorta di
sistemi di coordinamento i loro diritti appaiono
essere al sicuro ma le letture che sono
dovevo essere nei tuoi occhi una ciotola erano
in realtà ti lasciano vedere i vecchi dati
dal passato elasticsearch perde dati
in tutti i modi eccitanti parleremo
un po ‘di più su che più tardi questo
è la parte del discorso dove vorrei
stampare per voi nuovi database direi e
ora per qualcosa di completamente diverso
fare qualcosa di completamente diverso
comunque mi piacerebbe fare qualcosa
che è in effetti lo stesso che stiamo per fare
tornare ad alcuni di questi database
di cui ho parlato prima e vedere
come sono progrediti da MongoDB che
molti di noi sanno che uno amava Mongo
numero di problemi di sicurezza nel primo
Test di Jepson per la scrittura, perderà i dati
se ci scrivi bene, facciamo un backup
per un secondo il modo in cui MongoDB è iniziato
non controllando per vedere se ci sono errori
si è verificato qualunque cosa sarebbe solo ordinare
di lanciare le sue operazioni nel vuoto e
spero che siano arrivati sani e salvi su qualcuno
Riva estera questo, naturalmente, è molto
veloce con due benchmark fenomenali e
la reputazione per le prestazioni persiste
oggi tuttavia non è particolarmente
sicuri delle nuove impostazioni predefinite che sono state
mettendo in atto effettivamente controllare per vedere
quando si è verificato un errore, alcuni dei
i client cercano di vedere se si è verificato un errore
fino al punto in cui è
riconosciuto in memoria questo è ovviamente
non sicuro e non si blocca altri client
controllerà per assicurarsi che sia sicuro
su disco su almeno uno dei nodi ma
anche questo non è sicuro se non lo sei
correndo verso la maggior parte dei nodi in Mongo
se si utilizza qualcosa di meno di registrare signore
la maggioranza si può avere un rollback e
il rollback è dove una cronologia alternativa
proventi e qualche altro no
accetterebbe nuove informazioni che
conflitti con i tuoi diritti e quando il
due tornano insieme quello che ha
più sorta di autorevole Nasaw che
significa che in Mongo batterà quello
non ha replicato pienamente i suoi diritti e
tali diritti verranno scritti su disco
in qualche file e tu eri un operatore
devo andare a vedere quel file e
capire cosa è successo questo è di
Ovviamente impossibile , almeno in generale
perché immagino di darti un
contatore che ha due versioni una di
loro dal database come al momento
stand e uno di loro da disco ma uno
del database dice il valore dei contatori
è 6 quello sui dischi come il valore è 5
e queste cose possono capovolgere ciò che è il
vero valore cosa pensi che sia 6
questa è un’ottima risposta, giusto così il valore
sarebbe stato 5 e quindi un nodo
isolato e abbiamo fatto un singolo incremento
nel nuovo valore è 6 io ho ragione chi
pensa che sia corretto sì che potrebbe essere
esso potrebbe essere un’altra possibile
risposta ne hai uno
proviamo a immaginare che divergono in
stato 0 e una volta ho incrementato 1 2 3 4
5 un altro lato incrementato 1 2 3 4 5 6
il numero corretto di incrementi è 11
perché queste operazioni mi danno un
nuova traccia di causalità e non lo sappiamo
quando è avvenuta la divergenza non puoi
dire quale dovrebbe essere il valore corretto
essere solo alcune strutture dati chiamate
i doveri del veggente sono sicuri da usare in Mongo a
qualsiasi livello giusto meno della maggioranza se
premi un rollback in cui puoi perdere dati
almeno per il modo in cui la maggior parte della gente lo usa così
problema con i diritti di maggioranza anche se
anche il livello più forte che è
dovrebbe essere sicuro quando MongoDB
ha colpito un errore di rete sarebbe spuntare
la casella ok e inviare la risposta a
il cliente, naturalmente, lo farebbe
interpretare questo è OK e poi lo farebbe
considerare i diritti accettati di avere
successo quando in realtà erano così persi
quel bug è stato corretto e mi piacerebbe venire
torna a MongoDB ora alla versione 267 e
cercare di valutare se la baia è
lo stesso garantisce il test 267 qui 300
è stato rilasciato durante il test 3 Oh ancora
credo che la perdita di dati in modalità singola
problemi nella tigre metallica così potrebbe essere
ma
prova quelli che credo tutto ciò che sono
andando a dirti qui si applica allo stesso modo
a 267 e alle tre serie O il modello
Voglio testare è linearizzabile
registrati questo è un singolo documento giusto
Mongo non ti da documenti interni
garanzie a tutti è sempre su a
singolo oggetto e scriveremo
un solo numero ad esso le operazioni noi
può fare in un registratore di cassa o scrivere così
cambieremo il volume da 0 a 1
possiamo leggere e leggere di nuovo leggere
il valore corrente che è nel documento
non puoi leggere un valore casuale e
allora possiamo fare questa cosa chiamata a
confronta e imposta quale è il luogo in cui abbiamo
un valore corrente di come 0 e siamo
andando a confrontarlo con il primo
argomento e poi se è vero ci metteremo
al secondo quindi posso confrontare set 0
da 0 a 1 nuovo valore 1 se proviamo a
confronta e imposta 0 da say 1 a 2 will
fallire perché 0 e 1 sono diversi così
questo è un ibrido di una lettura delle scritture
è una trasformazione atomica
cosa interessante è successo quando ho corso
questi test
Ho visto storie come questa e, naturalmente
c’erano migliaia di elementi lunghi
ma questa è una piccola frazione di a
storia da subito dopo una rete
cominciò la petizione e il tipo di strano
le cose accadono che inizialmente lo sappiamo
il valore è zero facciamo una lettura di zero così
da qualche parte in quel bar verde lo stesso
prima di tutto sappiamo che lo stato doveva essere
zero la prossima operazione conosciuta è una lettura
di quattro quindi il valore doveva essere di quattro a
quella volta e l’unico modo che abbiamo potuto ottenere
c’è saltando su attraverso questo
confronta e imposta da zero a quattro ok
Fin qui tutto bene ora dobbiamo arrivare a
questa lettura di tre potremmo eseguire a
confronta e imposta da quattro a due che lo faranno
passare attraverso perché il valore corrente è
quattro ma lascia il valore è due
che non è tre in modo che il percorso lo farà
fallire, potremmo in alternativa potremmo
scrivi 3 e questo ci permette di leggere 3 così
abbiamo un percorso coerente ora che abbiamo
per arrivare a questa lettura finale di 0 potremmo
passa attraverso questa scrittura di 4 ma quella
rende il valore 4 non 0 che potremmo scrivere
per i cambiamenti da 4 a 2 e poi quel valore è
2 e quello non è 0 che potremmo leggere
3 confrontare e impostare 3 a 1 1 non è 0 noi
potrebbe avere quel denaro da 1 a passare
potremmo andare a 4 possiamo andare a 2 no
importa come ordiniamo queste operazioni
non c’è peso
ottenere 0 è quasi come se lo stato si dividesse
nel tempo e una nota su una copia di
la storia lo stato è ancora zero è
invariato e l’altro che è andato
attraverso questi cambiamenti e ne abbiamo visti quattro
e poi tre si verificano bene quindi questo è un
linearizzare la violazione dell’abilità questo potrebbe
essere interpretato come una stantie leggere come
stiamo leggendo un valore dal passato
in alternativa puoi guardarlo come a
leggere sporco dove stiamo leggendo alcuni
dati immondizia incondizionati che lei è come
un diritto che è riuscito quando non dovrebbe
avere o più specificamente un diritto
è andato indeterminato che potrebbe avere
ci riuscì , non ci sarebbe riuscito
Non so cosa sia successo ad esso, ma la sua
gli effetti erano visibili indipendentemente da questi
ora sono riportati in un server di una
sette nove sette cinque in Mongo entrambi
letture sporche e letture stantie sono da vicino
fenomeni correlati sono note le letture sporche
questo è qualcosa che è documentato in
MongoDB perché Mongo supporta solo la lettura
non impegnato come il massimo isolamento
le letture sporche di livello sono dove sono le nostre
i diritti di coloro che gestiscono le operazioni sono discussi
circa nelle scritture quelli sono tutti
accadendo su qualche nodo minoritario nel
cluster non vengono replicati
non hanno successo non lo fanno mai
in realtà avrebbe dovuto passare per niente
ma MongoDB lo scrive immediatamente
al nodo locale e quindi tenta di
replicarlo e quindi è visibile a
chiunque altro legga in quella primaria
quindi stiamo facendo operazioni di lettura che possiamo
guarda questi dati inutili che non dovrebbero
sono stati commessi e quelle cose
verrebbe distrutto durante un rollback
in alternativa potremmo considerarlo come un
leggere stantio che è dove quei diritti
invece di succedere alla minoranza
componente si verificano nella maggioranza
e quindi puoi scrivere dati validi e
non vederlo quindi queste cose sono ordinate
di due lati dello stesso fenomeno
poiché le operazioni di lettura dei monghi non lo sono
collegato all’algoritmo di replica
non ci offre alcuna garanzia in merito
i valori che leggiamo nel tempo
esclude leggi i tuoi diritti e monotonicamente
legge perché potrei scrivere un valore due
e poi vedere uno che potrei vedere uno due
due qualsiasi ordine è ammissibile posso vedere il nostro
tradimento un lontano nel tempo a seconda di
le scale temporali emergenti lo richiedono
anche per regole di induction out peer am e
mini-risuscitato causale e sequenziale e
e 1s sono tutti quei modelli di consistenza
tu vuoi avere
se stai facendo cose come mutex o
cercando di fare cose come reclamare a
nome utente quelle cose non si applicano più
questo è particolarmente interessante perché
il mio essere esplicitamente reclama quando
la tua capacità visiva nei loro documenti
Dicono che se leggi con mietere
riferimento primario vedrai di più
recente destra così vedrai di più
questa è la versione recente di un documento
non è vero, puoi vedere noi vecchie versioni
anche sapere da letture sporche che non possiamo
ho letto impegnato e qualsiasi cosa più in alto
di quello in modo che ci sia un documento
fallimento da quel lato sappiamo che leggere
su può leggere uncommitted
esclude che abbiamo commesso un mese di um tipo di
visualizza la stabilità del core tutto questo
questo però è nuovo, così sarà più potente
in realtà ci danno diritti di diritti monotoni
il file legge che sappiamo impegnato in ciò
sostiene di darci fino in fondo
linearizzare l’abilità su un singolo documento
quindi c’è una discrepanza qui tra
cosa dice la documentazione e cosa
in realtà fornisce se sei in corso
per essere utente i risultati sono stati alquanto
complicato chiudono il biglietto dicendo
era un capriccio di letture sporche che poi
ho provato a chiudere il biglietto dicendoglielo
stava funzionando come previsto ora è stato
riprogrammato per sperabilmente versione 3.1 così
dovremmo vedere una correzione ad un certo punto se
sei un utente Mongo che la documentazione dice
devi solo preoccuparti delle letture stantie
se leggi dai secondari non lo è
vero che si deve preoccupare di tutto il
tempo se avete bisogno di garantire l’ora di recency
puoi fare un confronto e impostare il cambiamento
il valore che vuoi leggere a se stesso e
anche per impedire all’ottimizzatore di ignorare
la tua operazione devi cambiare un
campo non correlato quindi fai un ibrido
leggere le operazioni di kaz queste due cose
ti darò una miss live limitata
ti dice se non hai letto è valido
va bene ricerca elastica ricerche elastiche
il test era per uno zero
nel giugno del 2014 abbiamo trovato un buon risultato
era un caso sconosciuto di incoerenza
la ricerca elastica ha avuto un lungo thread di commenti
su come se hai una partizione che
isolato la maggior parte della rete a sinistra
un nodo che collega due lati su una nota
ogni parte potrebbe eleggersi come primaria
e reclamare il nodo nel mezzo come a
seguace e quel nodo nel mezzo
sarebbe felicemente di servire due
primarie per un po ‘e lo faresti
sapere sovrascriverlo è rimasto continuamente
e perderesti i dati quando
è tornato insieme e questo stato
rimarrebbe fino a quando partizione ha fatto
quello che non era un documento all’epoca era
quel monger dispiaciuto che elasticsearch lo farà
effettivamente perdere dati anche se la rete
posizione completamente taglia il cluster in
metà e in effetti perderà anche i dati
anche se solo un singolo nodo è isolato
quindi questo potrebbe comportare la perdita di lotti
di dati fino al 90 percento del tuo
documenti inseriti in caso di interruzione del
lo stato del cluster potrebbe restituire verde quando
rimuovere è in effetti hosed che potresti finire
con gruppi che erano permanentemente
incuneato e doveva essere rimosso
potresti accorgerti che questo è divertente
oh aspetta c’è un timeout codificato e duro
elasticsearch non importa quante la
manopole che abbassate non potete abbassare
questo per quanto ne so ce ne vuole 90
secondi per eleggere un nuovo primario durante a
petizione quindi se stai facendo diritti di
elasticsearch hai 90 secondi
finestra nel tuo tempo un problema di rete
isolati di primario durante il quale tu
proprio non può fare tutto quello che dovete bloccare
elasticsearch inizialmente aveva no
documentazione per queste modalità di errore
comunque sono tornati e hanno aggiunto un gruppo
di documentazione quindi ora c’è davvero
ottima pagina che ha una grande panoramica di
tutte le cose possono accadere tra cui cose
come i documenti Lawson durante la connessione in rete
Inoltre sono andati avanti e chiusi
il problema github e il problema è per
i documenti che perdono il cervello diviso durante
divisori che si intersecano dicono sì
questo problema è stato definitivamente risolto ora
perché aveva un sacco di falsi
correzioni prima ed era stato successivamente
riaperto ora la gente si riferisce ancora
l’ultimo discorso che stanno chiedendo a
azione supplementare
la risposta di elasticsearch
gli impiegati sono solitamente qualcosa come
la durata della ricerca duratura non è a
problema principale in questi giorni perché questi
i reclami sono vecchi, quindi mi piacerebbe venire
indietro e rivalutare questo è con il
la versione più recente alla fine di febbraio
1 5o petizione che interroga questo caso
che è stato chiuso causa ancora perdita di dati
è meno di prima
non entra più nel cervello diviso per il
tutta la durata della perdizione ora sono solo io
lo inserisce per circa 90 secondi e ancora
questo è legato a quel tempo
transizione di appartenenza in modo da perdere
alcuni documenti ma non tutti in effetti
le transizioni complete sono così tue
completare le petizioni e persino la zecca singola
anche le partizioni perderanno ancora le tue
dati così ogni
fallire
che abbiamo discusso nel primo test è
ancora aperto nella ricerca di Las in questo momento
anche se la pagina github doc è stata
chiuso che si applica solo al lungo
elenca il cervello non per il breve periodo
uno e ci sono altri biglietti che
indirizzo questo ora eleggere un nuovo primario
ci vogliono ancora 90 secondi per essere preparati
per indisponibilità ma voglio
sottolinea che il Lassiter’s ha fatto
tremendo progresso che quel fallimento
pagina che parla di tutti i loro modi
può perdere dati è in realtà un grande
risorsa per gli ingegneri delle operazioni che
stiamo cercando di distribuire questa cosa, davvero
voglio incoraggiare tutti i fornitori di database
avere qualcosa di simile sui loro siti
quindi modalità di guasto elasticsearch durante
le petizioni in rete non sono più così male
ma sono ancora presenti se usati
elasticsearch e la tua rete è
un po ‘meno perfetto che è vero
devi essere consapevole che potresti perdere
dati in modo che dovresti memorizzare i tuoi dati
qualche altro archivio dati si spera che sia più sicuro
uno e poi riempire continuamente
elasticsearch con una costante che
database e tu stai trollando sul tuo
database primario ogni giorno o così
significa se un documento scompare mai
sarà ripristinato da domani e questo
in genere va bene perché la maggior parte del tempo
la ricerca è comunque probabilistica
va bene se un documento scompare per a
un po ‘ finchè torna
più tardi, infine, voglio chiudere con un nuovo
database questo è aerospike che è un
chiave tridimensionale ad alte prestazioni
valore negozio sembra un po ‘come
Cassandra o come BigTable è spesso
usato in osep per AdTech usa spesso il
denaro offre agenzie fenomenali come
tipicamente come da uno a due millisecondi
latenza z ‘perché conosci milioni di
operazioni al secondo è stato molto
ben ottimizzato e ha questo meraviglioso
rivendicare sul sito web un’affidabilità al 100%
tempo di attività con acido di consistenza forte a
cento per cento va bene il mio bar alto per
la disponibilità è come l’ Ericsson
interruttore 301 a destra che viene offerto
come 99.999999 nove tempi di attività oltre il
ciclo di vita del progetto o qualunque esso sia
come 1,1 milioni di linee di codice aereo
questo è un significativo tecnologico
questo è il risultato del tempo di attività
infinitamente meglio
e offre acido che questo è il
Switch Ericsson non ha funzionato
Sono elettrizzato nello specifico, ce lo dice
che non c’è perdita di dati che è simile
va bene, sono a livello di strada
il blocco e la consistenza della consistenza dei media era
Replica sincrona quindi suppongo
a questo punto hanno una pax
questo algoritmo che gestirà il
il tipo di diritti sarebbe sincrono
o essere altamente disponibile ma lo farà
perderà la disponibilità se mai andrà
al di sotto del quorum sono eccitato all’apparenza
un po ‘ come il fondamento di essere per me
ma dobbiamo andare un po ‘più a fondo noi
scavare nella documentazione
un po ‘di aerospike è detto da e
grande un sistema AP che offre elevate
coerenza che conosce la definizione di
alta consistenza nessuno perché non lo è
un vero e proprio termine aerospike fornisce leggere
ah impegnato c’è un vero e proprio termine letto
livello di isolamento impegnato mediante record
serrature per garantire l’isolamento tra
transazioni che va bene ci siamo impegnati sopra
ecco qui in questa verde regione di
disponibilità dove possiamo avere totale
disponibilità che può essere un archivio dati AP
offerta re impegnata questo è così lontano
bene
ma continua per operazioni come a
singola chiave quindi la replica aerospike
fornisce una consistenza immediata usando
sincrono scrive due repliche così siamo
avremo intenzione di scrivere un’operazione
per fare un negozio che replicherà a
i suoi partner e poi tornare e poi
può rispondere che è un sincrono
replica lo vediamo tipicamente con pax
casa o zap una lettura zattera richiesta dice
sono garantiti per trovare la nuova scritta
dati che a me suona come quando sei
sulla stabilità o ma è vero
vincolo temporale più recente copia quello
la proprietà è esplicitamente vietata da
essendo totalmente disponibile dal cap
Teorema quindi come si fa a essere cap
bene , non è un teorema, è matematica
il modo in cui lo batti praticamente lo è
praticamente elimina la partizione
formazione comprovata da anni di implementazione
in ambienti data center e cloud così
la Microsoft Sync su carta ci dice
che i data center ben gestiti non lo sono
immune alle partizioni del cloud
ambienti in cui è probabile la distribuzione
probabilmente vedere le partizioni su un settimanale
base e li vediamo certamente e
aneddoticamente conosco un sacco di gente
sai che non puoi riconoscerlo pubblicamente
giusto nessuno si alzerà e ammetterà oh
sì, la nostra rete è terribile ma molto
le persone imparano lo strumento ma esso
è molto comune il modo in cui lo si evita
per configurare aerospike con nodi cluster
che sono strettamente accoppiati quindi partizioni
sono praticamente impossibili da creare
ricorda che l’accoppiamento e la disponibilità sono
diametralmente opposto se metti tutto
le tue cose nello stesso rack che sta per succedere
essere più altamente accoppiati si dimezza
ha meno hop di rete quindi il
la probabilità della partizione è inferiore ma quando
la potenza del rack non riesce a perdere il tutto
cosa così li metti su diversi rack
ok ora sto lavorando con la parte superiore di
rack commuta il collegamento tra questi
potrebbe andare giù per questa possibilità
petizioni forse per ancora di più
disponibilità li sto distribuendo
tra più data center multipli
zone di disponibilità e probabilità
delle interruzioni di rete c’è molto
molto più alto quindi per l’alta disponibilità noi
voglio distribuire le cose ampiamente
logicamente se non spazialmente e ancora per
tolleranza delle partizioni questo lo sai
più distribuisci il più probabile
le versioni diventano e più dobbiamo
effettivamente preoccuparsi di questi problemi così
cosa consiglia aerospike di distribuire
dov’è la rete magica che farai
trova che non ha questi problemi
motore apparentemente Google di calcolo del mondo
o Amazon ec2
ti sei mai schierato a queste cose
come sappiamo che non stai bene così cosa
Succede , sai se lo sei se lo sei
dato che si verificheranno le operazioni di rete
cosa succede in aerospike per un confronto
e imposta il registro in modo da ottenere l’anomalia, quindi guarda
molto simile a quello di MongoDB in cui leggiamo
un valore 0 facciamo delle trasformazioni noi
ottenere 2 otteniamo 4 e poi confrontiamo questo
da 0 a 3 questo richiede che il valore sia 0
ma non c’è il diritto di 0 che potrebbe
probabilmente hanno avuto luogo in quel momento
cornice quindi questo è in realtà peggio
di Mongo Mongo abbiamo letto un valore
era brutto, quindi abbiamo avuto una lettura stantio e questo
stiamo facendo una scrittura che potrebbe avere
solo ha avuto luogo aveva la rete o aveva
il tipo di stato ha diverguto questo significa
che ha operazioni non sicure
puoi perdere i diritti in aerospike se un
la domanda dell’ora accade così che è a
vincolo duro linearizzabile
registri è un problema complicato
che dire?
operazione commutativa e circa
qualcosa che può essere alla fine
coerente come un contatore faremo a
un sacco di incrementi e poi lo faremo
cercare i contatori che leggono il valore
da qualche parte tra il numero di
tentato il numero di completato
aumenta e, si spera, lo farà
andare alla deriva in quella gamma di dare loro a lungo
abbastanza contatori come risulta volontà
anche cadere i dati durante le petizioni quindi se io
guarda il valore letto nel tempo
questa è la linea rossa che dovrebbe rimanere
da qualche parte nella regione arancione tra
il numero di tentativi e riconosciuti
incrementa le operazioni che non cade
sempre più bassi come accadono i firmatari e
entrerai persino in modalità split-brain
piace proprio qui nel mezzo dove tu
ottenere questo tipo di rimbalzo che è
perché stiamo parlando di due diversi
le repliche che uno di loro pensa valga
100 100 100 alle altre cose da valutare
è come 200 201 203 e così ottieni
rimbalzando i valori oscillanti a seconda di
in quali repliche hai solo parlato con me
ho pensato che forse stavo sbagliando forse io
dimenticato di capovolgere un interruttore di configurazione
e infatti nella documentazione acida
c’è un’impostazione che parla di AP
rispetto alla modalità CP, naturalmente , la modalità CP
non esiste c’è molta discussione di
come potrebbe funzionare ma non è reale
mostra come funziona la modalità P
funziona risolvendo i conflitti usando a
numero di generazioni che è il numero di
modifiche che sono successe
quindi se scrivo B e C in una copia e
poi scrivo D ad uno diverso D
accade temporaneamente l’ultimo aerospike
afferma che leggerò il valore più recente
quindi dovrei vedere D ma invece vedrò
vedi perché la generazione di C è più alta
ha attraversato più cambiamenti in questo
replica alternativamente posso usare TTL
la risoluzione basata non funziona se
Sto utilizzando aerospike come dati a lungo termine
negozio dove ho impostato il mio TTL all’infinito se
le mie due code sono finite su cui si basa
orologi sincronizzati quindi abbiamo lo stesso
problemi come Cassandra e Rioch durano
giusto vince si finisce con un orologio
differenza e puoi scartare più nuovo
copie di dati in ogni modo che stai cercando
a aggiornamenti persi
non c’è modo di preservare il
invarianza che vuoi così il sistema è
alla fine coerente è d’accordo su a
valore ma concorda sul valore sbagliato
vogliamo la semantica con qualcosa come a
C o DT dove potremmo fare un contatore pn
e il nostro valore finale è il numero di
incrementa non solo un valore più alto
ora questo è possibile in aerospike
perché c’è un’opzione chiamata
applicazione
che dice che ha letto ti dà due
copia entrambe le versioni divergenti
dati e poi spetta a te fonderti
quelle cose insieme se lo fai tu
può recuperare ogni sorta di eventuale
proprietà di consistenza con CRT T è questo
è come reagire fa questo è come c’è
in qualche misura estensore di collezioni cql
funziona come la modalità CP questa caratteristica è
documentato ma in realtà non esiste
quindi sei sfortunato speriamo che lo farà
esistere in un secondo momento per parlare con
aerospike e il loro entusiasmo
costruendo questo in modo da renderlo semplice
sostengono che l’acido acido è questa roba finita
qui le cose sono un ricorso a Peterborough
instabilità abbiamo commesso tutti questi
sono esclusi da aggiornamenti persi come
questo è come se la regola numero uno non lo facesse
perdere completamente le operazioni di scrittura e di
corso tutto nella tua abilità degli occhi
proprietà quelli o quelli sono fuori
anche tu puoi scrivere qualcosa e
sparirà solo che lo governa
il monitamon scrive così praticamente tutto
questo è affermato qui è spazzatura questo è
specialmente pernicioso è davvero
piuttosto irritante perché c’è un Paxos
implementazione in questo sistema che gestisce
il coordinamento per il quale i nodi possiedono
cosa copia i dati e li impacchetta
questo è un sistema di consenso che risolve
questi problemi è garantito che
tutti saranno d’accordo sullo stesso
valore se abbiamo la maggioranza è un CP
una sorta di algoritmo, quindi perché, perché no?
metti le scritture attraverso di essa e la risposta
da da aerospike è che bene con
impatto negativo delle prestazioni perché
ci vorrebbero troppi luppoli per
latenza volevo scrivere questo mito
errore spike fa la replica sincrona
a tutte le repliche così per poter tornare
valutare per ogni singolo nodo a
torna con una risposta che significa questo
il nostro tempo di risposta è governato dal
nodo più lento nel sistema in un quorum
protocollo come Paxos o Zab o raft o do
Replica timbro è possibile tornare al più presto
come maggioranza di riconoscere così se io
ho tre nodi posso andare avanti
con solo due di loro hanno risposto così
Posso effettivamente rispondere più velocemente in termini
dei limiti di latenza con Paxos di I
potrebbe con un sincrono completo
sistema di replica e ancora meglio io
potrebbe effettivamente essere corretto questo è solo
vero tuttavia se il numero di repliche
è maggiore di due e non è un
rispetto conserva solo due copie del suo
dati
tre che in realtà significa che se
i terroristi amano come fornire risorse
consistenza dovrà andare parzialmente
non disponibile l’incidente perde qualsiasi nodo
perché non puoi più ottenere il quorum così
la mia ipotesi è che tu possa evolvere il
sistema in due modi è possibile o up
il numero di repliche su tre e
iniziare a utilizzare un vero algoritmo di consenso
oppure puoi ricominciare da capo la rotta CT completa
consistenza finale e guarda molto di più
come reagire a seconda che tu voglia
orientarsi verso la disponibilità e attraversare
comportamento del datacenter o più verso
sicurezza aerospike bottom-line potrebbe essere un
ottimo database per sistex potrebbe essere un
grande banca dati per le cose Ad Tech forse
stai facendo un sacco di diritti su di te
non preoccuparti di perdere qualcosa di piccolo
una frazione di loro forse stai solo facendo
counter tracking o caching ed è
sarà solo un modal blip nel tuo
archivio dati a lungo termine, ma se lo sei
effettivamente fare affidamento su queste garanzie per
conosci la tua fonte primaria di registrazione
per sicurezza nello spostamento dei segni del dollaro
in giro potrebbe non essere un grande
scelta quindi cosa abbiamo imparato
in generale il mio lavoro è quello di ispirarti non
solo per colpire la paura nei cuori di
umani voglio sottolinearlo
perché nessuno ha testato il sistema
non significa che sia corretto
molte persone dicono oh sai che c’è
no non c’è nessuna cosa Jepson per questo, quindi
Scommetto che è bene questo è questo è stupido
dovresti guardare e vedere cosa c’è
dentro voglio sottolineare che Mongo
e ultima ricerca e particolare e in
infatti ogni database che ho testato ha
ha apportato miglioramenti drammatici giusti
tutti si stanno sforzando molto per risolvere
questi problemi difficili ora ha Mongo
risolto il problema con la loro maggioranza
la giusta preoccupazione che Elasticsearch ha ora
grande documentazione di fallimento questo è questo
è davvero un buon progresso ma ci sono
sorprende ancora laggiù nel profondo
e così come Jacques Cousteau tu
sapere che tipo di come si va più in profondità il
documentazione che scoprirai nuova e
comportamenti interessanti molto simili a quelli aerei
sai quando siamo come ingegneri
scegliendo un database siamo una specie di
firmando un contratto con il marketing
dipartimento che è qui simboleggiato ma
Ursula la strega del mare e loro stanno andando
fare una canzone e ballare e dirci
cose meravigliose circa il database e
quanto ci aiuteranno, ma
a meno che non leggiamo il contratto per intero
ci mancherà la stampa fine come la tua
la rete non deve partizionare anche se tu
eseguire un motore di Google compute o è necessario
bacia le stampe entro il terzo giorno, se tu
fai quelle cose che i tuoi documenti scompaiono
si perde la voce quindi è necessario leggere
i documenti completamente e poi tu
devono testare quelle garanzie per
te stesso che non puoi semplicemente sapere per scontato
questo perché loro sostengono inclinano i tuoi occhi
abilità che in realtà è vera per te
devo accendere un rig e capire se
tiene se il tuo fornitore di database molto
di volte le persone mi diranno come te
sappiamo che siamo davvero imbarazzati di quello
la pagina di marketing dice, ma questo è il
problemi di dipartimenti di marketing come loro
loro possiedono quella pagina che non possiamo averla
attraverso devi smettere di collaborare e
ascolta come il marketing
reparto ha bisogno di ascoltare
ingegneria e ingegneria utilizzati
il tempo di riconoscere questo pubblico
la rappresentazione è importante a
la comunicazione è un attributo importante
della nostra disciplina, non siamo solo
costruendo soluzioni tecniche siamo
costruire soluzioni sociali e come
problema culturale non possiamo risolverlo
semplicemente costruendo sistemi migliori che dobbiamo
comunicare con precisione quelle garanzie
quindi devi sederti con persone che
eseguire il tuo sito Web è possibile eseguire il sito Web
sedersi a pensare un po ‘
di matematica e insieme puoi capire
il linguaggio formale descrive il tuo sistema
Voglio davvero discutere per termini formali
perché roba come la coerenza stradale
consistenza forte acido questi sono donnola
le parole proprio lì non lo sono
ben definiti ci fanno sentire bene ma
in realtà non significano molto in
per dire cosa sia effettivamente un database
fa per noi per costruire sicuro
software in cima al database di cui abbiamo bisogno
conosci termini formali come quando sei su
stabilità come consistenza sequenziale come
ingegneri dobbiamo capire quale di
quelle varianti di cui abbiamo effettivamente bisogno quindi è così
vale la pena prendersi un po ‘di tempo per
leggere su alcune delle pubblicazioni e
prova a identificare che tipo di promesse fai
i nostri utenti hanno bisogno di ciò che sarà
portare alla perdita di denaro quale risultato
la perdita della vita comporterà
non succede niente di male e di fatto
un po ‘ di tempo può andare bene per noi
avere davvero delle garanzie che
occasionalmente rompere un sacco di banche per
ad esempio non sono sicuro al 100% un sacco di molto
di aziende che vendono beni fisici
non garantire né la correttezza né cosa
succede quando mi capita di sbagliare sei tu
chiama alcune persone quando dici “guarda”
Mi dispiace molto, ma a noi sembra un posto sbagliato
il tuo ordine può renderlo giusto può essere
più economico da noleggiare
persone e per creare profezie culturali
che rappresentano la perdita di dati rispetto a
in realtà ingegnere sistema che è perfetto
in primo luogo quindi devi
considera questo trade-off
una volta che hai bilanciato quei trade-off
devi considerare le modalità di fallimento
che stanno per accadere nel tuo reale
il sistema pensa a cose come crash
giusto questo è questo è un tipo di primo
controllare su ogni sistema distribuito possiamo noi
sopravvivere a un processo di riavvio è possibile
uccidilo con kill – 9 scopri che puoi
sopravvivere al fallimento di un intero nodo
questo è un po ‘più difficile di
sopravvivere solo a un incidente di processo, se tu
perdere potere, ad esempio , potresti averlo
dati che F non sta dicendo di non essere
impegnarsi ER su disco in realtà fare questo è f
potrebbe anche non essere impegnato a
disco a seconda di come funzionano i tuoi dischi
è possibile utilizzare ATS terminare la potenza fisica
interruttori è possibile scollegare le cose all’interno
le tue scatole e vedi cosa succede tutto
possono arrivare tipi di comportamenti interessanti
fuori dovresti testare con clock skew se
stai facendo tutto il tuo sviluppo su a
nodo locale potresti non vederli
anomalie ma una volta che si inizia a schierare
ai nodi distribuiti e sì io
so che tutti corriamo su TP ma in qualche modo tutti
settimana qualcuno viene da me con un NTP
server in esecuzione che è come due anni in
il futuro sì è una cosa reale quindi tu
dovrebbe testare con nodi che sono lontani
impostare il tempo per impostare l’orologio del sistema
cose strane e vedere cosa succede dentro
i tuoi sistemi usano il tempo falso per fingere
processi specifici che puoi effettivamente dire
tempo falso per apprezzare il tempo di anticipo a due volte
il tasso normale o metà del tasso normale
e diventerai molto interessante
anomalie per il corridoio di raccolta dei rifiuti
mette in pausa cosa succede se il tuo kernel va
fuori a pranzo e ne prendo un altro simile
120 secondi nei tuoi processi seduti
lì scegli un ping e ritorna e
Penso di sì, sono ancora il primario
Facciamo un po ‘a destra di lavoro che può portare
in ogni sorta di spazzatura per la perdita di dati
collezione elasticsearch effettivamente cause
cose che sembrano esattamente come una rete
partizione e puoi simularli
con stick stop e stick continua e
infine partizioni come un modo fantastico
per indurre i fallimenti e tutti i tipi di
cose
Le tabelle IP SJ drop sono davvero facili
per simulare le cose in produzione se
vuoi andare un po ‘più sottile se
stai lavorando con i protocolli di gossip
in particolare il controllo del traffico di Linux
l’utilità TC può introdurre ritardi e
scende nella tua nel vostro traffico in modo che sia
non abbastanza per parlare di un database come
sicurezza Sto solo supponendo usi semplici di
database come scrive su un singolo
documento o incrementi su un singolo set
ma stiamo costruendo sistemi reali
combinare strutture dati che eseguono
molteplici trasformazioni e abbiamo bisogno di
testare i sistemi end-to-end per garantire
i loro invarianti di correttezza lo sostengono
notato pensa al database
Pensa in modo specifico ai buttafuori bassi
e la logica dell’applicazione tutto questo
le cose possono fallire in tandem e fanno il
spazio insufficiente molto più grande di quanto sarebbe
essere per singolo database ma puoi ancora
applica questi semplici controlli di rete
le partizioni elaborano arresti anomali
alla fine sto litigando per proprietà
test basato su definire randomizzato
le operazioni si presentano con semplici e
varianti semplici regole che descrivono cosa
il tuo sistema dovrebbe fare quando registro a
utente e il servizio utente dovrebbe
essere ancora lì in due secondi due persone
non dovrebbe essere in grado di rivendicare lo stesso
nome utente il numero di dollari che va
nella mia azienda dovrebbe essere lo stesso di
il numero di dollari per uscire e poi
verificare quelle proprietà con un comune
modalità di guasto dei sistemi distribuiti questo
il lavoro è profondamente in debito con le persone
le diverse aziende aina in
particolare per questo discorso kevin porter
lucien di omar si opponevano meno chiavi li
Hindman matt kangas tutti una striscia
chi ha aiutato con il discorso e ha fatto questo
ricerca possibile soprattutto mark
promontorio e Brodeur austin Kamsky Kelly
sermone a tutti coloro che hanno contribuito a rivedere presto
copia il discorso e il testo e grazie
tutto molto per venire
la speranza nasce eterna, infatti, in realtà no
tre non vanno a guardare avanti
non esiste questo dovrebbe dirti a
un po ‘ su cosa stiamo andando
discutere nel discorso oggi mi chiamo
Kyle Kingsbury potresti conoscermi come a
pelliccia
Sono spaventato, confuso ed eccitato
sui computer tutto il tempo
e oggi lavoro in una nuova società chiamata
stripe siamo una società di carta di credito che
aiutarti a vendere beni e servizi tramite
alcune API che è fenomenale giusto
gli sviluppatori dicono oh voglio prendermi il merito
carte come faccio a farlo bene potrei costruire
tutta questa infrastruttura conforme PCI o
Potrei semplicemente fare una richiesta HTTP a
qualche arcobaleno magico nel cielo e
tutto funzionerà alla grande
abbiamo tutti costruito api giusto che non lo sono
non sono cose vere che sono
astrazioni sono immaginarie
costruisce in modo che questo arcobaleno sia in cima
quello è il nostro che è la nostra API giusta ma è
effettivamente supportato su questa trave d’acciaio
quadro che è il nostro codice che è
scritto in Ruby e poi quel codice riposa
in cima a tutte queste librerie e il
Ruby VM che è qui rappresentata da questo
grande mucchio di bastoncini e quelle cose dentro
gira su una pila di pneumatici che
simboleggia i nostri database e li accusa
un altro sistema distribuito è ora
chiunque abbia usato un database quanti
di voi in realtà molto molto meno bene
di quanto mi aspettassi a chiunque sia abituato
il database sa che tutto è non gestito tutto
il tempo e il nostro lavoro è continuare
costruendo la torre sempre più in alto
prova ad allontanarti dalle fiamme questo è
ha chiamato la gerarchia dell’astrazione così
come una buona notizia che stiamo provando
per isolare le cose terribili che accadono
giù sotto dalle cose buone che
i nostri clienti pensano che stiano accadendo e
idealmente funziona idealmente i clienti
continuano a venire al sito che fanno
richiede correttamente i flussi di dati anche se
i nodi internamente stanno fallendo e stanno male
le cose stanno accadendo alla rete
questo è l’obiettivo che tipo di cose brutte
Sto parlando bene se lo hai mai fatto
usato una coda o un database o qualsiasi
sistema di coerenza che tu sai sempre
possono entrare in scenari di cervello diviso
dove i diversi nodi credono in modo diverso
verità o potrebbe esserci una chiave straniera
problemi dove vai a cercare a
registra ed è sparito o forse vedi
si legge su
dove vai per esaminare un disco e
magari fai una scrittura e fai una lettura
e non è lì e tu ne fai un altro
leggi e torna indietro ne fai un altro
allegato con scrivere infradito interessanti
e stato può verificarsi così di fronte
questi questi problemi che vogliono sapere come
probabilmente sono loro a influenzare in realtà il nostro
sistemi di nostri come il nostro uso del database
è corretto è probabile che il nostro software
mostra questi problemi agli utenti e al
l’unico modo per farlo è misurarli
quindi Jepson è un progetto che ho lavorato
per capire i sistemi distribuiti
meglio è che è una base di codice che è
gli articoli sono discorsi che cercano di mettere
pressione sui venditori che cercano di educare
gli utenti e capire ciò che per me stesso
coerenza significa in realtà in Jepson noi
adottare un approccio basato sui sistemi che cos’è
il sistema bene tutto ciò che puoi mettere a
casella intorno che significa più o meno
tutto è il sistema all’interno del
sistema avremo un po ‘di interazione
componenti che avranno
accadono cose complicate e sfumate
tra di loro, ma il nostro obiettivo è che se noi
disegnare una scatola attorno al sistema nel suo insieme
dovremmo essere in grado di caratterizzare cosa
continua dentro la scatola solo sulla base del
interazioni che ha in questo ambiente
e spero che queste interazioni siano
semplice così al limite quando siamo quando
stiamo spingendo le cose in un sistema e
prendendo le cose
dovremmo avere regole semplici come forse
la materia è conservata o forse per
il momento è conservato o forse se lo metto
le cose in fila escono di nuovo
forse se scrivo dati in un database
dovrebbe essere ancora lì in una settimana quelli
sono quelle semplici regole di alto livello
e poi internamente il database può fare
qualunque tipo di serrature e
trasformazioni che vuole fare quelle
le cose accadono
pensando agli invarianti per un minuto
come quello che tipo di regole di che tipo
di proprietà di alto livello potrebbe essere desiderabile
potremmo pensare a un programma semplice
proprio come allocare una variabile X set
inizialmente ad un leggerà la variabile
stampandolo che stampa a destra
quando il mondo imposterà x è uguale a B print
X sappiamo tutti cosa fa bene
scritto il programma come è prima
cosa ne pensi ciò che fa è si parte
fuori con lo stato a e lo leggeremo
e poi cambieremo lo stato in B di
eseguendo una scrittura e poi leggiamo B
quindi in stampa a e poi B in modo diretto
abbastanza ma questo non è l’ unico possibile
interpretazione di questo programma
potremmo leggere B potremmo leggere un
potremmo fare qualsiasi cosa il programma non faccia
devono obbedire a qualsiasi legge a meno che non lo diciamo
a così l’invarianza nella nostra mappa principale
struttura del programma il tipo di
struttura lessicale del processo al
comportamenti a cui è permesso di sottoporsi
l’invarianza sono i vincoli che si applicano a
la storia del sistema come cosa cosa
possibili ordini di stati potremmo noi
vedere quali possibili modi potrebbero il
le operazioni si incontrano potremmo pensare
non solo un programma a thread singolo
ma concomitante in cui multiplo
i processi interagiscono con lo stato al
stesso tempo, quindi qui un processo top legge a
e poi B che è pazzesco perché lo ha fatto
cambierà cambierà perché a
processo sul fondo eseguito per scrivere
del valore B così singoli processi
potrebbe non avere tutta la storia ma se noi
unificare l’intera storia da tutti
processo dovremmo ottenere qualcosa
segue le stesse regole ma è un po ‘
più complicato di così perché il nostro
i sistemi non sono solo concomitanti
anche distribuito e distributivo
i sistemi hanno alcune caratteristiche
differenza o qualche caratteristica
distanza tra i nodi ci vuole tempo
messaggi da propagare se voglio scrivere
un valore per un registro e DRAM che devo
andare fuori della CPU nella memoria
controller attraverso un mucchio di cache
di nuovo su un filo come 11 interi
centimetri verso la DRAM nel
bit effettivo e si capovolge e quello prende
come quello che un nanosecondo così poi devo
tornare indietro e questo richiede
più tempo quindi ogni volta che stiamo manipolando
Stati da qualche parte sta per prendere un
un po ‘di tempo per andare avanti e indietro
e quel tempo significa che le cose potrebbero essere
ambigui potremmo vedere ordini diversi
per esempio se faccio una scrittura di B e
quindi contemporaneamente inizia una lettura e poi
la scrittura completa e la lettura
completa un possibile ordine
a seconda di come questi messaggi sono
propagato è che vedo il valore B
perché la lettura arriva dopo la scrittura
ma potrei vedere anche se il lettore è
prima a o B aob tutte le modifiche sono
l’ ordine dei messaggi e un
rete asincrona come quella
di solito lavoriamo con un IP
non arrivare a controllare ciò che quelli
gli ordini sono così sia le due storie sia
valido dobbiamo considerare tutto il possibile
intrecci e operazioni concorrenti
ma non è infinitamente cattivo perché
non siamo autorizzati a infrangere le leggi di
fisica non possiamo tornare indietro nel tempo se
in realtà stiamo parlando di un singolo punto
di verità da qualche parte nel sistema allora
il primo stato possibile che potrei
interagire con quello subito dopo
invia la mia richiesta e l’ultima possibile
afferma quello appena prima di ricevere a
risposta in modo da ottenere una finestra tra
invocazione e risposta e questo è il
la gamma di stati che potremmo interagire
con questa proprietà si chiama linearize
abilità ed è una specie di oro
standard sia per distribuito che
sistemi concorrenti che si desidera avere
cose come registri atomici come
mutex che ti danno in tempo reale
garanzie sugli stati di interagire
con un mutex quando non lo blocchi nessuno
altrimenti arriva a reclamarlo fino al tuo rilascio
è una proprietà forte davvero bella
così linearizzare l’abilità significa che qualsiasi
le operazioni che non sono simultanee sono
ordini arretrati tra di loro non è un
l’ordine totale giusto possiamo ancora avere
quelle finestre di concorrenza dove tu
potrebbe ottenere ao B, ma ciò accade solo
quando due operazioni si sovrappongono nel tempo
significa che se faccio un diritto e il diritto
completa e poi comincio a leggere
perché quei due sono concorrenti
leggere è garantito vedere il giusto o
Qualche tempo dopo lo dichiarerò così tutti lo faranno
concordare tutti gli eventi dello stesso ordine
vedi ABCD su cui tutti saranno d’accordo
quando un’operazione è visibile una volta che hai
completato un’operazione che sai
tutti gli altri lo vedranno e questo
significa che otteniamo invarianti piacevoli come no
scala si legge come lotti di esclusione reciproca
dei sistemi si basano su questi questi
proprietà ma non dobbiamo esserlo
forte questa è una cosa davvero rigida
potremmo poterci rilassare il tempo
vincoli che potremmo lasciarti andare
avanti e indietro nel tempo che potresti
leggi qualcosa dal passato e scrivi
qualcosa al futuro bene come stai
scrivi al futuro bene che puoi mettere
il tuo messaggio in una bottiglia e tu butti
nell’oceano qualcuno lo sceglie
se il tuo oceano è ben ordinato come il mio
è
allora funziona tutto bene
arriva in ordine al tuo al tuo
destinatario forse su una costa diversa e
poi applicano le tue operazioni e loro
vedere la stessa storia dei messaggi loro
basta vederli una settimana dopo, quindi tutto il
i partecipanti sono in corso per concordare il
stesso ordine di eventi vedranno tutti ABC
ma potrebbero non essere d’accordo su che ora
quelle cose sono successe potremmo rilassarci
questa invarianza ancora di più se lo sei
pensando a un sistema transazionale
con molte cellule differenti che interagiscono
come un database SQL potremmo avere un
proprietà come serializzabilità dove noi
dire che ogni transazione deve adattarsi
da qualche parte in un’unica storia lineare
ma non dobbiamo essere d’accordo su quando
successo o anche in quale ordine proprio come
a lungo come si può spremere la transazione
da qualche parte
quindi in operazioni di sistema serializzabili
capita in un ordine che non sappiamo cosa
è perfettamente legale per esempio in a
registrati per mettere tutti i tuoi diritti a
l’ infinito del tempo e tutte le tue letture
tempo zero e sarà solo deveneux
il tuo database che non sembra molto
utile, ma è una specie di banale
soluzione se hai un più complesso
sistema come un database SQL dove lo fai
qualcosa come impostare questa riga in questo
colonna particolare per essere tre se e
solo se questa cosa e quella cosa sono
uguale a quest’altra cosa quando il tempo
è qualunque cosa quei commenti quelli
i vincoli sono in realtà molto di più
difficile da conservare e quindi ottieni un
più forte e variante alla fine
non dobbiamo avere solo una linea
di storia potremmo effettivamente avere un
biforcarsi alla fine nella storia divergente
i sistemi coerenti sono vincoli
che le cose devono venire insieme
in qualche modo quindi abbiamo un contatore di questo valore
è 0 quel contatore potrebbe divergere potremmo
avere due copie distinte di esso e ciascuno
uno di essi potrebbe incrementare separatamente
e restituire una delle letture ne mostrerà una
per un po ‘e poi quando i contatori
scambiare informazioni il valore sarà
convergere su se facciamo tutto bene
così alla fine i sistemi coerenti devono
convergere e cosa fa quella convergenza
non significa solo che devo concordare
un certo valore idealmente dovrebbero convergere
su un valore corretto quindi il valore corretto
potrebbe essere il valore scritto più di recente
nel registro potrebbe essere un valore corretto
il numero di incrementi che hanno
si è verificato dipende dalla semantica di
il tipo di dati con cui stai lavorando
finalmente potremmo immaginare una varianza per
basta ordinare due operazioni come una scrittura
e scrivere o scrivere in una lettura otteniamo questo
la famiglia monotona scrive letture monotone
scrive segui letture letture o scritture
diritto monotono dice solo che se io
scrivi un e poi B quelli che devono prendere
effetto nello stesso ordine nel database
e la stessa cosa per la lettura monotona I
dovrebbe leggere ae poi B e poi C
non vedere mai allora B, seguirà una scrittura
legge significa che una volta che ho fatto una lettura
qualsiasi scritto che seguirò
successivamente ad esso e al contrario una lettura
la tua scrittura dice solo oh se io se scrivo
alcuni dati e leggi
vedremo quell’effetto quindi siamo giusti
relativo all’ordine nel programma
la storia ricorda il primo programma
abbiamo parlato di x uguale ax uguale a b
stiamo solo mettendo quei limiti
su qualsiasi coppia di operazioni e tu puoi
mescolare e abbinare queste cose ci sono
infinitamente molte classi di consistenza
sono solo che sono solo set consentiti
di storie quindi se puoi scriverlo
è un modello di coerenza che potremmo
prendi la capacità linearizzata più la proprietà
che dopo un po ‘di tempo conosci tutto
legge ha causato un antico dio calamaro
arrivato nel profondo che è Cthulhu
coerenza è implementata solo in
alcuni archivi di dati ma tendono a
forse cadere in una sorta di gerarchia
non una gerarchia è un ordinamento parziale
ma potremmo dire certe cose
sull’inclusione quindi se ho un sistema
che è linearizzabile ma è da dire
tutto accade in un certo tempo
finestra e tutto avviene nel
stesso ordine perché tutto accade dentro
lo stesso ordine su tutti i nodi lo sappiamo anche noi
quel sistema è sequenzialmente coerente
ed è anche per estensione causalmente
coerente obbedisce a pm che è a
modello di memoria parallela ci dà quelli
quattro proprietà leggono i tuoi diritti
monotonic legge i diritti di scrittura monotona
segui legge tutte quelle cose sono ordinate
di essi escono dal registro unico
ricerca di coerenza che torna indietro
agli anni ’70 e poi sono attualmente nel
la gente del mondo del database stava guardando
sistemi transazionali per database SQL
per i negozi di oggetti e così hanno inventato
cose come leggere non impegnati leggere
commesso il cursore di vista atomico monatomico
letture ripetibili di stabilità
serializzabilità di tutte quelle proprietà
avere il proprio tipo di ordine parziale
il lato destro ora è interessante
roba qui è che c’è in realtà
teoremi che ci dicono che questi sistemi
avere prestazioni diverse e
caratteristiche di disponibilità il motivo
ti rilassi la coerenza è per la velocità ma
capita anche di darti disponibilità
quindi se sei qui, leggi monotoni
scrive un taglio monotono isolante
vista atomica monatomica quelli quelli di sicurezza
i modelli possono effettivamente essere forniti in
sistema che è totalmente disponibile e
vale a dire che ogni richiesta di non
il nodo in errore terminerà correttamente
questa è una proprietà davvero forte, vero
non importa ciò che fa la tua rete
potresti avere nodi come qui e via
Marte che non comunicano tutti
arriva a fare operazioni tutto il tempo
è fenomenale da un’operazione
prospettiva questo
fantastico ma se vogliamo un più forte
proprietà come linearizzare la capacità del cap
Il teorema dice che ce lo dice noi
non posso avere che siamo totalmente disponibili noi
inoltre non può avere maledizione di stabilità o
letture ripetibili che non possiamo nemmeno avere
consistenza sequenziale quelle proprietà
sono raggiungibili solo in sistemi che
alcuni nodi non sono disponibili durante
fallimento forse hanno un privilegio
nodo primario forse usano la maggioranza
quorum nel mezzo abbiamo questa
tipo di una sezione viola che è cose
che sono appiccicosi disponibili così è
totalmente disponibile con il vincolo
che ogni cliente parla sempre con
stesso server e se un server client muore
e quel cliente deve abortire il suo
operazioni e perde quegli invarianti
così diversi modelli di coerenza e e
per deboli intendo quelli che ti permettono
fai più storie quelle che permettono
più ordini possibili quelli sono di più
disponibile di fronte a fallimento e
sono anche più veloci e meno intuitivi
perché lasciano che succedano di più e
non pongono forti vincoli
che tipo di curva quindi i modelli più deboli
richiedono meno coordinamento necessario
parlare tanto se si guardano le CPU per
Ad esempio, riordinano le operazioni
come un matto , in realtà devi chiedere a una CPU
per ottenere una sorta di scrittura linearizzabile o
leggere che dovresti fare un’operazione di offesa
o un atomico confrontare e impostare se solo
scrivi un valore è felice di metterlo in cache e
forse lo vedrai in un secondo momento e
lo fa perché è costoso
coordinare tra i core della CPU, infine I
voglio notare che la debolezza no
significa necessariamente pericoloso dipende da
cosa stai facendo
quindi se sto costruendo un servizio di controcorrente
Posso tollerare un po ‘di perdita
le mie letture possono essere leggermente cadenti
ma alla fine voglio sommare al
numero di incrementi che si sono verificati se
Sto costruendo un servizio di registrazione per
utenti che erano su mutex come una proprietà
la capacità di linearizzare è critica che non posso
usa un evento il sistema coerente così
la sicurezza dipende dal tuo reale
applicazione va bene per ricontestualizzare
per un minuto, perché sono stato?
questo è tutto
conoscenza inutile giusta l’obiettivo di
questi invarianti significa porre dei limiti
sull’interazione di un sistema di database
con l’ ambiente come se tutto il
i clienti e le persone dietro a quelli
clienti e poi vado a testare
se quegli invarianti effettivamente detengono
nei sistemi reali, quindi sto cercando di prendere
risultati teorici da computer
ricerca scientifica e applicarli a
database reali che potresti vedere
fallimenti in natura quindi il nostro database
potrebbe essere composto da cinque nodi forse
eseguire un LXC forse su fisico
hardware e quei nodi sono collegati
da parte di una rete IP, quindi possiamo indurre
fallimenti in quella rete o potremmo
uccidi i processi possiamo mettere in pausa i processi
indurre diversi tipi di eventi e
quindi al di fuori del sistema che stiamo gonna run
cinque processi client e quelli sono
sarà una specie di logicamente single
serie di operazioni filettate contro a
database come numeri incrementali o
leggere e scrivere e ci stiamo provando
osserva il confine e vedi se il
il database preserva noi gli invarianti
Pensa che non abbiamo idea di cosa
accade all’interno del database se si
consegnami un’istanza di reazione o la tua mano
ho un senso di Postgres, non ne ho idea
che tipo di messaggio si sta scambiando
internamente non conosco il suo interno
stato è complicato il suo milioni di
linee di codice ma se ne segue
leggi questi invarianti che non dobbiamo
sai cosa fa e noi interni
guarda cosa succede nel confine e
assicurati che i clienti abbiano a
visione coerente in modo che un cliente possa andare
generare alcune operazioni randomizzate come
scrivi il numero che numero prova sei
forse proverà una lettura forse ci proverò
si muoverà un incremento applicarlo
operazione al database e poi sono
finiremo in uno dei tre modi in cui noi
potremmo riuscire a terminare con successo
e questo è quando conosciamo l’ operazione
ci siamo riusciti, potremmo andare in crash e lo sappiamo
fallito quindi è come se non potessi
anche cercare il database sapere per parlare
per voi sapere che la vostra operazione non ha preso
luogo che chiamiamo un fallimento o potrebbe
essere indeterminato forse c’è una rete
il timeout potrebbe essere un processo che si blocca
solo non so cosa sia successo e poi
dobbiamo considerare che l’operazione come a
possibilità forse si verifica forse
no e potrebbe aver luogo in qualsiasi
tempo in futuro forse è bufferizzato
in alcuni in alcuni hardware di rete e
arriva dieci minuti dopo, così come il
i clienti interagiscono con il sistema che sono
andando a costruire un’immagine nel tempo di
incrementi o di aggiunte a insiemi o di
legge che ognuno di loro avrà un
invocazione e completamento di alcune finestre
di tempo era valido e se si blocca
quella finestra sarà infinita fuori tempo
l’infinito e il nostro lavoro è capire se
queste operazioni insieme hanno un senso
come se stessimo cercando di linearizzare
capacità devo trovare un percorso che richiede
noi attraverso tutto il noto successo
operazioni in modo coerente
con il modello
del sistema e questo significa che se lo avessi
ho un registro per esempio devo
leggere il valore che è attualmente in
registrati lungo quel percorso quindi non lo sono
permesso di leggere essere dal registro
contenente un devo sempre leggere a
dal registro contiene a per fare questo
scriviamo un tipo di dati è una funzione che
ci dice solo quali sono le cose consentite
cosa puoi fare con un dato dato
struttura quindi per il registro si potrebbe dire
Ho un registro contiene un singolo
la cosa chiamata XI ha una funzione di passaggio
che ci dice dato un valore corrente di
il registro c’è un’operazione da applicare
come stiamo andando ad evolvere il sistema informativo
dipende dalla funzione f di
operazione se stiamo facendo una scrittura abbiamo solo
sostituire il registro con uno nuovo che
contiene il valore dato, quindi se scrivo
il numero quattro ti restituisco a
registro che contiene quattro se si fa a
leggere però dipende da se il
valore che abbiamo X è uguale al
valore dall’operazione quindi se ci provi
leggere il numero due da un registro
che contiene due questo è valido e
non cambia il registro così il
registrati solo restituisce immutato quello è
il nostro se cerchi di leggere qualcos’altro
come te tu leggi e vedi
tre ma il valore avrebbe dovuto essere due
lo sai che è incoerente e così
abbiamo restituito lo speciale incoerente
digita questa funzione a thread singolo
incapsula tutto il comportamento di a
registrare questo è il modello l’invariante
di cui abbiamo parlato prima
slide di coerenza è tutto
regole che ci aspettiamo da letture e
scrive contro una variabile e poi lo faremo
applicalo a un determinato tipo di singolo
interpretazione filettata della storia
quindi se ho uno stato come tre, lo farò
diciamo ok, chiamiamo una funzione di passaggio con
il registro che contiene tre lo farò
passare un’operazione come leggere il valore
due perché quelle cose non sono uguali
ritorna incoerente e lo sappiamo
quella particolare linea temporale non è valida così
col passare del tempo mentre ci muoviamo attraverso la storia
prenderemo ogni possibile percorso e lo faremo
vieni con alcune operazioni alcune
alcune storie che sono valide e alcune
che non sono validi e idealmente troveremo
un percorso valido o più di uno valido
percorso che ci porta attraverso il tutto
storia e caricherà il sistema era
linearizzabile
o per costruire un finale coerente
sistema che potrebbe confermare che tutto il
operazioni di incremento di successo e il
alla fine sono i residenti
una lettura o forse se aggiungiamo cose ad essa
impostare tutte le cose che hai inserito dovrebbe essere
eventualmente presente in alcune letture finali così
potresti scrivere diversi tipi di test
diversi controlli contro questo tipo di
storia così generando operazioni casuali
applicando questo database alla ricerca e
vedere cosa succede e poi da quello
storia concorrente noi ne applichiamo alcuni
funzioni che controllano per vedere se o
non ha senso suoni così buoni finora
Va bene così ora per il sangue non sei tu
intrattenuto così abbiamo ottenuto abbiamo un modo
per controllare i sistemi ora e sono stato
lavorando su questo per un paio di anni e
Ho eseguito un bel po ‘di analisi il primo
valeva la pena leggere una sentinella MongoDB
e reagire Redis Sentinel andrà in o
almeno entrerebbe in una vita lunga
split-brain e perdere un sacco di dati
forse fino al 50% a seconda di come
petizioni accadute MongoDB lo ha perso a
ogni livello di giusta consistenza reagisce
le impostazioni predefinite per gli ultimi venti di destra lo hanno causato
perdere dati anche durante la petizione ma
se usi C o D T e permetti mult
vero o fratelli tutto funziona come
progettato questo è in realtà la nostra reazione ha
destinato a funzionare questo è un
risultato ben documentato ma perché il
le inadempienze sono andate perse, vince
potresti provare lo scenario REM se ci hai provato
cambia i dati potresti perdere informazioni
le informazioni del 2013 sono tornate a testare Kafka
nuovo DB e Cassandra anche i guardiani dello zoo
passato Kafka ha avuto un bug nel loro Oh 8
beta prima del rilascio in cui il
algoritmo di replica non riuscirebbe a
conservare i documenti quando è a corto di
nodi di istinto quindi se tu avessi un primario
morire quando è stato isolato lontano dal
rete che lo farebbe scartare
input nuodb dichiara di battere il cap
teorema e il modo in cui lo fece
non fare nulla durante
la perdizione è solo in attesa di loro
essere sopra Cassandra che carica la strategia come
finchè le tue posizioni sono corte
cassandra ha perso i dati nello stesso modo in cui
reagire usa timestamp da fare
risoluzione quindi scarterà di più
recenti scrive se i tuoi timestamp per
i tuoi orologi non sono perfettamente
sincronizzato il sistema di transazione in
Cassandra aveva anche un numero di
uno è che usa per viaggi di andata e ritorno per
ogni messaggio che lo rende un po ‘
lento il prossimo è che lo farebbe
deadlock in modo permanente e hai dovuto
ripristinare manualmente lo stato del cluster
il prossimo libro l’ho trovato una volta risolto
era che sarebbe in realtà la perdita di dati da parte
esecuzione di più copie dell’operazione
più e più volte Cassandra ha da allora
sistemato quelle cose penso che il timestamp
i problemi sono ancora presenti ma penso che
sistema di transazioni più forte 2014
rabbitmq ha diviso di nuovo il cervello quando RabbitMQ
recupera dalla partizione uno dei nodi
semplicemente clobbers l’altro e così tu
perdere tutte le informazioni che sono accadute
su quel nodo alla console CDN sono fortemente
configurazioni coerenti sorta di
sistemi di coordinamento i loro diritti appaiono
essere al sicuro ma le letture che sono
dovevo essere nei tuoi occhi una ciotola erano
in realtà ti lasciano vedere i vecchi dati
dal passato elasticsearch perde dati
in tutti i modi eccitanti parleremo
un po ‘di più su che più tardi questo
è la parte del discorso dove vorrei
stampare per voi nuovi database direi e
ora per qualcosa di completamente diverso
fare qualcosa di completamente diverso
comunque mi piacerebbe fare qualcosa
che è in effetti lo stesso che stiamo per fare
tornare ad alcuni di questi database
di cui ho parlato prima e vedere
come sono progrediti da MongoDB che
molti di noi sanno che uno amava Mongo
numero di problemi di sicurezza nel primo
Test di Jepson per la scrittura, perderà i dati
se ci scrivi bene, facciamo un backup
per un secondo il modo in cui MongoDB è iniziato
non controllando per vedere se ci sono errori
si è verificato qualunque cosa sarebbe solo ordinare
di lanciare le sue operazioni nel vuoto e
spero che siano arrivati sani e salvi su qualcuno
Riva estera questo, naturalmente, è molto
veloce con due benchmark fenomenali e
la reputazione per le prestazioni persiste
oggi tuttavia non è particolarmente
sicuri delle nuove impostazioni predefinite che sono state
mettendo in atto effettivamente controllare per vedere
quando si è verificato un errore, alcuni dei
i client cercano di vedere se si è verificato un errore
fino al punto in cui è
riconosciuto in memoria questo è ovviamente
non sicuro e non si blocca altri client
controllerà per assicurarsi che sia sicuro
su disco su almeno uno dei nodi ma
anche questo non è sicuro se non lo sei
correndo verso la maggior parte dei nodi in Mongo
se si utilizza qualcosa di meno di registrare signore
la maggioranza si può avere un rollback e
il rollback è dove una cronologia alternativa
proventi e qualche altro no
accetterebbe nuove informazioni che
conflitti con i tuoi diritti e quando il
due tornano insieme quello che ha
più sorta di autorevole Nasaw che
significa che in Mongo batterà quello
non ha replicato pienamente i suoi diritti e
tali diritti verranno scritti su disco
in qualche file e tu eri un operatore
devo andare a vedere quel file e
capire cosa è successo questo è di
Ovviamente impossibile , almeno in generale
perché immagino di darti un
contatore che ha due versioni una di
loro dal database come al momento
stand e uno di loro da disco ma uno
del database dice il valore dei contatori
è 6 quello sui dischi come il valore è 5
e queste cose possono capovolgere ciò che è il
vero valore cosa pensi che sia 6
questa è un’ottima risposta, giusto così il valore
sarebbe stato 5 e quindi un nodo
isolato e abbiamo fatto un singolo incremento
nel nuovo valore è 6 io ho ragione chi
pensa che sia corretto sì che potrebbe essere
esso potrebbe essere un’altra possibile
risposta ne hai uno
proviamo a immaginare che divergono in
stato 0 e una volta ho incrementato 1 2 3 4
5 un altro lato incrementato 1 2 3 4 5 6
il numero corretto di incrementi è 11
perché queste operazioni mi danno un
nuova traccia di causalità e non lo sappiamo
quando è avvenuta la divergenza non puoi
dire quale dovrebbe essere il valore corretto
essere solo alcune strutture dati chiamate
i doveri del veggente sono sicuri da usare in Mongo a
qualsiasi livello giusto meno della maggioranza se
premi un rollback in cui puoi perdere dati
almeno per il modo in cui la maggior parte della gente lo usa così
problema con i diritti di maggioranza anche se
anche il livello più forte che è
dovrebbe essere sicuro quando MongoDB
ha colpito un errore di rete sarebbe spuntare
la casella ok e inviare la risposta a
il cliente, naturalmente, lo farebbe
interpretare questo è OK e poi lo farebbe
considerare i diritti accettati di avere
successo quando in realtà erano così persi
quel bug è stato corretto e mi piacerebbe venire
torna a MongoDB ora alla versione 267 e
cercare di valutare se la baia è
lo stesso garantisce il test 267 qui 300
è stato rilasciato durante il test 3 Oh ancora
credo che la perdita di dati in modalità singola
problemi nella tigre metallica così potrebbe essere
ma
prova quelli che credo tutto ciò che sono
andando a dirti qui si applica allo stesso modo
a 267 e alle tre serie O il modello
Voglio testare è linearizzabile
registrati questo è un singolo documento giusto
Mongo non ti da documenti interni
garanzie a tutti è sempre su a
singolo oggetto e scriveremo
un solo numero ad esso le operazioni noi
può fare in un registratore di cassa o scrivere così
cambieremo il volume da 0 a 1
possiamo leggere e leggere di nuovo leggere
il valore corrente che è nel documento
non puoi leggere un valore casuale e
allora possiamo fare questa cosa chiamata a
confronta e imposta quale è il luogo in cui abbiamo
un valore corrente di come 0 e siamo
andando a confrontarlo con il primo
argomento e poi se è vero ci metteremo
al secondo quindi posso confrontare set 0
da 0 a 1 nuovo valore 1 se proviamo a
confronta e imposta 0 da say 1 a 2 will
fallire perché 0 e 1 sono diversi così
questo è un ibrido di una lettura delle scritture
è una trasformazione atomica
cosa interessante è successo quando ho corso
questi test
Ho visto storie come questa e, naturalmente
c’erano migliaia di elementi lunghi
ma questa è una piccola frazione di a
storia da subito dopo una rete
cominciò la petizione e il tipo di strano
le cose accadono che inizialmente lo sappiamo
il valore è zero facciamo una lettura di zero così
da qualche parte in quel bar verde lo stesso
prima di tutto sappiamo che lo stato doveva essere
zero la prossima operazione conosciuta è una lettura
di quattro quindi il valore doveva essere di quattro a
quella volta e l’unico modo che abbiamo potuto ottenere
c’è saltando su attraverso questo
confronta e imposta da zero a quattro ok
Fin qui tutto bene ora dobbiamo arrivare a
questa lettura di tre potremmo eseguire a
confronta e imposta da quattro a due che lo faranno
passare attraverso perché il valore corrente è
quattro ma lascia il valore è due
che non è tre in modo che il percorso lo farà
fallire, potremmo in alternativa potremmo
scrivi 3 e questo ci permette di leggere 3 così
abbiamo un percorso coerente ora che abbiamo
per arrivare a questa lettura finale di 0 potremmo
passa attraverso questa scrittura di 4 ma quella
rende il valore 4 non 0 che potremmo scrivere
per i cambiamenti da 4 a 2 e poi quel valore è
2 e quello non è 0 che potremmo leggere
3 confrontare e impostare 3 a 1 1 non è 0 noi
potrebbe avere quel denaro da 1 a passare
potremmo andare a 4 possiamo andare a 2 no
importa come ordiniamo queste operazioni
non c’è peso
ottenere 0 è quasi come se lo stato si dividesse
nel tempo e una nota su una copia di
la storia lo stato è ancora zero è
invariato e l’altro che è andato
attraverso questi cambiamenti e ne abbiamo visti quattro
e poi tre si verificano bene quindi questo è un
linearizzare la violazione dell’abilità questo potrebbe
essere interpretato come una stantie leggere come
stiamo leggendo un valore dal passato
in alternativa puoi guardarlo come a
leggere sporco dove stiamo leggendo alcuni
dati immondizia incondizionati che lei è come
un diritto che è riuscito quando non dovrebbe
avere o più specificamente un diritto
è andato indeterminato che potrebbe avere
ci riuscì , non ci sarebbe riuscito
Non so cosa sia successo ad esso, ma la sua
gli effetti erano visibili indipendentemente da questi
ora sono riportati in un server di una
sette nove sette cinque in Mongo entrambi
letture sporche e letture stantie sono da vicino
fenomeni correlati sono note le letture sporche
questo è qualcosa che è documentato in
MongoDB perché Mongo supporta solo la lettura
non impegnato come il massimo isolamento
le letture sporche di livello sono dove sono le nostre
i diritti di coloro che gestiscono le operazioni sono discussi
circa nelle scritture quelli sono tutti
accadendo su qualche nodo minoritario nel
cluster non vengono replicati
non hanno successo non lo fanno mai
in realtà avrebbe dovuto passare per niente
ma MongoDB lo scrive immediatamente
al nodo locale e quindi tenta di
replicarlo e quindi è visibile a
chiunque altro legga in quella primaria
quindi stiamo facendo operazioni di lettura che possiamo
guarda questi dati inutili che non dovrebbero
sono stati commessi e quelle cose
verrebbe distrutto durante un rollback
in alternativa potremmo considerarlo come un
leggere stantio che è dove quei diritti
invece di succedere alla minoranza
componente si verificano nella maggioranza
e quindi puoi scrivere dati validi e
non vederlo quindi queste cose sono ordinate
di due lati dello stesso fenomeno
poiché le operazioni di lettura dei monghi non lo sono
collegato all’algoritmo di replica
non ci offre alcuna garanzia in merito
i valori che leggiamo nel tempo
esclude leggi i tuoi diritti e monotonicamente
legge perché potrei scrivere un valore due
e poi vedere uno che potrei vedere uno due
due qualsiasi ordine è ammissibile posso vedere il nostro
tradimento un lontano nel tempo a seconda di
le scale temporali emergenti lo richiedono
anche per regole di induction out peer am e
mini-risuscitato causale e sequenziale e
e 1s sono tutti quei modelli di consistenza
tu vuoi avere
se stai facendo cose come mutex o
cercando di fare cose come reclamare a
nome utente quelle cose non si applicano più
questo è particolarmente interessante perché
il mio essere esplicitamente reclama quando
la tua capacità visiva nei loro documenti
Dicono che se leggi con mietere
riferimento primario vedrai di più
recente destra così vedrai di più
questa è la versione recente di un documento
non è vero, puoi vedere noi vecchie versioni
anche sapere da letture sporche che non possiamo
ho letto impegnato e qualsiasi cosa più in alto
di quello in modo che ci sia un documento
fallimento da quel lato sappiamo che leggere
su può leggere uncommitted
esclude che abbiamo commesso un mese di um tipo di
visualizza la stabilità del core tutto questo
questo però è nuovo, così sarà più potente
in realtà ci danno diritti di diritti monotoni
il file legge che sappiamo impegnato in ciò
sostiene di darci fino in fondo
linearizzare l’abilità su un singolo documento
quindi c’è una discrepanza qui tra
cosa dice la documentazione e cosa
in realtà fornisce se sei in corso
per essere utente i risultati sono stati alquanto
complicato chiudono il biglietto dicendo
era un capriccio di letture sporche che poi
ho provato a chiudere il biglietto dicendoglielo
stava funzionando come previsto ora è stato
riprogrammato per sperabilmente versione 3.1 così
dovremmo vedere una correzione ad un certo punto se
sei un utente Mongo che la documentazione dice
devi solo preoccuparti delle letture stantie
se leggi dai secondari non lo è
vero che si deve preoccupare di tutto il
tempo se avete bisogno di garantire l’ora di recency
puoi fare un confronto e impostare il cambiamento
il valore che vuoi leggere a se stesso e
anche per impedire all’ottimizzatore di ignorare
la tua operazione devi cambiare un
campo non correlato quindi fai un ibrido
leggere le operazioni di kaz queste due cose
ti darò una miss live limitata
ti dice se non hai letto è valido
va bene ricerca elastica ricerche elastiche
il test era per uno zero
nel giugno del 2014 abbiamo trovato un buon risultato
era un caso sconosciuto di incoerenza
la ricerca elastica ha avuto un lungo thread di commenti
su come se hai una partizione che
isolato la maggior parte della rete a sinistra
un nodo che collega due lati su una nota
ogni parte potrebbe eleggersi come primaria
e reclamare il nodo nel mezzo come a
seguace e quel nodo nel mezzo
sarebbe felicemente di servire due
primarie per un po ‘e lo faresti
sapere sovrascriverlo è rimasto continuamente
e perderesti i dati quando
è tornato insieme e questo stato
rimarrebbe fino a quando partizione ha fatto
quello che non era un documento all’epoca era
quel monger dispiaciuto che elasticsearch lo farà
effettivamente perdere dati anche se la rete
posizione completamente taglia il cluster in
metà e in effetti perderà anche i dati
anche se solo un singolo nodo è isolato
quindi questo potrebbe comportare la perdita di lotti
di dati fino al 90 percento del tuo
documenti inseriti in caso di interruzione del
lo stato del cluster potrebbe restituire verde quando
rimuovere è in effetti hosed che potresti finire
con gruppi che erano permanentemente
incuneato e doveva essere rimosso
potresti accorgerti che questo è divertente
oh aspetta c’è un timeout codificato e duro
elasticsearch non importa quante la
manopole che abbassate non potete abbassare
questo per quanto ne so ce ne vuole 90
secondi per eleggere un nuovo primario durante a
petizione quindi se stai facendo diritti di
elasticsearch hai 90 secondi
finestra nel tuo tempo un problema di rete
isolati di primario durante il quale tu
proprio non può fare tutto quello che dovete bloccare
elasticsearch inizialmente aveva no
documentazione per queste modalità di errore
comunque sono tornati e hanno aggiunto un gruppo
di documentazione quindi ora c’è davvero
ottima pagina che ha una grande panoramica di
tutte le cose possono accadere tra cui cose
come i documenti Lawson durante la connessione in rete
Inoltre sono andati avanti e chiusi
il problema github e il problema è per
i documenti che perdono il cervello diviso durante
divisori che si intersecano dicono sì
questo problema è stato definitivamente risolto ora
perché aveva un sacco di falsi
correzioni prima ed era stato successivamente
riaperto ora la gente si riferisce ancora
l’ultimo discorso che stanno chiedendo a
azione supplementare
la risposta di elasticsearch
gli impiegati sono solitamente qualcosa come
la durata della ricerca duratura non è a
problema principale in questi giorni perché questi
i reclami sono vecchi, quindi mi piacerebbe venire
indietro e rivalutare questo è con il
la versione più recente alla fine di febbraio
1 5o petizione che interroga questo caso
che è stato chiuso causa ancora perdita di dati
è meno di prima
non entra più nel cervello diviso per il
tutta la durata della perdizione ora sono solo io
lo inserisce per circa 90 secondi e ancora
questo è legato a quel tempo
transizione di appartenenza in modo da perdere
alcuni documenti ma non tutti in effetti
le transizioni complete sono così tue
completare le petizioni e persino la zecca singola
anche le partizioni perderanno ancora le tue
dati così ogni
fallire
che abbiamo discusso nel primo test è
ancora aperto nella ricerca di Las in questo momento
anche se la pagina github doc è stata
chiuso che si applica solo al lungo
elenca il cervello non per il breve periodo
uno e ci sono altri biglietti che
indirizzo questo ora eleggere un nuovo primario
ci vogliono ancora 90 secondi per essere preparati
per indisponibilità ma voglio
sottolinea che il Lassiter’s ha fatto
tremendo progresso che quel fallimento
pagina che parla di tutti i loro modi
può perdere dati è in realtà un grande
risorsa per gli ingegneri delle operazioni che
stiamo cercando di distribuire questa cosa, davvero
voglio incoraggiare tutti i fornitori di database
avere qualcosa di simile sui loro siti
quindi modalità di guasto elasticsearch durante
le petizioni in rete non sono più così male
ma sono ancora presenti se usati
elasticsearch e la tua rete è
un po ‘meno perfetto che è vero
devi essere consapevole che potresti perdere
dati in modo che dovresti memorizzare i tuoi dati
qualche altro archivio dati si spera che sia più sicuro
uno e poi riempire continuamente
elasticsearch con una costante che
database e tu stai trollando sul tuo
database primario ogni giorno o così
significa se un documento scompare mai
sarà ripristinato da domani e questo
in genere va bene perché la maggior parte del tempo
la ricerca è comunque probabilistica
va bene se un documento scompare per a
un po ‘ finchè torna
più tardi, infine, voglio chiudere con un nuovo
database questo è aerospike che è un
chiave tridimensionale ad alte prestazioni
valore negozio sembra un po ‘come
Cassandra o come BigTable è spesso
usato in osep per AdTech usa spesso il
denaro offre agenzie fenomenali come
tipicamente come da uno a due millisecondi
latenza z ‘perché conosci milioni di
operazioni al secondo è stato molto
ben ottimizzato e ha questo meraviglioso
rivendicare sul sito web un’affidabilità al 100%
tempo di attività con acido di consistenza forte a
cento per cento va bene il mio bar alto per
la disponibilità è come l’ Ericsson
interruttore 301 a destra che viene offerto
come 99.999999 nove tempi di attività oltre il
ciclo di vita del progetto o qualunque esso sia
come 1,1 milioni di linee di codice aereo
questo è un significativo tecnologico
questo è il risultato del tempo di attività
infinitamente meglio
e offre acido che questo è il
Switch Ericsson non ha funzionato
Sono elettrizzato nello specifico, ce lo dice
che non c’è perdita di dati che è simile
va bene, sono a livello di strada
il blocco e la consistenza della consistenza dei media era
Replica sincrona quindi suppongo
a questo punto hanno una pax
questo algoritmo che gestirà il
il tipo di diritti sarebbe sincrono
o essere altamente disponibile ma lo farà
perderà la disponibilità se mai andrà
al di sotto del quorum sono eccitato all’apparenza
un po ‘ come il fondamento di essere per me
ma dobbiamo andare un po ‘più a fondo noi
scavare nella documentazione
un po ‘di aerospike è detto da e
grande un sistema AP che offre elevate
coerenza che conosce la definizione di
alta consistenza nessuno perché non lo è
un vero e proprio termine aerospike fornisce leggere
ah impegnato c’è un vero e proprio termine letto
livello di isolamento impegnato mediante record
serrature per garantire l’isolamento tra
transazioni che va bene ci siamo impegnati sopra
ecco qui in questa verde regione di
disponibilità dove possiamo avere totale
disponibilità che può essere un archivio dati AP
offerta re impegnata questo è così lontano
bene
ma continua per operazioni come a
singola chiave quindi la replica aerospike
fornisce una consistenza immediata usando
sincrono scrive due repliche così siamo
avremo intenzione di scrivere un’operazione
per fare un negozio che replicherà a
i suoi partner e poi tornare e poi
può rispondere che è un sincrono
replica lo vediamo tipicamente con pax
casa o zap una lettura zattera richiesta dice
sono garantiti per trovare la nuova scritta
dati che a me suona come quando sei
sulla stabilità o ma è vero
vincolo temporale più recente copia quello
la proprietà è esplicitamente vietata da
essendo totalmente disponibile dal cap
Teorema quindi come si fa a essere cap
bene , non è un teorema, è matematica
il modo in cui lo batti praticamente lo è
praticamente elimina la partizione
formazione comprovata da anni di implementazione
in ambienti data center e cloud così
la Microsoft Sync su carta ci dice
che i data center ben gestiti non lo sono
immune alle partizioni del cloud
ambienti in cui è probabile la distribuzione
probabilmente vedere le partizioni su un settimanale
base e li vediamo certamente e
aneddoticamente conosco un sacco di gente
sai che non puoi riconoscerlo pubblicamente
giusto nessuno si alzerà e ammetterà oh
sì, la nostra rete è terribile ma molto
le persone imparano lo strumento ma esso
è molto comune il modo in cui lo si evita
per configurare aerospike con nodi cluster
che sono strettamente accoppiati quindi partizioni
sono praticamente impossibili da creare
ricorda che l’accoppiamento e la disponibilità sono
diametralmente opposto se metti tutto
le tue cose nello stesso rack che sta per succedere
essere più altamente accoppiati si dimezza
ha meno hop di rete quindi il
la probabilità della partizione è inferiore ma quando
la potenza del rack non riesce a perdere il tutto
cosa così li metti su diversi rack
ok ora sto lavorando con la parte superiore di
rack commuta il collegamento tra questi
potrebbe andare giù per questa possibilità
petizioni forse per ancora di più
disponibilità li sto distribuendo
tra più data center multipli
zone di disponibilità e probabilità
delle interruzioni di rete c’è molto
molto più alto quindi per l’alta disponibilità noi
voglio distribuire le cose ampiamente
logicamente se non spazialmente e ancora per
tolleranza delle partizioni questo lo sai
più distribuisci il più probabile
le versioni diventano e più dobbiamo
effettivamente preoccuparsi di questi problemi così
cosa consiglia aerospike di distribuire
dov’è la rete magica che farai
trova che non ha questi problemi
motore apparentemente Google di calcolo del mondo
o Amazon ec2
ti sei mai schierato a queste cose
come sappiamo che non stai bene così cosa
Succede , sai se lo sei se lo sei
dato che si verificheranno le operazioni di rete
cosa succede in aerospike per un confronto
e imposta il registro in modo da ottenere l’anomalia, quindi guarda
molto simile a quello di MongoDB in cui leggiamo
un valore 0 facciamo delle trasformazioni noi
ottenere 2 otteniamo 4 e poi confrontiamo questo
da 0 a 3 questo richiede che il valore sia 0
ma non c’è il diritto di 0 che potrebbe
probabilmente hanno avuto luogo in quel momento
cornice quindi questo è in realtà peggio
di Mongo Mongo abbiamo letto un valore
era brutto, quindi abbiamo avuto una lettura stantio e questo
stiamo facendo una scrittura che potrebbe avere
solo ha avuto luogo aveva la rete o aveva
il tipo di stato ha diverguto questo significa
che ha operazioni non sicure
puoi perdere i diritti in aerospike se un
la domanda dell’ora accade così che è a
vincolo duro linearizzabile
registri è un problema complicato
che dire?
operazione commutativa e circa
qualcosa che può essere alla fine
coerente come un contatore faremo a
un sacco di incrementi e poi lo faremo
cercare i contatori che leggono il valore
da qualche parte tra il numero di
tentato il numero di completato
aumenta e, si spera, lo farà
andare alla deriva in quella gamma di dare loro a lungo
abbastanza contatori come risulta volontà
anche cadere i dati durante le petizioni quindi se io
guarda il valore letto nel tempo
questa è la linea rossa che dovrebbe rimanere
da qualche parte nella regione arancione tra
il numero di tentativi e riconosciuti
incrementa le operazioni che non cade
sempre più bassi come accadono i firmatari e
entrerai persino in modalità split-brain
piace proprio qui nel mezzo dove tu
ottenere questo tipo di rimbalzo che è
perché stiamo parlando di due diversi
le repliche che uno di loro pensa valga
100 100 100 alle altre cose da valutare
è come 200 201 203 e così ottieni
rimbalzando i valori oscillanti a seconda di
in quali repliche hai solo parlato con me
ho pensato che forse stavo sbagliando forse io
dimenticato di capovolgere un interruttore di configurazione
e infatti nella documentazione acida
c’è un’impostazione che parla di AP
rispetto alla modalità CP, naturalmente , la modalità CP
non esiste c’è molta discussione di
come potrebbe funzionare ma non è reale
mostra come funziona la modalità P
funziona risolvendo i conflitti usando a
numero di generazioni che è il numero di
modifiche che sono successe
quindi se scrivo B e C in una copia e
poi scrivo D ad uno diverso D
accade temporaneamente l’ultimo aerospike
afferma che leggerò il valore più recente
quindi dovrei vedere D ma invece vedrò
vedi perché la generazione di C è più alta
ha attraversato più cambiamenti in questo
replica alternativamente posso usare TTL
la risoluzione basata non funziona se
Sto utilizzando aerospike come dati a lungo termine
negozio dove ho impostato il mio TTL all’infinito se
le mie due code sono finite su cui si basa
orologi sincronizzati quindi abbiamo lo stesso
problemi come Cassandra e Rioch durano
giusto vince si finisce con un orologio
differenza e puoi scartare più nuovo
copie di dati in ogni modo che stai cercando
a aggiornamenti persi
non c’è modo di preservare il
invarianza che vuoi così il sistema è
alla fine coerente è d’accordo su a
valore ma concorda sul valore sbagliato
vogliamo la semantica con qualcosa come a
C o DT dove potremmo fare un contatore pn
e il nostro valore finale è il numero di
incrementa non solo un valore più alto
ora questo è possibile in aerospike
perché c’è un’opzione chiamata
applicazione
che dice che ha letto ti dà due
copia entrambe le versioni divergenti
dati e poi spetta a te fonderti
quelle cose insieme se lo fai tu
può recuperare ogni sorta di eventuale
proprietà di consistenza con CRT T è questo
è come reagire fa questo è come c’è
in qualche misura estensore di collezioni cql
funziona come la modalità CP questa caratteristica è
documentato ma in realtà non esiste
quindi sei sfortunato speriamo che lo farà
esistere in un secondo momento per parlare con
aerospike e il loro entusiasmo
costruendo questo in modo da renderlo semplice
sostengono che l’acido acido è questa roba finita
qui le cose sono un ricorso a Peterborough
instabilità abbiamo commesso tutti questi
sono esclusi da aggiornamenti persi come
questo è come se la regola numero uno non lo facesse
perdere completamente le operazioni di scrittura e di
corso tutto nella tua abilità degli occhi
proprietà quelli o quelli sono fuori
anche tu puoi scrivere qualcosa e
sparirà solo che lo governa
il monitamon scrive così praticamente tutto
questo è affermato qui è spazzatura questo è
specialmente pernicioso è davvero
piuttosto irritante perché c’è un Paxos
implementazione in questo sistema che gestisce
il coordinamento per il quale i nodi possiedono
cosa copia i dati e li impacchetta
questo è un sistema di consenso che risolve
questi problemi è garantito che
tutti saranno d’accordo sullo stesso
valore se abbiamo la maggioranza è un CP
una sorta di algoritmo, quindi perché, perché no?
metti le scritture attraverso di essa e la risposta
da da aerospike è che bene con
impatto negativo delle prestazioni perché
ci vorrebbero troppi luppoli per
latenza volevo scrivere questo mito
errore spike fa la replica sincrona
a tutte le repliche così per poter tornare
valutare per ogni singolo nodo a
torna con una risposta che significa questo
il nostro tempo di risposta è governato dal
nodo più lento nel sistema in un quorum
protocollo come Paxos o Zab o raft o do
Replica timbro è possibile tornare al più presto
come maggioranza di riconoscere così se io
ho tre nodi posso andare avanti
con solo due di loro hanno risposto così
Posso effettivamente rispondere più velocemente in termini
dei limiti di latenza con Paxos di I
potrebbe con un sincrono completo
sistema di replica e ancora meglio io
potrebbe effettivamente essere corretto questo è solo
vero tuttavia se il numero di repliche
è maggiore di due e non è un
rispetto conserva solo due copie del suo
dati
tre che in realtà significa che se
i terroristi amano come fornire risorse
consistenza dovrà andare parzialmente
non disponibile l’incidente perde qualsiasi nodo
perché non puoi più ottenere il quorum così
la mia ipotesi è che tu possa evolvere il
sistema in due modi è possibile o up
il numero di repliche su tre e
iniziare a utilizzare un vero algoritmo di consenso
oppure puoi ricominciare da capo la rotta CT completa
consistenza finale e guarda molto di più
come reagire a seconda che tu voglia
orientarsi verso la disponibilità e attraversare
comportamento del datacenter o più verso
sicurezza aerospike bottom-line potrebbe essere un
ottimo database per sistex potrebbe essere un
grande banca dati per le cose Ad Tech forse
stai facendo un sacco di diritti su di te
non preoccuparti di perdere qualcosa di piccolo
una frazione di loro forse stai solo facendo
counter tracking o caching ed è
sarà solo un modal blip nel tuo
archivio dati a lungo termine, ma se lo sei
effettivamente fare affidamento su queste garanzie per
conosci la tua fonte primaria di registrazione
per sicurezza nello spostamento dei segni del dollaro
in giro potrebbe non essere un grande
scelta quindi cosa abbiamo imparato
in generale il mio lavoro è quello di ispirarti non
solo per colpire la paura nei cuori di
umani voglio sottolinearlo
perché nessuno ha testato il sistema
non significa che sia corretto
molte persone dicono oh sai che c’è
no non c’è nessuna cosa Jepson per questo, quindi
Scommetto che è bene questo è questo è stupido
dovresti guardare e vedere cosa c’è
dentro voglio sottolineare che Mongo
e ultima ricerca e particolare e in
infatti ogni database che ho testato ha
ha apportato miglioramenti drammatici giusti
tutti si stanno sforzando molto per risolvere
questi problemi difficili ora ha Mongo
risolto il problema con la loro maggioranza
la giusta preoccupazione che Elasticsearch ha ora
grande documentazione di fallimento questo è questo
è davvero un buon progresso ma ci sono
sorprende ancora laggiù nel profondo
e così come Jacques Cousteau tu
sapere che tipo di come si va più in profondità il
documentazione che scoprirai nuova e
comportamenti interessanti molto simili a quelli aerei
sai quando siamo come ingegneri
scegliendo un database siamo una specie di
firmando un contratto con il marketing
dipartimento che è qui simboleggiato ma
Ursula la strega del mare e loro stanno andando
fare una canzone e ballare e dirci
cose meravigliose circa il database e
quanto ci aiuteranno, ma
a meno che non leggiamo il contratto per intero
ci mancherà la stampa fine come la tua
la rete non deve partizionare anche se tu
eseguire un motore di Google compute o è necessario
bacia le stampe entro il terzo giorno, se tu
fai quelle cose che i tuoi documenti scompaiono
si perde la voce quindi è necessario leggere
i documenti completamente e poi tu
devono testare quelle garanzie per
te stesso che non puoi semplicemente sapere per scontato
questo perché loro sostengono inclinano i tuoi occhi
abilità che in realtà è vera per te
devo accendere un rig e capire se
tiene se il tuo fornitore di database molto
di volte le persone mi diranno come te
sappiamo che siamo davvero imbarazzati di quello
la pagina di marketing dice, ma questo è il
problemi di dipartimenti di marketing come loro
loro possiedono quella pagina che non possiamo averla
attraverso devi smettere di collaborare e
ascolta come il marketing
reparto ha bisogno di ascoltare
ingegneria e ingegneria utilizzati
il tempo di riconoscere questo pubblico
la rappresentazione è importante a
la comunicazione è un attributo importante
della nostra disciplina, non siamo solo
costruendo soluzioni tecniche siamo
costruire soluzioni sociali e come
problema culturale non possiamo risolverlo
semplicemente costruendo sistemi migliori che dobbiamo
comunicare con precisione quelle garanzie
quindi devi sederti con persone che
eseguire il tuo sito Web è possibile eseguire il sito Web
sedersi a pensare un po ‘
di matematica e insieme puoi capire
il linguaggio formale descrive il tuo sistema
Voglio davvero discutere per termini formali
perché roba come la coerenza stradale
consistenza forte acido questi sono donnola
le parole proprio lì non lo sono
ben definiti ci fanno sentire bene ma
in realtà non significano molto in
per dire cosa sia effettivamente un database
fa per noi per costruire sicuro
software in cima al database di cui abbiamo bisogno
conosci termini formali come quando sei su
stabilità come consistenza sequenziale come
ingegneri dobbiamo capire quale di
quelle varianti di cui abbiamo effettivamente bisogno quindi è così
vale la pena prendersi un po ‘di tempo per
leggere su alcune delle pubblicazioni e
prova a identificare che tipo di promesse fai
i nostri utenti hanno bisogno di ciò che sarà
portare alla perdita di denaro quale risultato
la perdita della vita comporterà
non succede niente di male e di fatto
un po ‘ di tempo può andare bene per noi
avere davvero delle garanzie che
occasionalmente rompere un sacco di banche per
ad esempio non sono sicuro al 100% un sacco di molto
di aziende che vendono beni fisici
non garantire né la correttezza né cosa
succede quando mi capita di sbagliare sei tu
chiama alcune persone quando dici “guarda”
Mi dispiace molto, ma a noi sembra un posto sbagliato
il tuo ordine può renderlo giusto può essere
più economico da noleggiare
persone e per creare profezie culturali
che rappresentano la perdita di dati rispetto a
in realtà ingegnere sistema che è perfetto
in primo luogo quindi devi
considera questo trade-off
una volta che hai bilanciato quei trade-off
devi considerare le modalità di fallimento
che stanno per accadere nel tuo reale
il sistema pensa a cose come crash
giusto questo è questo è un tipo di primo
controllare su ogni sistema distribuito possiamo noi
sopravvivere a un processo di riavvio è possibile
uccidilo con kill – 9 scopri che puoi
sopravvivere al fallimento di un intero nodo
questo è un po ‘più difficile di
sopravvivere solo a un incidente di processo, se tu
perdere potere, ad esempio , potresti averlo
dati che F non sta dicendo di non essere
impegnarsi ER su disco in realtà fare questo è f
potrebbe anche non essere impegnato a
disco a seconda di come funzionano i tuoi dischi
è possibile utilizzare ATS terminare la potenza fisica
interruttori è possibile scollegare le cose all’interno
le tue scatole e vedi cosa succede tutto
possono arrivare tipi di comportamenti interessanti
fuori dovresti testare con clock skew se
stai facendo tutto il tuo sviluppo su a
nodo locale potresti non vederli
anomalie ma una volta che si inizia a schierare
ai nodi distribuiti e sì io
so che tutti corriamo su TP ma in qualche modo tutti
settimana qualcuno viene da me con un NTP
server in esecuzione che è come due anni in
il futuro sì è una cosa reale quindi tu
dovrebbe testare con nodi che sono lontani
impostare il tempo per impostare l’orologio del sistema
cose strane e vedere cosa succede dentro
i tuoi sistemi usano il tempo falso per fingere
processi specifici che puoi effettivamente dire
tempo falso per apprezzare il tempo di anticipo a due volte
il tasso normale o metà del tasso normale
e diventerai molto interessante
anomalie per il corridoio di raccolta dei rifiuti
mette in pausa cosa succede se il tuo kernel va
fuori a pranzo e ne prendo un altro simile
120 secondi nei tuoi processi seduti
lì scegli un ping e ritorna e
Penso di sì, sono ancora il primario
Facciamo un po ‘a destra di lavoro che può portare
in ogni sorta di spazzatura per la perdita di dati
collezione elasticsearch effettivamente cause
cose che sembrano esattamente come una rete
partizione e puoi simularli
con stick stop e stick continua e
infine partizioni come un modo fantastico
per indurre i fallimenti e tutti i tipi di
cose
Le tabelle IP SJ drop sono davvero facili
per simulare le cose in produzione se
vuoi andare un po ‘più sottile se
stai lavorando con i protocolli di gossip
in particolare il controllo del traffico di Linux
l’utilità TC può introdurre ritardi e
scende nella tua nel vostro traffico in modo che sia
non abbastanza per parlare di un database come
sicurezza Sto solo supponendo usi semplici di
database come scrive su un singolo
documento o incrementi su un singolo set
ma stiamo costruendo sistemi reali
combinare strutture dati che eseguono
molteplici trasformazioni e abbiamo bisogno di
testare i sistemi end-to-end per garantire
i loro invarianti di correttezza lo sostengono
notato pensa al database
Pensa in modo specifico ai buttafuori bassi
e la logica dell’applicazione tutto questo
le cose possono fallire in tandem e fanno il
spazio insufficiente molto più grande di quanto sarebbe
essere per singolo database ma puoi ancora
applica questi semplici controlli di rete
le partizioni elaborano arresti anomali
alla fine sto litigando per proprietà
test basato su definire randomizzato
le operazioni si presentano con semplici e
varianti semplici regole che descrivono cosa
il tuo sistema dovrebbe fare quando registro a
utente e il servizio utente dovrebbe
essere ancora lì in due secondi due persone
non dovrebbe essere in grado di rivendicare lo stesso
nome utente il numero di dollari che va
nella mia azienda dovrebbe essere lo stesso di
il numero di dollari per uscire e poi
verificare quelle proprietà con un comune
modalità di guasto dei sistemi distribuiti questo
il lavoro è profondamente in debito con le persone
le diverse aziende aina in
particolare per questo discorso kevin porter
lucien di omar si opponevano meno chiavi li
Hindman matt kangas tutti una striscia
chi ha aiutato con il discorso e ha fatto questo
ricerca possibile soprattutto mark
promontorio e Brodeur austin Kamsky Kelly
sermone a tutti coloro che hanno contribuito a rivedere presto
copia il discorso e il testo e grazie
tutto molto per venire
Please follow and like us: