
Lo voglio
Sono con me la MS e parlerò
sul clustering e vai così come a
testa a testa che faro ‘un po’ di
come materiale demo dal vivo che è probabilmente
andare a Allah catastrofico fallire e se
quello che possiamo tutti ridono di me
Sono assolutamente fantastico con così poco
un po ‘su di me in realt molto veloce chi
qui usi vanno in qualche modo, so che lo fai
tutto bene qualcuno che ha scritto qualcosa
per divertimento che non ha alzato la mano
va bene un po ‘di esperienza
qualcuno in realtà è venuto per andare a durare
anno in mezzo alla folla, ti conosco ragazzi
non è giusto, ok ?
in realtà vieni a vedere il mio discorso l’anno scorso
andare questo non è lo stesso parlare quindi non farlo
preoccupati non sono come lo scellino allo stesso modo
stessa roba comunque un pochino
appassionato, in realtà, purtroppo non scrivo
un sacco di codice più me stesso che tu
sapere è solo quello che è, credo
a volte nella vita e nella carriera qualunque io
portare l’infrastruttura e la piattaforma
team di media ass e sarei negligente
dire di non dire che stiamo assumendo perché
stiamo assumendo quindi se sei interessato a
questo genere di cose viene a parlarmi
dopo va bene così in fretta perché andare
non è un passo che non sto andando a
in realtà ti passo usando andare in effetti io
penso che dirò alcune cose
potrebbe farti pensare che andare non va bene
che non è assolutamente vero, andare è fantastico
ma come le cose di base veramente veloci
che sono contento che nessuno di voi sia venuto
il mio discorso l’ anno scorso perché questo è
letteralmente la stessa diapositiva quasi è
facile da costruire servizi come è solo
veramente veloce per costruire micro servizi
dal momento che è la parola d’ordine che ha un
grande biblioteca standard se vuoi
costruire qualcosa di veramente da zero
hai praticamente tutto ciò che
è necessario farlo fuori dal linguaggio e se
non vuoi costruire qualcosa da
Completamente zero ci sono un sacco di e un
comunità in rapida crescita che ha
una tonnellata di librerie e una tonnellata di
utilità che alcuni di un paio di
di cui parleremo presto ma lo sapete
argomento del giorno, se ti piace finestra mobile che
cose e vai e c’è un sacco di cose
altri fantastici esempi là fuori
costruita in attrezzature è anche sorprendente, infatti,
Penso che questo sia uno dei posti in cui
In realtà, Co è davvero eccellente per gli altri
lingue e strumenti come Go fum
quindi la formattazione integrata di formattazione
roba che esiste dentro ciò che fa
è possibile che tu non abbia mai un
argomento sul fatto o meno il tutore
va alla riga successiva o se no
c’è uno spazio tra la funzione
nome e il parens aperto come sono davvero
felice di non aver mai avuto il
argomento mai più
vai alle prove che conosci un pacco
che in pratica ha cotto nei test e
rendi davvero facile crearne uno tuo
se sei a conoscenza di unit test o
test funzionali o qualsiasi cosa vada
che in pratica dice che questo codice sembra
sospettoso che tu possa farlo dovresti
rendilo migliore che non sia davvero un bene
descrizione dovresti andare a cercarlo se
sei interessante andare e poi piace
il correttore della condizione di gara di gara che
è stato abbastanza utile a volte per me
qualcosa che vedrai un paio di volte in
i demo che farò sperabilmente
lavorare in un secondo sono i tempi di compilazione
sono veramente veloci , davvero
come più di un linguaggio di scripting quando
si tratta solo di poterti fare
conosci il controllo vedi freccia su entra e prova
molto veloce, quindi è super viziato e
mi sembra produttivo non posso
quantificarlo in qualsiasi modo significativo ma
Mi piace perché io ma il codice che io
ho scritto per mettere insieme questa cosa, no
penso che mi ci sia voluto più di sei
ore comunque
bello quindi perché parlare di clustering andare
ben clustering non è davvero batterie
incluso
in giro e quando dico che le batterie includono I
significa che ce ne sono molti altri
lingue che hanno cose che sono
molto strettamente legato alla lingua o
strettamente affiliato con il linguaggio
sono come il meccanismo preferito per
raggruppando così cose come gosh akka
cluster o ylang OTP come quas sono io
Immagino come cose del genere come andare
non ha davvero di fatto quello che sono
consapevole di e ci sono un sacco di più recenti
librerie ma nessuna di queste è veramente
maturo da quello che ho visto così
Penso che l’ alveare e il circuito siano a
coppia che ti viene in mente e molto altro ancora
spesso che non servizi che sono fuori
c’è un tipo di rotolo che lo tira da solo
e penso che un buon esempio di rolling
te stesso e poi doverlo rotolare
ancora un paio di volte come capisci
stai ponendo lo spazio dei problemi meglio
stato come in Flex DB che ha dovuto
in realtà passa e sai ricostruire
un gruppo di loro ne stanno raggruppando alcuni
volte per buone ragioni Quindi quello che sto
è come camminare per voi ragazzi
un modo per costruire uno stato cluster
servizio ci sono molti modi per farlo
questo non è il modo perfetto è giusto
un modo in cui ho solo tanto tempo per
in realtà mi piace dimostrare una coppia
diversi strumenti così sai che stai per
arrivare a vedere quegli strumenti in azione e
si, va bene, fammi solo un falso
scenario per la cosa che siamo
costruzione um diciamo diciamo che sei un
attività che ha come più dati
centri di ciascuno di quei data center è
come distribuito in diverse parti di
il mondo così ipoteticamente come Chicago
Hong Kong Amsterdam Ho scelto questi tre
in particolare perché c’è
ovunque tra 180 260 millisecondi di
latenza tra ciascuno di essi che significa
questi eventi accadono quando accadono
contemporaneamente non è banale da dire
l’altro centro dati che accadono
e certamente non puoi farlo in un modo
che dice
aspetta che tu non possa fare nient’altro fino a che io
ti dico e quindi quello che vogliamo fare è noi
voglio costruire un servizio che conta
quegli eventi questo in realtà non è troppo
dissimile da ciò che abbiamo a medio
F abbiamo diverse migliaia di server
abbiamo milioni di eventi al secondo noi
abbiamo nove data center che abbiamo conosciuto
tonnellate di concorrenza tonnellate di diverso
tipi di eventi ed è davvero
importante per noi essere in grado di gestire
quegli eventi con uno specifico limitato
budget latenza e, se ci manca che
bilancio che stiamo perdendo
conosci i soldi potenziali quindi
i vincoli che abbiamo qui è quello
Il conteggio dovrebbe essere veloce, non possiamo
effettivamente permettersi di attraversare l’oceano ogni
non possiamo permetterci di aspettare
trasferisci avanti e indietro ogni volta
l’evento accade certamente e certamente
non potremmo farlo sincrono e contare
dovrebbe essere corretto, quindi dovremmo provare a
rendere possibile non perdere eventi
per quanto siano efficaci
incrementato su così per quei ragazzi che
è familiare con i teoremi del gatto
iniziando a sembrare un po ‘come un
Praticamente il sistema AP mi serve ho bisogno
le mie operazioni si verificano e sono disponibili
spesso nello stato di un potenziale
partizione cool, quindi iniziamo
proprio come il nostro bedrock sto per fare a
servizio di base davvero semplice, quindi lo faremo
iniziare con un nodo e un numero intero atomico
niente di carino, quindi quei due piccoli
linee di arricciatura e ho fatto scrivere il codice
Dimostrare in un secondo ma quello è
fondamentalmente quello che ti aspetterai
giusto è se prima faccio l’incremento
se lo faccio trovo io ottenere zero dopo ho
ottenere uno yay fresco quindi questo è il
codice è praticamente esattamente quello che io
ho appena detto che c’è un contatore con un
intero se eseguo un incremento su di esso
incrementa il contatore se conto allora
mi dice che valore hanno i contatori
quindi lo farò nel mio browser
e spero che non diventi fico, lo sono
incrementandolo di uno e incrementato
contro a uno wow questo sta funzionando così
beh, ok , mi stanno facendo crescere tre
quattro o cinque sì okay
chiudi quel fantastico tutto bene così
è stato davvero carino
ha funzionato è sempre bello andare
un inizio con le demo che
potrebbe bloccarsi e bruciare completamente
Oh Microsoft Area che riporta come Excel
andare in crash e bruciare così bene così è
cool abbiamo una nota in un centro dati
non particolarmente utile hanno sicuramente
non soddisfatto i bisogni dell’ipotetico
situazione che ho sollevato che è
molti data center molti eventi
succede distribuito quindi il prossimo passo è quello di
distribuiamo detto servizio, così siamo
ci vorrà la stessa cosa esatta che noi
appena costruito lo metteremo in diversi
data center e quindi stiamo andando a
instradare quelle richieste di incremento a
nodo più vicino e quindi andiamo a farlo
che reale veloce vediamo tutto a posto io sono
certo alcuni di voi ragazzi nella parte posteriore non possono
effettivamente vedere cosa sta succedendo
andare a correre ogni volta che lo faccio
Sto compilando quindi è stato abbastanza veloce
tasso veloce va bene vai a porta uguale
4.000 per andare a correre, il porto equivale a 4.000
tre bene, quindi ho tre tre
nodi e ora li aumenterò
fantastico funziona ancora questo è il migliore
giorno mai bello quindi ho fatto solo sette anni
incrementare le richieste su quel primo nodo oh
non puoi vederlo puoi
dannazione, tieni duro sistemiamo questa magia Oh
cos’è questo
questo è Excel ragazzi amo Excel va bene così
ecco il mio secondo nodo Oh No see I got
due come dodici qui ma ora quando colpisco
Aggiorna su questo è solo due hmm
Va bene solo due cinque, sono
contando che stanno contando è carino
a proposito, se io fossi come
in realtà una persona sincera vorrei
metterebbe ognuna di queste in parti
diverse parti del mondo ma perché
Sono in conferenza Wi-Fi, lo faremo
fai sul mio portatile e fai finta così bene
quindi ho appena fatto un sacco di incremento
chiede di farli andare via a
mazzo delle richieste di incremento che sono
diverso su ogni nodo ed è davvero
ovvio perché non stiamo replicando
tutto quello che ho fatto è stato prendere quel bancone
e come distribuirlo tre volte così bene
ci stai annoiando, lo so in pratica
per ottenere effettivamente questo insieme
cosa al lavoro dobbiamo contrastare per parlare
a vicenda che significa che abbiamo bisogno del
nodi per conoscersi l’un l’altro
il che significa che dobbiamo risolvere per
appartenenza al cluster quindi penso di essere io
menzionato all’inizio che
questo è un servizio di stato proprio questo è
quando dico statico intendo come se tu
stavano implementando un database che avresti
portare lo Stato a livello locale Una possibilità sarebbe
essere ovviamente piace prendere qualcosa come
una Cassandra
e lascia che faccia tutto il lavoro per te
quello è barare che non saresti qui se
tutto quello che ho detto è stato usare Cassandra con go
e poi, come cinque minuti dopo, è
fatto evviva bye così che cosa stiamo andando fare
useremo la lista dei membri e
la lista dei membri è una libreria di go che è stata costruita
da Hoshi Corp che, o credo, gestito
supervisionare ancora costruito sicuro da hashing Corp
che è una compagnia fantastica che fa
davvero un buon lavoro
hanno costruito vagabondo in console e
senza cappello e terraforme e ogni sorta di
la grande magia DevOps cosparge di polvere
strumenti fondamentalmente quello che fa è
gestisce l’ appartenenza al cluster dei costi è
basato sulla nuotata che è uno stile di pettegolezzo
protocollo di adesione parlerò più a
un po ‘di più a riguardo in un secondo
ha funzionato nel rilevamento dei guasti dei membri
che è davvero importante, proprio perché
se gestisci un membro un elenco di
membri che vuoi assicurarti
avere una lista accurata di chi dovresti
essere parlando e questa biblioteca è
effettivamente in uso da simile docker della console
Lib network in realtà più se vuoi
un po ‘di divertimento come andare a github e fare il
tutta la ricerca di codice cerca di cancellarti
Elenco dei membri di Slash Corp e ci sono
Non conosco quaranta pagine di risultati di
la gente lo sta effettivamente implementando, quindi nuota
è un’infezione costante settimanale scalabile
protocollo di appartenenza al gruppo dei processi di stile
che è molto più di quattro lettere it
fondamentalmente ha due obiettivi che è quello di
mantenere un elenco di appartenenza locale di non
processi difettosi locali come locali al
nodo e quindi rilevare e alla fine
informare gli altri di errori di processo e così via
meccanicamente
il modo in cui funziona è basato sul gossip
e fondamentalmente ciò significa che è tipicamente
queste interazioni avvengono da nodo a nodo
come un nodo a un altro nodo e così via
quando un nodo si unisce a un cluster lo fa a
sincronizzazione di stato completo con un membro esistente
e inizia a spettegolare la sua esistenza a
tutti gli altri membri nel cluster
pettegolezzi su quella lista interna dei membri
lo stato in realtà accade su un normale
intervallo e contro un numero casuale
di membri selezionati casualmente così
fondamentalmente ciò che significa è su di esso come
ogni tre secondi ogni cinque secondi
o così farò pettegolezzi per piacere
altre tre persone hey Sono qui, ecco
il mio stato
c’è anche questa cosa chiamata sonde
e sonde o fondamentalmente hey sei qui
e c’è un’aspettativa che c’è
per te dire che sono qui sono vivo e
quindi se un nodo non agisce un messaggio sonda
è contrassegnato come sospetto e causa di
gossip ogni volta che segni una nota come
sospettoso in realtà lo dici al resto
il cluster ben dispiaciuto pettegolezzi al
resto del cluster
hey questa nota sospetta e poi se
è il sig. nevicato sospettoso no no
disputa sospetti dopo un certo tempo
è segnato come morto, che è anche
dubiti del pettegolezzo e finisci per ottenere questo
tipo di bello alla fine coerente come
insieme coerente settimanale di membri che è
gestito attraverso l’intero nodo in modo che il
l’intero nodo alla fine sa che a
esiste una serie particolare di membri e
ogni tanto una sincronizzazione completa dello stato
in realtà succede tra due
diversi membri casuali e dipendenti
su quanto è grande il tuo cluster
è davvero okay e bene nel mio lo sai
un ipotetico gruppo di tre che è
in esecuzione sul mio portatile ma se il tuo cluster
è decine di migliaia di server voi
non posso davvero permettermi di fare tutto questo
tempo a meno che tu non abbia una larghezza di banda infinita
che non è una cosa la velocità della luce
è come troppo lento per quello e così il
compromessi tra larghezza di banda e
converge il tempo qui sono configurabili
Giusto puoi dire che ne voglio ancora
larghezza di banda da utilizzare con questo processo e
converge il tempo attraverso la volontà del cluster
essere meno o viceversa
cool così i tuoi nodi diventano cluster
stiamo usando la lista dei membri è in realtà
relativamente semplice questo è il
lo snippet di codice dietro di esso è impostato in pratica
config e quindi crea il membro
elenca l’istanza e poi un altro
nodo elenco membri se sai che ci sono
altri è più o meno così
punto allora il cluster fa cose
su se stesso da solo, quindi lascia che ti mostri
il tutto fa le cose da solo
abbiamo finito con quello ultimo membro esempio
elenco tutto bene
Va bene, quindi quello che sto facendo adesso è
Sto girando su questo è il primo nodo
questo è il nodo seme, quindi ho una nota
qui chi è fondamentalmente il primo nodo in
un cluster particolare che ho intenzione di girare
su un secondo nodo qui nel mezzo e
In realtà realizzerò un po ‘questo
più grande e prova a spiegarlo cos’è
succedendo così qui abbiamo non so
se riesci a vedere questo figo, allora?
è successo
ricorda il membro iscritto e ora noi
avere qualche sincronizzazione in modo che sia completa
stato di sincronizzazione di cui ho parlato un secondo
fa si chiama in realtà una sincronizzazione push-pull
quindi lascia che ti mostri molto velocemente questo
è come appare il cluster in questo momento
Ho due nodi in questo ho questo questo
nodo che era bene il secondo nodo
perché le mappe non sono ordinate in go o
le liste sono in ordine e andiamo a indovinare Lysa’s
Dovrei dire e poi qui abbiamo il
il primo primo nodo va bene così andrò
tira su un secondo o scusa il terzo
uno
ricorda la lista va bene e noi abbiamo
tre che è stato piuttosto veloce che è
a causa del meccanismo gosset, quindi lascia
lasciami davvero tornare indietro e prendere questo
uno fuori l’ ho appena ucciso
quindi se guardi qui dirà
sospetto che il sospetto abbia fallito e nessuna ascia
ricevute quindi questo ha fallito non è un caso
ha ricevuto che continuerà a fare
quello fino a questo punto dove dice
marcando quel nodo ha fallito perché il
il timeout su di esso in realtà è sospetto
stato raggiunto così se torniamo qui e
premere Aggiorna ora si torna a due
nodi di nuovo relativamente diretti I
possibile configurare le impostazioni che questo
accadrà l’ intera procedura di handshake o
il processo di gossip che dovrei dire accadrà
su base regolare e posso o fare
converge più lentamente o più velocemente in questo
caso perché stiamo facendo un live
dimostrazione che ho davvero alzato
il tempo in modo che io possa mostrarti le cose
come stanno accadendo
e si, fantastico
fantastico così ho questo contatore che sono
ancora disconnesso cosa siamo ancora
facendo qui perché non hai risolto il
problema andremo bene
quindi ho ancora bisogno di questi contatori per
in realtà sai interagire con ciascuno
altro in qualche modo così come sono
andando a risolvere per questo problema e
di nuovo abbiamo menzionato all’inizio
questo è un sistema come AP che userò
CRT T è principalmente perché penso a CRD T’s
sono fantastici e super cool e
come la migliore invenzione di sempre e lo farò
dì molto rapidamente, tenterò
per spiegarlo ne ho effettivamente alcuni
disegni che sono andando tentativo di
spiegarlo, lo consiglierei davvero se
sei in sistemi distribuiti o
in realtà anche se non sei letto o
guarda il contenuto di Scott Michael John su
questo specialmente riguardo all’ultimo parla a
molte cose su T robuste perché lo sono
in realtà è piuttosto bello quindi cos’è ERD T
sta per è un conflitto senza
tipo di dati replicati questi sono dati
tipi che sono in genere come le cose
come contatori imposta mappe Registri delle bandiere
le operazioni all’interno di quei tipi hanno
essere commutativo associativo e oggetto
potente e perché come quelli sono
principi se credo che si chiami
implementare mi dispiace implementato attraverso
l’algebra semi-lattice si ottiene fondamentalmente
questa cosa in cui puoi item potentemente
come puoi praticamente unire tutto il
tempo giusto quindi l’effetto collaterale di quello è
non c’è un ordine o c’è ed è
tecnicamente parzialmente ordinato, ma
i tipi di dati qui non sono effettivamente
avere o supportare qualcuno di ordine e
per questo in quasi ogni forse
ogni scenario di fallimento tutto ciò che devi
fai in modo che questi contatori si uniscano di nuovo
è solo per unire di nuovo come quello
letteralmente se hai due nodi
non può comunicare e poi finalmente loro
può semplicemente farli unire di nuovo se un nodo
muore e torna indietro ed è fuori sincrono
basta che si uniscano di nuovo come c’è
letteralmente ogni scenario che hai
se hai diverse divergenze
Gli stati li hanno semplicemente uniti e poi li ha
volere
Vieni a venire a convergenza costante
stato o piuttosto stato convergente quindi CRT
È per via di quello che stanno facendo
la natura alla fine coerente non c’è
unica fonte di verità, questo funziona davvero
bene per il nostro scenario inventato quindi sì
il più fondamentale di questi quello che sono
effettivamente implementerò si chiama G
contrastarlo è così abilmente chiamato così
modo perché è un contatore solo crescere
ed è un contatore che ha letteralmente
solo due operazioni incrementano e si uniscono
giusto così solo salendo non arriva mai
adesso se ne vuoi davvero uno
può scendere anche quello che si chiama PN
contrastare è implementato in realtà
prendendo due di questi contatori si sale
uno va giù sommarli insieme
problema risolto in modo che il modo in cui G
i contatori funzionano è ogni nodo lo gestisce
conta proprio i nodi quindi comunichi
il loro contro stato con altri nodi
e poi quando si fondono prendono il
conteggio massimo per ciascun valore dei nodi, quindi il valore
valore stesso dei contatori G di somma di
conta tutto il nodo quindi lasciami solo dare
sei un esempio qui abbiamo tre
tre attori Alice Bob e Claire Alice
non fa un incremento di un Bob
incremento di 1 e poi di Claire in alcuni
il punto non aumenta di 6, quindi Bob
invia il suo stato a Claire e così a Claire
qui a questo punto ha conoscenza di Bob
Stato prima di questo incremento di 3 e
conoscenza del proprio stato di Claire perché
Claire, sai, ha fatto azione e così via
questo punto Claire lo sa
successo e questo è successo e conta
entrambe queste cose sono proprio così in lei
deposito che conosce sia Bob che Claire
e può sommarli insieme al passaggio successivo 7
qui abbiamo un altro sink che succede
quindi Bob ha effettivamente condiviso lo stato
oltre ad Alice e così ora Alice lo sa
che Bob è a 4 giusto perché 1 più 3
è 4 fantastico
e Alice stessa ha fatto questo
incrementa uno e hai questo
non è 4 che è 5 sì fantastico questi
contatori sono sicuramente divergenti ok
bello così ora abbiamo così questo altro
salta qui e spero che questa mappa sia
a destra sembra essere il fatto che è piuttosto fresco
facciamo solo finta che non sia successo
okay, Alice adesso la mandera ‘
stato che lei comprende il sistema
essere ciò che lei sa e cosa
Bob sa o meglio cosa ha detto Bob
lei fino a questo punto così lei sta andando
manda tutto ciò che è in declino e da allora
Claire ha comprensione di Bob e
ovviamente è il proprietario canonico di
I dati di Claire che hai Claire ora
comprensione vinto di Alice Bob per
giusto perché a questo punto quattro è
più grande di una destra, quindi dovremmo prendere
quel valore perché Bob è il canonico
proprietario di detto valore e quindi Claire così io
ha fatto di nuovo la matematica nella mia testa 1 più 4
più 6 fa uguale 11 così quel numero
c’è giusto questo è fondamentalmente
fondamentalmente G Conner è davvero tu
conosci due da quando i disegni sono
in realtà non è sufficiente e abbiamo bisogno di codice
questa è fondamentalmente l’implementazione di
così l’incremento qui dice che lo sai
ho il mio ID n che è identificatore che
rappresenta me e poi per tutti
incremento sto solo andando ad aumentare
il numero che possiedo per ottenere il conteggio
Ho intenzione di sommare tutti i numeri che
Io so e per fare l’unione che sto per fare
prendi il più grande di qualsiasi valore dato
non sono figo, quindi lascia che ti mostri questo
pratica
va bene, quindi non è aumentato
sul primo nodo quel numero è
aumentando e oh questo è troppo grande ora noi
è questo è in realtà un raw
vista della struttura dati sottostante così
mentre incremento questo ragazzo questo è il mio nodo
nome questo questo io qui sono davvero unico
e quindi mi piacciono gli ID URI per i nomi dei nodi
perché hanno un sacco di unicità per
loro e poi questi sette è il valore
che ho per il mio banco se faccio il
stessa operazione qui sul secondo nodo
non sarete sorpresi di tutti per
noti che non stanno affondando, ma ora
Ho un secondo identificativo con quello
UID di quel secondo nodo e questo è qui
il valore che corrisponde a destra quindi se vado
qui è completamente diverso
set di dati stessa cosa se lo eseguo
il terzo nodo questo ha senso è
iniziare a dare un senso venire
insieme benissimo abbiamo ancora un
problema che non abbiamo stato unito
eppure dovremmo probabilmente unire il
stato ed è quello che faremo ora
così la lista dei membri ha questa cosa che io
menzionato prima che è quel tipo di
completare lo scambio di stati con un altro
membro casuale chiamato
push / pull sync nel codice in realtà
fornisce anche agli sviluppatori un modo per
fuori di esso
e perché questo succede su TCP tu
hanno praticamente tutto ciò che puoi
inviare oltre il filo si può scegliere come
serializzarlo sul filo e come tu
voglio deserializzare dall’altra parte così
c’è un delegato ha fondamentalmente due
funzioni importanti per
questo punto è lo stato locale e si fondono
stato locale remoto stato che fondamentalmente
tipo di discarica lo stato di qualcuno che è
viene chiesto di fornire lo stato e fondersi
lo stato remoto fa il contrario
prende quella remota permanenza
e si fonde e che di nuovo quello
intervallo di quel trasferimento a pieno stato è
configurabile e quindi lo useremo
alla fine emergerà lo stato nel
sfondo quindi questo è ciò che il codice
sembra che sia esattamente quello che ho appena detto
Sono in un maresciallo che lo stato di quello
CR DT a JSON e poi dall’altra parte
Sto per istanziare un CR DT per
quel c68 esterno JSON che era giusto
inviato sul filo e poi sto andando
si fondono nel mio CR DT quindi facciamolo
molto veloce e questa è la demo che hai
tutti aspettavamo
va tutto bene
va bene così come puoi vedere ho menzionato
c’è un trasferimento di stato che succede
qui quindi questo è condividere uno stato di strada per
push / pull sync e la fusione non c’è
non proprio nessuno stato a questo punto se
vai e guarda i contenuti
c’è, è vuoto, non c’è niente
per parlare di
comunque se vado qui e passo avanti
nodo 2 vedi questo che uno è
alla fine andiamo a presentarsi qui
finalmente là è atterrato giusto e
è già qui perché è lì
l’abbiamo fatto è anche già qui perché
questa cosa è successo proprio così sto andando
solo tipo di continuare a fare questo un po ‘
un po ‘l’ ho fatto sul terzo nodo
dovrebbe arrivare tra i 5 ei 10 secondi
penso di aver detto sì, è vero
evento che mostra solo un po ‘di continuare a fare
questo un po ‘quindi è qui non proprio
qui ancora
oh quello che è successo veloce devo avere
catturato in mezzo oh oh, lo è
voi ragazzi capite che dovrebbe farlo di nuovo
non tutti sono stanchi è come il secondo
parlando ultimo ultimo giorno raffreddare questo è come
Voglio dire, per me è piuttosto bello
è piuttosto fresco che, come si sa questo
il trasferimento di stato avviene in un’unione
succede il CR DD si sa di nuovo se il
il trasferimento di stato fallisce tutto ciò che devi fare
è farlo di nuovo come farlo di nuovo
e poi succederà , lasciami fare
effettivamente giocare con questo un po ‘che io sono
ucciderò davvero il secondo nodo e
è vedere che è morto che in realtà non puoi
raggiungilo se vado qui al primo
nodo bene è ancora lì
giusto i dati dal secondo nodo è
effettivamente ancora lì e te lo prometto
oh scusa non quel nodo facciamolo solo per
dimostrarti che l’ ammasso è sparito
le seconde note sono passate alle seconde note
andato abbiamo solo due nodi qui ma il
i dati dal secondo nodo sono ancora lì
quindi se lo faccio girare di nuovo, si ricongiungerà
il cluster che ho intenzione di incrementare su di esso
e
alla fine finalmente ci sei tu
vedere una quarta destra, così perché io assegno
quella nuova identità unica che hai qid
Ora ho un quarto elemento qui così
una bella parte qui è che la quantità di
stato che si può potenzialmente perdere è
fondamentalmente una funzione di quanto fatto di recente
l’ultimo captian trasferimento di stato dritto
capita bene e così nei casi in cui tu
desideri molta correttezza puoi
accordare quella quantità di correttezza
lì sulla base di quanto spesso si desidera
fare una sorta di trasferimento di stato
ovviamente ce ne sono molti
interessanti alcune cose che puoi fare
su questo punto per garantire quello stato
il trasferimento avviene localmente in opposizione a
da remoto se ne hai più di diversi
data center e dire che il trasferimento può avvenire
tra voi conoscete i nodi negli stessi dati
centro che è più economico di andare oltre
il network
questo tipo di cose sono possibili ma
Non ho intenzione di passare attraverso di loro qui così
fantastico abbiamo raggiunto il successo
è proprio vero che ci ha preso
circa 10 secondi per quella prima sincronizzazione a
capita ma abbiamo elencato i membri di sincronizzazione
risolvere il problema per noi ci sono
ovviamente modi in cui è possibile sincronizzare più velocemente
un modo per affondare più velocemente che in realtà
sarebbe molto stupido per il nostro caso d’uso
di cui stiamo parlando ora è
trasmesso su ogni richiesta di incremento I
dire molto stupido perché abbiamo appena detto
che vogliamo incrementi di essere veloce e
vogliamo che la larghezza di banda sia la quantità di
larghezza di banda utilizzata per questa intera operazione
essere bassi quindi se trasmetto su tutti
richiesta di incremento singola che sto soffiando
attraverso quell’intera richiesta ma lasciamo
Io vado avanti e fallo così
posso vedere come funziona così ho avuto questo
funzione di stato broadcast qui che tu
sapere aggiunge un evento di trasmissione nel
in coda e poi dall’altra parte chiunque
chi riceve l’evento di trasmissione ottiene
questa funzione del messaggio di notifica è stata richiamata e
quindi possono fare la stessa cosa che noi
ha fatto precedentemente che istanzia il
CR DT unirlo e quindi ottenere l’unione
valore demo così veloce che ho questa linea di
codice è una routine di go che trasmette
lo stato
speriamo che funzioni di nuovo lo è
compilazione super veloce promessa questo è
non andare a parlare, va bene
quindi colpirò l’ incremento più volte
e dovresti vedere qui alcuni di questi
ricevere gli stati remoti di trasmissione effettivamente
se lo spaccio un sacco di volte vedrai
molti di quelli che vedi molti di quelli in a
alcuni dei nodi differenti, quindi di nuovo questo
è solo un modo un po ‘intelligente di
garantendo che il cluster converga
prima o poi ma di nuovo lo è
non necessariamente suggerito un meccanismo freddo
quindi cosa farei dopo, se lo fossi
in realtà costruendo questa cosa come a
il servizio è che vorrei testare la mia fonte
codice mentre su internet e
disponibile per per tutti voi ragazzi a
criticare direttamente e prendermi in giro
Twitter per non ha alcun test quindi
perché ho detto che va bene così tu
non posso vergognarmi anche se prenderò
completa la colpa per essere un cattivo sviluppatore
dopo le prove per quella cosa lo farei
probabilmente implementerà qualche vecchio sistema
a volte quando si fa un contatore
va su per sempre, probabilmente no
è utile così sai che lo farei anch’io
implementare più di un nodo per
datacenter di nuovo questo è solo il mio portatile
quindi è un dato molto piccolo ed economico
centro ma lo faremmo se ci tenessimo veramente
riguardo al fatto che si tratti di un sistema AP e di un essere
disponibili metteremmo molti di questi
cose in ogni centro dati locale e
consenti loro di sincronizzare
Vorrei anche eseguire e implementare Jepson
test per questo o qualche altra forma di
convalida della correttezza proprio così modellando
con TLA più o simile sarebbe
probabilmente implementerà anche un vero layer RPC
giusto, la lista dei membri è elegante
utile ma se volevo prestazioni migliori
controllo o autenticazione
controllo di posizione quindi non solo qualsiasi nodo
posso unirmi al mio cluster che vorrei
implementare il mio livello RPC lì e
poi come solo tipo di parte dell’ultima
insieme di estremamente importante da fare io
l’avrebbe eseguito come un nucleo unitario all’interno
finestra mobile in esecuzione all’interno di una macchina virtuale in AWS e
quindi vorrei cospargere la polvere magica di DevOps
su di esso e poi avrei raggiunto
microservice di punta che è quello che siamo
tutto qui per farlo, sì, ce n’è uno
da asporto non è poi così difficile
costruire servizi in cluster e andare di nuovo
elenco dei membri è il tuo amico CR DTS sono
anche il tuo amico, tutto questo codice è attivo
github si può giocare con essa e
ancora quella foto come farai domande
qualunque cosa e questo è tutto per me, quindi se tu
ragazzi hanno qualche domanda
dire che ancora una volta va bene
la domanda era: come gestisci l’errore?
tolleranza in un cluster o discreto
l’architettura ci sono molti modi per
fai quello e ci sono indovinate diverse
diverse definizioni di errore dell’attrezzo
tolleranza che vorrei sapessi essere in grado
prendere qui ma in questo caso lo sono
piggybacking completamente fuori dalla colpa
tolleranza o piuttosto manomissione
quell’elenco di membri ha e perché è un
questi sono sistemi molto debolmente coerenti
i vincoli che ho se volessi
per cercare di imporci di sapere più forte
maniglie avrei potuto fare altre cose
come forse provare a implementare una sorta di
un modello di dinamo in cui effettivamente ho
più controllo sulla quantità di modi
che un dato è un pezzo di dati
effettivamente inviato intorno alle risposte
porre eventuali altre domande su
Lista delle ONG o dei membri o DTE dei veggenti o giù di lì
lo stato credo che la domanda era come fare
riduci la replica per la quantità di
dichiari che sei effettivamente come l’importo
di dati così sei tu in particolare
parlando della realizzazione CR DT
o l’elenco dei membri di imitazione come il
dati che ci sta a cuore è replicante
il contatore ma elenco dei membri che
possibile condividendo lo stato del cluster
quale stai chiedendo al membro
lucerna è la lista dei membri effettivi che noi
capita di essere piggyback fuori dal
protocolli di lista membri per facilitare
trasporto dello stato nel CR DT così
ci sono molti altri modi in cui tu
potrei farlo bene, penso in realtà
quando all’inizio ho scritto questo discorso ero
andando a farlo prima e lista dei membri e
quindi costruisco il mio layer RPC che ha fatto
qualcosa che era più simile a una dinamo
dove potrei dire che sai fare il quorum
proprio dove canalizza verso il quorum
aspetta e poi fa una specie di a
commit a due o tre fasi per garantire che
tutti i diritti sono fatti ma io no
avere il tempo per che il il problema che ho
pensa con quello che stai dicendo qui
quella
la mia ipotesi è che ogni nodo abbia il
stato di ogni altro nodo nel CR DT
in caso e ciò è corretto
perché stiamo usando il membro oulous to do
questo funziona in un altro modo per farlo
sarebbe in realtà da costruire come alcuni
sorta di un anello o partizionamento o
sharding come qualunque cosa vuoi
da usare per strutturare il movimento del
dati e la limitazione dei dati a
solo gruppi rilevanti di nodi quindi uno di
i nostri sistemi di mass media in realtà te
know rende quantità enorme di questo
prende in prestito pesantemente dal concetto di nodo V
quella cassandra ha dove fondamentalmente tu
disporre di pool di dati classificati
dentro come un anello mod e quello
i dati sono effettivamente divisi e bloccati
un nodo specifico e il nodo scusate il
le dimensioni dei cluster non devono essere uguali
in tutti i data center che sono
efficacemente come un pezzo di dati è
replicato su un nodo particolare in a
grappolo d’altra data center nessuno di
questo è implementato qui, mi dispiace
grazie ragazzi
Sono con me la MS e parlerò
sul clustering e vai così come a
testa a testa che faro ‘un po’ di
come materiale demo dal vivo che è probabilmente
andare a Allah catastrofico fallire e se
quello che possiamo tutti ridono di me
Sono assolutamente fantastico con così poco
un po ‘su di me in realt molto veloce chi
qui usi vanno in qualche modo, so che lo fai
tutto bene qualcuno che ha scritto qualcosa
per divertimento che non ha alzato la mano
va bene un po ‘di esperienza
qualcuno in realtà è venuto per andare a durare
anno in mezzo alla folla, ti conosco ragazzi
non è giusto, ok ?
in realtà vieni a vedere il mio discorso l’anno scorso
andare questo non è lo stesso parlare quindi non farlo
preoccupati non sono come lo scellino allo stesso modo
stessa roba comunque un pochino
appassionato, in realtà, purtroppo non scrivo
un sacco di codice più me stesso che tu
sapere è solo quello che è, credo
a volte nella vita e nella carriera qualunque io
portare l’infrastruttura e la piattaforma
team di media ass e sarei negligente
dire di non dire che stiamo assumendo perché
stiamo assumendo quindi se sei interessato a
questo genere di cose viene a parlarmi
dopo va bene così in fretta perché andare
non è un passo che non sto andando a
in realtà ti passo usando andare in effetti io
penso che dirò alcune cose
potrebbe farti pensare che andare non va bene
che non è assolutamente vero, andare è fantastico
ma come le cose di base veramente veloci
che sono contento che nessuno di voi sia venuto
il mio discorso l’ anno scorso perché questo è
letteralmente la stessa diapositiva quasi è
facile da costruire servizi come è solo
veramente veloce per costruire micro servizi
dal momento che è la parola d’ordine che ha un
grande biblioteca standard se vuoi
costruire qualcosa di veramente da zero
hai praticamente tutto ciò che
è necessario farlo fuori dal linguaggio e se
non vuoi costruire qualcosa da
Completamente zero ci sono un sacco di e un
comunità in rapida crescita che ha
una tonnellata di librerie e una tonnellata di
utilità che alcuni di un paio di
di cui parleremo presto ma lo sapete
argomento del giorno, se ti piace finestra mobile che
cose e vai e c’è un sacco di cose
altri fantastici esempi là fuori
costruita in attrezzature è anche sorprendente, infatti,
Penso che questo sia uno dei posti in cui
In realtà, Co è davvero eccellente per gli altri
lingue e strumenti come Go fum
quindi la formattazione integrata di formattazione
roba che esiste dentro ciò che fa
è possibile che tu non abbia mai un
argomento sul fatto o meno il tutore
va alla riga successiva o se no
c’è uno spazio tra la funzione
nome e il parens aperto come sono davvero
felice di non aver mai avuto il
argomento mai più
vai alle prove che conosci un pacco
che in pratica ha cotto nei test e
rendi davvero facile crearne uno tuo
se sei a conoscenza di unit test o
test funzionali o qualsiasi cosa vada
che in pratica dice che questo codice sembra
sospettoso che tu possa farlo dovresti
rendilo migliore che non sia davvero un bene
descrizione dovresti andare a cercarlo se
sei interessante andare e poi piace
il correttore della condizione di gara di gara che
è stato abbastanza utile a volte per me
qualcosa che vedrai un paio di volte in
i demo che farò sperabilmente
lavorare in un secondo sono i tempi di compilazione
sono veramente veloci , davvero
come più di un linguaggio di scripting quando
si tratta solo di poterti fare
conosci il controllo vedi freccia su entra e prova
molto veloce, quindi è super viziato e
mi sembra produttivo non posso
quantificarlo in qualsiasi modo significativo ma
Mi piace perché io ma il codice che io
ho scritto per mettere insieme questa cosa, no
penso che mi ci sia voluto più di sei
ore comunque
bello quindi perché parlare di clustering andare
ben clustering non è davvero batterie
incluso
in giro e quando dico che le batterie includono I
significa che ce ne sono molti altri
lingue che hanno cose che sono
molto strettamente legato alla lingua o
strettamente affiliato con il linguaggio
sono come il meccanismo preferito per
raggruppando così cose come gosh akka
cluster o ylang OTP come quas sono io
Immagino come cose del genere come andare
non ha davvero di fatto quello che sono
consapevole di e ci sono un sacco di più recenti
librerie ma nessuna di queste è veramente
maturo da quello che ho visto così
Penso che l’ alveare e il circuito siano a
coppia che ti viene in mente e molto altro ancora
spesso che non servizi che sono fuori
c’è un tipo di rotolo che lo tira da solo
e penso che un buon esempio di rolling
te stesso e poi doverlo rotolare
ancora un paio di volte come capisci
stai ponendo lo spazio dei problemi meglio
stato come in Flex DB che ha dovuto
in realtà passa e sai ricostruire
un gruppo di loro ne stanno raggruppando alcuni
volte per buone ragioni Quindi quello che sto
è come camminare per voi ragazzi
un modo per costruire uno stato cluster
servizio ci sono molti modi per farlo
questo non è il modo perfetto è giusto
un modo in cui ho solo tanto tempo per
in realtà mi piace dimostrare una coppia
diversi strumenti così sai che stai per
arrivare a vedere quegli strumenti in azione e
si, va bene, fammi solo un falso
scenario per la cosa che siamo
costruzione um diciamo diciamo che sei un
attività che ha come più dati
centri di ciascuno di quei data center è
come distribuito in diverse parti di
il mondo così ipoteticamente come Chicago
Hong Kong Amsterdam Ho scelto questi tre
in particolare perché c’è
ovunque tra 180 260 millisecondi di
latenza tra ciascuno di essi che significa
questi eventi accadono quando accadono
contemporaneamente non è banale da dire
l’altro centro dati che accadono
e certamente non puoi farlo in un modo
che dice
aspetta che tu non possa fare nient’altro fino a che io
ti dico e quindi quello che vogliamo fare è noi
voglio costruire un servizio che conta
quegli eventi questo in realtà non è troppo
dissimile da ciò che abbiamo a medio
F abbiamo diverse migliaia di server
abbiamo milioni di eventi al secondo noi
abbiamo nove data center che abbiamo conosciuto
tonnellate di concorrenza tonnellate di diverso
tipi di eventi ed è davvero
importante per noi essere in grado di gestire
quegli eventi con uno specifico limitato
budget latenza e, se ci manca che
bilancio che stiamo perdendo
conosci i soldi potenziali quindi
i vincoli che abbiamo qui è quello
Il conteggio dovrebbe essere veloce, non possiamo
effettivamente permettersi di attraversare l’oceano ogni
non possiamo permetterci di aspettare
trasferisci avanti e indietro ogni volta
l’evento accade certamente e certamente
non potremmo farlo sincrono e contare
dovrebbe essere corretto, quindi dovremmo provare a
rendere possibile non perdere eventi
per quanto siano efficaci
incrementato su così per quei ragazzi che
è familiare con i teoremi del gatto
iniziando a sembrare un po ‘come un
Praticamente il sistema AP mi serve ho bisogno
le mie operazioni si verificano e sono disponibili
spesso nello stato di un potenziale
partizione cool, quindi iniziamo
proprio come il nostro bedrock sto per fare a
servizio di base davvero semplice, quindi lo faremo
iniziare con un nodo e un numero intero atomico
niente di carino, quindi quei due piccoli
linee di arricciatura e ho fatto scrivere il codice
Dimostrare in un secondo ma quello è
fondamentalmente quello che ti aspetterai
giusto è se prima faccio l’incremento
se lo faccio trovo io ottenere zero dopo ho
ottenere uno yay fresco quindi questo è il
codice è praticamente esattamente quello che io
ho appena detto che c’è un contatore con un
intero se eseguo un incremento su di esso
incrementa il contatore se conto allora
mi dice che valore hanno i contatori
quindi lo farò nel mio browser
e spero che non diventi fico, lo sono
incrementandolo di uno e incrementato
contro a uno wow questo sta funzionando così
beh, ok , mi stanno facendo crescere tre
quattro o cinque sì okay
chiudi quel fantastico tutto bene così
è stato davvero carino
ha funzionato è sempre bello andare
un inizio con le demo che
potrebbe bloccarsi e bruciare completamente
Oh Microsoft Area che riporta come Excel
andare in crash e bruciare così bene così è
cool abbiamo una nota in un centro dati
non particolarmente utile hanno sicuramente
non soddisfatto i bisogni dell’ipotetico
situazione che ho sollevato che è
molti data center molti eventi
succede distribuito quindi il prossimo passo è quello di
distribuiamo detto servizio, così siamo
ci vorrà la stessa cosa esatta che noi
appena costruito lo metteremo in diversi
data center e quindi stiamo andando a
instradare quelle richieste di incremento a
nodo più vicino e quindi andiamo a farlo
che reale veloce vediamo tutto a posto io sono
certo alcuni di voi ragazzi nella parte posteriore non possono
effettivamente vedere cosa sta succedendo
andare a correre ogni volta che lo faccio
Sto compilando quindi è stato abbastanza veloce
tasso veloce va bene vai a porta uguale
4.000 per andare a correre, il porto equivale a 4.000
tre bene, quindi ho tre tre
nodi e ora li aumenterò
fantastico funziona ancora questo è il migliore
giorno mai bello quindi ho fatto solo sette anni
incrementare le richieste su quel primo nodo oh
non puoi vederlo puoi
dannazione, tieni duro sistemiamo questa magia Oh
cos’è questo
questo è Excel ragazzi amo Excel va bene così
ecco il mio secondo nodo Oh No see I got
due come dodici qui ma ora quando colpisco
Aggiorna su questo è solo due hmm
Va bene solo due cinque, sono
contando che stanno contando è carino
a proposito, se io fossi come
in realtà una persona sincera vorrei
metterebbe ognuna di queste in parti
diverse parti del mondo ma perché
Sono in conferenza Wi-Fi, lo faremo
fai sul mio portatile e fai finta così bene
quindi ho appena fatto un sacco di incremento
chiede di farli andare via a
mazzo delle richieste di incremento che sono
diverso su ogni nodo ed è davvero
ovvio perché non stiamo replicando
tutto quello che ho fatto è stato prendere quel bancone
e come distribuirlo tre volte così bene
ci stai annoiando, lo so in pratica
per ottenere effettivamente questo insieme
cosa al lavoro dobbiamo contrastare per parlare
a vicenda che significa che abbiamo bisogno del
nodi per conoscersi l’un l’altro
il che significa che dobbiamo risolvere per
appartenenza al cluster quindi penso di essere io
menzionato all’inizio che
questo è un servizio di stato proprio questo è
quando dico statico intendo come se tu
stavano implementando un database che avresti
portare lo Stato a livello locale Una possibilità sarebbe
essere ovviamente piace prendere qualcosa come
una Cassandra
e lascia che faccia tutto il lavoro per te
quello è barare che non saresti qui se
tutto quello che ho detto è stato usare Cassandra con go
e poi, come cinque minuti dopo, è
fatto evviva bye così che cosa stiamo andando fare
useremo la lista dei membri e
la lista dei membri è una libreria di go che è stata costruita
da Hoshi Corp che, o credo, gestito
supervisionare ancora costruito sicuro da hashing Corp
che è una compagnia fantastica che fa
davvero un buon lavoro
hanno costruito vagabondo in console e
senza cappello e terraforme e ogni sorta di
la grande magia DevOps cosparge di polvere
strumenti fondamentalmente quello che fa è
gestisce l’ appartenenza al cluster dei costi è
basato sulla nuotata che è uno stile di pettegolezzo
protocollo di adesione parlerò più a
un po ‘di più a riguardo in un secondo
ha funzionato nel rilevamento dei guasti dei membri
che è davvero importante, proprio perché
se gestisci un membro un elenco di
membri che vuoi assicurarti
avere una lista accurata di chi dovresti
essere parlando e questa biblioteca è
effettivamente in uso da simile docker della console
Lib network in realtà più se vuoi
un po ‘di divertimento come andare a github e fare il
tutta la ricerca di codice cerca di cancellarti
Elenco dei membri di Slash Corp e ci sono
Non conosco quaranta pagine di risultati di
la gente lo sta effettivamente implementando, quindi nuota
è un’infezione costante settimanale scalabile
protocollo di appartenenza al gruppo dei processi di stile
che è molto più di quattro lettere it
fondamentalmente ha due obiettivi che è quello di
mantenere un elenco di appartenenza locale di non
processi difettosi locali come locali al
nodo e quindi rilevare e alla fine
informare gli altri di errori di processo e così via
meccanicamente
il modo in cui funziona è basato sul gossip
e fondamentalmente ciò significa che è tipicamente
queste interazioni avvengono da nodo a nodo
come un nodo a un altro nodo e così via
quando un nodo si unisce a un cluster lo fa a
sincronizzazione di stato completo con un membro esistente
e inizia a spettegolare la sua esistenza a
tutti gli altri membri nel cluster
pettegolezzi su quella lista interna dei membri
lo stato in realtà accade su un normale
intervallo e contro un numero casuale
di membri selezionati casualmente così
fondamentalmente ciò che significa è su di esso come
ogni tre secondi ogni cinque secondi
o così farò pettegolezzi per piacere
altre tre persone hey Sono qui, ecco
il mio stato
c’è anche questa cosa chiamata sonde
e sonde o fondamentalmente hey sei qui
e c’è un’aspettativa che c’è
per te dire che sono qui sono vivo e
quindi se un nodo non agisce un messaggio sonda
è contrassegnato come sospetto e causa di
gossip ogni volta che segni una nota come
sospettoso in realtà lo dici al resto
il cluster ben dispiaciuto pettegolezzi al
resto del cluster
hey questa nota sospetta e poi se
è il sig. nevicato sospettoso no no
disputa sospetti dopo un certo tempo
è segnato come morto, che è anche
dubiti del pettegolezzo e finisci per ottenere questo
tipo di bello alla fine coerente come
insieme coerente settimanale di membri che è
gestito attraverso l’intero nodo in modo che il
l’intero nodo alla fine sa che a
esiste una serie particolare di membri e
ogni tanto una sincronizzazione completa dello stato
in realtà succede tra due
diversi membri casuali e dipendenti
su quanto è grande il tuo cluster
è davvero okay e bene nel mio lo sai
un ipotetico gruppo di tre che è
in esecuzione sul mio portatile ma se il tuo cluster
è decine di migliaia di server voi
non posso davvero permettermi di fare tutto questo
tempo a meno che tu non abbia una larghezza di banda infinita
che non è una cosa la velocità della luce
è come troppo lento per quello e così il
compromessi tra larghezza di banda e
converge il tempo qui sono configurabili
Giusto puoi dire che ne voglio ancora
larghezza di banda da utilizzare con questo processo e
converge il tempo attraverso la volontà del cluster
essere meno o viceversa
cool così i tuoi nodi diventano cluster
stiamo usando la lista dei membri è in realtà
relativamente semplice questo è il
lo snippet di codice dietro di esso è impostato in pratica
config e quindi crea il membro
elenca l’istanza e poi un altro
nodo elenco membri se sai che ci sono
altri è più o meno così
punto allora il cluster fa cose
su se stesso da solo, quindi lascia che ti mostri
il tutto fa le cose da solo
abbiamo finito con quello ultimo membro esempio
elenco tutto bene
Va bene, quindi quello che sto facendo adesso è
Sto girando su questo è il primo nodo
questo è il nodo seme, quindi ho una nota
qui chi è fondamentalmente il primo nodo in
un cluster particolare che ho intenzione di girare
su un secondo nodo qui nel mezzo e
In realtà realizzerò un po ‘questo
più grande e prova a spiegarlo cos’è
succedendo così qui abbiamo non so
se riesci a vedere questo figo, allora?
è successo
ricorda il membro iscritto e ora noi
avere qualche sincronizzazione in modo che sia completa
stato di sincronizzazione di cui ho parlato un secondo
fa si chiama in realtà una sincronizzazione push-pull
quindi lascia che ti mostri molto velocemente questo
è come appare il cluster in questo momento
Ho due nodi in questo ho questo questo
nodo che era bene il secondo nodo
perché le mappe non sono ordinate in go o
le liste sono in ordine e andiamo a indovinare Lysa’s
Dovrei dire e poi qui abbiamo il
il primo primo nodo va bene così andrò
tira su un secondo o scusa il terzo
uno
ricorda la lista va bene e noi abbiamo
tre che è stato piuttosto veloce che è
a causa del meccanismo gosset, quindi lascia
lasciami davvero tornare indietro e prendere questo
uno fuori l’ ho appena ucciso
quindi se guardi qui dirà
sospetto che il sospetto abbia fallito e nessuna ascia
ricevute quindi questo ha fallito non è un caso
ha ricevuto che continuerà a fare
quello fino a questo punto dove dice
marcando quel nodo ha fallito perché il
il timeout su di esso in realtà è sospetto
stato raggiunto così se torniamo qui e
premere Aggiorna ora si torna a due
nodi di nuovo relativamente diretti I
possibile configurare le impostazioni che questo
accadrà l’ intera procedura di handshake o
il processo di gossip che dovrei dire accadrà
su base regolare e posso o fare
converge più lentamente o più velocemente in questo
caso perché stiamo facendo un live
dimostrazione che ho davvero alzato
il tempo in modo che io possa mostrarti le cose
come stanno accadendo
e si, fantastico
fantastico così ho questo contatore che sono
ancora disconnesso cosa siamo ancora
facendo qui perché non hai risolto il
problema andremo bene
quindi ho ancora bisogno di questi contatori per
in realtà sai interagire con ciascuno
altro in qualche modo così come sono
andando a risolvere per questo problema e
di nuovo abbiamo menzionato all’inizio
questo è un sistema come AP che userò
CRT T è principalmente perché penso a CRD T’s
sono fantastici e super cool e
come la migliore invenzione di sempre e lo farò
dì molto rapidamente, tenterò
per spiegarlo ne ho effettivamente alcuni
disegni che sono andando tentativo di
spiegarlo, lo consiglierei davvero se
sei in sistemi distribuiti o
in realtà anche se non sei letto o
guarda il contenuto di Scott Michael John su
questo specialmente riguardo all’ultimo parla a
molte cose su T robuste perché lo sono
in realtà è piuttosto bello quindi cos’è ERD T
sta per è un conflitto senza
tipo di dati replicati questi sono dati
tipi che sono in genere come le cose
come contatori imposta mappe Registri delle bandiere
le operazioni all’interno di quei tipi hanno
essere commutativo associativo e oggetto
potente e perché come quelli sono
principi se credo che si chiami
implementare mi dispiace implementato attraverso
l’algebra semi-lattice si ottiene fondamentalmente
questa cosa in cui puoi item potentemente
come puoi praticamente unire tutto il
tempo giusto quindi l’effetto collaterale di quello è
non c’è un ordine o c’è ed è
tecnicamente parzialmente ordinato, ma
i tipi di dati qui non sono effettivamente
avere o supportare qualcuno di ordine e
per questo in quasi ogni forse
ogni scenario di fallimento tutto ciò che devi
fai in modo che questi contatori si uniscano di nuovo
è solo per unire di nuovo come quello
letteralmente se hai due nodi
non può comunicare e poi finalmente loro
può semplicemente farli unire di nuovo se un nodo
muore e torna indietro ed è fuori sincrono
basta che si uniscano di nuovo come c’è
letteralmente ogni scenario che hai
se hai diverse divergenze
Gli stati li hanno semplicemente uniti e poi li ha
volere
Vieni a venire a convergenza costante
stato o piuttosto stato convergente quindi CRT
È per via di quello che stanno facendo
la natura alla fine coerente non c’è
unica fonte di verità, questo funziona davvero
bene per il nostro scenario inventato quindi sì
il più fondamentale di questi quello che sono
effettivamente implementerò si chiama G
contrastarlo è così abilmente chiamato così
modo perché è un contatore solo crescere
ed è un contatore che ha letteralmente
solo due operazioni incrementano e si uniscono
giusto così solo salendo non arriva mai
adesso se ne vuoi davvero uno
può scendere anche quello che si chiama PN
contrastare è implementato in realtà
prendendo due di questi contatori si sale
uno va giù sommarli insieme
problema risolto in modo che il modo in cui G
i contatori funzionano è ogni nodo lo gestisce
conta proprio i nodi quindi comunichi
il loro contro stato con altri nodi
e poi quando si fondono prendono il
conteggio massimo per ciascun valore dei nodi, quindi il valore
valore stesso dei contatori G di somma di
conta tutto il nodo quindi lasciami solo dare
sei un esempio qui abbiamo tre
tre attori Alice Bob e Claire Alice
non fa un incremento di un Bob
incremento di 1 e poi di Claire in alcuni
il punto non aumenta di 6, quindi Bob
invia il suo stato a Claire e così a Claire
qui a questo punto ha conoscenza di Bob
Stato prima di questo incremento di 3 e
conoscenza del proprio stato di Claire perché
Claire, sai, ha fatto azione e così via
questo punto Claire lo sa
successo e questo è successo e conta
entrambe queste cose sono proprio così in lei
deposito che conosce sia Bob che Claire
e può sommarli insieme al passaggio successivo 7
qui abbiamo un altro sink che succede
quindi Bob ha effettivamente condiviso lo stato
oltre ad Alice e così ora Alice lo sa
che Bob è a 4 giusto perché 1 più 3
è 4 fantastico
e Alice stessa ha fatto questo
incrementa uno e hai questo
non è 4 che è 5 sì fantastico questi
contatori sono sicuramente divergenti ok
bello così ora abbiamo così questo altro
salta qui e spero che questa mappa sia
a destra sembra essere il fatto che è piuttosto fresco
facciamo solo finta che non sia successo
okay, Alice adesso la mandera ‘
stato che lei comprende il sistema
essere ciò che lei sa e cosa
Bob sa o meglio cosa ha detto Bob
lei fino a questo punto così lei sta andando
manda tutto ciò che è in declino e da allora
Claire ha comprensione di Bob e
ovviamente è il proprietario canonico di
I dati di Claire che hai Claire ora
comprensione vinto di Alice Bob per
giusto perché a questo punto quattro è
più grande di una destra, quindi dovremmo prendere
quel valore perché Bob è il canonico
proprietario di detto valore e quindi Claire così io
ha fatto di nuovo la matematica nella mia testa 1 più 4
più 6 fa uguale 11 così quel numero
c’è giusto questo è fondamentalmente
fondamentalmente G Conner è davvero tu
conosci due da quando i disegni sono
in realtà non è sufficiente e abbiamo bisogno di codice
questa è fondamentalmente l’implementazione di
così l’incremento qui dice che lo sai
ho il mio ID n che è identificatore che
rappresenta me e poi per tutti
incremento sto solo andando ad aumentare
il numero che possiedo per ottenere il conteggio
Ho intenzione di sommare tutti i numeri che
Io so e per fare l’unione che sto per fare
prendi il più grande di qualsiasi valore dato
non sono figo, quindi lascia che ti mostri questo
pratica
va bene, quindi non è aumentato
sul primo nodo quel numero è
aumentando e oh questo è troppo grande ora noi
è questo è in realtà un raw
vista della struttura dati sottostante così
mentre incremento questo ragazzo questo è il mio nodo
nome questo questo io qui sono davvero unico
e quindi mi piacciono gli ID URI per i nomi dei nodi
perché hanno un sacco di unicità per
loro e poi questi sette è il valore
che ho per il mio banco se faccio il
stessa operazione qui sul secondo nodo
non sarete sorpresi di tutti per
noti che non stanno affondando, ma ora
Ho un secondo identificativo con quello
UID di quel secondo nodo e questo è qui
il valore che corrisponde a destra quindi se vado
qui è completamente diverso
set di dati stessa cosa se lo eseguo
il terzo nodo questo ha senso è
iniziare a dare un senso venire
insieme benissimo abbiamo ancora un
problema che non abbiamo stato unito
eppure dovremmo probabilmente unire il
stato ed è quello che faremo ora
così la lista dei membri ha questa cosa che io
menzionato prima che è quel tipo di
completare lo scambio di stati con un altro
membro casuale chiamato
push / pull sync nel codice in realtà
fornisce anche agli sviluppatori un modo per
fuori di esso
e perché questo succede su TCP tu
hanno praticamente tutto ciò che puoi
inviare oltre il filo si può scegliere come
serializzarlo sul filo e come tu
voglio deserializzare dall’altra parte così
c’è un delegato ha fondamentalmente due
funzioni importanti per
questo punto è lo stato locale e si fondono
stato locale remoto stato che fondamentalmente
tipo di discarica lo stato di qualcuno che è
viene chiesto di fornire lo stato e fondersi
lo stato remoto fa il contrario
prende quella remota permanenza
e si fonde e che di nuovo quello
intervallo di quel trasferimento a pieno stato è
configurabile e quindi lo useremo
alla fine emergerà lo stato nel
sfondo quindi questo è ciò che il codice
sembra che sia esattamente quello che ho appena detto
Sono in un maresciallo che lo stato di quello
CR DT a JSON e poi dall’altra parte
Sto per istanziare un CR DT per
quel c68 esterno JSON che era giusto
inviato sul filo e poi sto andando
si fondono nel mio CR DT quindi facciamolo
molto veloce e questa è la demo che hai
tutti aspettavamo
va tutto bene
va bene così come puoi vedere ho menzionato
c’è un trasferimento di stato che succede
qui quindi questo è condividere uno stato di strada per
push / pull sync e la fusione non c’è
non proprio nessuno stato a questo punto se
vai e guarda i contenuti
c’è, è vuoto, non c’è niente
per parlare di
comunque se vado qui e passo avanti
nodo 2 vedi questo che uno è
alla fine andiamo a presentarsi qui
finalmente là è atterrato giusto e
è già qui perché è lì
l’abbiamo fatto è anche già qui perché
questa cosa è successo proprio così sto andando
solo tipo di continuare a fare questo un po ‘
un po ‘l’ ho fatto sul terzo nodo
dovrebbe arrivare tra i 5 ei 10 secondi
penso di aver detto sì, è vero
evento che mostra solo un po ‘di continuare a fare
questo un po ‘quindi è qui non proprio
qui ancora
oh quello che è successo veloce devo avere
catturato in mezzo oh oh, lo è
voi ragazzi capite che dovrebbe farlo di nuovo
non tutti sono stanchi è come il secondo
parlando ultimo ultimo giorno raffreddare questo è come
Voglio dire, per me è piuttosto bello
è piuttosto fresco che, come si sa questo
il trasferimento di stato avviene in un’unione
succede il CR DD si sa di nuovo se il
il trasferimento di stato fallisce tutto ciò che devi fare
è farlo di nuovo come farlo di nuovo
e poi succederà , lasciami fare
effettivamente giocare con questo un po ‘che io sono
ucciderò davvero il secondo nodo e
è vedere che è morto che in realtà non puoi
raggiungilo se vado qui al primo
nodo bene è ancora lì
giusto i dati dal secondo nodo è
effettivamente ancora lì e te lo prometto
oh scusa non quel nodo facciamolo solo per
dimostrarti che l’ ammasso è sparito
le seconde note sono passate alle seconde note
andato abbiamo solo due nodi qui ma il
i dati dal secondo nodo sono ancora lì
quindi se lo faccio girare di nuovo, si ricongiungerà
il cluster che ho intenzione di incrementare su di esso
e
alla fine finalmente ci sei tu
vedere una quarta destra, così perché io assegno
quella nuova identità unica che hai qid
Ora ho un quarto elemento qui così
una bella parte qui è che la quantità di
stato che si può potenzialmente perdere è
fondamentalmente una funzione di quanto fatto di recente
l’ultimo captian trasferimento di stato dritto
capita bene e così nei casi in cui tu
desideri molta correttezza puoi
accordare quella quantità di correttezza
lì sulla base di quanto spesso si desidera
fare una sorta di trasferimento di stato
ovviamente ce ne sono molti
interessanti alcune cose che puoi fare
su questo punto per garantire quello stato
il trasferimento avviene localmente in opposizione a
da remoto se ne hai più di diversi
data center e dire che il trasferimento può avvenire
tra voi conoscete i nodi negli stessi dati
centro che è più economico di andare oltre
il network
questo tipo di cose sono possibili ma
Non ho intenzione di passare attraverso di loro qui così
fantastico abbiamo raggiunto il successo
è proprio vero che ci ha preso
circa 10 secondi per quella prima sincronizzazione a
capita ma abbiamo elencato i membri di sincronizzazione
risolvere il problema per noi ci sono
ovviamente modi in cui è possibile sincronizzare più velocemente
un modo per affondare più velocemente che in realtà
sarebbe molto stupido per il nostro caso d’uso
di cui stiamo parlando ora è
trasmesso su ogni richiesta di incremento I
dire molto stupido perché abbiamo appena detto
che vogliamo incrementi di essere veloce e
vogliamo che la larghezza di banda sia la quantità di
larghezza di banda utilizzata per questa intera operazione
essere bassi quindi se trasmetto su tutti
richiesta di incremento singola che sto soffiando
attraverso quell’intera richiesta ma lasciamo
Io vado avanti e fallo così
posso vedere come funziona così ho avuto questo
funzione di stato broadcast qui che tu
sapere aggiunge un evento di trasmissione nel
in coda e poi dall’altra parte chiunque
chi riceve l’evento di trasmissione ottiene
questa funzione del messaggio di notifica è stata richiamata e
quindi possono fare la stessa cosa che noi
ha fatto precedentemente che istanzia il
CR DT unirlo e quindi ottenere l’unione
valore demo così veloce che ho questa linea di
codice è una routine di go che trasmette
lo stato
speriamo che funzioni di nuovo lo è
compilazione super veloce promessa questo è
non andare a parlare, va bene
quindi colpirò l’ incremento più volte
e dovresti vedere qui alcuni di questi
ricevere gli stati remoti di trasmissione effettivamente
se lo spaccio un sacco di volte vedrai
molti di quelli che vedi molti di quelli in a
alcuni dei nodi differenti, quindi di nuovo questo
è solo un modo un po ‘intelligente di
garantendo che il cluster converga
prima o poi ma di nuovo lo è
non necessariamente suggerito un meccanismo freddo
quindi cosa farei dopo, se lo fossi
in realtà costruendo questa cosa come a
il servizio è che vorrei testare la mia fonte
codice mentre su internet e
disponibile per per tutti voi ragazzi a
criticare direttamente e prendermi in giro
Twitter per non ha alcun test quindi
perché ho detto che va bene così tu
non posso vergognarmi anche se prenderò
completa la colpa per essere un cattivo sviluppatore
dopo le prove per quella cosa lo farei
probabilmente implementerà qualche vecchio sistema
a volte quando si fa un contatore
va su per sempre, probabilmente no
è utile così sai che lo farei anch’io
implementare più di un nodo per
datacenter di nuovo questo è solo il mio portatile
quindi è un dato molto piccolo ed economico
centro ma lo faremmo se ci tenessimo veramente
riguardo al fatto che si tratti di un sistema AP e di un essere
disponibili metteremmo molti di questi
cose in ogni centro dati locale e
consenti loro di sincronizzare
Vorrei anche eseguire e implementare Jepson
test per questo o qualche altra forma di
convalida della correttezza proprio così modellando
con TLA più o simile sarebbe
probabilmente implementerà anche un vero layer RPC
giusto, la lista dei membri è elegante
utile ma se volevo prestazioni migliori
controllo o autenticazione
controllo di posizione quindi non solo qualsiasi nodo
posso unirmi al mio cluster che vorrei
implementare il mio livello RPC lì e
poi come solo tipo di parte dell’ultima
insieme di estremamente importante da fare io
l’avrebbe eseguito come un nucleo unitario all’interno
finestra mobile in esecuzione all’interno di una macchina virtuale in AWS e
quindi vorrei cospargere la polvere magica di DevOps
su di esso e poi avrei raggiunto
microservice di punta che è quello che siamo
tutto qui per farlo, sì, ce n’è uno
da asporto non è poi così difficile
costruire servizi in cluster e andare di nuovo
elenco dei membri è il tuo amico CR DTS sono
anche il tuo amico, tutto questo codice è attivo
github si può giocare con essa e
ancora quella foto come farai domande
qualunque cosa e questo è tutto per me, quindi se tu
ragazzi hanno qualche domanda
dire che ancora una volta va bene
la domanda era: come gestisci l’errore?
tolleranza in un cluster o discreto
l’architettura ci sono molti modi per
fai quello e ci sono indovinate diverse
diverse definizioni di errore dell’attrezzo
tolleranza che vorrei sapessi essere in grado
prendere qui ma in questo caso lo sono
piggybacking completamente fuori dalla colpa
tolleranza o piuttosto manomissione
quell’elenco di membri ha e perché è un
questi sono sistemi molto debolmente coerenti
i vincoli che ho se volessi
per cercare di imporci di sapere più forte
maniglie avrei potuto fare altre cose
come forse provare a implementare una sorta di
un modello di dinamo in cui effettivamente ho
più controllo sulla quantità di modi
che un dato è un pezzo di dati
effettivamente inviato intorno alle risposte
porre eventuali altre domande su
Lista delle ONG o dei membri o DTE dei veggenti o giù di lì
lo stato credo che la domanda era come fare
riduci la replica per la quantità di
dichiari che sei effettivamente come l’importo
di dati così sei tu in particolare
parlando della realizzazione CR DT
o l’elenco dei membri di imitazione come il
dati che ci sta a cuore è replicante
il contatore ma elenco dei membri che
possibile condividendo lo stato del cluster
quale stai chiedendo al membro
lucerna è la lista dei membri effettivi che noi
capita di essere piggyback fuori dal
protocolli di lista membri per facilitare
trasporto dello stato nel CR DT così
ci sono molti altri modi in cui tu
potrei farlo bene, penso in realtà
quando all’inizio ho scritto questo discorso ero
andando a farlo prima e lista dei membri e
quindi costruisco il mio layer RPC che ha fatto
qualcosa che era più simile a una dinamo
dove potrei dire che sai fare il quorum
proprio dove canalizza verso il quorum
aspetta e poi fa una specie di a
commit a due o tre fasi per garantire che
tutti i diritti sono fatti ma io no
avere il tempo per che il il problema che ho
pensa con quello che stai dicendo qui
quella
la mia ipotesi è che ogni nodo abbia il
stato di ogni altro nodo nel CR DT
in caso e ciò è corretto
perché stiamo usando il membro oulous to do
questo funziona in un altro modo per farlo
sarebbe in realtà da costruire come alcuni
sorta di un anello o partizionamento o
sharding come qualunque cosa vuoi
da usare per strutturare il movimento del
dati e la limitazione dei dati a
solo gruppi rilevanti di nodi quindi uno di
i nostri sistemi di mass media in realtà te
know rende quantità enorme di questo
prende in prestito pesantemente dal concetto di nodo V
quella cassandra ha dove fondamentalmente tu
disporre di pool di dati classificati
dentro come un anello mod e quello
i dati sono effettivamente divisi e bloccati
un nodo specifico e il nodo scusate il
le dimensioni dei cluster non devono essere uguali
in tutti i data center che sono
efficacemente come un pezzo di dati è
replicato su un nodo particolare in a
grappolo d’altra data center nessuno di
questo è implementato qui, mi dispiace
grazie ragazzi
Please follow and like us: