Press "Enter" to skip to content

GOTO 2015 • Don’t Give Up on Serializability Just Yet • Neha Nerula


giusto, sono qui oggi per parlare
questo concetto si chiama abilità sterilizzata
e così in questo discorso Sto per dire una
un po ‘di cosa significa quando tu
voglio usarlo quando potresti non volerlo
per usarlo e parlerò un po ‘
un po ‘ del mio viaggio attraverso il dottorato e
come mi sono interessato a questo nel
primo posto quindi prima un po ‘di background
su di me non so nemmeno se sono un dottorato di ricerca
candidato più perché ho difeso
ieri è stato davvero emozionante
grazie Non so qual è il mio formale
lo stato è adesso ma devo ancora farlo
finisci la mia tesi quindi non è tutto non tutto
oltre a lavorare a Google ero un
ingegnere del software lì dove ho lavorato
su un sistema di archiviazione e ho anche lavorato a
un po ‘sulla sicurezza del browser e sul mio
la ricerca al MIT è stata principalmente su
transazioni veloci per multi-core
database e sistemi distribuiti ok
così un altro tipo di po ‘di comprensione
in quello che faccio e chi siamo quanti
Di voi ragazzi conoscete questo bel signore
James Mickens oh ragazzi, sto per farlo
cambia un mondo bene, quindi devi uscire
c’è Google James Mickens e vai a leggere
i suoi scritti bene è un accademico
ricercatore di MSR Microsoft Research
e lui scrive solo il più divertente
cose sull’informatica che ho
mai visto, dona davvero grandi
parla ma penso che questa citazione sia
davvero adatto per il tipo di lavoro che io
fare e il tipo di lavoro che le persone in
il mio gruppo lo fa, lo leggerò comunque
il più bene solo un piccolo background
questo è un po ‘come a teorizzare James
nell’apocalisse zombi chi vorrebbe
voglio sulla sua squadra va bene così però il
la persona più importante nella mia banda sarà
un programmatore di sistemi una persona che può
esegue il debug di un driver di periferica o di un dispositivo distribuito
sistema è una persona di cui ci si può fidare
un incubo hobbesiano da togliere il fiato
ambito un programmatore di sistemi ha visto il
terrori del mondo e capito il
orrore intrinseco dell’esistenza ogni
programmatore di sistemi so chi legge questo
è come sì è così vero quindi andiamo
in questo viaggio insieme andrà tutto bene
be fun yeah così bene quindi parliamo di
questo voglio che tu vada da questo discorso
e capire su quale sia il concetto
di serializzabilità significa nel mio perché tu
potrebbe desiderare di preoccuparsene nel tuo
database così quanta gente lavora qui
un sistema che è supportato dal database ok
grande e quante persone hanno avuto
guai o hanno avuto la vita in alcuni
modo peggiorato da questo database sì
okay, i database sono complicati
i database sono confusi e ne abbiamo bisogno
per eseguire molto bene purtroppo per
le nostre applicazioni quindi eccone tre
esempi whatsapp vede un messaggio di sbirciatina
tasso di oltre un milione di messaggi per
secondo questo è un po ‘inquietante ma
si scopre che Facebook è un quinto di tutti
delle visualizzazioni di pagina negli Stati Uniti
e Twitter deve gestire molti milioni
di messaggi per dispositivi mobili per
analisi e sai forse non lo siamo
tutto eseguendo whatsapp o un Facebook o un
Twitter ma sai che possiamo sognare di poterlo fare
spero di arrivarci un giorno e i dati lo sono
solo aumentando di dimensioni è così
piuttosto sfortunato perché i database sono
abbastanza difficile da ridimensionare, quindi è carino
server di applicazioni facili da scalare
avere più traffico al tuo sito web
avere più carico più app mobili e voi
basta aggiungere più server funziona abbastanza
bene puoi gestire più traffico
i database non funzionano in questo modo
sono stateful inerentemente è molto
difficile scalare il tuo database e così via
cosa fanno di solito le persone per gestire questo
problema è che si acquista un database più grande e
poi uno più grande e poi uno più grande
e alla fine stai spendendo molto
soldi per alcuni esempi davvero enormi con
un sacco di core che non sei nemmeno
usando tutto il tempo e lo sai
qualcuno è come se avessi bisogno di spendere meno
soldi sul tuo database che devi risolvere
questa situazione le cose sono lente
sono cattivi e quindi la direzione è tanta
di persone che entrano si muovono verso
database distribuiti così piccoli
banche dati ci dividiamo i nostri dati tra
loro sapere e possiamo pensare
cose come elasticità e rotazione
più database per gestire il traffico e
cose come quelle che funzionano raramente
in pratica ma è una grande idea e così
quello che stiamo facendo è che stiamo partizionando
i nostri dati tra i diversi server
e questo è un database distribuito così
ecco un esempio di cosa potrebbe
sembra che tu possa avere i tuoi widget
tavolo e prenderai i tuoi widget
tavolo e ne sceglierai alcuni
chiave di partizionamento e che potrebbe essere il
ID del widget o qualcosa del genere e
Stai per infrangere il tuo tavolo
e tu li metti su diversi
server okay , questo è chiamato a
partizionamento orizzontale e cosa abbiamo
andando qui è che abbiamo una gamma di
ID del widget su ciascun server, quindi ora
sfortunatamente i nostri server applicazioni
devono diventare molto più complicati
bisogno di sapere sulla gamma
partizionamento hanno bisogno di sapere come
capire dove sono i dati e loro hanno
probabilmente parlare a tutti i database
anche per rimettere insieme i dati
e fai diversi tipi di domande ora
quando una volta ci siamo trasferiti in questo modello di a
database distribuito abbiamo perso molto
caratteristiche che avevamo in nostro possesso
database monolitico che abbiamo perso secondario
indici
abbiamo perso i vincoli di chiave esterna che abbiamo
ottimizzazione delle query persa perché
spesso in questa situazione non lo fai
hai davvero delle domande che stai facendo
ricerche di valore chiave hai perso anche join
e così tutto quel lavoro non ha solo
è scomparso ora è fatto dal tuo
server di applicazioni Web e così c’è
due problemi qui è il primo problema
che ora quando aggiungiamo un’altra rete
server delle applicazioni deve parlare a tutti
i database e abbiamo questo problema
dove stiamo aggiungendo un sacco di novità
contesa mi dispiace connessioni e anche
sai se è necessario aggiungerne un altro
server devi capire come
mischia i tuoi dati e questo è
davvero complesso questo è abbastanza grande
sfida è difficile farlo senza
effettivamente avere tempi di fermo nel tuo sistema
e sai che Dio ti proibisce davvero
vuoi cambiare la chiave che hai partizionato
i tuoi dati su quello potrebbero essere un incubo
quindi questo è il tipo di installazione questo è
da dove venivo da questa situazione
dove erano i database distribuiti
iniziando ad essere usato più spesso ma loro
erano un po ‘ terribili e sono venuti con questo
enorme serie di problemi quindi ero a Google
fino al 2007 circa ed è stato davvero
momento emozionante perché Google era nel
nel mezzo di costruire tutti questi veramente cool
sistemi distribuiti e quindi ero super
eccitati di essere lì ero molto in esso
Google ha creato MapReduce che ha influenzato
un sacco di analisi dei big data che
stiamo facendo oggi hanno Google
file system che era un precursore diretto
su HDFS e sai che avevano una BigTable
e sembrava solo che questo fosse il
il futuro BigTable è molto grande
database distribuito è un valore chiave
negozio
quindi ero molto entusiasta di questo
queste idee sono state sviluppate da
altre compagnie contemporaneamente c’erano
Cassandra MongoDB Amazon ha pubblicato a
carta nel 2007 sul loro database
la dinamo che è stata molto influente e
sai che questa è stata davvero una grande cosa
questo è molto eccitante è stato distribuito a
futuro quindi parliamo un po ‘di
conosci i pro e i contro di ciò, quindi io
sono andato alla scuola di specializzazione e ho deciso di farlo
volevo lavorare in questo settore che volevo
lavorare su sistemi distribuiti perché io
pensavano che fossero davvero fantastici e loro
erano il futuro ed erano davvero
idee eccitanti lì e quindi ecco il
ragione per cui penso che questi sistemi abbiano ottenuto un
molta trazione prima di tutto erano
in memoria quindi non c’era il disco seduto
c’è una latenza imponente sulla tua query
le richieste erano molto scalabili
BigTable altamente scalabile, lo so per certo
eseguito su decine di migliaia di macchine
erano trasparentemente tolleranti ai guasti
quindi quando corri con così tanti
i guasti alle macchine stanno per accadere
e tu non vuoi dover svegliare
qualcuno ogni volta che lo fa
capita e così questi sistemi sono stati fantastici
perché sono stati replicati per errore
tolleranza e hanno anche fornito geo
replica quindi in questi giorni abbiamo utenti
in tutto il mondo e noi no
necessariamente vogliono pagare da 300 a 400
la latenza millisecondo ha colpito per andare
ottenere i nostri dati da metà strada intorno al
mondo a cui vogliamo mantenere i dati vicini
utenti, ma dobbiamo ancora tenerlo
dati in sincrono e così molti di questi
i sistemi hanno fornito questo tipo di cose
fuori dalla scatola ora qui sono i contro
questi sistemi avevano molti difetti –
non c’era schema in modo da passare da una chiave
da un database a un valore chiave memorizzare
completamente perdere qualsiasi idea di uno schema per
descrivi i tuoi dati di cui hanno bisogno e poi
quello schema che organizza quei dati
l’organizzazione non è semplicemente scomparsa ora
hai dovuto spostarlo nel tuo
Design del documento Kiro quindi se lo sei
impostando MongoDB devi decidere
cosa va qui cosa è un indice cosa sono
fare con cose come chiavi BigTable
erano molto speciali che dovevi fare
sicuro che sono stati creati in tale
modo in cui è possibile eseguire scansioni di intervallo
loro questi sistemi non avevano query
lingue e
a quel tempo non supportavano gli indici
quindi penso che alcuni di loro lo facciano adesso
non aveva alcuna nozione di transazioni
e in realtà non ti hanno dato molto
molte garanzie di consistenza così era
piuttosto impegnativo per qualcuno da spostare
da un database a uno di questi sistemi
quindi diciamo che hai il tuo singolo
macchina il mio sequel server a Postgres
server e hai il tuo schema simile
che tu hai creato con molta cura
ha ottenuto indici e vincoli di chiave esterna
hai fatto tutte queste cose che conosci
hai già fatto le domande che hai immaginato
fuori ciò che puoi e non puoi fare e poi
in pratica stai solo buttando tutto
fuori dalla finestra quando ti sposti a
database distribuito che è quale è
un po ‘ sfortunato c’è anche questo
cartone animato che amo da Jay ricorsivo
ed è piuttosto vecchio ma è ancora molto
classico ed è questo ragazzo che chiede come fare
Invito il database e l’altro ragazzo
gli dice che devi scrivere a
distribuita funzione MapReduce in Erlang
come quello che era lo stato che noi
vivevano in quel momento e noi siamo
ancora non siamo troppo lontani dallo stato
in questo momento che è abbastanza sfortunato ok
quindi ecco un’altra cosa che perdiamo e che
Io vado a parlare per il resto della
il discorso quando saliamo a un distribuito
database perdiamo questa cosa chiamata
transazioni e alcuni di voi potrebbero avere
state usando le transazioni alcuni di voi
potrebbe non usarli ma non l’hai nemmeno fatto
rendersi conto che li stavi usando così nel mio
sequel credo che il commit automatico sia impostato su
vero e così qualunque cosa tu corra sul mio
sequel interrogare uno solo tu sei
eseguire una transazione e quindi se lo sei
eseguire qualcosa come una query di aggiornamento
che è sguardo andando ad un sacco di diverso
righe e potenzialmente cambiare molto
diverse file con cui è in esecuzione
semantica transazionale nel mio sequel e
non va bene semplicemente abbandonare le transazioni
fuori dal sistema e il motivo
questo perché è molto difficile da
motivo di concomitanti intrecci di
le cose che stiamo correndo nel nostro
database che potrebbe risultare errato
e forse anche stato irrecuperabile
e quindi parliamo di un esempio in cui
è successo così diciamo che abbiamo avuto un
valuta completamente decentrata che
transazioni impegnate ma non del tipo
Sto parlando di transazioni finanziarie
a un registro e lì
nessun modo per annullare le cose nel caso di
frode quindi una volta che hai dato i tuoi bitcoin
qualcuno e si è impegnato per il
log eri praticamente incasinato era
fatto così è successo l’anno scorso a
Lo scambio di valuta con Bitcoin è effettivamente andato perduto
un sacco di soldi e qui c’era il codice
a questo proposito l’hacker l’ha scoperto
più prelievi simultanei sono
elaborato essenzialmente allo stesso tempo
e che il software di sistema non lo fa
controllare abbastanza velocemente per un negativo
equilibrio quindi questo è stato un po ‘come girato come
un problema di sicurezza non lo vedo come un
problema di sicurezza a tutto questo non è un
problema di sicurezza questo è un classico
problema che ha a che fare con le transazioni
vuoi essere in grado di controllare il saldo
e fare il decremento insieme al
nello stesso tempo in cui non lo fai
qualcosa del genere puoi avere un intero
gruppo di persone che controllano l’equilibrio a
allo stesso tempo, vedendo tutto va bene
e poi facendo un mucchio di decrementi tutto
allo stesso tempo che ti fa andare
negativo quindi questo è uno scambio
non ha perso troppi soldi ma è un
un po ‘preoccupante che ci siano
persone là fuori costruiscono software che
sta affrontando qualcosa di importante come
dati finanziari e il nostro denaro ed è dentro
o in totale in un sistema in cui è
davvero sul serio non è possibile tornare indietro
e aggiustarlo e loro non sono realmente
pensando a questi concetti così è
il punto di coerenza consistenza
le garanzie ci hanno aiutato a ragionare sul nostro
codice ed evitare bug sottili e questo è
perché penso che questa zona è così importante
e la coerenza così interessante consenso
è una parola molto abusata nei sistemi e io
pensa che la ragione sia perché
c’erano questi due campi diversi
c’era la gente del database e lì
erano i sistemi distribuiti persone e
in qualche modo hanno funzionato da soli
cerchi poi hanno fatto diversi tipi di
cose e poi conosci questi campi
si sono avvicinati sempre più e
più vicini e sono più o meno
sovrapposizione in questo momento ma è ancora
persone che vengono da molto diverse
sfondi e quindi la parola consistenza
significa cose diverse che ci sono
coerenza come un acido quanti di voi
ragazzi hanno sentito questo acronimo prima di tutto
a destra alcuni di voi va bene bene lì come C
nel cap come nel teorema del cappuccio ci C come
in caso di causale sequenziale o pari
rigoroso coerente
ci sono molte diverse consistenze
modelli e ora la cosa è tutti e tre di
queste parole stanno parlando di coerenza
su cose diverse che sono un po ‘
sfortunato quindi iniziamo con l’ acido
transazioni poiché è questo che
discorso è per lo più andando essere circa così questo
è ciò che acronimo sta per esso
atomico coerente isolato e durevole
e ancora se stai eseguendo un mio sequel
o il database Postgres, quindi è possibile eseguire
transazioni acide e puoi ottenere
serializza l’abilità e questo è ciò che tu
dovrebbe digitare in un terminale per
fallo così atomico significa che il tutto
cosa succede o no, quindi una transazione è
un pezzo di codice più dichiarazioni
più letture e scritture e un argomento
atomico significa che vedrai il
effetto di tutti quelli o nessuno di quelli
coerente in questo contesto in particolare
per le transazioni acide è un’applicazione
definita forma di correttezza andando così
di nuovo al nostro esempio Bitcoin sono una banca
esempio coerente qui significherebbe il mio
idea che i saldi non dovrebbero mai andare
negativo isolato è l’idea che altro
transazioni in modo che potrebbero essere in esecuzione
allo stesso tempo non in realtà
interferire tra loro e durevole
significa che è possibile ripristinare da un arresto anomalo
quindi questo significa che se la
database ti dice che la tua transazione
ha commesso anche se fallisce al più presto
quando lo riavrai di nuovo, lo farai
vedi il database a quel punto sei
vedremo il database in modo coerente
punto e questo includerà il tuo
transazione impegnata quindi farò di più
di questo discorso si concentrerà in realtà
sui primi tre perché penso che il
i primi tre sono ciò che devono fare
con le nostre altre definizioni di
coerenza va bene così serializzabilità
la serializzabilità è una forma di coerenza
è una proprietà di un programma di
transazioni e una cosa che voglio
allo stress molto pesantemente è che
serializzabilità non significa seriale
non significa che ne stai facendo uno
cosa alla volta significa che il
gli effetti di ciò che fai sono come hai fatto tu
una cosa alla volta
quindi ecco un po ‘più formale
definizione del risultato dell’esecuzione di un set
delle transazioni è la stessa di quelle
transazioni avevano
uno alla volta in qualche ordine seriale
questo è tutto ciò che l’ abilità di serializzazione è
che i valori di ritorno dal
transazioni e cosa è scritto al
database e cosa restituisci al
l’utente sembra che tu li abbia eseguiti uno alla volta
tempo che tipo di ha senso e così dentro
il nostro modello nel nostro modello acido se scriviamo
ogni transazione per preservare la correttezza
nel nostro database che significa quando iniziamo
le cose della transazione sono errate
dichiarazione alla fine le cose sono in a
stato corretto quindi ciò significa che a
la fine dell’esecuzione di queste transazioni
contemporaneamente sta andando anche il nostro database
essere in uno stato corretto e questo significa
che possiamo fingere come concorrenza
in realtà non sta succedendo
il guadagno di prestazioni di esso si spera
senza doversi preoccupare di
quando scriviamo il nostro codice, ecco qui
un esempio di cosa significhi veramente
qui ho due transazioni la prima
uno sta leggendo due chiavi ok K & J e giusto
ignora la sintassi per un momento che conosco
è un po ‘ strano ma sai leggere
e scrive e questa transazione due
sta aggiungendo uno ai valori per K e J
e quindi quello che vogliamo succedere qui è
che in un’esecuzione serializzabile vogliamo
vogliamo vedere i valori di K e J
atomicamente vogliamo vederli entrambi
ad un istante nel tempo e vogliamo
assicurati di pubblicare correttamente gli annunci
e anche atomicamente, quindi diciamo noi
iniziare con k è uguale a zero e J
uguale a zero quali sono i valori validi da ottenere
torna indietro dopo aver lanciato questi due
transazioni al database nessuno
destra K e J uguali tra loro
K e J sono uguali a zero quindi una cosa
quello che potrebbe succedere è quella transazione
sembra che sia stato eseguito prima e poi
transazione due e otteniamo questo significa
ottieni zero zero indietro e un altro
è la transazione due ha funzionato prima e
transito poi transazione uno si ottiene uno
uno indietro non si dovrebbe mai ottenere uno 0 e a
1 schiena che è ciò che è qui sta la capacità
significa ora i benefici di questo sono quello
non dobbiamo ragionare
intrecci e noi non dobbiamo
Espressione invarianza ovunque tranne il codice
se possiamo scrivere le nostre transazioni
correttamente quindi il database prometterà
per eseguirli per noi in un modo che
sembra uno alla volta
e io non so voi ma io no
voglio una ragione su n linee fattoriali di
concomitanti intrecci di transazioni
che può diventare molto complicato e può farlo
essere molto difficile capire cosa può
sbagliare sfortunatamente serializzarlo a
Tom atom city fa parte della realizzazione di C
Direi che sì sembra il
le transazioni erano atomiche che loro
successo in un caso in tempo a
ordina l’ abilità di serializzare così sfortunatamente
è un po ‘ costoso lo farà davvero
ha dei costi seri per usare questo come
il tuo modello di isolamento su un multi-core
database da cui proviene questo costo
serializzazione e trasferimenti di linee cache
tra i diversi processori su a
database distribuito è anche il
serializzazione o controllo della concorrenza e
chiamate di rete e così per far rispettare
questa proprietà nel nostro database dobbiamo
usa il controllo della concorrenza che di solito
comporta il blocco o la convalida
ed essenzialmente qualche forma di
coordinamento quindi per andare in giro
questo popolo spesso vai direttamente ai
consistenza finale che è molto
di negozi con valore chiave che pretendono di fornire
quando non ce n’erano, non ne ho
ho visto un negozio di valore chiave ancora così
fornisce qualcosa di molto più forte di
questo quindi ciò che dice la coerenza finale
è che, se non nuovi aggiornamenti sono fatti per
l’oggetto alla fine farà tutti gli accessi
restituire l’ultimo valore aggiornato in questo modo
Il concetto è stato almeno reso popolare da
Werner
Vogel’s di Amazon ha un grande blog
e non so esattamente in realtà
lo ha definito o meno ma è stato sicuramente
una delle prime volte che l’ ho visto
e questo è stato il modo in cui lo ha definito ora che sono
fare un po ‘ di modifica qui
perché sono sicuro che voi ragazzi avete tutti sentito
che in un sistema distribuito non c’è
davvero una nozione consistente molto buona di
tempo quindi qual è l’ultimo valore aggiornato
Significa che il tuo ultimo è il mio ultimo dell’altro
i server durano per ultimi chi lo sa
giusto, quindi non sappiamo veramente cosa duri
significa in questo contesto e quindi non lo è
davvero il caso che sta ottenendo
aggiornato all’ultimo valore
la consistenza finale ci dice solo
otterremo lo stesso valore e anche
quella parte chiave lassù se non ci sono nuovi aggiornamenti
sono fatti all’oggetto così quando fa quel
in realtà succede in un sistema che sono
chiedendosi chi gestisce questi sistemi dove
in realtà smetti di scrivere per alcuni
periodo di tempo e puoi dare il tuo
un certo periodo di tempo indeterminato da parte del
il modo in cui questo periodo di tempo non è non è
limitato e puoi lasciare il tuo tuo
server tipo di coalescenza nello stesso
affermare questo in realtà non accade quando
stai facendo funzionare un prodotto e questo fa
niente sulle transazioni con più chiavi quindi
nonostante tu ti stia prendendo
sapere che le cose stanno convergendo allo stesso modo
valore che non sarai in grado di fare
il conto in banca di cui ho parlato
su questa proprietà sicuramente no
dillo così un po ‘più forte
forma di bene coerente molto più forte
la forma di coerenza è sequenziale
coerenza e il modo migliore che ho trovato
Pensa a questo è ciò che è tuo
il portatile lo sta facendo in questo momento, così tu hai
più processori e ciascuno di quelli
i processori hanno una cache e cosa c’è
sta succedendo è che i tuoi processori
l’hardware mantiene la cache
sequenzialmente coerente e sto usando
quel termine un po ‘sciolto perché
tecnicamente non è nemmeno sequenziale
coerenza ma a meno che non stiate costruendo
sorta di protocolli di blocco o cose del genere
che non ci preoccuperemo di questo
è abbastanza vicino al sequenziale
coerenza e quindi cosa sta succedendo qui
è che il tuo processore sta monitorando cosa
linee di cache è lettura e scrittura e
sta facendo in modo che quelli rimangano sincronizzati
attraverso tutte le cache così il cosa
coerenza sequenziale significa è quello
quando stai facendo una serie
legge e scrive che accadono in alcuni
ordine in cui le letture e le scritture corrispondono
succede in un ordine e di solito loro
darti anche la funzione che se
sei su un processore che sembrano
stanno accadendo nell’ordine il
il processore li ha eseguiti così andiamo
inizia con questo esempio proprio qui così
qui ci sono tre processori e sono
facendo una serie di letture e scrive a
la stessa variabile quindi i primi
scrivendo un poi il secondo sta scrivendo
essere uno scritto da B a X e poi il terzo
uno sta leggendo a e poi sta leggendo B
questo aspetto legale per voi ragazzi lo fa
sembra corretto
si okay, sì forse è forse
era ovvio ma e il motivo per
questo perché il presidente siamo noi
permesso di riordinare le letture e le scritture
tra i diversi processori e così via
questo è un interleaving corretto di questo
dove possiamo solo tipo di spingere quello
proprio sul processore, verso il basso e fingere
come è successo dopo la lettura ora come
riguardo a questo stiamo scrivendo un poi
stiamo scrivendo B, quindi stiamo leggendo B e
stiamo leggendo un no, questo è corretto così
la ragione per cui questo è corretto siamo noi
può spingerlo ancora più in basso
e possiamo creare qualcosa che sembra
così anche la coerenza sequenziale
anche se è una delle forme più forti
di coerenza è ancora veramente confuso
Sono ancora molto confuso da cosa sia
permesso e cosa non è sotto questo
modello quindi c’è una forma ancora più forte
di coerenza là fuori chiamato esterno
coerenza e penso che sia così
a volte indicato come linearizzazione
abilità e l’idea qui è che è
quale coerenza sequenziale ti promette
si sta andando a vedere la lettura e scrittura
in un ordine che ha senso ma il
i risultati in realtà faranno coincidere il tempo così
per me questa è l’unica cosa che
ha davvero senso nel mondo questo
è l’ unico modo in cui posso realmente piacere
motivo per quello che sta succedendo e in un modo
pensarci è come se ci fosse un
un piccolo investigatore un po ‘
osservatore esterno seduto lì a guardare
a legge e scrive e guarda cosa c’è
succede così se stiamo cercando nel nostro
esempio precedente in cui avevamo il diritto
a un e il diritto a B se quelli davvero
succede in momenti diversi allora
un osservatore
potrebbe essere entrato e visto che il
diritto di essere successo dopo il diritto di
a e quindi se il processore tre legge
loro in questo ordine l’osservatore farebbe
sapere che questo era sbagliato sarebbe
lo so perché non ce n’erano altri
diritti a X che um quello che era un
interleaving errato quindi questo è il
più forte forma di coerenza
ogni cosa corrisponde a questo tipo di uno
copiare le cose accadono una alla volta
secondo il tempo secondo quando
qualcuno effettivamente emette una lettura o scrive
quindi questo è il tipo di coerenza che
si parla di quando senti il
le parole il teorema del cappuccio così questo rappresenta
disponibilità di coerenza e partizione
tolleranza è stata proposta per la prima volta da Eric
Brewer di Berkeley nel 2000 durante una conferenza
nel pod C che è distribuito
conferenza sui sistemi distribuiti e
si è scoperto che è una riformulazione di a
risultato FLP molto più vecchio risultato e così questo
è stato fatto nel 1985 da Nancy Lynch al MIT
e alcune altre persone e va bene, allora
Eric Brewer stava dicendo che intendo a
sensibilmente quello che ha detto e ciò che è citato
è fuori di questi tre si arriva a scegliere
due ma quello che stava veramente dicendo è
quella tolleranza della partizione è un fallimento
modello a volte i tuoi server non saranno
in grado di parlare tra loro e a volte
non sarai in grado di sapere come
a lungo non saranno in grado di
parlare tra di loro e perché non si
sai che elaborerai le letture
e scrive potenzialmente erroneamente
violando la coerenza o meno e così via
questa è la scelta che penso sia lui
davvero parlando ora di una cosa
è importante notare il risultato FLP
è in realtà molto bello se vuoi andare
leggi questo articolo c’è questo questo molto
costruzione fresca in esso dove dimostrano
che è impossibile raggiungere il consenso
con un gruppo di server anche se c’è
un processo difettoso e il motivo per
questo perché questo processo difettoso può
fai sempre la cosa sbagliata al
momento giusto quindi non importa quanto tu sia vicino
arrivare a decidere tra tutti i tuoi
server questo processo difettoso può fare un passo
proprio prima che tu stia per decidere
e avvitare tutto fino adesso è
importante notare che entrambi
le idee erano basate su un determinato modello di
sia la rete che il fallimento, quindi questo era
basato sul modello asincrono di
rete e come ho detto c’è questo
idea qui che potresti abbandonare la rete
pacchetti che potresti avere errori su un server
potrebbe iniziare a fare garbage collection e
pausa ma non puoi dire la differenza
tra il ritardo e il fallimento, quindi questo è il
idea di una quantità illimitata di tempo
giusto così potresti essere tu non puoi
decidere che un server è morto perché
potrebbe essere possibile che fosse proprio questo
era solo in ritardo per un altro po ‘
di quella quantità di tempo quindi cosa fa
questo significa
cosa significano questi risultati e cosa
cosa significano per distribuito
sistemi vuol dire che dobbiamo
rinunciare alla speranza che dovrei rinunciare a nessuno dei
il resto del mio dottorato e strappo la mia tesi
e buttalo via perché non siamo mai
sarò in grado di fare qualsiasi cosa perché
è impossibile affiancare roba sul
Internet bene ecco un’analogia che io
piace davvero a voi ragazzi che avete giocato a caramelle
schiaccia un po ‘ bene non ho giocato
anche se ho giocato ad altri giochi thailandesi
e questo è un gioco di categoria
chiamato match tre giochi ed è stato
dimostrato che questa categoria di giochi è
NP-hard
così che cosa significa ciò significa che
non esiste il tempo polinomiale
algoritmo per risolvere tutte le istanze di questo
gioco ora NP e c’è questo famoso
la domanda di P è uguale a NP e ci affidiamo a
il fatto che certe cose siano
np-hard be Kaleo ama la nostra crittografia
per poter funzionare nel mondo ora
questo significa che non possiamo giocare a caramelle
schiacciare saga alcun diritto Mi piace non lo fa
importa che potrebbe portarti più di
il numero di atomi nell’universo a
capire la risposta ad un molto grande
gioco di candy crush saga posso ancora
gioca a candy crush crush sul mio telefono e io
può ancora come occasionalmente battere il
gioco e scommetto che c’è qualcuno là fuori
chi batte sempre il gioco e lo sai
è davvero bravo in questo
e quindi mi piace molto questa analogia
perché significa che ti aiuta
capisci cosa è veramente questo teorema
dicendo e quello che sta dicendo è che è
dicendo che è impossibile al 100% del
il tempo decide tutto su internet
Se noi
non possiamo contare su messaggistica sincrona noi
il 100% delle volte può decidere tutto
se le partizioni guariscono se conosciamo la tomaia
legato ai ritardi dei messaggi del nostro sistema
essere molto lento potrebbe non essere il massimo
sistema ideale che costruiamo ma se rimuoviamo
questa parte del modello allora possiamo
e anche solo perché non puoi arrivare
Il 100% tutto il tempo non significa che non puoi
funzione al 99,99% un sacco di volte
questo è impossibile risultati questo
significa che è impossibile fare qualcosa
tutto il tempo possiamo ancora giocare a caramelle
schiacciare
possiamo ancora battere occasionalmente il gioco
e questo è il motivo per cui nella mia ricerca
non hanno realmente messo a fuoco tanto sulla
teorema di cappuccio invece quello che mi interessa davvero
circa è la coerenza rispetto alla performance
così nel funzionamento quotidiano del tuo
sistema quanto è costoso da mantenere
buona semantica questa è una domanda che io
mi interessa davvero rispondere e cosa io
voglio sapere come possiamo ridurli
costa mentre continua a produrre un corretto
ordinamento di letture e scritture e possiamo
fallo mentre gestisci i guasti
e alla fine facendo progressi nel
caso di guasti quindi c’è stato molto
di ricerca sul miglioramento del
prestazioni di queste forme più forti di
coerenza come serializzabilità quindi qui
sono quattro diversi tipi di ricerca per
tecniche che ho trovato davvero
interessante quindi uno di loro è basarlo
fondamentalmente aggirare il fatto che tu
non so a che ora provi
costringere tutti a essere molto molto vicino
tempo così spanner un sistema di Google è un
enorme database distribuito e hanno messo
orologi atomici in tutti i loro dati
centri in modo che siano in grado di legarsi
l’ inclinazione che sono in grado di determinare
esattamente fino a che punto è possibile per due
gli orologi devono essere spenti e quindi si fidano
questo fatto in modo che non debbano farlo
tanto il coordinamento e la comunicazione
per fare alcuni di loro
transazioni
sfortunatamente la chiave inglese è ancora veramente
lento sì sì, ce ne sono stati molti altri
tecniche sviluppate che sono carine
bello c’è la teoria della transazione
tagliando e l’idea qui è quella se
sai che stai solo andando a fare un
certo insieme di transazioni se il tuo
l’applicazione sta facendo qualcosa e tu
sai cosa farà
emetterà sempre lo stesso tipo
di domande è possibile analizzare questo insieme di
domande e puoi capire se tu
può dividere tali set di query in questo modo
quella capacità di serializzazione è meno costosa
e qui ci sono due pezzi di ricerca da
New York dove hanno sfruttato questo
tecnica per ottenere prestazioni migliori in a
sistema geo replicato in modo che siano in grado di
fare transazioni attraverso una replica geografica
sistema allora c’è questa idea di
chiusura commutativa quindi sono carina sono
piuttosto eccitato per la comunità e questo
è una cosa che ho usato molto pesantemente in
la mia ricerca personale e questa è stata usata
in diverse forme c’è questa idea di
chiusura commutativa e impegno
transazioni questo è dal database
comunità è un abstract molto vecchio di idea
tipi di dati e Doppel è un sistema che io
ha scritto che ne approfitta
commutatività commutativa per fare le cose
per core senza comunicazione e quindi
infine ci sono alcuni sistemi che usano
ordinamento deterministico in fondo se tu
avere un database distribuito e tu sai
che le persone devono commettere transazioni
in un certo ordine e tutti ne hanno bisogno
impegnarli nello stesso ordine
puoi solo decidere su quell’ordine in anticipo
di tempo e questo può aiutarti a migliorare
le prestazioni in alcuni casi ora il nostro obiettivo
qui il mio obiettivo è almeno quello di essere parallelo
prestazioni quando stiamo eseguendo
transazioni su un multi-core o a
database distribuito e penso che
queste sono alcune delle idee che siamo
intenzione di utilizzare in futuro per essere in grado di
Fai quello
Penso che sia importante pensare
sul diverso controllo della concorrenza
schemi per dati popolari e contesi
quindi qualcosa che è importante notare
ecco che se le tue transazioni sono
tutto su dati diversi non stanno andando
contendere e la serializzabilità non lo è
in realtà sarà così costoso
sarà davvero un problema quando
le tue transazioni stanno accedendo allo stesso
dati popolari e caldi e se è davvero così
il caso ci sono cose speciali che
possiamo fare per questi dati per fare il nostro
le transazioni vanno più veloci
Penso che il blocco commutativo e astratto
i tipi di dati sono davvero importanti e io
pensa alle interfacce che rivelano i tipi di dati
per il programmatore sono molto meglio di
readwrite interfacce quindi ecco un
esempio così ogni volta che parliamo
operazione di transazione di cui parliamo
legge e scrive get
mette e questo è quello che tutti i cereali
i modelli di utilizzo della scatola si occupano di
tuttavia spesso quando stiamo facendo
cose ai nostri dati
in realtà stiamo seguendo un tipo di dati
specifica dove è un contatore e
lo stiamo incrementando o decrementando
o stiamo prendendo il massimo di qualcosa o
si tratta di un indice e stiamo inserendo in
con una sorta di ordine e se noi
conosci la semantica del tipo di
oggetti che stiamo manipolando allora noi
può piacere come alcuni di loro sono in realtà
commutativo in modo da poter sfruttare
come alcune delle tecniche che ho appena detto
stai per ottenere transazioni più veloci e
possiamo anche fare ogni sorta di altro
diversi tipi di cose con loro e
quindi questo è un po ‘di ciò che sono stato
esplorare nella mia ricerca è come possiamo
usa queste idee per diventare più veloce
transazioni quindi mi lascerò con
un bene che sto per darti
questa citazione questo era nel passato banner
la carta quindi penso che sia davvero interessante
quel tipo di Google era uno di quelli
dei primi sistemi nel no sequel
movimento con BigTable si sono sbarazzati di
tutte le parti relazionali e di query di
un database e poi sono arrivati ​​al completo
cerchio e hanno costruito una chiave che è
un f-1 che è fondamentalmente un gigante
database relazionale distribuito e
Ecco una citazione da chiave crediamo
è meglio avere un’applicazione
i programmatori si occupano delle prestazioni
problemi dovuti a un uso eccessivo delle transazioni
come sorgono i colli di bottiglia piuttosto che sempre
codifica intorno alla mancanza di transazioni
e quindi è quello che voglio lasciarti
ragazzi con quello quelli sono i takeaway
qui utilizzare database ben testati
non cercare di utilizzare l’ultima piccantezza su
la tua parte più importante della tua
sistema e il tuo prodotto usano serializzabili
fino a quando non diventa un problema di prestazioni
quindi non ottimizzare troppo presto e quando tu
arrivare a un punto in cui devi fare un
decisione in cui devi pensare
abbandonando parte della tua buona semantica
per le prestazioni pensa esattamente a cosa
è che ti stai arrendendo e cos’è
cambiando quando ti sposti in un sistema con
diversi modelli alright in modo che sia
praticamente esso vi ringrazio molto e
Sono felice di rispondere alle domande

Please follow and like us: