Press "Enter" to skip to content

GOTO 2018 • Cluster Consensus: when Aeron met Raft • Martin Thompson


[Musica]
Hey
[Applausi]
si, a quanto pare, tutto funziona qui
quindi benvenuto a casa grazie per essere venuto
domanda veloce chi ha letto questo documento no
uno lo leggi quello che dovresti leggere tutti
questo articolo è un pezzo brillante sul
problemi che abbiamo nella produzione
sistemi e ciò che provoca grandi interruzioni giù di lì
ci sono molte cose diverse c’è a
grande sezione in questo su testare cosa fare
pensiamo sia la causa numero uno di
la produzione sono bordi dei sistemi quando
i sistemi vanno a morire, qual è il numero uno
causa l’errore umano dei dischi è così
gli operatori ciò che hanno definito è di gran lunga
la causa più comune dei problemi che noi
avere nei sistemi questo fa anche riferimento
molti altri pezzi della ricerca in questo
area e abbastanza spesso questo accade
in genere quando si verifica un errore nel
sistema dobbiamo portarli per il backup
un altro sistema e ho un personale
storia se questa accoppiata circa 12 anni fa
dove stavo gestendo una squadra e nel
bel mezzo della notte abbiamo avuto un sistema che
fallito e la persona che era di turno
ho provato a passare al sistema di backup
nel bel mezzo della notte e hanno fatto
un errore e il loro sistema danneggiato
e c’è cercato di aggiustarlo quando sono
essere stanco e mezzo addormentato in quel momento
al mattino e hanno iniziato a fare
cose sempre peggio, peggio, peggio e
non hanno chiesto aiuto come erano
in questo debito e hanno continuato a fare anche
maggiori errori e alla fine ha ottenuto
intensificato al punto in cui altri
le persone sono state coinvolte e abbiamo provato a farlo
ripristinare dai backup perché primario
il sistema era morto, il sistema secondario aveva
è stato fregato nel tentativo di installarlo e
siamo andati al consiglio di riserva abbiamo avuto lo shock
di scoperta nella parte posteriore di non ha funzionato
o due volte nella mia carriera sono andato a
suggerimento di backup e due volte non ha funzionato
sono abbastanza interessanti per quello ora
abbiamo avuto la capacità di sentire in questo
ma è stato deciso che lo avremmo fatto
manualmente piuttosto che tramite una sorta di
processo automatizzato e ma questa carta può
problemi è come le cose si sentono, ma anche come
gli umani si sentono e sentiamo tanto quanto i nostri
formattazione delle cellule molto più del nostro
il software fa così la cosa migliore noi
fare è che abbiamo bisogno di avere una buona pratica in
posto che è ben lanciato che possiamo fare
il nostro failover su un altro sistema e questo
è un po ‘il motivo per cui abbiamo cluster che abbiamo
cluster in modo che possiamo avere una nuova macchina
acquisizione in caso di fallimento e
hanno fatto che in un ben collaudato un
modo automatico e spesso usiamo il consenso
per questo quindi puoi pensare che cosa fa
consenso significa bene una delle mie cose io
piace fare molto ogni volta che lavoro
con qualsiasi tipo di tecnologia è andare a
definizione del dizionario di qualcosa
perché siamo terribili come industria
per fare questo, quindi non posso guardare bene
cosa significa il consenso è bene
in realtà è abbastanza in forma qui è
di avere un accordo generale su
qualcosa ma la definizione primaria è
in realtà su un accordo unanime che
in genere non è ciò che cerchiamo
in realtà la definizione secondaria di
il consenso è ciò che normalmente stiamo andando
perché stiamo cercando di ottenere la maggioranza o
massima una certa percentuale di qualcosa
essere d’accordo con qualcosa in cui non sono così dentro
l’ evento del fallimento possiamo almeno
scegli ciò che pensiamo abbia senso no
di cosa stiamo parlando del consenso tutti
qui consenso su cosa possa essere
consenso su un singolo valore come quello
è il nodo che dovrebbe essere aperto o un
vivo è il miglior candidato
per fare, non si può anche solo essere dove
siamo in qualche stato o qualche modello così
questo può essere applicato a molti diversi
le cose ci sono un certo numero di interessanti
documenti e un sacco di lavoro interessante
questo lavoro va molto indietro ora così
in particolare negli anni ’80 abbiamo avuto molto
di progressi in questo settore, così gente come
Leslie Lamport ha fatto molto bene il lavoro
le persone hanno sentito parlare di salse di patto possono
diventare una delle cose più conosciute in
questa zona ma ce n’è molta
scoperta simultanea in questo periodo
quindi si interrompe la replica
sincronia virtuale con cui stiamo facendo le cose
la trasmissione atomica può bruciare e Barbara
Liskov molte altre persone ne hanno fatto un po ‘
ottimo lavoro in questa zona c’è a
qualcosa che è accaduto intorno a questo
periodo non può andare avanti che è
davvero interessante non è la teoria
che dobbiamo preoccuparci abbastanza spesso
è l’implementazione di alcuni di questi
gli approcci dimostrano e lo erano
dimostrato di essere corretto
hanno fallito Sono perché implementazioni
erano incredibilmente sordi
Gault e molte persone hanno commesso degli errori
cercando di farlo in modo così paxos in particolare
era famoso per queste poche persone
potrebbe implementarlo in modo sicuro
questo ha generato un periodico interessante
metà 2014 intorno a una cosa chiamata zattera
che è un nuovo algoritmo di consenso e
il punto di zattera era quello di trovare un
algoritmo in modo che possiamo fare il consenso sui cluster
ma farlo in un modo che è facile da
implementare e facile da capire
ottimizzare per gli umani non solo
ottimizzato per il sistema e fa a
numero di ipotesi in questo che rende
è molto più facile quindi parlerò un po ‘
su come puoi implementarlo
algoritmo ma pochi anni dopo lì
era un’altra variante su questo così un foglio
era fatto di dove la gente aveva provato
implementazioni e che cosa era gentile
imparato da quello e quindi c’è molto
in una sorta di uscita da ciò, ci rendiamo conto
esso
abbiamo bisogno di automatizzare i sistemi in particolare
l’accordo con il fallimento quando vuoi
avere un’alta disponibilità che non vuoi
qualcosa che è sommersa a voi sono
di nuovo alle due del mattino
quando la gente è mezza addormentata e intontita
fare o commettere errori vogliamo una macchina
farlo in un modo ben collaudato e di farlo
veloce e in particolare il farlo velocemente
diventa qualcosa di cui abbiamo bisogno di macchine
per quello che è una zattera siamo una specie di copertura
zattera in poche parole qui così Ralph c’è
un algoritmo è tipo di paxos come ma
ha alcuni vincoli con loro
non e uno dei principali vincoli
focalizzato su era mantenere lo stato
spazio il più piccolo possibile e da
lì possiamo ragionare molto di più
lo realizza mettendo tutti i nodi
in uno solo dei tre ruoli così tu
avviare un sistema su tutti i nodi che sono
nel sistema sono designati come
seguaci quindi non sanno chi
il capo è ancora che ci proverai e
risolvere chi è il leader di un sistema
e per questo hanno un’elezione
protocollo e intorno a ciò che succede è
a un certo punto dell’avvio lo farai
d’accordo che ok voglio provare e diventare un
candidato e si richiede voti del
altri seguaci per farlo c’è un
interessante sfida che come fai tu
decidere chi diventa il candidato che abbiamo
senza senso
controllo facendo questo questo è risolto da
utilizzando la randomizzazione e il timer in modo da impostare
un timer casuale dopo un periodo di tempo
uno dei potenziali seguaci lui
crede che possa essere un candidato
proporsi per diventare il leader
del cluster che è entrato nel
candidati hanno chiesto voti di
gli altri seguaci se ottengono un
la maggioranza può quindi diventare la successiva
così tipo di opere in un modo carino se otteniamo
un conflitto a quel punto che puoi avere
due candidati proposti allo stesso tempo
potremmo ottenere una votazione per parti separate e un campo di
azione quello che fai è che tu torni indietro
e lo fai di nuovo con un altro
randomizzazione così alla fine lo sarà
risolto e in genere non si ottiene
scontri quando gli intervalli sono sopra a
ragionevole periodo di tempo in cui la gamma
è significativamente più grande del
tempo di andata e ritorno tra le macchine e
hai un seme ragionevolmente casuale che
entra in quello
è un po ‘fico che ora hai il nostro
cluster che può essere eseguito con un eletto
leader tutti lavorano abbastanza bene il
Leader può morire a un certo punto si va
attraverso esattamente lo stesso processo di nuovo
eletti solo un nuovo leader dal
elenco corrente di follower che sono ancora
intorno e da qui possiamo andare avanti
e progresso non abbiamo le chiavi di a
le due del mattino, qualcuno
il cercapersone se ne va, devi andare da loro
devo iniziare a inserire i comandi in a
sistema e fanno un errore può essere
qualcosa che è ben provato e testato
quindi solo tre ruoli tre interessanti
gli spiriti nel sistema sono anche buoni
i nostri pc che sono definiti uno è come fanno
abbiamo a che fare con le elezioni stesse così noi
richiedi voti così una volta che diventi un
candidato puoi richiedere voti del
seguaci e parte del protocollo o su
questo è ciò che chiedi a un altro follower
il tuo voto diventa un leader e tu
fornire quanti dettagli hai intorno
il tuo registro corrente, quindi quanto sei stato
attualmente hanno così in alto fino ad oggi sono
se sei più aggiornato rispetto al
seguace che stai richiedendo o almeno
fino ad oggi con un errore quindi per tutti i
seguace possono votare per te ho pensato
fase se sei dietro il candidato
quello sta proponendo loro non dovrebbero ottenere a
voto positivo in quella fase perché loro
non ho l’ultima versione di stato
questo tu
voto negativo del follower e non
dove falliranno nel loro tentativo
l’idea è che otterremo il leader
essendo eletto chi ha il più grande tra
lo stato è l’importo più recente di
vederlo disponibile nel cluster dal
membri che sono disponibili il nostro punto in
il tempo è uno dei fondamentali
differenze tra questi timer
applicazione paxos e percorso così quelli
altri ti permettono di eleggere un leader
con il leader non è avanti di alcuni di
gli altri seguaci che poi entrerai in a
protocollo di cattura che lo sappia
ci sono alcuni vantaggi che ma
c’è anche molta complessità e dentro
la complessità non ha molto potenziale
per errori di implementazione che possono
perché questo non è corretto
una volta che le elezioni sono finite
i leader dicono ai seguaci di aggiungere
voci nel loro registro in modo che chiamino
ciascuno dei seguaci a turno come loro
i dati della sequenza in arrivo aggiungono
questo al tuo registro e anche loro
come parte di ciò che ti fornisce
informazioni su quello che parte di che si accede
ora può elaborare così i bit che loro
hanno ricevuto la maggioranza del cluster
dicendo che ho aggiunto questo al mio log
che può quindi essere elaborato da quelli
altri membri ci entrerò in questo in a
un po ‘più di dettaglio lo vedi dare
il lavoro è morto quindi solo per le chiamate RPC e tre
ruoli che sono il tipo di nucleo se loro
anche se in realtà è bello e semplice
abbastanza facile ragionare su molto
più facile che salire con la zattera
la replica di stile di vista interessante ha
diventare semplificata in modo molto simile
negli ultimi anni brindisi così siamo sorta di
convergenza verso molto più semplice
algoritmi in questo spazio che prendono questo
approccio otteniamo un sacco di buona sicurezza
garanzie e queste sono state tutte
formalmente provato eravamo in grado di garantire
che vedremo solo se Leah mancava di uno
capo alla volta faremo in modo che
il leader avrà solo i leader
affermare che il leader è l’unico che può
espandi tutti i loro registri tutti i leader
attraverso i diversi cicli elettorali
avremo i tronchi in marcia verso destra
attraverso la storia c’è tutto il genere di bello
roba la cosa buona è che è stato tutto
formalmente dimostrato attraverso un semplice
il modello in modo da ottenere queste belle caratteristiche che
vieni fuori dal
quello che trovo è piuttosto interessante
pensa che questo documento non parli così tanto
su come funziona, ma se leggi un
sacco di altre tre carte di uno dei
le cose che risalgono sono molte
di questo è in realtà costruito su un sacco di
teoria funzionale così funzioni monotone
è quello che segnano molto di questo siamo noi
solo andare avanti con le elezioni così tu
incrementa il termine ogni volta che fai un
nuove elezioni si aggiungono messaggi a un registro
solo sempre aumentando il registro solo tu
mai maturato non sei mai rientrato
la storia rende molto più facile ragionare
circa quando inizi a capirne qualcuno
i fondamenti dietro di esso puoi vedere
ciao alcuni dei diversi protocolli
sono collegati tra di loro è possibile
in realtà anche rubare alcune belle idee in
implementazione da alcuni e applicarli
in un altro bacio e tu puoi ragionare
puoi essere abbastanza sicuro di poterlo ottenere
ragionevolmente corretto mi piace pensare
su di esso sei praticamente esperto in tutto
le cose diventa una cosa importante
pensa allo stato come immutabile e oltre
il tempo che continui ad aumentare è stato fatto ma
versione di tutto e poi da
non ci si sa cosa si sta trattando
in un determinato stadio diventa bello e
facile ragionare su dove è Aeron
inserirsi in alcuni di questi e tipo di like
perché l’abbiamo applicato bene aaron è un bel
sistema di messaggistica funziona abbastanza veloce
bene previs più veloce di ogni altra cosa
è proprio lì da un bel po ‘e
la gente continua a chiedere pure tu puoi dare
noi garanzie migliori per i messaggi
arrivando così vogliono questi diversi
garanzie di consegna che continuiamo a sentire
questo più e più volte e il comune
uno è è la consegna garantita che sento
questo da molte molte persone di solito
qualcuno un po ‘come questo di solito c’è
qualche architetto in qualche posto ha tipo
opinioni su come dovrebbero essere le cose
spesso non ha scritto il codice probabilmente 20
o 30 anni forse non ha nemmeno davvero
scrivere molto codice in primo luogo ma
richiedono queste caratteristiche e un prodotto
e loro non sanno davvero cosa siano
chiede
come se qualcuno volesse dare un’occhiata ad alcuni di
le storie alcuni di questi protocolli
e cose diverse come il presidente
tutti hanno sentito parlare di commit a due fasi
queste persone sanno che è stato
formalmente dimostrato non è corretto come tutti
le garanzie che le persone leggono il
euristico
la sezione dei documenti è puntata su questi
la gente richiede questo tipo di cose ma
non sanno cosa siano veramente
chiedendo cosa hai bisogno di sapere
intorno a questo Lea lo trovo
interessante è il motivo per cui queste persone si comportano
in un certo modo stanno prendendo un
approccio need-to-know che accumulano
informazioni e fanno con loro
i venditori richiedono una funzionalità di a
venditore che pensa che si adatterà a
il loro mondo piuttosto che quello che è il
mondo globale e quali sono i problemi
stiamo cercando di affrontare mi piace pensare
molto più sulla falsariga di ciò che voglio
garantire l’elaborazione di qualcosa non
consegna garantita perché la consegna
non importa è l’elaborazione di
quel messaggio all’evento in quel momento il
giorno che conta davvero se lo è
consegnato più di una volta va bene se
quello che stai consegnando è idempotente
e lo puoi dire perché il tuo
versione noiosa per le cose ce ne sono molte
modi più semplici di ragionare su cose
piace anche se prendi qualcosa di simile
ti darebbe la consegna garantita cosa
se ne consumi da quello e poi da te
vai a elaborare il tuo incidente prima di te
finire l’ elaborazione è garantita
l’elaborazione è ciò che conta davvero e
questo tipo di cose si adatta molto
in particolare il mondo finanziario che spendo a
buona parte del mio tempo in finanza e noi
costruire sistemi interessanti tipicamente in
sistemi di memoria e questi in-memory
i sistemi devono andare particolarmente veloce e
perché è puramente in memoria che cosa
capita di essere adatto a una macchina fuori da cosa
succede se si blocca dobbiamo essere in grado
per recuperare le cose così come fanno queste specie
dei sistemi sembrano buoni in genere abbiamo a
il numero di clienti sta per inviare
richiede ad alcuni servizi da qualche parte
piuttosto semplice in genere quel servizio
vorrà registrare cose su disco così
che se lo spegniamo e lo accendiamo
di nuovo possiamo tornare alla nostra corrente
vista di stato ma se un problema con questo
cosa succede se il disco diventa corrotto e se
la macchina esplode in fiamme
con un numero davvero interessante
cose così posso darti un mondo reale
un esempio di poche settimane fa ora
con il metodo di regolazione che entra in
fatto in Europa le persone devono usare
timestamp microsecondo su tutti gli ordini IT
deve essere applicato
quindi c’è alcuni miei amici ci stiamo
lavorando su un sistema che stanno applicando
timbri in microsecondi a tutto
hanno l’hardware per fare ciò che accadono
avere uno dei più alti volumi
sistemi nel mondo e l’orologio che
erano sul sistema che sono
richiedendo questi timestamp al largo della
la griglia non è stata specificata per far fronte a questo
la Macchina ha preso fuoco perché questo
è stato un lavoro troppo duro
quindi le cose scoppiando in fiamme è
davvero non solo una cosa flippin
realmente accade ho visto un bel po ‘
volte così avere anche il singolo servizio
se lo stai loggando alla scrivania è vero?
davvero un buon approccio ne abbiamo bisogno
più di una posizione e in particolare
se vuoi iniziare a guardare a caldo
aggiornamenti che sono un altro molto comune
cosa con le strategie di trading simili
e le persone per essere in questo spazio sono loro
vuoi il sistema di hot operator e tu sei
non chiuderò il sistema e porterebbe
torna a fare quello che vuoi fare
roba del genere e tu lo sai in un
cluster che esegue parte del tuo nuovo codice
portarlo a prendere il sopravvento e prendere il vecchio
codici fuori dal sistema che vogliamo essere
in grado di fare questo tipo di distribuzioni a caldo
per questo abbiamo bisogno di avere questo D in
più di un posto così tipicamente
eseguire più di un’istanza di qualcosa
e tendiamo a dividere i sistemi
avere moduli di consenso per gestire il
i servizi dei corridori dello stato di cluster stessi
e stiamo ancora registrando su disco ma
stiamo registrando su disco in molte posizioni
ora ce l’abbiamo in memoria in molti
posizioni diverse in qualsiasi punto
nel tempo
e idealmente non dovrai
qualcosa perché nel caso di due tu
non può davvero risolvere alcun tipo di
controversie e non puoi tollerare i fallimenti
e hai ancora un sistema affidabile per te
bisogno in genere un minimo di tre per
questo tre e cinque è molto comune per
il tuo tipo di dimensioni del cluster che siamo
a che fare con esso e la maggioranza sarà
una specie di dimensione del cluster divisa per due più
uno ora come coordiniamo questo e
come ci comportiamo così Todd e io noi
spendere un sacco di tempo per costruire questo tipo
delle cose così una delle cose che sento io
dovremmo condividere è costruiamo queste cose noi
offriteli come open source a tutti voi
ottenere il beneficio da esso così c’è parte
di beneficio da esso si dovrebbe condividere un
un po ‘nella nostra padella che dobbiamo
trattare e trattare con un IO è un
un po ‘del dolore che spesso ci occupiamo
con ho una domanda interessante fare
i server si bloccano sì, penso che sia carino
certo fanno schiacciare ora se lo sei
accedendo al disco e se lo fossimo
sarà anche la sincronizzazione con il disco
mantenendo il nostro rivenditore c’è qualcosa che noi
devo ancora preoccuparmi di ciò, quindi lo farò
registra la scrivania che scriverò sul disco
e sto sincronizzando tutti i miei diritti
c’è qualcos’altro che devo preoccuparmi
a proposito di arrossire bene, sì, lo farai
hai scritto che arriveresti a filo
ora se ho un file e lo sono
scrivendo non file su disco e io no
affondando quel file solo per perdere
quel file in qualsiasi altro modo e se tu
non ho f sincronizzato la directory e
abbiamo familiarità con perso e trova questo
è dove i tuoi file andranno a finire anche
se sei il loro file di punti del lavandino che hai
affondare la directory anche quando si
crea quel file nel primo elenco prova
facendo questo in Java e iniziamo a farlo
un codice strano che assomiglia un po ‘
questo va bene questo tipo di codice brutto qui
in cima ho un canale di file che sono
aprirò la nota sul canale del file
aprendolo solo per la directory e
Non gli sto dando nessuna opzione in cui non sia
la documentazione come un modo per usarlo
e potrei ottenere un’eccezione I / O e
beh, in effetti se lo faccio su Windows I
otterrà un’eccezione I / O e non lo farò
ottenere un’eccezione I / O su Linux e poi
in seguito se non è la forza dell’alcool
su di esso con vero per forzare i metadati come
così come i dati stessi sul disco questo
poco linguaggio orribile che sto applicando
in questi focus è così che posso sincronizzare
la mia directory su disco
non solo il mio file perché l’API Java
non ha mezzi per farlo e noi abbiamo
a fare cose cattive del genere per renderlo
lavoro sarebbe davvero bello se solo noi
ha avuto una bella chiamata semplice dice qualcosa
come questo come i file dot force per a
directory e forzare anche i metadati
sarà gentile
non possiamo averlo ma diciamocelo
avere un occhio su Java quindi non possiamo avere
directory sicure su disco e assicurarsi
i nostri dati guardano per sempre attraverso
le cose supportate ma abbiamo il bar così noi
sentirsi bene
parliamo un po ‘di
prestazioni e come si adatta la performance
in questo in particolare guardiamo
cosa significa se progettiamo in base a
il nostro PC come un modo di pensare quindi se ho avuto
una richiesta che arriva qui e ora sono
useremo la nostra chiamata di procedura remota PC
per la sua stessa natura è sincrono ora noi
può fare certe cose con i futures e
promette e un po ‘di renderlo un po’
un po ‘più disteso però
cosa succede se lo consideriamo come
richiesta di base RPC bene entra nel
sistema sta andando a colpire qualunque sia il
leader designato in quel momento
il leader quindi dovrà setacciarlo
il suo disco, quindi ne prenderò un po ‘
tempo giusto nel disco richiede un po ‘di tempo
soprattutto se avete intenzione di f sincronizzarlo
allora il leader deve replicarlo
uno dei suoi seguaci in questo caso lo invia
fuori da un altro modulo di consenso
dovrà quindi replicarlo su disco
a quel punto vedere se un tempo F sincronizzarlo
ancora una volta penso che ora sta assumendo
come stiamo facendo questa cosa perché è
tutto ciò accade in seriale , facendo questo
il modulo di consenso deve quindi
replicarlo ad un altro a quello
stadio che deve ancora replicarlo
disco o sincronizzarlo su disco, questo è possibile
in realtà lo elaborano da un servizio perché
ci pensi adesso ce l’ abbiamo su a
maggioranza dei server su disco in questo
Punto che abbiamo sul leader che abbiamo
solo uno dei follower e io posso
in realtà inizia l’elaborazione dei dati in
questo punto, ora, questi verranno stratificati
uno sopra l’ altro nel tempo ogni volta
hai risposto da quella chiamata il
il leader può anche eseguirlo contro il suo
proprio macchina di stato a quel punto e noi
può iniziare a fare progressi in modo che possiamo solo
consumare qualcosa all’interno dello stato
macchina stessa una volta che è sicuro su disco
su una maggioranza dei membri del cluster e
ora possiamo andare avanti ma iniziare a pensare
circa come dove concurrency e
il parallelismo arriva in questo ho detto okay
avremmo potuto fare un po ‘ di quella roba
con il futuro e le promesse ma non possiamo
fai tutti i pezzi sulla scrivania e tutto il resto
abbastanza bene ed è bello così come lo fa
le cose stanno insieme ora hanno fatto un
discorso eccellente ieri e uno dei
punto che ha fatto
questo discorso è stato un parolee che mi ha attirato
Mi piace correggerlo , Dave non è un
nerd parallelo è un nerd concorrente
Dave è una singola entità che ha tempo
fetta ma lui non può fare le due cose a
una volta che stava parlando di lui
può dividere il suo tempo tra loro e di nuovo
noi mescoliamo questi termini in un sacco di cose
la nostra industria
Mi piace come John Gustafson in realtà
li divide e questi sono
distinto e non dovremmo provare a
li intercalano in modo da pensare in parallelo come
l’opposto di seriale simultanea è il
opposto di sequenziale quelli sono
abbastanza distintamente lui in realtà
parla di molte delle sue carte lui
non userà i termini simultanei e
parallelo in questo stesso articolo a causa di
la confusione che provoca intorno a ottenere
noi come industria a non pensare a
roba che vedo mi piace davvero il terzo
Punto e vedrò come i benefici
qualcosa sta arrivando a pensare in fattori
è un modo molto efficace di affrontare
tanti problemi semplici dove qualcosa
quello che sta guardando è davvero davvero
bello e ti mostrerò alcuni esempi
perché è davvero bello in un secondo, quindi noi
può ottenere molto più throughput e molto
la latenza più bassa se si comincia a pensare a
cosa possiamo fare in parallelo considerare il
concorrenza ma anche come otteniamo
le cose andando in fattori ora uno dei
luoghi da cui possiamo imparare molto è difficile
lavorare un sacco di roba è stato fatto in
hardware per molto tempo così possiamo
trarre molta ispirazione da esso se così
Ho intenzione di elaborare le istruzioni all’interno
la CPU lo farò in una conduttura
ed è perché posso usare diversi
circuiti elettronici per ciascuno dei
passaggi del processo, quindi quando si elabora
una delle tue istruzioni non solo
capita in un singolo ciclo ed è tutto
finito è fatto in una serie di passaggi così
la prima cosa che faremo è che ce l’abbiamo
effettuare la memoria per l’istruzione
stesso e quel nome di istruzioni che possiamo
poi esegui ma non possiamo semplicemente eseguire
che l’istruzione perché anche se corriamo
Accidie 6 ore Accidie 6 assemblea
le istruzioni sono di alto livello per quanto
il nostro processore è interessato di cui ha bisogno
decodificare queste istruzioni in
micro ops e quindi può eseguire il
micro ops, quindi questo è un altro
passo nel processo e poi abbiamo
queste CPU piuttosto complicate che sono
noto come speculazione fuori ordine
motori e hanno bisogno di tirare le cose
indietro e ordina alla fine e loro hanno bisogno
di scrivere le cose a memoria in modo essi hanno
ha avuto paure di pensionamento piuttosto complicate
a quello così finiamo con questi quattro
passi che possono suddividere in quelli pari
ulteriori passaggi ma in genere li abbiamo
questi quattro passi quindi immagina il mio
processore teorico ha preso un ciclo per
passo e volevo elaborare quattro
istruzioni diverse se dovessi fare
quelli tutti in serie finiremo con
16 cicli per completarlo ma è il
duro lavoro che può fare il factoring
inizia a recuperare l’istruzione successiva
una volta finito e il decodificatore
inizia a decodificare l’istruzione successiva
una volta finito il precedente noi
può iniziare a sottoporre a pipeline queste cose
che nessun II può completare i miei quattro
istruzioni in soli sette cicli così
fare uso della pipeline in un fax questo
è un bel modo per avere concorrenza al par
Losanna lavora per noi nel fare questo noi
guarda al consenso che abbiamo un numero di
passi che dobbiamo affrontare prima
tutto ciò che dobbiamo ordinare noi
avere molti clienti diversi che inviano
richieste nel sistema se vogliamo
creare un log non log sarà
deterministico dobbiamo applicare a
sequenza a così abbiamo bisogno di ordinare il
le cose che stanno arrivando verranno quindi registrate
li alla scrivania così ce la copriamo per dopo
abbiamo bisogno di essere trasmessi agli altri nodi
nel sistema possiamo applicare una connessione
protocollo in modo tale che una volta che abbiamo raggiunto
maggioranza dei nodi che contengono quelli che
può impegnare tali cambiamenti nel nostro
diverse macchine a stati e questo è
dove vengono giustiziati, quindi facciamo pipeline
che processo ora se possiamo iniziare a fare
che come una pipeline possiamo iniziare a ricevere
un throughput molto maggiore nel nostro sistema
come andremo a giocare un po ‘ se noi
guarda il nostro esempio qui, quindi se guardiamo
al sistema e iniziamo a correre tutti
di questi diversi componenti su
diversi thread e rendendo comunicare
in un posto che è molto economico per il
comunicazione per accadere ma succede anche
completamente in sequenza e avviene in
in concomitanza con l’altro possiamo ottenere
molto di più in corso qui, quindi cosa
Sarebbe questo apparire come bene se abbiamo ottenuto un
richiesta
che entra nel suo sistema e colpisce il
modulo di consenso se il modulo di consenso
può allo stesso tempo inviare a tutti i
altri componenti che ci interessano
vedere se un sacco di tempo e passando attraverso
ed elaborando questo andrò attraverso il
diversi componenti del nostro che
facci fare come possiamo occuparci
la scrittura su disco del senatore il
componenti l’esecuzione e lo stato
macchine tutto questo sta accadendo in a
pipeline allo stesso tempo e quei dati
non è copiato affatto, passa attraverso tutto
di questo con singole operazioni per
trattare con esso i moduli di consenso può essere
rispondendo con le posizioni che hanno
affrontato fino a quel punto e che può
ad alimentare i dati che sta succedendo di nuovo
da replicare dove puoi consumare
nella posizione di impegno in questo modo possiamo
superare le cose a un livello molto più grande
larghezza e si otterranno le ripetizioni del processo
un’altra richiesta in cui ci limiteremo a replicare
fuori torneremo la posizione
questo è stato aggiunto e da qui noi
può distribuire la posizione di consenso
questo è stato commesso e l’abbiamo appena fatto
entra come un oleodotto, quindi torna di nuovo a un
I / o pin quali sono le cose di cui abbiamo bisogno
per fare in questo bene stiamo lavorando molto
con i protocolli binari che stiamo cercando di
scrivere questi dati per collegarli in rete
disco quindi stiamo usando cose come byte
buffer molto molto bene in genere allocare
i nostri buffer di byte e inizieremo a scrivere
alcuni dati qui, quindi ecco un semplice
Per esempio, inserirò un numero intero
in un buffer di byte in un dato indice
c’è un’API perfettamente valida che consente
io faccio questo ciò che è interessante è che posso
avere thread separati farlo perché
Sto mettendo il mio indice quindi non c’è
relazione tra un altro thread
questo sta mettendo qualcosa per indice a a
posizione diversa in quel buffer o
leggendo dalla diversa posizione in
il nostro buffer contiene un’API che non lo fa
prendi l’indice che usa la posizione
internamente della classe che non lo è
thread safe quindi non possiamo essere sicuri di non poterlo fare
prendi il paragone che avrei pensato ora noi
spesso vogliono mettere dei byte in quelli
buffer anche
quindi se voglio mettere su una matrice di byte
li dentro posso farcela bene
in da indice a una data posizione se lo faccio
che il mio ID mi dà una linea rossa ondulata
che è abbastanza prima
beh, ho una linea rossa ondulata
risulta che non abbiamo il metodo
implementato mettere un array di byte da parte
indice o altro indice del buffer di byte ma
abbiamo per molti altri tipi questo
bug è stato aperto dal 2004 ed è
ancora non riparato ma ora abbiamo il nostro e
possiamo risparmiare un po ‘di battitura ma
che non può essere stata al sicuro sulla scrivania e noi
non può avere le cose efficienti, quindi come può
il nostro aiuto con alcuni degli altri
roba bene rendendola così monotona
le funzioni sono fondamentali per un sacco di consenso
algoritmi una delle parti di esso è noi
concordare l’ indice dei messaggi è la cosa che è
andando ad aumentare nel tempo così ottengo a
nuovo messaggio nel sistema che ho controllato a
log e un nuovo indice di messaggi c’è a
molte ipotesi intorno al punto che significa
che il registro deve sapere del messaggio
busta nel protocollo di trasmissione
deve sapere della busta del messaggio in noi
hanno accoppiato molte implementazioni a
un’implementazione e se noi
indice dei messaggi sostitutivi per l’indice dei byte
è ancora una funzione monotona ancora
va avanti nel tempo ma la maggior parte delle cose no
bisogno di sapere così la cosa che scrive
riempire la scrivania ha bisogno di sapere
cosa c’è in quei byte sa che è necessario
sapere che sono scritti i byte su disco
scritto in modo sicuro e sapere fino a dove
ha attraversato la stringa quando è
la replica ad altre macchine ha fatto il loro
cura di quali messaggi in là no
loro no
stanno trasmettendo solo i byte sul
rete e quindi sapere quanti byte
sono stati nuovamente trasmessi a cui
punto sembra come consumare all’interno del
macchine di stato
una volta che sei consumato nello stato
macchine quanto ha il flusso di byte
hai effettivamente consumato questo è quello che
questioni
non l’indice del messaggio stesso, possiamo fuggire
a molte preoccupazioni insieme e nostre
progetta e limita così tante cose
limita anche le nostre implementazioni
limita il modo in cui potremmo fare il fallimento come noi
può fare la replica come possiamo fare molti
altre cose quindi l’ho promesso prima
Vorrei parlare di come facciamo molto
cose allo stesso tempo bene quando siamo
comunicare tra i diversi
nodi nel sistema noi
un multicast che è abbastanza facile
dove possiamo rappare come qui troppi
seguaci allo stesso tempo con un singolo
cent alcune reti non possiamo multicast così
per esempio se fossimo in Amazon noi
non ho accesso a multicast di
le cose che facciamo è che possiamo simulare
multicast utilizzando i sogni multi unicast
ma dal punto di vista della programmazione
è lo stesso e faremo tutto
di quelle lunghezze puntano il punto e
perché le nostre strutture dati sono
strutture dati immutabili e funzionali
in natura possiamo assicurarli attraverso il
mittenti diversi senza ulteriori
copiando così otteniamo molti benefici
di multicast ma usiamo ancora unicast
i flussi ora qui sono interessanti se
Ho intenzione di inviare da un leader a un
seguace del leader ha bisogno di quello caro
a loro volta il leader ha bisogno di quei dati
scrivilo sulla scrivania per registrarlo
quei dati al consumatore nello stato
macchina una delle cose che abbiamo è spia
abbonati basati in modo che possano spiare un
flusso di dati in uscita e senza
ricevere i dati di nuovo può ottenere
accesso ai byte e ancora perché
è una struttura dati mutevole che possono
leggerlo senza prendere nessuna copia
costo per quello che stai consumando sul
altre macchine quando sto consumando sul
altra macchina ho il flusso di byte
entrare dalla rete che mi serve
scrivere alla scrivania
Ho bisogno di un processore per il consenso
modulo per sapere fino a che punto ho finito
e ho bisogno di un processore da parte dello stato
macchina di nuovo lo riceviamo in uno
buffer che buffer nella memoria condivisa
in tutti i processi che utilizzano tutti
esattamente la stessa struttura dati uguale
memoria di nuovo senza copiare possiamo
grande vantaggio da questo e come facciamo noi
fai così bene , usiamo l’intero concetto di
le funzioni monotone e il fatto
che usiamo i contatori per legare tutti i nostri
consumo perché sono solo byte
flussi non sono flussi di messaggi come
per quanto la maggior parte dei componenti del sistema
è preoccupato che possa solo lavorarci su
bello e semplice e così consuma fino a
quei punti possiamo replicare i dati
alle macchine statali ma loro no
necessariamente un consumo, ma il consumo
si basa sulla posizione di commit che è
trasmesso dal più tardi e non da dove
non dobbiamo inviare altro
di nuovo ora come fa questo denaro
Matar per Bochy bene se ho tagliato un pezzo
di lavoro che deve essere fatto ed è
prenderà una unità di tempo così dice
100% di tempo per fare qualcosa se io
può fare due cose nella stessa operazione
come due cose giuste la scrivania in
Operazione CIO giusta due cose al
rete nella sim invia / ricevi due
invia le cose dalla rete nella sim
di riso omelette che costano dove ciascuno di
loro hanno solo preso il 50% del costo se
lo guardi da un articolo per elemento
prospettiva guarda come il recupero
curva in questo confronto davvero
rapidamente la vittoria più grande che si ottiene sta andando
da uno a due ma inizi a partire
quattro specie di sei anni 1000 volta
raggiungere i dieci hai la maggior parte del
coppia indietro basata su bocce che non hai
per rovinare migliaia di cose per ottenere il
benefici che ottieni molto bene
rapidamente, ma se si progetta in modo tale che tu
puoi mettere le cose nei lotti che ottieni
enormi vantaggi in termini di accodamento di efficienza
La teoria è un fatto qui perché
il tempo di servizio non è Amma cerca di
incrociamo quelle cose che diventiamo molto più basse
latenza molto maggiore velocità e noi
può applicare questo il sacco di cose, quindi il nostro
le chiamate di sistema o i viaggi di andata e ritorno della rete sono
un disco guida calcoli costosi
pensare a tutto il primo e applicarlo
e queste sono le cose belle quando tu
ripreso alla semplicità di esso
è un flusso di byte e siamo d’ accordo
l’indice piuttosto indice di messaggio che
diventa facile trattare con ciò che altro
caratteristiche interessanti sono state aggiunte
questo in modo particolare i timer è un
interesse in uno di come affrontare questo
in molti sistemi diversi con questi
lo stato deterministico fa funzionare tutto
che entra nel mute colpisce il sistema
deve venire come un messaggio che non puoi leggere
l’orologio non puoi andare alla scrivania per leggere
qualsiasi cosa deve venire in questo modo di essere
deterministico per cui le persone tendono a farlo
trattare con il tempo è il loro tipo di impulso in
questi sistemi se vuoi davvero bassi
granularità di tempo che è un sacco di
messaggi è un grande registro come si ottiene a
esegui doc possiamo fare altre cose dentro
lì ma così abbiamo deciso di affrontare questo
a testa alta e una delle cose che siamo in grado
per dimostrare in alto i lavori di replica
siamo stati in grado di avvolgere come
ha avuto la possibilità di programmare i timer
il sistema stesso e perché il
sequenziatori su un ciclo di lavoro occupato che può
lavorare a granularità molto bassa fino a
nanosecondi se necessario e da qui
abbiamo deciso di offrire una semplice API
dove se vuoi programmare un timer
per esempio, inserisci un ordine in un sistema
lo sai che se non è molto entro un
dato il periodo di tempo deve essere cancellato
quindi possiamo solo dire al cluster di
pianificare un timer e forniamo a
ID di correlazione per quel timer è giusto
un identificatore opaco per questo e a
termine entro cui dovrebbe scadere il timer
scadono quindi potrebbe essere solo basato su
l’ ora attuale che attualmente abbiamo
nel cluster poi quando quel timer
Scade , richiamerà con un orario di attesa
evento e da lì non abbiamo bisogno di
gestire il tempo all’interno del cluster che abbiamo
una bella implementazione del timer ruota noi
può memorizzare molte di queste cose molto
in modo efficiente e li elabora molto
includendo efficientemente cancellazione e
perché la maggior parte dei timer sono cancellati prima
hanno sempre scadenza quindi deve esserci un
ordina una bella implementazione efficiente
quindi abbiamo offerto un risultato davvero interessante
uno è la complessità che si ottiene con la schiena
pressione e come si lavora con il lavoro così
se sei in un sistema e hai ottenuto un
piccoli clienti di quelli che hai fatto in e
stai per passare il si a fare
qualcosa che si prende i dati di un input e
si va a inviare verso l’altro lato ciò
se l’ altro lato non è pronto ad affrontare
con esso sai che ho bloccato con questo
rivenditore, quindi ho letto i dati da una presa
e poi devo scriverlo a un altro
calcio da scrivere sul disco ma è troppo
occupato cosa devo fare lo comincio
da qualche parte lo metto in un temporaneo
variabile lo copio diventa abbastanza a
cosa difficile quindi vogliamo guardare
questo è un problema di prima classe, quindi è così
un esempio di codice reale di una Honda
all’interno del sistema che si occupa del nostro
ingresso di traffico quindi sto mettendo il
tutto sullo schermo perché questo
lo è e si adatta in realtà a uno
Scivola quindi ho un messaggio di sessione
entrando in un sistema deciderò io
cosa farò con questo così prima
cosa voglio monitorare è ho un
sessione registrata contro solo alcuni
falso Teatro di Dio bene se il
le sessioni sono già state chiuse o è
solo un falso
Posso tornare fuori da questo con a
diverso con un determinato stato e il
lo stato qui è un’azione per continuare e
la nostra azione continua significa che hai
consumato questi dati continuano l’elaborazione
su di esso ma non fare nulla con esso a
quella fase, se non è questo il caso è
in realtà qualcosa che hai così
è una vera sessione valida, controlliamola
ora se è aperto e se è aperto lo sono
andando ad aggiungerlo al log e
a seconda del log potrebbe ricorrere
pressione ma potrebbe anche riuscire se questo
riesce in questo caso andiamo in
blocco e aggiorneremo il
attività di quel cliente nello stesso modo in cui noi
lo duri e potremo tornare da
questo con l’ operazione continua di nuovo
ora l’ultima sezione è abbastanza
semplice come così se non ho saltato
esso e non hanno elaborato che
non sono stato in grado di fare con loro così io
voglio questo messaggio teheran restituiamo un
abortire e che fissa l’arrivo
struttura dati che non è necessario
memorizzarlo temporaneamente da qualsiasi altra parte
lì e la prossima volta che entriamo in noi
può semplicemente consumarlo di nuovo senza
richiedere qualsiasi stato temporaneo così giusto
pensando ai flussi attraverso a
sistema che non dovresti avere tutto
questi stati extra trattano ora cosa
su log e snapshot abbiamo bisogno di a
file system distribuito come faremo
registra i registri nel tempo se ne hai uno
sistema come questo hai bisogno di colpi di testo
di tanto in tanto altrimenti si avrebbe dovuto
riprodurre i registri dall’inizio di
tempo così con l’apertura di un file e tu
scrivere tutti questi dati su disco su un telefono
e all’interno del file come faccio a ottenere che a
un’altra nota come la leggo da remoto
come noi finiamo con hai bisogno di a
file system distribuito ci piace il
registrazione di quei flussi solo per essere un
flusso di messaggi e li scriviamo
giù a quel flusso e che può quindi essere
leggi da remoto, quindi entriamo efficacemente
la possibilità di avere un file distribuito
sistema che è abbastanza veloce ora quanto velocemente
è piuttosto veloce
Aaron può facilmente raggiungere una rete di 10 gig e max
se possiedi un SSD abbastanza veloce possiamo farlo funzionare
fino a circa 2 gigabyte ora fai clic su a
bit 2 gigabyte al secondo noi e replay
di questi
e flussi, quindi è abbastanza simile
bello possiamo anche elaborare questi flussi
di nuovo questo è il loro ritorno a
applicando alcuni principi funzionali noi
può avere più servizi che si occupano di
gli stessi flussi così abbiamo le nostre chiavi
qui abbiamo i nostri vari servizi
consumando questo perché non solo avere
più servizi che scappano uguali
la cosa in effetti è sempre uguale
infrastruttura quindi, ad esempio, ho
qualcosa che ordina che marcia se io
vuoi fare rischi allo stesso tempo e se
Voglio fare la sorveglianza del mercato tutto
queste cose possono scappare completamente
in parallelo e praticamente senza costi aggiuntivi
così gentile di una lista l’ultimo po ‘di
niño pan qui dentro abbiamo il byte
buffer e abbiamo buffer di byte di mappa
e trascinato dal buffer immagino che alcuni
le persone possono o non possono avere familiarità con
questi quindi ho diretto il buffer di byte è uno
quello non è gestito dalla spazzatura
collezionista sull’heap di Java è fuori dall’heap
di solito è assegnato attraverso i Mi piace
di Moloch così sotto e possiamo
usalo per inviare dati alla rete o
su disco abbiamo bisogno di quelli perché non possiamo
usa normali strutture dati orribili per
quello perché potrebbero essere spostati dal
garbage collector come siamo in realtà
usandoli quindi dobbiamo usarli
strutture di heap abbiamo anche una mappa di memoria
i file e la memoria dei nostri file sono davvero
bella caratteristica ma ne hanno alcuni
roba aggiuntiva in modo che io possa forzare a
memory map file to disk Posso farne un po ‘
altre cose con esso ho menzionato il
inizia alcune delle persone che hanno lavorato
alcuni di questi algoritmi di consenso uno di
quella gente è Barbara Liskov che ha fatto un
Molto del bel lavoro su Beast su
la replica della maggior parte delle persone non è una parola
che lei ha fatto che sono più familiari
con il suo contributo ai solidi principi
incluso il principio di sostituzione di Liskov
così sotto un principio di sostituzione di Liskov
Dovrei essere in grado di se ho una classe
sottoclassi un altro che dovrei essere in grado
per sostituire qualsiasi sottoclasse per la base
classe perché dovrebbe comportarsi esattamente
nel modo giusto ora queste due classi uno
di loro sottoclasse l’ altro che lo farebbe
essere il modo giusto per farlo così
dovrebbe essere lato uno dove un byte
il buffer arriverà in I’m not by buffer
Dovrei avere accanto a due
se fossi in piedi da un buffer dovrei rientrare
un buffer di byte diretto chi è per il lato uno
bene così molte persone non si sentirebbero
orientato agli oggetti 101 presso la postazione universitaria
per lato a cui si pensa
davvero implementato in realtà
implementato su uno così le persone che
dacci questo avrebbe campo oggetto
orientato 101 su qualsiasi computer di base
corso di scienze li hanno messi male
modo in giro e questo si rompe
andiamo principio di sostituzione quindi sono
quasi alla volta ora ho visto rapidamente
in chiusura dove siamo ciò che è il
roadmap abbiamo un’implementazione funzionante
di questo stiamo finendo un po ‘ di
le caratteristiche interessanti sono sul cluster
recuperare dove un nodo lascia il cluster
e torna di nuovo ed è caduto
dietro lo stato sembra abbastanza
interessante mi ricordo la prima volta
parlato da lì su ho usato questo
t-shirt come una delle diapositive di là no
perché è stata una cosa così bella
lavorare e penso che le cose del cluster
che stiamo attualmente lavorando ora è
un po ‘altrettanto bello come alcuni dei
implementazione di base perché siamo
trovando se possiamo fare molto queste cose
efficiente e abbastanza divertente
indossare e tutto ciò che dirò grazie
molto e penso di essere alla volta
tu

Please follow and like us: