Press "Enter" to skip to content

GOTO 2016 • Conflict Resolution for Eventual Consistency • Martin Kleppmann


ciao a tutti, vi ringrazio molto
in arrivo buongiorno spero che tu stia facendo
bene
Mi piacerebbe parlare oggi di conflitto
risoluzione in sistemi distribuiti che
è se diverse persone cambiano alcuni dati in
nello stesso tempo indipendentemente da ciascuno
altro cosa succede come risolviamo
quei conflitti va bene il mio background è
Sono un ricercatore presso l’Università di
Cambridge I era precedentemente nell’industria
in un gruppo di startup di internet, quindi
ha lavorato su LinkedIn per un paio d’anni
per esempio in questo momento sto lavorando su
questo progetto di ricerca ha chiamato veri dati
ho scritto T RBE e cosa stiamo cercando di fare
fare qui è quello di portare end-to-end
crittografia ad una gamma più ampia di
le applicazioni quindi pensate a qualcosa di simile
Google Documenti in cui più persone possono
modificare un documento allo stesso tempo online
ma senza doversi fidare di Google
server perché ciò che vogliamo fare è farlo
essere in grado di mettere i dati su vari server
nel cloud ma non doversi preoccupare
cosa succede se vengono compromessi o
così via, questo è il tipo di sfondo
di tutto questo non sto parlando del
crittografia e i protocolli di sicurezza
oggi mi sto concentrando solo su un po ‘
pezzo di quell’intero progetto che è
cosa succede se più persone modificano la versione beta
allo stesso tempo e come risolviamo
che così mi piacerebbe iniziare con una
scenario che probabilmente ci sarà familiare
con te, che sei un po ‘blu
la figura stilizzata qui è hacking su alcuni
codice sul tuo computer e ad un certo punto
decidi che questo codice è fatto e
lo commetti usando il tuo preferito
sistema di controllo della versione userò semplicemente git
come esempio qui e così a questo punto
inserisci il codice nel repository e
allora forse lo spingi da qualche parte così
anche altre persone possono vedere quel codice
quindi nel caso di prenderti forse lo farai
spingerlo nel repository su github e
questo è ora il meccanismo di comunicazione
per le persone con la tua squadra quindi se c’è
qualcun altro dice questo piccolo bastone rosso
figurate anche chi sta hackerando il codice
bene si può sincronizzare attraverso il
repository centrale questo è tutto molto
familiare questo è ciò che facciamo ogni giorno
e così la piccola persona rossa qui potrebbe
indipendente
allo stesso tempo, lavoriamo anche sul
stesso codice base e anche fare un commit e
ora cosa succede se questa persona ora
dovranno andare dal github bene
o fai unire o rebase se questo è
come va il tuo flusso di lavoro o qualcosa del genere
lungo quelle zone le zone in qualche modo queste
i cambiamenti non devono essere combinati
insieme e come probabilmente hai
sperimentato se le persone cambiano in modo diverso
file nello stesso repository che è no
problema saranno appena uniti
pulito se una persona cambia il
inizio di un file e un’altra persona
taejun è la fine del file che è
probabilmente va bene perché la versione
sistema di controllo li unirà a
automaticamente se le persone cambiano lo stesso
parte dello stesso file quindi stai andando
per risolvere il conflitto di unione
te stesso e quindi abbiamo questi strumenti per
facendo fusioni a 3 vie per la copia delle catture
da una parte all’altra e figurante
fuori ciò che il risultato dovrebbe essere così tu hai
probabilmente devono combattere con cose del genere
questo è esattamente il tipo di problema
di cui sto parlando ma questo problema
succede non solo nello sviluppo del software
è un problema molto generale quindi
immagina di essere un avvocato che lavora in una legge
fermo e forse c’è un contratto
negoziato con il cliente
un lato e ci sono altri e il
altro studio legale di società dall’altra
lato e tutti stanno inviando questi
versioni di contratti avanti e indietro e
i contratti sono probabilmente Microsoft
Documenti di Word perché è così
gli avvocati lavorano e hanno mandato queste cose
via e -mail e così hai una persona
apportare modifiche a questi documenti di parole
e poi premere Salva e poi allo stesso
ora forse qualcun altro magari a
società diversa sta anche aggiornando il
lo stesso documento lo cambia e ora tu
inviate queste modifiche l’una all’altra e così via
questo è in realtà molto gli stessi dati
flusso e in realtà ho appena riutilizzato esattamente
lo stesso diagramma e cambiato le etichette
hai l’e-mail come
percorso di comunicazione e ad un certo punto
questi cambiamenti dovranno essere
uniti insieme e ora per Microsoft
Non sono sicuro che ci sia anche questo
tipo di interfaccia utente piacevole per
fusioni a tre vie So che puoi confrontare
due documenti ma penso a cosa tu cosa
la gente poi finisce per fare manualmente
copiare le modifiche da una versione
del documento a un altro e così via
eseguendo questa unione in modo veramente manuale così
questo è tutto
tipo di questa situazione aerea qui così
in questo caso è il modo migliore di avere
come una serratura informale dove una persona
Dice bene, ho intenzione di modificare il
documento ora per favore non cambiarlo per
il giorno dopo te lo invierò e
quindi puoi modificarlo in modo che le persone provino a farlo
sequenza dei loro aggiornamenti in questo modo attraverso
comunicazione manuale cosa succede dentro
un altro guardiamo un terzo esempio
comunque diamo un’occhiata a una lista di cose da fare e così via
questo forse hai detto di fare la lista dove
io e mia moglie insieme abbiamo il
lista della spesa dove posso aggiungere cose e
lei può aggiungere roba e poi chiunque altro
va al negozio può comprare quelle cose così
qui l’acquisto di latte è aggiunto alla cosa da fare
elenca e diciamo che questa lista di cose da fare è
memorizzato su un server centrale ora così è
cosa ci permette di comunicare e così io
aggiungi il mio latte all’elenco delle cose da fare e premi
ok pulsante e così fa una richiesta come
forse una richiesta HTTP POST sopra la
rete per meritare i nostri negozi lì
e torna e dice ok che era
aggiunto alla lista delle cose da fare e allo stesso tempo
il tempo forse mia moglie va Oh bisogno di acqua
le piante che ho appena ricordato così aggiungono
che al to-do list fa anche questo
postare sul server torna ok e così via
in questo caso in realtà cosa è successo
è se questo server centrale lo memorizza
dati in un database e utilizza qualcosa
come le transazioni se questo è un
il database relazionale dice allora che effettivamente
avere la serializzazione in corso e cioè
questi aggiornamenti sono effettivamente applicati in a
ordine sequenziale in un ordine seriale
ecco da dove arriva serializzabile
transazioni di database che significa
sono applicati uno alla volta così tu
in realtà non hanno la stessa concorrenza
problema come abbiamo avuto con il codice di modifica
e con la parola documenti inviati
avanti e indietro perché in realtà c’è
solo una copia primaria dei dati e
che vive sul server e questo è
essere aggiornato una transazione alla volta
in sequenza quindi in questo caso non lo fai
ottenere questo problema di risoluzione dei conflitti così
questo sembra carino ma d’altra parte
hai un problema che è bene e se
Non ho segnale sul mio cellulare
in questo momento o se la rete è
interrotto per qualche altra ragione o io
può premere il pulsante per salvare e lo farò
prendi una spinning spinning wait
indicatore e nulla accadrà
quindi qui abbiamo questo è un po ‘di
ovvio questo problema se non si ha
connessione internet quindi non è possibile raggiungere
il server centrale, quindi non è possibile archiviare
qualsiasi dato non puoi modificare i dati in alcuno
in modo che non funzioni offline, quindi questi
sono i problemi eppure otteniamo il
vantaggio da un server centrale che noi
non devi preoccuparti di questo
concorrenza e questi questi diversi
modifiche che avvengono allo stesso tempo e
dover unire quelli insieme ma a
il costo di esso funziona solo online quindi noi
ora richiedono una connettività costante al
server che non è così eccezionale in particolare
se stai facendo cose sui dispositivi mobili
un altro problema è che queste richieste
sono sincroni quindi quando premo il tasto Salva
pulsante Devo aspettare finché non ottengo il
va bene dal server e solo allora
So che è stato effettivamente salvato
così fino a quando ho la schiena va bene non lo faccio
sapere se la richiesta di rete
in realtà ce l’ ha fatta o no forse se
la rete è inaffidabile così che anche
può essere un problema di temporizzazione vediamo nel
caso di modifica del documento, quindi nel caso
di Google Documenti che sai puoi premere
una lettera e poi un secondo dopo
la lettera apparirà sullo schermo di
un’altra persona che sta modificando lo stesso
documento così là le modifiche che il
l’unità di modifica è un singolo tasto
non è nemmeno come un commit o qualcosa del genere
così è solo una lettera e
quindi in tal caso, se volessi inviare
attraverso un server centrale quindi ogni volta
si preme una lettera che si dovrebbe prima
inviare al server attendere che sia
salvato lì aspetta che arrivi il server
torna a dirti ok e poi potresti
mostra la lettera sullo schermo e così via
si dovrà attendere per la rete
andata e ritorno per ogni singola modifica a
il documento che è particolarmente quello
succede esattamente se stai modificando un file
su SSH quindi se hai effettuato l’accesso a un Linux
server e stai usando vim o Emacs o
qualcosa sul server e si digita a
lettera allora quel redattore vive davvero
sul server quindi hai effettivamente ottenuto
quel sincrono round-trip quindi se lo hai
ha una rete lenta o inaffidabile e
usare SSH è piuttosto doloroso come lo sei tu
probabilmente ha avuto un problema finale
con mettere tutto in una posizione centrale
server è che ora c’è questo singolo
punto di errore e le persone si prendono gioco di
github ad esempio ogni volta che github
è giù la gente dice oh abbiamo questo
bel controllo della versione decentralizzata
sistema e cosa facciamo noi mettiamo
tutto torna in un servizio centralizzato
non è così bello quindi questa cosa può essere
interrotto se ti preoccupi della negazione di
attacchi di servizio per esempio o se tu
preoccuparsi di bloccare forse in alcuni
paesi che non hanno tale libertà
accesso a Internet se sei critico di
il regime locale o qualcosa del genere
allora in realtà questo tipo di abilità di blocco
è piuttosto un problema così quello che vorremmo
fare è capire come non avere
questi problemi del singolo centrale
server ma allo stesso tempo non ha tutto
dei problemi di dover fare il
si fonde a mano tornando così al
fai un esempio di lista se pensiamo a questo
dovendo comunicare in modo sincrono con
il nostro server va bene se i server sono dentro
la stessa città, ma se i server sulla
dall’altra parte del pianeta, allora questo è
abbastanza lento perché è semplicemente la velocità di
la luce impiega un po ‘per andare fino in fondo
dall’altra parte del mondo e
di nuovo così, e se mettessimo semplicemente dei dati
centri in diversi luoghi così
diciamo quando aggiunge la persona blu
latte alle liste di cose da fare che richiedono
va solo al locale della persona blu
il data center chiamalo centro dati uno e
vieni salvato lì e quando la persona rossa
aggiunge piante acquatiche a de to-do list, allora
va anche al centro dati locale
quelli sono due diversi dati locali
centri se le persone sono in diversi
posizioni e così ora va bene così ciascuno
la persona può ottenere una risposta dal proprio
data center locale e ora questi cambiamenti
sarà propagato in modo asincrono e così via
la velocità delle luci va fino in fondo
tutto il pianeta è ancora lento come lui
era prima così potrebbe accadere che due
le persone fanno questi cambiamenti senza
conoscersi l’un l’altro e poi tu
semplicemente non so quale di questi
in realtà è venuto prima perché sai
non è proprio definito il blu
vieni prima o quello rosso dal punto
di vista del data center prima il
è arrivato uno blu e poi è arrivato quello rosso
ma dal punto di vista dei dati
centro – era prima quello rosso quindi
quello blu quindi se questo aggiunge un oggetto
per dududu alla lista delle cose da fare significa solo
aggiungendolo fino alla fine
della lista, quindi quale ordine dovrebbe
questi oggetti appaiono ora che abbiamo improvvisamente
preoccuparsi del fatto che i dati
il primo centro potrebbe aver comprato il latte per primo
e innaffiando la pianta secondo e il
altri data center potrebbero averli
capovolto nell’altro ordine oh sì, facciamo
pensaci ulteriormente anche senza due dati
centri possiamo solo farlo davvero
estremo e dire ok non stiamo nemmeno andando
per parlare con un data center siamo solo
andando a parlare con il nostro deposito locale su
il dispositivo e ho intenzione di trattare il
archiviazione sul mio cellulare come dati
al centro c’è il miglior data center
mai perché non posso avere una rete
interruzione tra me e lo stoccaggio
sul mio telefono quindi questa comunicazione è
andando sempre al lavoro, quindi posso solo archiviare
qualcosa a livello locale e sarà bello
e veloce e il registro può allo stesso modo
immagazzinare qualcosa a livello locale e poi possiamo
solo tipo di avere una specie di bla bla
Roba di rete per sincronizzare il
cambia in giro e se ci pensi
questo è esattamente lo stesso di
la protesta di sincronizzazione che deve
capita con i due dati
centri di scambio di dati ed è esattamente
lo stesso processo di sincronizzazione che
è successo con l’invio di git
da github o con la parola documenti
inviato via email è tutto esattamente il
lo stesso che hai alcune modifiche
che stanno accadendo contemporaneamente
indipendentemente l’uno dall’altro e quelli
i cambiamenti si stanno propagando
in modo asincrono e qui ovviamente, ora
siamo tornati a questo problema dei conflitti
quindi prendi l’esempio di aggiungere due articoli
fare alla lista delle cose da fare che puoi
immagina che è abbastanza facile risolverti
assicurati di aver deciso in qualche modo
su un ordine coerente potrebbe essere l’ uso di alcuni
ID o qualcosa o alcuni ID utente voi
può ordinarli in modo arbitrario, ma cosa succede se
un elemento è uno in cui si trova un cambiamento
elemento per le attività cancellate e l’altro
in realtà modifica lo stesso elemento delle cose da fare in questo modo
il rosso cambia a comprare latte
comprare latte di soia e quello blu giusto
elimina l’ oggetto del latte d’acquisto e questi
due cambiamenti accadono senza saperlo
l’un l’ altro quindi come lo risolviamo
perché bene se dici che il
la cancellazione vince così bene questo oggetto è stato
cancellato l’ elemento della lista delle cose da fare è stato cancellato
in modo che modifica per cambiare dispositivo latte
il latte è appena finito perché l’oggetto che
si riferisce a non è più lì, ma quello
significa che ci siamo dimenticati del
fatto che il latte di soia è stato aggiunto lì
e quindi forse questo è un fatto importante
che abbiamo perso, d’altra parte, noi
potrebbe farlo al contrario
potremmo dire che nonostante il latte di soia vince
ma poi la cancellazione è stata persa e
quindi forse la cancellazione è significativa così
come risolviamo questo tipo di conflitto
in generale abbiamo operazioni simultanee
questo succede
concurrent non significa necessariamente a
lo stesso momento nel tempo significa solo
accadono senza sapere di ciascuno
altri e in qualche modo dobbiamo raggiungere
convergenza in cui tutti sono d’ accordo
gli stessi dati alla fine e così gente
parlare di coerenza finale che è
tipo di termine del database che è spesso
usato per descrivere questi tipi di
sistema in cui puoi semplicemente consentire
cose diverse accadere contemporaneamente
e tu vuoi finire nello stesso modo
dichiaro alla fine il problema con il
termine coerenza finale è che è
in realtà molto vagamente definito e così
le persone sono molto imprecise quando parlano
su di esso e mi piacerebbe abbattere
in tre punti tre proprietà che
un po ‘più preciso, quindi vado a
assumere per prima cosa l’ eventuale consegna e
cioè inviamo messaggi oltre il
rete e lo assumeremo
la rete non è interrotta per sempre
quindi supponiamo che dopo alcuni
una quantità limitata di tempo in cui si ottiene una rete
connessione di nuovo e quindi se si mantiene
riprovare quindi puoi ottenere il messaggio
attraverso alla fine devi essere gentile
fai questa supposizione perché se tu
supponiamo che un dispositivo possa essere offline
per sempre non può mai venire e sincronizzare
con gli altri dispositivi di nuovo solo da
definizione di offline, quindi siamo giusti
andando supporre che alla fine un po ‘
i messaggi passano ma non stiamo andando
fare supposizioni su quanto sia veloce
è così se vado in Islanda e
non c’è segnale mobile e sto facendo un’escursione
da qualche parte sulla cima di un vulcano per
due settimane quindi non avrò alcun messaggio
per due settimane e quando torno a
Reykjavik poi avrò dei messaggi
quando raggiungo una connessione Internet
di nuovo in modo che il mio messaggio sia ritardato
due settimane in quel caso va bene lo siamo
solo andando a pensare che è tutto a posto
in secondo luogo la seconda parte dell’eventuale
la coerenza è assicurarsi che
tutti finiscono nello stesso stato
è se assumiamo
che alla fine tutti otterranno tutto il
messaggi quindi se due persone hanno
ricevuto gli stessi messaggi di loro
dovrebbe essere nello stesso stato
questo significa che anche se ricevono
i messaggi in un ordine diverso loro
dovrebbe comunque finire nello stesso stato
e infine quello che vogliamo è non perdere
dati ora questo sembra un tipo di
punto un po ‘ veramente ridicolo perché
ovviamente nessuno vuole perdere dati ma
è in realtà abbastanza importante da fare
questo database così esplicito
gli utenti usano questa modalità chiamata last
lo scrittore vince dove dici se due persone
cambia i dati nello stesso momento in cui siamo
solo andando a prendere uno di loro
arbitrariamente basato sul timestamp come
essendo il vincitore e gli altri erano
semplicemente andando a buttare via e così è
come equivalente se pensi al
esempio di documento di parole di bene che hai
due persone che modificano la parola documento e
una persona invia la sua modifica a
un altro e l’altra persona è giusta
andando a dire bene ho fatto dei cambiamenti da solo
pure e ho intenzione di dichiarare che il mio
le modifiche sono più recenti delle modifiche e
quindi ho intenzione di ignorare le tue modifiche
scusa e quindi non è molto amichevole
alle persone perché i cambiamenti si perdono così
cerchiamo di non perdere dati come
bene , questo è ciò che intendo con
consistenza finale e questo è il
tipo di struttura dati a cui potremmo
voglio applicarlo quindi vado sul cellulare
questa lista di cose da fare ora come documento JSON
e puoi solo immaginare che sia come un
lista di cose da fare che è come ciascuna
l’elemento to-do ha un titolo e una bandiera fatti
se è fatto o no vero o falso
e poi forse ci sono alcune impostazioni
e roba pure sul lato e così il
principali strutture dati che abbiamo qui
sono una lista ordinata che hai un
lista di cose da fare e loro devono
apparire in un certo ordine e l’utente
specifica questo ordine e anche tu hai
mappe così hai forse un oggetto JSON
all’interno di un altro oggetto JSON o qualcosa del genere
così ora una volta che abbiamo questi dati
strutture che possiamo quindi rendere varie
cambia a loro così come gli utenti interagiscono
con l’ applicazione che faranno
cambiamenti, ad esempio , potrebbero essere impostati
annaffiando le piante alla verità, così dicono
okay, ora è fatto, vado a controllare
la scatola sul mio telefono e cosa fa
è impostato questo fatto flag from forth
quindi l’operazione qui il cambiamento
operazione l’operazione di modifica è
assegnare un valore a un campo particolare
in questo documento JSON un’altra cosa che
potrebbe succedere che qualcuno possa modificare un
stringa in modo cambiare cambiare il latte da latte
compra il latte di soia quindi inserendone alcuni
lettere in quella stringa un’altra cosa
quello che le persone potrebbero fare è inserire un
tutto nuovo elenco voce di telefono mamma tra
comprare il latte e prima di ordinare l’irrigazione
piante quindi questo è modificare l’ordinato
elenca gli oggetti per inserire un nuovo oggetto
un’altra cosa che la gente potrebbe fare è
aggiungi un’altra chiave a questa mappa qui o loro
potrebbe anche cancellare un’intera voce in modo che il
l’elemento to-do di primo livello è sufficiente eliminare il
tutta la lista perché non hai forse
più liste o qualcosa di simile
quindi questi sono i tipi di cambiamenti che
le persone possono fare a questi documenti e
quello che vogliamo fare è avere un modo
risolvere tali cambiamenti in modo che anche se
le persone fanno questi cambiamenti contemporaneamente
tra di noi finiamo con l’invenzione
coerenza in modo da poter modellare questo
documenta come un albero e possiamo averne un po ‘
annotazioni di tipo di dati su di esso, quindi dite il
il documento di livello superiore è una mappa e all’interno
abbiamo una lista sotto la chiave da fare
e così via non entrerà troppo nei dettagli
quindi questo è in realtà un algoritmo che io
sviluppato insieme a un collega e
abbiamo scritto questo articolo per alcuni mesi
fa così, se sei interessato a te
può trovarlo online si chiama a
albero dei conflitti ha replicato il tipo di dati Jason
dice che qualcuno qui ha sentito parlare di CRD T’s
prima d’ora alcune persone si raffreddano, quindi questo è
un esempio di CR DT se non lo sai
che cos’è un CR DT non ti preoccupare okay
questo articolo è molto teorico sembra
al suo interno sembra un po ‘così, così sono
in realtà non andando a correre attraverso tutti
la semantica operazionale oggi non è così
preoccupati per quello
Sto solo andando a dare il
l’intuizione su come funziona l’algoritmo
e mostra solo un po ‘di alcuni dei
casi limite curiosi che si verificano ci sono
alcune delle cose che dovevamo pensare
circa quando si cerca di fare questo ma così il
la speranza è che questo algoritmo consentirebbe
persone per modificare simultaneamente JSON
documenti e unire quelle modifiche e terminare
con un risultato sensato alla fine così
un esempio di un documento che abbiamo pensato a
lista delle cose da fare, esempio un altro
uno potrebbe essere semplicemente un documento di testo
è un documento di testo costituito da
nome del file che è solo una stringa
consiste dei personaggi del corpo
del testo attuale in modo che ogni individuo
il personaggio è come l’unità più piccola di te
può modificare e come forse potrebbe esserci
materiale aggiuntivo per le impostazioni di formattazione
font e così via Sto solo andando a lasciare
tutto questo fuori
un’altra cosa che è abbastanza utile è
posizioni del cursore così come se si utilizza
Google Documenti puoi vedere dove
documento e altri utenti che modificano correttamente
ora è abbastanza utile vederne il terzo
non cambi lo stesso posto al
stesso tempo mentre sei online e così tu
potrei immaginare di implementarlo come una mappa
da ogni cliente ha una posizione a
la posizione è come una posizione nel
documento e così che ti permetterebbe di
tenere traccia dei cursori di altre persone così
Mi concentrerò solo sui personaggi del corpo
per ora quindi la lista ordinata di
i personaggi è ciò che costituisce il
contenuto del documento che potresti chiederti
perché questo è il motivo per cui questo è un elenco di
stringhe e non una lista di caratteri così
iniziare la nota a piè di pagina è una lista di stringhe
perché in Unicode se tu in realtà
rappresentare come un personaggio uno o il
la più piccola unità modificabile di un documento
non necessariamente un singolo codice Unicode
punto perché hai cose come
Combinando la combinazione di marchi credo
sono chiamati per gli accenti e
diacritici e varie cose o per
emoji Penso all’annotazione del colore della pelle
sta combinando il marchio e così finisci con
una sequenza di diversi codici Unicode
punti che costituisce quindi uno
personaggio dal punto di vista dell’utente
se sei interessato a questo sguardo al
Unicode allegato numero 29 comunque e il
nota a piè di pagina questo è completamente irrilevante
volevo solo dire che pure io
dare una piccola demo del nostro editor di testo
implementato perché è solo una specie di
divertente per rendere questo un po ‘di più
interattivo quindi quello che ho qui è
qualcosa che non funziona evviva
scusa, questa è sempre la cosa
demo ora
forse vuole essere sotto Wi-Fi okay
proviamo di nuovo
va bene così quindi questo è molto semplice
editor di testo che abbiamo implementato usando
questa struttura dati questo algoritmo
abbiamo sviluppato e ne ho effettivamente due
finestre qui a destra e a sinistra che sono
entrambe le istanze di questo editor di testo
correndo e posso dire e funziona
così puoi vedere che posso digitare qualcosa
da un lato e appare dall’altro
lato e questi due editor sono in realtà
comunicare tramite una connessione di rete
quindi ci sono due processi separati
altrimenti non condivido nulla così
potrebbero facilmente essere su due separati
computer su altri lati del mondo no
problema e quello che posso fare ora è che posso
uccidere il server in modo che utilizzino un WebSocket
server qui per comunicare e quando io
uccidere il server ciò che sto simulando è un
interazione di rete tra i due così
ora entrambi gli editor sono offline, quindi questo
potrebbe essere perché in realtà è un server
interruzione o solo perché i clienti hanno
perso la loro connessione a Internet è
non ha molta importanza e quindi posso tenerlo
editing offline quindi diciamo qui così
Dirò ciao a tutti quelli che vanno
Berlino e vedi che non appare
il lato destro perché sono
offline quindi abbiamo questi due ora e così
Ho intenzione di riavviare il server ora e
quello che vogliamo è per tutti questi cambiamenti
la veranda è stata conservata, quindi assicurati di guardare
che tutti sono ancora lì e sperano
stai andando tutto bene è ancora lì così
quando riavvio il server gli editor in
lo sfondo continua a provare a riconnettersi
al server automaticamente e conservare
riprovare in background e
alla fine riusciranno a connettersi
e risincronizza e ora vedi
tutti sono stati presi dal caffè
lasciato a destra e spero che tu sia tutto
fare bene è stato copiato dal
a destra a sinistra e non ne avevamo
come l’interfaccia utente a tre vie per
questo come lo ha fatto automaticamente
ora diamo un’occhiata a come questo
l’algoritmo funziona davvero perché è così
un po ‘ interessante questo è fondamentalmente
lo stesso di ciò che fa Google Documenti
così
Google Docs è un po ‘pignolo
supporto offline ma se lo si forza in
in realtà lo fa essenzialmente
lo stesso tipo di unione e posso correre
attraverso una migliore di come l’algoritmo in
Google Documenti funziona quindi immagina di avere un
documento costituito dalle lettere HDL
e O e etichetti ogni lettera con il
indice di quale posizione è così 0 1 3 3
e sul lato sinistro abbiamo il
editor di verde sul lato destro della strada
abbiamo l’editor viola e ciascuno
l’editor ora effettua una modifica in questo modo il
lato sinistro inserire il secondo L
personaggio per cambiarlo in ciao e il
la parte destra inserisce un’esclamazione
segna alla fine rendendolo un chielo
punto esclamativo e così ora vogliamo
unire queste due modifiche che hanno
è accaduto contemporaneamente e così per
facciamo questo abbiamo questo server – questo è dentro
questo caso gestito da Google e dal cliente
invia essenzialmente un diff o simile a
operazione registrazione cosa cambiare cosa
il cambiamento è stato effettuato dall’utente e
ha inviato quell’operazione al server
e così il lato sinistro dice l’inserto L
alla posizione 3 in modo da vedere 0 1 2 3 4 così noi
inserito il L così il giuramento si è trasferito
dalla posizione 3 alla posizione 4 e così noi
inserito quello L là e da questo lato
abbiamo il punto esclamativo di inserimento
alla posizione 4 e in modo che descriva il
cambiamento che è stato fatto e ora il
il server inoltra le modifiche a
l’altro cliente e quindi il cambiamento verde
inserendo la L viene trasmesso dal
server qui inserire L in posizione 3
la posizione 3 è la giusta posizione qui così
si finisce con ciao punto esclamativo
che è quello che volevamo comunque se tu
pensa a cosa succede nell’altro
direzione in modo tale da inserire un punto esclamativo
segna alla posizione 4 se semplicemente inviamo
che invariato ciò che otterremo
è l’inferno punto esclamativo OH perché finito
qui abbiamo inserito la lettera L a
posizionare 3 in modo che O si muova lungo il polo 3
a 4 così davvero avremmo bisogno di cambiare
per inserire il punto esclamativo a
posizione 5
e solo allora avremmo ottenuto il giusto
risultato di avere ciao punto esclamativo
e quindi quello che deve succedere qui è quello
questa posizione per esigenze di essere cambiato
posizione cinque perché c’era
contemporaneamente un inserto nella posizione tre
quindi il server deve tenere traccia di tutto
di queste cose diverse in corso
contemporaneamente e deve trasformarsi
i messaggi riscrivono questo tre a
quattro alcune delle trasformazioni accadono
anche sui clienti ma questo
algoritmo realtà non dipende dal
server per fare un po ‘di lavoro come bene e che
funziona così viene chiamato questo algoritmo
trasformazione operativa ed è stata
in giro per un po ‘così è stato il primo
discusso nella letteratura accademica
indietro negli anni ’80, anche se il primo
era la carta che presentava questo algoritmo
in realtà non corretto e hanno detto così dentro
il giornale hanno detto che era un caso
che il nostro algoritmo non funziona può aiutare
qualcuno ci aiuta a sistemarlo per favore e poi
sono arrivati diversi ricercatori
e ha proposto delle correzioni che funzionavano
e ci sono molti diversi
algoritmi concorrenti là quello che
la maggior parte dei moderni operativi
i sistemi basati sulla trasformazione sono una specie di
eredita da si chiama Giove dal 1995
e questo è ciò che piace Google Documenti e
etherpad è basato su Google Wave
che ora è Apache Wave, tutti usano
questo disegno di Giove che usa il
server centrale che fa parte del
trasformazioni che alcuni degli altri non fanno
usa il server centrale ma invece tieni
traccia di una sorta di multi-dimensionale
ipercubi di tutte le modifiche in corso
contemporaneamente iniziano a richiedere
un bel po ‘di memoria alcuni di quelli
algoritmi che è il motivo per cui non vengono utilizzati
come spesso nella pratica e così questo tipo di
funziona bene per gli scopi di Google ma
ricorda cosa volevamo essere in grado di
lavorare con la crittografia end-to-end e così via
in tal caso non possiamo avere un server
trasformando i nostri messaggi perché il
il server dovrebbe quindi vedere il
contenuto dei messaggi e vogliamo cosa
che vogliamo è bene che vogliamo evitare una
server centrale perché è un singolo
punto di rottura e vogliamo evitare
il server vede il contenuto del nostro
messaggi quindi vogliamo essere in grado di
inoltrare i messaggi e questo è dove C
Rd T’s come in C Rd T sta per
commutativo
non dispiaciuti dati replicati ad albero conflitto
tipi che è un po ‘di un boccone che
e bianco
la gente dice solo i doveri degli amministratori delegati e
essenzialmente questa è una famiglia di dati
strutture dove possono fare diversi nodi
contemporaneamente modificare i dati e loro
possono automaticamente unire e così hanno
ottenuto come parte della definizione del
struttura dei dati che hanno unito
funzioni o funzioni che ti consentono
per applicare le operazioni in un ordine diverso
e ancora ottenere lo stesso risultato al
fine e se vogliamo modellare qualcosa
come un documento di testo come quello che ho dentro
il nostro esempio editor in quel caso che abbiamo
un elenco ordinato di personaggi e quindi il
il tipo di dati che vogliamo qui è ordinato
elenco e diversi algoritmi diversi
erano stati proposti per quello che sono
ancora più recente solo nell’ultimo
10 anni queste cose sono venute e
quello che descriverò ora e quello
i nostri editor di testo basati su si chiama il nostro
Array coltivabile replicato GA che è venuto
da un gruppo di ricerca coreano nel 2011
così mi permetta di mostrare come questo funziona in
In poche parole iniziamo con lo stesso
esempio di documento che è un chielo
ma ora invece di dare ogni lettera
solo un indice 0 1 2 3 che ho intenzione di dare
è un identificatore univoco che ogni lettera ha a
identificatore univoco che potrebbe essere solo 0
a 1 a 2 a 3 a e ora abbiamo lo stesso
le modifiche avvengono sul lato sinistro se
inserisci la lettera L e sulla destra
lato mano inseriamo il punto esclamativo
e ogni volta che inseriamo una nuova lettera noi
devi creare un nuovo identificatore per
quella lettera e avremo un
piccola regola per come creiamo nuovi
identificatori così li abbiamo loro devono
essere globalmente unici e anche loro devono farlo
avere una certa proprietà di ordinamento e così
stiamo andando a costruire nel modo seguente
ogni identificatore un numero e una lettera
e per il numero ne scegliamo uno più grande
del numero più alto che abbiamo trovato
il documento e così il server dei documenti
il file contiene 0 2 3 come numeri quindi il
il prossimo numero che andremo a prendere è il 4 e
poi chiamiamo la mano sinistra uno è il nodo a
quello di destra è il nodo B e così via
sarà la lettera che usiamo per il
identificatore e quindi se assumiamo che il
i nomi dei nodi sono unici quindi c’è
nessun altro nodo chiamato a c’è solo uno
nodo
loro e inoltre lo assumiamo
questi numeri sono generati prendendo
uno più il più alto abbiamo così il
i numeri per nodo saranno sempre unici
quindi questo significa che generiamo per un on the
lato sinistro e per B destra
lato della mano è lo stesso per perché
sono entrambi nello stesso inizio
posizione ma ne hanno due diversi
ID dei nodi in modo da ottenere due diversi
identificatori e così funziona e ora noi
può inviare queste cose dal nostro server o
non ha nemmeno bisogno di essere un server di questo
passa da una rete peer-to-peer o
qualsiasi altra cosa ti piaccia così, lo farò
basta usare un server qui per semplicità
e invece di inserire in un particolare
posizione ora stiamo per dire inserire L
e diremo l’ID del nuovo
della nuova vita che è per un e noi siamo
andando a dire che siamo di inserirlo da
dicendo dopo la posizione a e così 2a è
la prima L e quindi la nuova L con per a
viene inserito dopo 2a e sull’altro
lato inseriamo il punto esclamativo
dopo le quattro dopo tre un 3a è il
lettera O e quindi inserire il
punto esclamativo con ID per B dopo
tre un mezzo mettono il punto esclamativo
dopo di e così ora possiamo permetterceli
messaggi quindi inserisci L con un dopo 2a
2a qui significa ancora il primo L così è
andando a mettere la seconda L a destra
posizionare e dare un ID per un e sulla
dall’altra parte possiamo prendere questo messaggio e
applica quel punto esclamativo dopo
tre a 3a è ancora la lettera O
anche se abbiamo inserito la lettera L
prima non ha cambiato il fatto che
l’ID della lettera O è ancora 3a e
così possiamo mettere il punto esclamativo con
4b dopo la lettera O dopo le quattro successive
3a
e così finiamo con gli stessi documenti
in entrambi i posti che è molto bello possiamo
ora ho solo una specie di rete
tra questi due non deve
trasforma i messaggi in qualsiasi modo
solo bisogno di fare in modo che mantiene
riprovare e alla fine i messaggi ottengono
attraverso questo è tutto ciò di cui abbiamo bisogno, qui possiamo
cifrali ed è tutto molto bello ora
c’è ancora un problema con questo
algoritmo che mi chiedo se qualcuno può farlo
punto sì
la cancellazione è una cosa sì che la cancellazione è
in realtà abbastanza semplice in modo da ciò che facciamo per
la cancellazione è solo per impostare un flag per ogni
ID
e dire che se è cancellato, allora l’ID
in realtà rimane lì segretamente nascosto
ma stiamo andando a dire okay questo o
è andato ora quindi non mostrarlo all’utente
interfaccia che abbiamo chiamato la pietra tombale
c’è un’altra stessa posizione esattamente così
cosa hanno inserito due persone allo stesso
posizione quindi facciamo un esempio più semplice
documenta sì ABC con ID 1 a 2 a 3 a
e ora diciamo che x e y vengono inseriti
qui tra a e B così la mano sinistra
l’inserto laterale X e y dà loro due nuovi
ID secondo la regola che io
specificato in precedenza, quindi 4a e 5a e e
quindi ciò che significa qui è inserire X
dopo un 1 a inserire y dopo per ae on
dall’altro lato sul lato destro
Ho intenzione di inserire P e Q e faremo
avere di nuovo la stessa regola per l’assegnazione
Gli ID quindi ottengono 4b e 5b come ID
e compaiono anche tra A e B e
ora dobbiamo assicurarci che tutti
queste lettere finiscono in qualche tipo di
ordine coerente su entrambi i nodi
in seguito e così prendiamo quelli
operazioni e applicarli all’altro
lato quindi inserisci P con il nuovo ID per B
dopo 1 a 1 a è la prima lettera a così
inseriamo P lì e quindi inseriamo Q con
lettera con ID 5 B dopo 4 B 4 B
qual è la lettera Q che abbiamo già
inserito in modo che possiamo mettere la chiave che è
qual è la lettera P per B era la P così
il Q con 5 B va dopo il 4 B così noi
metti un P QXYB BC così ora ok lo trova
finora abbiamo bisogno di assicurarci che
dall’altra parte in realtà stiamo andando
finire con la stessa cosa, quindi abbiamo bisogno di
assicurati che la x finisca qui dopo
il PQ ma prima del B perché se noi
mettere il X qui poi il 2 sarebbe
incoerente così bene come lo facciamo
ora perché il messaggio sarà
lo stesso il messaggio sta per essere
inserisci X con ID per un dopo 1 a, ma se
lo mettiamo dritto
dopo 1a poi la X andrà qui e noi
avere un’incongruenza, quindi lo farò
introdurre un piccolo algoritmo che utilizza
questi ID e questo è l’ ID di ricerca
l’ operazione in entrata sì, quando sei
applicando un’operazione da cui proviene
un nodo diverso in questo caso per quello
a così per a è l’operazione in arrivo e
per prima cosa troviamo la posizione dopo la quale
vogliamo inserire quello a è qui così
iniziamo qui dopo la a e guardiamo
il prossimo l’ID del prossimo elemento in
quella lista che è per B e se quell’ID
qui per B è maggiore di quello in arrivo
elemento ID per un poi andremo a
saltare sopra e se è maggiore il
il prossimo è più grande , lo faremo di nuovo
saltiamo sopra questo e continuiamo a saltare
finché non troviamo un elemento che è di meno
che l’ID del funzionamento in arrivo in modo
2 a è inferiore a 4 a così in questo ordine
qui guardiamo prima il numero quindi
quest’ultimo quindi qui per B è maggiore di
per a perché B è maggiore di un 5 B è
decisamente più grande di un perché 5
è maggiore di 4 ma 2 è inferiore a 4
quindi ora sappiamo che dobbiamo inserire tra
il 5 B e il 2 a
whoo e poi per l’operazione finale è
in realtà è facile quindi inserire Y con ID 5
un dopo un po ‘per un è qui così 5
le età vanno dopo di esso e questo funziona e se
ti stai chiedendo di saltare qui
non si applica su questo lato perché qui
il per B è maggiore di 4 a così quando noi
inserito questo per B qui non abbiamo saltato
oltre per a perché 4 B è maggiore di 4
e quindi questo funziona davvero e tu sei gentile
di averlo effettivamente provato
matematicamente per convincere te stesso
funziona davvero in tutti i casi, ma abbiamo
lo ha dimostrato e quindi crediamo davvero
questo e così Parral ora abbiamo un
algoritmo che ci permetterà di fare
questi cambiamenti contemporaneamente senza nessuno
trasformazione senza alcun coordinamento
e permettici di finire nello stesso modo
posto quindi diciamo che il nostro documento è hey
ragazzi e decidiamo che non è così
abbastanza neutrale rispetto al genere così uno
la persona lo cambierà per ehi
stanno andando tutti e l’altra persona
per cambiarlo per pagare la gente
e cosa fa il nostro editor in questo caso
ora così ho descritto proprio ora come la cancellazione
funziona e quindi la cancellazione significa solo impostazione
una bandiera su questi, quindi se due persone possono
attualmente elimina la stessa lettera
entrambi eliminano bene la G dei ragazzi
l’eliminazione simultanea è la stessa dell’eliminazione
due volte non ne viene più cancellato
attraverso essere cancellato più volte così
quelle lettere vengono semplicemente cancellate e il
l’inserimento è rimasto perché un inserimento
non sostituisce un altro inserimento quindi a
Almeno per unire ciò che stai per finire
con con è le due inserzioni
concatenato quindi sarà hey tutti
gente o forse sarà hey gente
tutti così è l’ordine di quei due
arbitrario che dipende solo da
coincidenza di come il networking
capita di allenarsi e sai che c’è
nessun ordine che sia un qualsiasi ordine non è alcuno
meglio dell’altro il problema è
solo che quello che abbiamo qui ogni uno
la gente non è una parola inglese e così
hai quasi finito con la spazzatura nel
documento anche se questo è in realtà cosa
Anche Google Docs fa così
punto sono disposto a dire solo okay lo faremo
dì agli utenti che guardano qui questo
non supera il correttore ortografico ed è
forse possiamo fare un avvertimento dicendo hey
diverse persone hanno modificato il documento in
nello stesso posto l’attuale Google Docs
non fa nemmeno questo avvertimento
lascia gli umani troppo chiazzati da soli
e sembra funzionare in pratica così io
pensa a questo punto diciamo okay
è abbastanza buono che non ci proveremo
fare un’analisi grammaticale del
frasi e si fondono
automaticamente in modo che obbediscano all’inglese
grammatica perché non è così
lavoro in realtà le persone hanno provato che e
semplicemente non ha funzionato, quindi abbiamo questo
CR DT questa struttura dati per ordinato
elenca a quali diverse persone possono cambiare
allo stesso tempo descrive la cancellazione e come
quelle opere sono ancora molto aperte
domande là così il problema con
la cancellazione qui è che dobbiamo effettivamente
ricorda per molto tempo dopo
dove un ID particolare pacifico è perché
usiamo questi ID come posizione nel
elenca come un indirizzo come un puntatore e
quindi non possiamo cancellare solo se qualcosa
viene eliminato dal documento che non possiamo
quindi rimuovilo e dimenticalo
interamente perché poi qualche operazione
entrerebbe e inserirà dopo 503 a e
andiamo 503 a scusate che è stato cancellato I
dove mettere quell’inserzione così abbiamo
per mantenere quelle cose che sono chiamate
anche le pietre tombali non hanno parlato di come
per annullare, come sai controllare Zed
digita annulla o come riordinare gli elementi
nella lista che è interessante
o come fare tutti questi ID
efficiente quindi non ci vuole troppo
archiviazione quindi ancora un sacco di domande aperte
lì penso che l’ algoritmo di base sia
tipo di multa, ma in realtà metterlo
in pratica è ancora avrà bisogno di un
un po ‘di lavoro ma di cui voglio parlare
anche altre cose in realtà così noi
stavamo parlando di questi documenti JSON
le cose precedenti e così interessanti accadono
quando più persone possono attualmente cambiare
Documenti JSON che non accadono solo in
il caso di un documento di testo, quindi diciamo
siamo arrivati qui è un po ‘forzato
esempio ho paura di una mappa di colori e
quindi questo è immaginare questo è un vero e proprio
struttura quindi non è come parentesi graffe
virgolette c / o et cetera come testo
documento ma in realtà è il JSON
albero della sintassi questo qui e così uno
la persona inserisce un nuovo colore il colore rosso
in questa mappa e così si finisce
con una mappa contenente blu e rosso e
un’altra persona decide contemporaneamente
in realtà vogliono eliminare il
tutto il contenuto della mappa così lo imposta
la mappa vuota e quindi aggiunge verde in
la mappa e così come ora ci uniamo tutti
questi cambiamenti concomitanti che hanno
è successo qui quello che succede qual è il
risultato ciò che è anche il giusto
comportamento qui cosa cosa ci aspettiamo così
possiamo pensarci sistematicamente e
dite bene, ok, blu contiene blu
il pozzo blu è stato cancellato sulla mano destra
lato impostando l’ intera mappa da svuotare
quindi credo che il blu non dovrebbe essere nel
risultato finale perché è stato cancellato e
la mano sinistra quindi non l’ho toccata
per quanto riguarda il rosso rosso inizialmente no
esiste ma è stato inserito a destra
sul lato sinistro e la mano destra
lato non ho toccato il rosso quindi credo che noi
bisogno di rosso per essere nel risultato finale cosa
circa il verde è stato inserito sul verde
lato destro e non è stato toccato
sul lato sinistro quindi sì, vogliamo
verde per essere nel risultato finale, quindi il nostro
l’esito finale previsto è che dovrebbe
contengono rosso e verde ma non blu
sembra
la mia ipotesi così così possiamo fare quello e il nostro
algoritmo fa questo cosa significa qui
è che dobbiamo tenere traccia di cosa
questo significa che la mappa è vuota
perché se prendi questo e dì su
il client di sinistra che aggiungi per primo
in rosso e poi si prende quel cambiamento
che è venuto dal lato destro che
sta impostando la mappa a vuoto e se tu
basta applicare quello ingenuamente e dire che hai
ha ottenuto un’operazione della sua mappa impostata per svuotare
beh allora hai intenzione di spazzare via il
rosso perché è stato aggiunto il rosso
contemporaneamente quindi dobbiamo in qualche modo
ricorda quale fosse lo stato della mappa
nel momento in cui lo hai impostato per svuotare così
abbiamo qui la cosa è conosciuta come a
contesto causale o qualcosa di simile a
database come reagire per esempio ha
chiunque abbia usato reagisce che ha questo
i tipi di dati funzionano bene , funziona molto
allo stesso modo che tu hai questo
un piccolo extra di informazioni che tu
passare in un’intestazione HTTP e quella
lo scopo è quello di tenere traccia di
qual è lo stato di quale stato era
il documento nel momento in cui lo hai visto
in modo che poi più tardi tu sappia cosa
i cambiamenti devono essere applicati per così guardiamo
ad un altro esempio qui abbiamo
di nuovo e il nostro esempio di lista delle cose da fare e
abbiamo comprato latte e non lo è ancora
fatto e così sul lato sinistro e
modifica succede e elimina solo l’ acquisto
latte dalla lista perché forse è
fatto o forse sappiamo che no
più bisogno di latte o qualunque cosa sia giusta
rimosso dalla lista sulla mano destra
lato qualcuno impostato su true quindi tocca
il bottone che ha detto di comprare il latte
fatto per vero cosa succede se proviamo a
uniamo questi due diversi aggiornamenti che possiamo
applica la stessa logica che avevamo ora
con i colori con i nidi nidificati così
con i colori quello che abbiamo detto va bene
contiene ciascuno dei diversi
cose a seconda di chi ha modificato cosa va bene
quindi il titolo di acquistare latte a sinistra
lato della mano che è stato eliminato perché noi
cancellato l’intero oggetto da fare quindi immagino
il titolo non dovrebbe essere nel risultato
il lato destro non abbiamo toccato il
titolo in modo che deve essere cancellato cosa
su fatto falso
ben fatto falso è stato cancellato a sinistra
mano
e sopra scritto sul lato destro
con fatto vero
quindi immagino che il falso sia fuori questione
fatto vero non vero non è apparso
il lato sinistro e la mano destra
lato fatto vero è stato aggiunto quindi non eravamo
fatto vero di essere un risultato finale così
se applichiamo esattamente lo stesso ragionamento
la logica con cui ci ritroviamo è una cosa da fare
articolo che canna contiene la bandiera fatta
vero ma senza titolo e questo è un po ‘
non è quello che ti aspetti perché, come noi
applicato esattamente la stessa logica ma cosa
abbiamo finito con qualcosa è quello
sembra strano e sembra strano perché
abbiamo tipo questo schema implicito
qui ci aspettavamo di fare l’oggetto per sempre
avere un titolo e il campo finito ma questo
unire qui è essenzialmente manomesso
il nostro schema quindi cosa facciamo qui forse?
abbiamo bisogno di uno schema per dire esplicitamente
esattamente quali campi deve avere qualcosa
ma in tal caso cosa faremo se
qualcuno cambia se cambia una persona
il nostro campo all’interno di un oggetto che ha a
schema e un’altra persona lo cancella
tutto l’oggetto bene diciamo il
la cancellazione vince
quindi in tal caso eventuali modifiche alle cose
all’interno dell’elemento eliminato stanno andando
essere perso ma abbiamo detto prima non lo facciamo
vuoi perdere i dati quindi come risolverli
questo o forse diciamo in realtà se
qualcuno cambia contemporaneamente questo e
set fatto per vero allora siamo in realtà
intenzione di riportare il titolo anche così
anche se il titolo era in realtà
cancellato sul lato sinistro abbiamo tipo di
resuscita tutto questo elemento eliminato e
dì ok, tornerà a entrambi
titolo e fatto vero ma poi abbiamo
dimenticato del fatto che qualcuno
cancellato questo elemento così sembra
qualcosa deve dare qui e noi
non so davvero cosa sia possibile
dì che potrebbe sovrascrivere qualcosa
con una mappa vuota non dovrebbe avere il
stessa semantica dell’eliminazione e poi
lo aggiungiamo di nuovo o forse dovrebbe
ho la stessa semantica quindi ho paura
questo finirà leggermente
nota deprimente che è come noi semplicemente
non so come esporre questo tipo di
strutture di dati modificabili contemporaneamente a
applicazione in un modo che non lo è
terribilmente confuso e così penso
penso che ci sia molto valore in
avere questo tipo di strutture dati
che puoi semplicemente unire automaticamente
e non è necessario
sulla scrittura della risoluzione del conflitto manuale
codice ma lo stesso tempo di concorrenza
è difficile anche se si astragga in questo modo
può colorare e comunicare e
tutto ciò che hai ancora avuto il problema
che per quanto tempo a volte puoi finire
in queste situazioni unite dove
non c’è un modo giusto per farlo e
quindi se qualcuno di voi ha idee mi piacerebbe
sentire fatto altrimenti continuiamo a
lavora su questo e prova semplicemente diverso
approcci vedi che tipo di API è fatta
senso agli sviluppatori a cui potremmo tornare
le vecchie brutte giornate e diciamo ok siamo solo
intenzione di avere questo scenario oh oh merda
permetteremo agli utenti di risolvere
tutte le modifiche manualmente non penso
questo è molto amichevole per gli utenti e quindi io
pensa che come la popolarità delle cose
come Google Docs e in effetti come meld o
cose del genere per la risoluzione dei conflitti
dimostra che in realtà le persone hanno bisogno di un
po ‘di utensili e di aiuto al fine di a
per risolvere i conflitti che potremmo dire
okay, metteremo tutto su a
server centrale e serializza tutto
questa è un’opzione – ma ancora una volta abbiamo
questo problema che richiede la rete
comunicazione tutto il tempo ed è
roba non funziona offline, che è anche
un peccato quindi penso che valga la pena lavorare
su questo problema, ma è un aperto
problema se ti interessa di più
dettagli su questo ho messo il tweet del
scivoli già qui in modo si può trovare
là e ci sono collegamenti a tutto il
documenti ecco la seconda pagina e qui
una terza pagina di riferimenti
quindi il nostro giornale è uno di quelli lì dentro
ci sono anche molti altri su
diversi compiti di CR e diversi
la trasformazione operativa funziona così
che va in grandi quantità di dettagli
ecco un libro che ho scritto
che ho appena spedito agli editori
solo due giorni fa, quindi puoi averne uno
rilascio anticipato di questo online già
questo non è specificamente su
la fusione è molto ampia
introduzione all’architettura di
database e cosa fanno i database sotto
il cofano anche, quindi se siete interessati a
questo genere di cose mi piacerebbe se puoi
controllarlo fuori forse darmi tutte le risposte
se avete qualche idea su di esso che
sarebbe meraviglioso grazie mille
tutto per venire e spero che tu abbia un
ottimo resto della conferenza
[Applausi]
Hai un minuto o due per
domande sono un po ‘a corto di tempo che facciamo
va bene qualcuno ha qualche domanda o
commenti o qualcosa che abbiamo qualche meraviglia
app giusta così la domanda è a
putter a parte il funzionamento
algoritmo di trasformazione c’è qualche
algoritmo che utilizza operatori ponderati
per decidere l’ultima operazione per
Ad esempio l’operazione di cancellazione ha il
l’impatto più basso per quelle perdite sono loro
in termini di pesi forse rete neurale
probabilità probabili che prendono una decisione
più veloce in modo da poter usare la ponderazione eccetto
quello non risolve fondamentalmente il
problema che è che puoi finire
poi in una sorta di scenari dove
hai appena avuto un’impasse e l’ hai fatto
ha due cose con lo stesso peso
e uno di loro deve vincere e così
puoi quindi decidere arbitrariamente se
una cosa dovrebbe vincere su un’altra e così
questo è quello che stavo ottenendo con gentilezza
di questi trade-off qui come te
potrebbe specificare forse in uno schema alcuni
tipo di annotazione semantica che dice noi
vuoi eliminare per vincere o vogliamo aggiornarlo
vincere il problema c’è che è
davvero difficile, penso di comunicarlo
agli sviluppatori di come quello che fa
in realtà significa
se non hai un dottorato di ricerca in distribuzione
sistemi sarai ancora in grado di
capire cosa questa bandiera nel tuo schema
in realtà significa quindi penso solo a fare
roba comprensibile in un modo che piace
qualcuno che puoi semplicemente costruire e costruire
app e loro non devono sapere
tutti i dettagli interni di come
i conflitti si sono risolti internamente
penso sarebbe molto buono
e quindi forse le priorità sono un modo di
facendo ciò, ma non sono sicuro dell’altro
domanda solo come ho fatto
la mia diapositiva che utilizza un iPad che disegno
li a mano utilizzando un’applicazione iPad chiamato
la carta di un’azienda chiamata 53 va bene, grazie
sei molto per venire
tu

Please follow and like us: