Press "Enter" to skip to content

GOTO 2015 • Coordination-Free Computations • Christopher Meiklejohn


ciao, sono Chris Mikkel John, sono a
bosch oh non li toccherò più come prima
perché ero irritante ma così il nome
di questo discorso è gratuito il coordinamento
calcoli il titolo e l’astratto
non riflettono davvero il lavoro così com’è
ora ma lo ha fatto nel momento in cui ero
invitato a tenere questo discorso così andiamo
anche per cambiare le cose che non avevamo
un nome per molte di queste cose perchè
è come una ricerca e ci piace lo sai
cambiare i nomi e fare ogni sorta di fantasia
roba così la nuova slide del titolo è così
quello di cui parlerò oggi è un
linguaggio di programmazione che stiamo costruendo
si chiama ultimo ed è per la costruzione
distribuito alla fine coerente
computazioni quindi questa è una ricerca congiunta
nell’ambito di un progetto di ricerca finanziato dall’UE
chiamato sync free così ottengo la bandiera
perché dovresti farlo e
Sono Christopher Michael John sono a
bosch oh e il mio collaboratore su questo
il progetto è un ambro pietro in Belgio
potrebbe aver sentito di lui ha fatto un po ‘
roba con alcuni linguaggi di programmazione
volte così comunque andremo a tipo di
parla con la motivazione così è
interessante avere la conversazione che conosci il
ultimo tipo di discorso l’ultimo giorno
perché quello che fai è che ti piace
passare l’intera conferenza su cui lavorare
scivola non vedi nulla che
fa schifo, ma quello che è veramente buono è
che Kyle ha dato una nota dominante davvero sorprendente
dove ha parlato di tutti questi problemi
nei sistemi distribuiti e come si fa
motivo per le operazioni concorrenti e
come pensi della concorrenza e
poi tutti fanno un discorso dove è gentile
parlato di indebolire un po ‘di questo
roba e ancora avendo alcuni dei
garanzie e anche Katie così è
davvero grandioso perché in pratica lo hanno fatto
la sezione di fondo del mio discorso per me
in modo da non dover così così grazie a
entrambi e grazie a Kyle così così
che tipo di ben tipo di passare attraverso il
motivazione quindi se hai visto cose di Kyle a Kyle
tipo di fatto questo punto che T CRT sono
davvero davvero fantastico perché loro
preservare queste operazioni concorrenti
ciò accade in un sistema distribuito e
parleremo del perché i T CRT
sono buoni e poi parleremo
sul perché non sono abbastanza e cosa
stiamo cercando di fare per adattarlo a fare
CR DTS più espressivo in più ricco ok
quindi l’ idea generale qui sul
il progetto è che la sincronizzazione è la maggior parte
costoso e poco pratico quando mi riferisco
alla sincronizzazione a cui mi riferisco
cose come ho un database e ho
una copia di questo database
dicendo che sai che sei aperto, ho un
copia di questo database in Virginia e I
voglio sincronizzare qualche stato tra
questi due così la sincronizzazione è davvero
costoso e per molte applicazioni
la sincronizzazione è una specie di
Diritto pratico, quindi andiamo a fare la gentile
di parlare di due casi perché lo sentiamo
la sincronizzazione è poco pratica quindi
il primo è um Rovio entertainment quindi
rovio rende i giochi mobili che potresti avere
sentito parlare di loro hanno fatto questo gioco chiamato
uccelli arrabbiati e quello che hanno sono loro
avere uno stato condiviso tra i client, quindi se
lo pensi come me e Katie entrambi
gioca a Angry Birds e condividiamo la stessa cosa
profilo perché vogliamo conoscerti gentile
di raddoppiare i nostri punti ed essere il migliore
Giocatore di Angry Birds nel sistema che abbiamo
stato condiviso stiamo condividendo un profilo
condividiamo i punteggi che condividiamo
realizzazioni il problema qui è quello
hai lo stato condiviso e i client vanno
offline e non vuoi il tuo sistema
smettere di lavorare non vuoi andare
nel tubo e come aprire arrabbiato
uccelli ed è come se mi spiace che tu abbia
torna online o scusa iscriviti a
le cinque in modo che possiamo calcolare a
Asse round-up e simili condividi i tuoi punteggi
con tutti giusto così così è
qualcosa che semplicemente non abbiamo
e non possiamo sostenere in questo modello noi
bisogno che i clienti siano sempre in grado di fare
progresso sai a seconda offline
e se sai di sapere e quando
i clienti vanno offline, sai di avere
questa idea che se io e Katie andiamo entrambi
offline e facciamo le cose lo faccio alle due
l’orologio e le riprese sono alle quattro
poi veniamo entrambi alle cinque
le operazioni sembrano essere il sistema
concurrent noi non sappiamo veramente quale
uno influenza l’altro che non conosciamo
quale è corretto e non lo sappiamo
quale dovrebbe vincere simile che abbiamo
questo tipo di Internet of Things kind
di brusio dove pensi che sia
sta succedendo ultimamente e l’ idea qui è
che ti sarà piaciuto un po ‘di tempo
stato condiviso ma stai andando sicuramente
avere uno stato disgiunto e lo stato è
andando a essere aggregati e si potrebbe
avere più modi di aggregare il
stato che potresti avere diverso
meccanismi di distribuzione che potresti avere
cose che vanno nella DC centralizzata e
allora forse un sensore può dare un altro
sensore le sue informazioni e può condividere
che i dati per suo conto così di nuovo il
il problema che hai è che hai questo
stato che potrebbe essere ripetuto sul
rete o riordinato sulla rete voi
potrebbe essere il calcolo di cose aggregate
potrebbe andare offline per un po ‘e tu
devi ragionare su ciò che vince hai
ragionare su cosa dovrei fare se
Se dovessi contare questo , sai se ho un
contatore che è alle cinque e tu sai se io
avere un candidato cinque e poi tutti
a un tratto ricevo due aggiornamenti dalle parti
che hanno le stesse repliche ed entrambe
va a dieci
è andato a 10 o è andato a 15 anni
non so che sarebbe potuto andare
ovunque tra così fondamentalmente il
problema che abbiamo a che fare con noi
pensare a questi sistemi è che c’è un
non c’è effettivamente un ordine totale in
il sistema in realtà abbiamo queste
stato replicato di questi client
progredire è tutto cose offline
tornare online in determinati periodi e
non abbiamo alcun modo di ragionare davvero
l’ordine degli eventi che si verificano in
il sistema si potrebbe dire bene e circa
orologi da parete bene se sei andato a Kyles
puoi sapere sperabilmente che abbia dimostrato
che gli orologi da parete non funzionano gli orologi vanno
gli orologi all’indietro vanno avanti, puoi
inclina gli orologi avanti e indietro
può avere un vicino rumoroso su Amazon ec2
e il tuo orologio potrebbe tornare indietro
non posso usare gli orologi e sicuramente
non è possibile utilizzare il flusso applicato dai client perché
c’è questa cosa chiamata Doom
pietre che non entreremo ma è un
cosa davvero interessante che puoi
leggi sulla citazione qui che noi
sono spinners spinners e interessante
documenti come il tipo di Google di tutto il mondo
database di coordinamento distribuito
database coordinato e anche in questo
carta che tipo di dire bene anche con
il miglior hardware questi ricetrasmettitori GPS
che abbiamo in tutte le macchine che abbiamo
orologi atomici anche con tutto questo
roba tutto questo denaro tutto questo
attrezzature il meglio che possiamo fare è
approssimativo qualcosa in un molto molto
piccola finestra ma non lo sappiamo ancora
costruiscono un algoritmo di consenso
essenzialmente in giro come la comprensione
che puoi fare cose con questo
finestra e puoi lavorarci ma
di nuovo così non risolve veramente il
questione fondamentale, quindi, che cosa è gentile
di fondamentale qui e l’idea siamo noi
avere una concorrenza che deve essere
riconciliato dall’utente o dal
sviluppatore di applicazioni mmm mi scusi mmm
quindi parlo come Joe Plumstead
a volte e mi piace rallentare me stesso
giù così stiamo andando a camminare attraverso un
esempio del perché questo è un problema così qui
avremo due repliche del
stesso oggetto assumerà che iniziano
con lo stato vuoto e ciò che abbiamo
qui è in questo momento qui ci ambientiamo così
c’è un registro così come Kyle ha parlato
eventi puoi sapere come ti registri
imposta un valore, quindi impostiamo il valore su 1 on
replica a e quindi inviamo lo stato a
replica essere come qui è il mio stato così
replica essere in questo momento con questa fusione
la linea arriva riceve lo stato e ha
uno così quindi contemporaneamente nel sistema
potrebbero avere otto diversi
tempo fisico parlato al momento come il
il sistema è in grado di ragionare in questo modo
tempo logico su cui abbiamo impostato il valore
replica a2 b2 e impostiamo il valore
diversi sono tre
replica p e ora questi messaggi di unione
succede e finiamo con quello che non so
con cosa finiamo e qual è il
sistema fanno così i sistemi come reagire e
reagire a 0 in particolare hanno fondamentalmente
questo tipo di permesso alla talpa consente la talpa vera
cosa fratello e cosa farà sarà
memorizzerà entrambi i valori li memorizzerà entrambi
valori e quando vai a leggere sei
andando a prendere due e tre e va bene
a voi per prendere una decisione su come
risolvi questo, quindi questo non è proprio come
la migliore astrazione non è la migliore
cosa utile che potresti essenzialmente
costruire una grande scala da scegliere
il tuo sistema che è già difficile ma noi
avere una soluzione giusta, quindi abbiamo questo
cosa chiamata CRT stuzzicare che un sacco di
le persone hanno menzionato e credo che lo farò
parliamo anche di loro perché
sono fantastici immagino e e cosa loro
stare per è replicato senza conflitti
tipi di dati quindi ci sono dati
strutture progettate per
distribuzione e queste strutture dati
avere una funzione di risoluzione deterministica
così dicono in caso di concorrenza
o arbitreremo per alcuni
valore applicheremo qualche pregiudizio
faremo qualcosa ma noi
garantire che sappiamo come unire
questi valori e possiamo farlo
automaticamente così se guardi i sistemi
come da te se da te è uno dei
primi sistemi a tipo di pongono questa idea
che potresti avere un server divino
unire la funzione specificata dall’utente
e questo era un modo per risolverli
operazioni simultanee Co deities our way
per formalizzare questo quindi cosa fa CRT T’s
sembra che abbiano questo determinismo
funzione di risoluzione arrivano in a
varietà di sapori abbiamo mappe come a
dizionario che abbiamo messo insieme
diversi tipi abbiamo contatore come a
un sacco di diversi tipi abbiamo multi
registri di valore che abbiamo l’ultimo reuter vince
registri e poi c’è come un causale
l’ultimo scrittore vince il registro e noi
avere grafici e reagire oggi noi
supporta i primi quattro e i grafici
c’è una carta tipo pseudo
implementazione del codice eseguita da Mark
gruppo di supereroe che è il primo a
formalizzare il modello cotp e il
proprietà che CR dt ha realizzato nel
il sistema è una proprietà che chiamiamo
consistenza definitiva forte monotona così
questa è una specie di raffinatezza sul
forte proprietà di consistenza finale
quello era originariamente posto in questo documento
se sei interessato e quello che dice è
che se hai repliche in questi
repliche sono corrette che non appena il
sistema garantisce che tutti gli aggiornamenti sono
consegnato a tutte le copie del
oggetto nel sistema quindi ogni oggetto
osserva gli stessi aggiornamenti indipendentemente da
ordinare indipendentemente dal dosaggio e
indipendentemente dal fatto che i messaggi vengano consegnati
più volte
finirai con lo stesso palco così
Finirò con lo stato equivalente così
questi oggetti sono effettivamente di tipo
risolutamente deterministicamente ad un valore
che puoi programmare di nuovo così non lo fai
devo pensare che un messaggio di riordino
potrebbe causare un oggetto divergente
due repliche diverse per spiegare tutto
di questa roba pazzesca ha detto che la gente potrebbe
non so quante persone sanno di crd
stuzzicare guarda questo ragazzo senza divinità sociali
oh stiamo andando a parlare di un esempio così
pensiamo a quest’ultimo esempio
immaginiamo di avere questo registro
supporta la scrittura di numeri naturali quindi 0 su
all’infinito e l’arte della nostra resina sono i
la funzione di unione sarà massima in questo modo
esempio abbiamo questi concomitanti
le operazioni emergenti arrivano e
indipendentemente dall’ordinazione di questi
operazioni a prescindere e le cose sono
duplicati o batch in modo diverso finiamo
con il risultato giusto perché il max
andrà sempre verso 3 quindi
questa funzione di unione sai se vuoi
per entrare nella pesante matematica la fusione
funzione e mi sto davvero incontrando
ma la funzione di unione è essenzialmente a
associativa commutativa e idem pit
in e il tipo di funzione definisce questo
crescita monotona della struttura dei dati
col tempo quindi vedremo che Gesù parlerà
un po ‘più complicato
esempio quindi stiamo andando a guardare un set
quindi uno dei possibili tipi di set in a
la letteratura di crdt è chiamata l’oor set così
questo è un set di rimozione osservato, quindi cosa?
questo set fa provare ad approssimare come
il migliore possibile un tipo di dati sequenziale
versione del set, quindi quello che dice è questo
sotto operazioni simultanee quindi al
stessa ora se aggiungo e rimuovo quello se io
aggiungi e rimuovi lo stesso elemento dell’annuncio
vincerà così l’annuncio vincerà e quando
questi oggetti si fondono sarà ancora in
il set e il ragionamento per questo annuncio
bias c’è anche una versione di bias di rimozione
pure, ma il motivo del consiglio è
perché dal punto di vista dei programmatori
non puoi necessariamente rimuovere gli oggetti
non ho osservato a meno che non ciecamente
sparare aggiornamenti senza leggere, quindi questo è
il più vicino approssimativo perché tu
impossibile mapparlo come se fosse diretto direttamente a a
versione sequenziale di un set perché
non ha senso perché è così
non gestisce la distribuzione proprio così
cammineremo sull’esempio così qui potrebbe
essere un po ‘piccola mi scuso con quelli
di voi nella parte posteriore che avremo
tre repliche dello stesso oggetto per favore
in questo esempio queste linee tratteggiate
rappresentano fusioni e vedremo che alcuni
di loro richiedono più tempo di altri e
avremo questa tre tupla
ecco quindi queste tre tuple che vanno così
questo è
sarà il valore osservato dall’utente e
questo sarà il metadata e
questa sarà la notazione per il
resto della presentazione e in questo
presumerà che la strada sia rupale
rappresenta il valore e quindi un insieme di
identificatori univoci di aggiunte e quindi
una serie di identificatori univoci di rimozioni
quindi quello che fai è se voglio determinare
se uno è nel set, prendo il
differenza tra il set di annunci e il
rimosso se il set di annunci è un superset
dei rimuove quindi l’oggetto è nel
imposta quando rimuovo un elemento cosa faccio
Prendo tutte le aggiunte osservate e
li aggiungo al set di rimozione, quindi I Union
li nel set di rimozione così in questo
esempio inizio e ne ho due
operazioni simultanee su questo dato
Ne aggiungo uno e ne aggiungo uno in modo che OneNote veda I
genera un identificativo univoco chiamato be
e mi scuso per il riutilizzo delle lettere
quello non stava pensando chiaramente quando l’ho fatto
questo e al nodo ai generano un unico
identificatore di un così aggiungo quelli al
settare bene e poi vediamo che inviamo
questi uniscono i messaggi quindi è scontato
come replica ottimistica non lo siamo
parlando di un quorum a quorum maggioranza
sistema qui e poi ho una rimozione così
questo rimuove il nodo C sulla replica vedi
non ha osservato nessuno di questi stati da a
ma i messaggi di unione non sono arrivati
quindi C può solo rimuovere le aggiunte
E ‘osservato quindi ciò che fa è esso
prende questo prende questo dall’annuncio
imposta e lo usi nella rimozione
impostare e poi alla fine, quando lo sapete
consegnare tutti i messaggi nel sistema I
finire con la stessa cosa così come questi
unire i messaggi vengono in I Union questi annunci
set e I Union i set di rimozione e il
la struttura dei dati avanza monotonicamente
lo stato continua a crescere e finiamo
con il risultato desiderato così è
grande e mi piace è davvero bello avere
questi singoli dati che puoi
operare oltre ma che come si può costruire
un programma come puoi costruire un livello più alto
tipo di livello di cosa che ha lo stesso
proprietà che questi dati individuali
gli oggetti hanno così un po ‘di storia
la ragione per cui la lingua si chiama ride è
perché il reticolo è un semi reticolo
efficacemente è l’astrazione principale che
stiamo usando per modellare questi tipi di dati così
nello stesso tipo di stile di
l’etimologia è la lista in cui la lista è il
l’astrazione principale che puoi porre sono
come i nostri reticoli che sono componibili così a
piccola lezione di storia sul nome così
quello che stiamo cercando di fare è usare questi
reticoli è l’astrazione principale e
quindi costruisci programmi più grandi che trattano
con questi reticoli quindi andiamo a
considera questo esempio dove ne abbiamo due
elementi di dati
gli elementi di dati verranno replicati
ma abbiamo due elementi di dati indipendenti
quindi questi sono due set di crdt che non siamo
andando a considerare i metadati qui e
quello che vogliamo fare è che possiamo comporre
li usano come un incrocio a destra
e otterremo l’intersezione
calcolerà tre e ogni volta che questi
cambiano gli elementi di dati che vogliamo
intersezione per ricalcolare il tipo di in a
stile di flusso di dati e quindi vogliamo
aggiorna questo set finale e ciò di cui abbiamo bisogno
per garantire qui è che non possiamo ingenuamente
solo tipo di spostarlo come un trasporto
questi valori qui non posso semplicemente applicare a
intersezione normale contro l’utente
valore osservato che ho bisogno di fare
questi metadati che non vediamo qui
quello era nell’altro diagramma che ho bisogno di
che i metadati abbiano un senso trasparente
quindi l’utente dovrebbe programmare come questo ma
dovrebbe preservare i metadati attraverso
tutte quelle trasformazioni trans e poi
di nuovo potrei voler fare questo voglio
rendere l’uscita crdt e quindi comunicare Oh
applica un’applicazione di funzione su di esso in modo che io
applica una funzione mappa che conosci bene
di moltiplica solo l’elemento nel
impostare i tempi stessi e poi ho questo 9
e questo è un altro crdt quindi ho questo
frammento e voglio che questo frammento sia
la composizione di questi due ha anche
che uniscono proprietà per avere anche quello
forte proprietà di consistenza finale e
voglio anche questo frammento di programma a
avere quella forte coerenza finale
proprietà e quindi voglio il
intera applicazione per avere questo forte
eventuale proprietà di consistenza e questo
la proprietà mi permetterà di prenderle
programmi e replicarli posso
replicare gli elementi di dati che posso replicare
anche l’intero codice dell’applicazione e
allora posso garantire che questo e
questi sono i merger ball che sono
comparabile tramite ordine parziale sul crdt
e hanno tutte queste belle convergenze
proprietà in modo che se ricevono
aggiornamenti in un ordine diverso che garantisco
che l’intero programma finisce per essere
corretto quindi il problema con questo è questo
funzione di applicazione e dati
la composizione non è banale, chi lo farebbe
Ho pensato che volevo dire che non sarei
quassù se era banale, così così
questo esempio andremo a prendere il
cosa precedente da prima e noi siamo
andando ad applicare una funzione quindi questo è un
funzione che prenderà il
elementi in un set e mapparlo a due così
questa è la funzione applicata al
i valori nella replica vedono così come vedono la replica
cambiamenti applichiamo le trasformazioni a
gli articoli qui così come le fusioni entrano
lo deriviamo e ora ne abbiamo due vuoti
messo a punto ok ora posso farlo qui
quindi posso rimuovere quella replica per il
bene del diagramma e posso applicarlo
a così come questi si fondono i messaggi arrivano come
Ho applicato queste funzioni, mi scusi
basta applicare le funzioni contro
valore specificato dall’utente e ottimo così ora
tu hai quello e io ho questo
e ho queste due cose ma c’è
un problema giusto perché il problema è
è che questa funzione viene applicata alla
valore esterno giusto e questo esterno
valore non mappa i metadati attraverso
così ora se per qualche ragione questa funzione
applicato alla replica vedi succede
dietro e manca un aggiornamento e io
imbattersi in uno scenario in cui devo e
Ho il set vuoto che non so come
risolvilo e sono tornato al
situazione in cui l’utente ha bisogno di dire
cosa deve succedere per mappare questo
i metadati sono fondamentali e la differenza
che vediamo qui è che l’utente vuole
programma contro un valore osservato dall’utente di
la struttura dati che vogliono pensare
sui valori della struttura dei dati
e non i metadati ma vogliamo il
le applicazioni per lavorare davvero contro
lo stato che vogliamo che questo stato sia
trasformato vogliamo applicare questi
trasformazioni attraverso tutti questi
composizioni e tutti questi programmi e
avere questa meravigliosa bellissima convergente
sistema e la mappatura dei metadati è
non banale e non possiamo unire le cose
senza i metadati quindi c’è un mucchio
di carte che hanno parlato di questo
Neal Conway inizialmente è stato portato
questa idea in fiore dove alcuni di essi
dove parla di alcuni dei
dilemmi di portata e problemi con
composizione e funzioni e perché tu
devono sigillare le funzioni e congelare
funziona Russell Brown un collaboratore di
il mio ha trattato molto molto lottato per a
anno con il tentativo di capire come
fallo all’interno di un elemento dati correttamente
e grazie a Dio un rapido controllo perché noi
ho trovato alcuni casi di pazzia che lo farebbero
hanno sollevato le condizioni che avrebbero richiesto
come serie di interviste da produrre
e finalmente abbiamo scritto un articolo su bene
okay abbiamo finalmente capito per un
singolo oggetto possiamo romperlo
oggetti e no sei tornato allo stesso
problema quindi c’è stato un sacco di lavoro
questo è successo negli ultimi due
anni su questo tipo di idea, quindi cosa facciamo?
propongo quindi sto proponendo questo linguaggio
chiamato ultimo è a è un linguaggio così
è la semantica che si esibisce per fare i dati
digitare la composizione è una distribuzione
runtime costruito in cima a reagire o così il
modello di distribuzione utilizzato per reagire
il database fornisce la distribuzione
di CR DTS e qualche anti entropia
proprietà e finalmente è proprio ora
è una biblioteca erlang che speriamo di trasformare
questo in un linguaggio molto simile a Peter
una persona PL che si sposta nel distribuito
mondo dei sistemi e io sono un distribuito
persona dei sistemi che si sta spostando nel mondo PL
quindi speriamo di poterci incontrare
qualcosa di veramente bello e avere un
linguaggio che può essere eseguito come llvm o
qualcosa e tu sai che possiamo farlo funzionare
dappertutto e ti spingo a
clienti ma in questo momento per lo scopo di
facendo la ricerca su cui ci stiamo concentrando
Erlang che è il nostro nucleo
competenza a questo punto e il modello
tipo di realizzazioni crd stuzzica i flussi di
cambiamenti di stato così ci piace pensare che
sai CRDT è un oggetto che
evolve monotonicamente nel tempo a
replica singola in modo da avere questi parziale
ordini applicati ad ogni replica e noi
voglio collegarli attraverso questi
processi monotone così processi
tipo di leggere e fare un cambiamento così tu
sapere semplificare che se ci pensi
quel grafico che ho mostrato in precedenza con il
intersezione vogliamo solo averlo così
che quando cambiano gli input cambiano
un po ‘di output e vogliamo garantirlo
lo stato è sempre in crescita, siamo sempre
tipo di ottenere quella proprietà monotona
questo ci permette di unire sempre portando
quel metadata attraverso e il sistema
fornisce un mapping uno-a-uno su un DTS CR
e una mappatura molti-a-uno di CR DTS come
mostri come ti ho mostrato attraverso il precedente
fai scorrere con l’applicazione il primitivo
operazioni fornite dalla lingua
un’operazione di lettura monotona, quindi è così
tipo di una versione modificata della lettura
superiore alla soglia di lettura operazione che
Lindsay Cooper ha pubblicato il
gli alvars funzionano su di esso fornisce una sessione
garantire quel tipo di nodi incrociati
quindi puoi fare una lettura con un causale
contesto e assicurati di leggere sempre
un oggetto futuro e non si vede mai
oggetto precedente nel sistema ha un
aggiorna l’opzione che ti permette di aggiungere
cose e cambiare i loro compiti in altro modo
il sistema sarebbe inutile
filtro funzionale delle operazioni e
piega ha impostato le operazioni teoriche
come unione di prodotto e intersezione
e infine tutte queste operazioni sono
sollevato per operare sui metadati così
non focalizzi e programma specificamente
con i metadati quindi vedremo un
esempio di una mappa Dio così santo che ha ottenuto
tagliare in cima oh dio dannazione ma um ma
quindi intendo l’idea che tu sia qui
so che abbiamo un’applicazione di funzione qui
questo non è nemmeno un vero piacere
distribuzione di come questo sarebbe simile
perché hai tutti questi fallimenti
capita qui che Kyle ha parlato
come questa nuvola malvagia che è nel
al centro dove tutte queste linee vanno dappertutto
il posto così abbiamo questa funzione
applicazione e abbiamo questa funzione
applicazione che è replicata e loro
tutti questi cambiamenti osservare affatto
tempi diversi ma questa unione di proprietà
e portando con sé questi metadati
in definitiva ci consente di avere un programma
questo ha i metadati che ci permette di
motivo per l’ordine che le cose
è successo dove gli oggetti sono come il lontano
loro dietro e tipo di ottenere questo
meraviglioso
composto sistema di crdt quindi cosa fa il
l’architettura di questo linguaggio sembra
quindi si basa sulla realizzazione del sistema
un mucchio di variabili in questo tipo di
archivio di dati condivisi che si adattano e
diresti che come ogni tipo di nodo
ha qualche sottoinsieme di queste variabili noi
integrare con leveldb bit kaska Nets
leveldb è ovviamente il più ottimizzato
motore di archiviazione che possiamo usare per persistere
cose che hanno la lingua in realtà
funziona abbastanza bene EDSA specificamente usato
così possiamo controllare rapidamente l’implementazione
quindi possiamo mettere in modo casuale
generare reticoli e quindi tipo di fare
sicuro che tutto avvenga correttamente
le cose vanno al valore corretto e noi lo facciamo
questo usando il quick tech statham
estensioni che sono fornite nel
La versione di Erlang di eq c usiamo il crd
stuzzicare che sono stati costruiti da Brown Russell
e le culle sean nella reazione ET aperto
la libreria di sorgenti e reagisce fornisce a
Implementazione di Erlang puramente funzionale
di tutti quei critici di cui si parlava
prima c’è un sacco di novità
implementazioni solo ieri sera a David
Greenberg a due sigma rilasciato a
versione di chiusura del nostro set ottimizzato
in una libreria open source che è veramente
fantastico e lo ha testato molto pesantemente
con credo che tu usi il test di verifica
che è stato scritto da una chiamata che hai
ex mio collega che è
simile al controllo rapido che abbiamo
semantica centralizzata in modo che possiamo correre su a
nodo singolo e possiamo avere il tipo
sistema eseguito su un singolo nodo su a
copia singola di un crdt per test e
tipo di simulazione di distretto diverso
modelli di distribuzione che abbiamo a
anche una sorta di semantica distribuita
quello ha realizzato il cdr preso in giro come singolo
e abbiamo alcune prove su come noi
garantire anti entropia e progresso di
il sistema su cui abbiamo un intero articolo
questo quindi se sei curioso di sapere come tutto
questo funziona sarei felice di parlare di più
profondità su di esso nel nucleo di reazione
implementazione di questo CR DTS
distribuito su un hash coerente come
utilizzando hashing coerente con hash based
partizionamento abbiamo usato i quorum di maggioranza per
garantire tolleranza ai guasti e alta
disponibilità e in caso di
fallimenti nella rete abbiamo un anti
protocollo entropico in grado di riparare le cose
quindi questo è tutto parte solo assicurandoti
le garanzie del sistema sono mantenute
e finalmente abbiamo un modello ibrido
stiamo usando per esplorare alcuni di questi
diversa Internet of Things
applicazioni e applicazioni mobili
che ci permettono di fare arbitrari
distribuzione
quindi la prossima parte del discorso andrò
per mostrare un codice e poi lo farò
tipo di parlare di tre tipi di esempio di
applicazioni e poi ci tipo di discorso
sul lavoro correlato e dove stiamo andando
con la ricerca quindi la sintassi è gentile
di familiare così questo è erling se questo
sembra che tu sappia se sei un erlang
programmatore questo dovrebbe essere carino
l’erling familiare non ha davvero un
sistema di tipo così dato che dobbiamo
dichiara le cose con i tipi che devi
sapere se lo stai usando osserva rimuovi
set o un set G e forniamo semantica
per mappare tra queste cose in modo che tu possa
mappare e osservare rimuovere set in un set G
e cose del genere abbiamo questo aggiornamento
qui così qui stiamo creando un osservatore
moveset sto chiamando s 1 allora siamo
andando sostanzialmente ad aggiungere elementi 1 2 e
3 a s 1 questo a qui alla fine è il
attore quindi questo è un attore unico ogni
partecipante al sistema deve
identificarsi da un attore unico se noi
vogliamo assicurarci che vogliamo catturare
la cattura tutta la concorrenza e se
sei interessato a quello che puoi leggere
il risultato del bus Sharon che tipo di
ne parla in dettaglio e alcuni molto
matematica pesante e infine finalmente qui
creare un secondo set dello stesso tipo e
ci siamo incontrati tra loro usando questa funzione
e sai che questo è solo il prototipo
sintassi il nostro singolo, lo sai che abbiamo
un intero tipo di estensione che rimuove
distribuzione dall’immagine completamente
quindi possiamo testare le cose e
esplorare diversi modelli di distribuzione
e puoi vedere che è praticamente lo stesso
devi solo fornire un DB di livello
istanza o qualcosa di simile da sapere
come mantenere le strutture dati così
parleremo del contatore pubblicitario
quindi il contatore pubblicitario è il primo esempio
che stavamo costruendo per rovio
intrattenimento quindi questo contatore pubblicitario è
fondamentalmente un contatore per la pubblicità
impressioni vogliamo spingere il
pubblicità al cliente che vogliamo
avere il sistema disattivato pubblicità
ad un minimo di cinquantamila
impressioni così Rovio va bene
visualizzare e aggiungere altro, ma devono
garanzia sotto obbligo contrattuale
che devono mostrare un minimo
il numero di annunci non costa quello
in realtà non li costa più nessuno
soldi per mostrare di più e finalmente noi
otterrà i clienti per essere in grado di visualizzare
questi annunci mentre sono offline così a
guarda il flusso di informazioni che abbiamo a
grafico che assomiglia a questo che è
davvero piccolo quindi andremo ad ingrandire
quindi in questa parte del grafico eccoci qui
andando in un modo tipo di prendere due così
avremo alcuni segnalini rovio
e alcuni contatori di Riot Games sono questi
gli annunci pubblicitari rappresentano gli annunci a cui stiamo andando
tipo di metterli in un gruppo così siamo
andando ad aggiungerli in un set così abbiamo
un insieme di annunci noi
in questi annunci insieme e poi possiamo
tipo di calcolare questo prodotto con
contratto in modo che i contratti siano solo una specie di a
sai fare un esempio un po ‘
un po ‘più contratti complicati fondamentalmente
dì che sai che un annuncio è visualizzabile
quindi calcoliamo il prodotto cartesiano
attraverso annunci e contratti per ottenere questo
aggiunge i contratti e poi filtriamo
fondamentalmente su annunci con contratti quindi questo
è equivalente a un sequel join here the
combinazione di prodotto e filtro e poi
finalmente spingiamo tutti questi segnalini a
il cliente quindi il cliente effettivamente ciascuno
di questi client mobili ha tutto il
contatori o qualche sottoinsieme dei contatori
e il client mobile aumenterà
quei contatori come pubblicità sono
appena giocato e usano un unico
identificatore in modo da catturare correttamente il
infine la concorrenza nel sistema
periodicamente invieranno il loro
pubblicità torna al principale
centro dati diciamo e poi abbiamo solo
avere un processo che aspetta fino a quel momento
il contatore pubblicitario è superiore a 50
migliaia disabilita la pubblicità re
si propaga attraverso il grafico e il
la prossima volta che il cliente verrà on line
ottiene che ottiene il cambiamento in modo che il
il flusso di informazioni in questo grafico è
completamente monotono tutto solo il
lo stato è sempre in crescita abbiamo il
Ciclo nel grafico che tipo di spinte
i dati tornano attraverso ti facciamo rispettare sai
questo processo infinito di invio di dati
attraverso il grafico attraverso questi metadati
quindi questa è un’operazione di lettura monotona che
ci impedisce di leggere un oggetto se
è nel passato perché c’è Kyle
mandando la sua chemio hai questo
cosa interessante in un distribuito
sistema bene potresti scrivere un oggetto
uno e poi scrivilo 2 e poi leggerlo
nel suo di nuovo giusto, quindi dobbiamo
avere un primitivo nel linguaggio che
impone che leggiamo sempre nel
futuro, perché questo è e lo facciamo
usando un contesto causale in modo efficace
usa come vettori di versione e punteggiato
vettori versione e quelli di tipo
tecniche logiche del tempo per impedirci
dalla lettura di un valore precedente nel
sistema perché i fallimenti saranno inevitabilmente
capita che stiamo andando a guardare il codice
non perché voglio che tu legga il
sintassi e tutti i commenti che ho scritto
perché voglio che tu veda la dimensione di
il codice quindi in questo esempio abbiamo questo
l’allineamento della diapositiva è davvero
irritante ma in questo esempio abbiamo un
cliente quel tipo di te lo sai
visualizza gli annunci quando riceve un messaggio
per visualizzarli abbiamo un server che
basicamente questo dovrebbe essere un cinque
un 50.000 scusate si legge e in sostanza
blocchi finché il contatore non arriva a quello
punto quindi questo è l’uso del
operazione di lettura monotona e poi noi
avere il resto del codice in questo modo
la sezione è responsabile della sola creazione
le pubblicità quindi creiamo annunci e poi li inseriamo
il
e imposta quegli annunci sono unici
identificatori calcoliamo il prodotto e
filtro fondamentalmente solo un paio di molto
semplici funzioni inizializziamo un mucchio
dei clienti e inizializziamo un gruppo di
server e tutto questo codice è nel nostro
repo puoi eseguirlo e basta fare dei test
e non solo eseguirà il tutto
per te e tu puoi giocarci
così tradizionalmente quando ci pensiamo
distribuzione guarderemmo a questo grafico
diremmo bene come distribuire
questo sulla nostra rete bene normalmente lo faresti
fai bene, diresti ok, questo è
i client questo è il server che eseguirò
questo in un centro dati o su questo sul
cliente giusto ma non c’è niente
dice che la distribuzione deve essere
che rigida nel nostro modello abbiamo potuto fare questo
o potremmo fare questo e il beneficio di noi
è qui che è il sistema stesso
completamente componibili tutti questi confini
ecco queste linee di comunicazione sono
imposto usando cravatta crd con quelli
proprietà di lettura monotone con quello
informazioni sulla causalità, così possiamo
garantiamo che possiamo dire bene
quello che ho intenzione di fare è che sto andando
per eseguire questo nei dati Virginia di Amazon
centro e poi ho intenzione di eseguire questo
componente come forse vicino al bordo
così corro questo in un punto di presenza maggio
essere a San Francisco e poi a Dublino
forse ho eseguito uno di questi in ciascuno dei
Stati membri dell’Unione europea, quindi ne gestisco uno
in Belgio ne gestirò uno in Francia e
forse ne correrò uno in Portogallo e poi
finalmente diciamo bene questi sono dove il
i clienti corrono quindi puntiamo davvero a
costruire un sistema che consenta questo
tipo arbitrario di distribuzione del
lingua pure e avendo questi
ricche strutture dati che ci permettono di
ho capito come cambiano le cose nel
rete e capire quando i dati sono
stantio e quando i dati sono aggiornati otteniamo
questa composizione arbitraria quindi c’è un
proprietà che è bello e questo è un
proprietà che abbiamo appena iniziato così noi
avere il prototipo della lingua
semantica che è il soggetto del
il primo articolo su cui stiamo lavorando
sotto presentazione e poi il
i confini della distribuzione è una specie di
focus del nostro prossimo lavoro quindi il secondo
l’applicazione sta pensando
vista materializzata quindi mi piace molto il
idea di visioni materializzate che voglio
punti di vista materializzati e reagire ma
visioni materializzate e alla fine
sistema coerente o duro perché tu
avere ancora repliche e come si fa
distribuire i programmi e Dio di solito
tutti usano JavaScript MapReduce
e devo eseguire il debug di alcuni come un matto
javascript vm canta e alcuni antichi
versione di spider monkey così ho davvero
non voglio quella roba così voglio
viste materializzate quindi come possiamo noi
sapere quante persone qui sanno cosa
le visioni materializzate vanno bene
importo giusto così qualunque
indice invertito e solare è a
vista materializzata sai in sequel te
avere visto il visto materializzato tutto il tempo
come Neil Conway mi ha detto una volta che lo sai
tutti grandi problemi che ogni grande
il problema nell’informatica è giusto
manutenzione vista materializzata ed io
penso che sia una citazione davvero buona e noi
sapere se l’ha detto in origine ma è lui
Colui che me l’ha detto così, lo farò
tributo a lui e lui potrebbe odiarmi per
ma qualunque cosa intendo significa materializzata
vede l’obiettivo qui è quello di avere
aggiornamento e incrementale che vogliamo
propagare solo Delta’s conosci il
lo schema basato su te conosce lo schema
un po ‘problematico in reazione, ma lo siamo
andando a provare a costruire qualcosa che è
simile al meccanismo 2i e
reagire e questo modello potrebbe essere
generalizzato a qualcosa come voldemort
cassandra o uno qualsiasi di questi stile dinamo
sistemi quindi cosa vogliamo fare così noi
vuoi pensare al database come a
flusso di aggiornamenti così reagire è una logica
unità qui rappresentata da questo cerchio unico
e abbiamo un flusso di aggiornamenti in arrivo
quindi questo è l’aggiornamento alla chiave uno due tre
e quindi aggiornare alla chiave uno e due ma
il modo in cui questi sistemi di solito distribuiscono
dati logicamente non non sempre nel
l’implementazione è come apprendiamo ma lo è
che hai questa replica disgiunta
imposta in modo da avere serie di repliche disgiunte
e non hanno dati sovrapposti e
allora questi aggiornamenti vanno qui così
per semplicità il diagramma che stiamo andando
assumere gli aggiornamenti a k1 vai a
replica set 1 K 2 a 2 e così via e
quindi all’interno di ogni set di repliche come in
reagire oggi hai piena replica
tra i nodi quindi abbiamo tre nodi
e tutti questi tre nodi sono
efficacemente equivalente quindi cosa siamo noi
pensa qui, quindi c’è un interessante
analogia qui che puoi fare al crdt
il mondo è che tu sai di averli
cose che si chiamano computational crd tease
su cui sta lavorando un gruppo di
Nova e dicono bene che puoi avere un
crdt che osserva solo parte del
aggiornamenti che sono davvero buoni
l’analogia con quanto è giusto è molto
simile a dire bene un crdt computazionale
che osservano solo alcuni sottoinsiemi del
aggiorna è simile ai set di repliche
giusto così se pensiamo di reagire
database è solo una grande mappa di CRT T’s
è solo un dizionario, quindi possiamo dire
bene sai bene va bene allora questo
è correlato a compiti computazionali
e poi dentro di noi possiamo pensare
che ogni nodo è essenzialmente un crdt
perché la proprietà crdt dice tutto
le copie osservano tutti gli aggiornamenti alla fine
abbiamo questa forte proprietà di convergenza
qui dentro così quando ci pensiamo
visioni materializzate possiamo pensare bene
reagire è essenzialmente un database che
ottiene un sacco di aggiornamenti e li memorizza
in
e quando leggi un oggetto che è
materializzare efficacemente un oggetto da
il registro giusto così prendi tutto il
gli aggiornamenti nel log vengono capiti alla cieca
e li uniamo tutti e poi noi
darti l’oggetto e questo è
materializzare efficacemente quell’oggetto
giusto, quindi quello che vogliamo fare è quello che vogliamo
avere un modo in cui possiamo usare a
ultimo programma per definire come derivare
qualche altro dato da altri dati
elemento nel sistema che è efficace
manutenzione vista materializzata così in questo
esempio trollato di nuovo ma in questo
esempio abbiamo questo processore dei sogni
modello quindi immagina di avere un modello
per tipo di come leggere i dati da
reagire e scrivere dati per reagire bene cosa
potremmo fare è possiamo costruire l’ultimo
programma che dice va bene posso solo prendere
tutti quegli aggiornamenti e il forte
Proprietà di convergenza Posso prendere tutto
questi aggiornamenti e posso creare un elenco di
tutti gli oggetti nel sistema e ciò che io
posso fare è posso sapere se questi siamo
assumendo che queste siano come una mappa
tipo di strutture dati per il
semplicità del diagramma che possiamo vedere
beh, quello che possiamo fare è anche che possiamo costruire
da questo oggetto in modo che possiamo comporli
mentre stiamo pensando all’ultimo
programmi possiamo costruirne uno che dice bene
Posso raccogliere tutte le persone che sono
oltre i 65 anni e poi posso raccogliere tutto il
le persone sopra gli 80 e io posso incrementale
aggiorna il set da the del set da 65 e
Posso distribuire questa visione che posso avere
più copie di questa vista e posso
garantire che io possa unire questi che ho
recentemente ho garanzie di tolleranza ai guasti
garanzie quindi possiamo anche costruire questo
una delle persone di nome Chris come me
e questo è quello di cui parleremo così
come lo distribuiamo così che possiamo
facciamo è possiamo prendere questa persona nominata
Programma Chris che legge questi valori
fuori dal trdt quindi pensiamo che reagire sia
solo una grande collezione di oggetti e noi
mappa quella impostata nell’insieme di oggetti
che si chiamano Chris, quindi abbiamo tagliato questo
e abbiamo questo, ma fondamentalmente lo facciamo
un po ‘di riscrittura intelligente del programma da creare
un mucchio di mini piccoli programmi e noi
mettili ai nodi e così è
un po ‘ simile a un modello MapReduce
giusto se ho MapReduce di quanto potrei
dimmi bene, lo so che eseguirò il
mappa a tutti i nodi per raccogliere tutto il
persone di nome Chris e poi posso unirmi
li tutti e li producono e ottengono il
elenco completo di persone chiamato corso così noi
avere di nuovo questa proprietà che dice bene
dati i nodi all’interno di un set di repliche tutto
osserviamo gli stessi aggiornamenti alla fine noi
non garantire l’ordine che non facciamo
garantire il dosaggio non osiamo
in plication poiché tutti gli oggetti in
il sistema sul nodo lo riceverà
se effettivamente pongo quei programmi al
i nodi interesseranno anche questi programmi
effettivamente avere lo stesso risultato quindi io
non devi preoccuparti di più
copie dello stesso indice in uscita
sincronizzazione perché so che alla fine
convergere a destra
e posso aggiornarli in modo incrementale e
allora quello che devo fare è solo quello
bisogno di un po ‘attraverso i set di repliche e
facciamo alcune di queste cose oggi in reazione
elenco di sci e 2i meccanismi, solo
convocare questa somma non è come l’aggiunta
questo è come commutativo, quindi
quando eseguo il programma, semplicemente
raccogliere il risultato qui e io solo gentile
di fonderli emergono che si si si
sì, l’ho detto molto male ma tu
so cosa intendevo ma stavo cercando di
distinguilo da come aggiungi sai
ma come se volessi dire una generalizzazione
come ma sì parleremo più tardi ma così
quindi li unisco così efficacemente
questo coordinatore qui è efficace a
funzione ridotta se si pensa come a
mappa ridurre lo stile una sorta di riduttore giusto
quindi raccoglie questi risultati così questi
sono tenuti aggiornati e quindi fondamentalmente
costruisci l’oggetto qui così che anche noi
può fare con questo modello è che possiamo
memorizza questi risultati presso il coordinatore
quindi possiamo incassare i risultati del
esecuzioni qui e possiamo possiamo
diffondili anche attraverso il gossip
e poi quello che possiamo fare è quando noi
eseguire una query che possiamo fare a tempo limitato a
query diciamo che ok va bene se i dati sono a
un po ‘stantio ma voglio assicurarmi
che la query venga eseguita all’interno di un limite a
certo tempo vincolato sicuramente in C vincolato
e quindi posso prendere qualsiasi oggetto che io
ricevuto e unirlo con la cache
copia e garantisce che ciò avverrà
convergere correttamente anche perché il
la copia cache appare come una precedente
versione di crdt una versione precedente di
il CRDD così possiamo fare un po ‘aggressivo
caching lì che è bello perché
di nuovo in alcuni di questi meccanismi oggi
quindi se guardi se ne guardi un po ‘
i problemi che cose come te conosci
elasticsearch hanno con la leucina
meccanismo di indicizzazione è quello di quegli indici
supponiamo che i dati siano completamente disgiunti e
se ti capita di contattare due nodi
per qualche ragione hanno lo stesso dato
e il tuo computer che sai che otterrai
due copie indietro e saranno diverse
l’indice mostrerà che ho avuto due colpi
su due oggetti diversi e non sarà no
uno potrebbe essere solo una copia ritardata che
tu non vuoi vedere e poi questo
ovviamente diventa molto peggio se calcoli
come un prodotto cartesiano e il risultato
della query solare anche perché
vedrai che esplodono quindi è molto
importante in quei modelli che quando tu
esegui la query di ricerca come in Mi piace
nel solare distribuito e nella nuvola solare
e vedrai che vedrai
i risultati diventano un po ‘ pignoli così noi
avere qualche altro lavoro che abbiamo aggiunto
cluck logico ad alcuni del solare
indicizzazione e noi mostriamo come
è possibile applicare lo stesso
rende esistente in CR DTS oggi
questi due alcuni di questi distribuiti
motori di ricerca e così così se noi, se noi
pensa a Internet of Things e noi
guarda questo modello che avevamo prima
questo è il modello di reazione in cui diciamo
okay gli aggiornamenti arrivano in modo logico
sono tipo applicati a queste repliche
set e poi tipo di andare a questi
nodi quindi come fa questo modello
applicare al modello di Internet of Things così
se cambiamo le informazioni
fluisci qui e pensi che bene questi
sono sensori e questi sensori sono
generando aggiornamenti e alla fine quelli
gli aggiornamenti sono aggregati a monte e noi
voglio eseguire così il programma no
trovare più persone di nome Chris
perché questa è un’applicazione davvero scarsa
della rete di sensori dell’Internet of Things
ma tu sai un più realistico
l’applicazione sarebbe se avessi un mucchio
di temperature e voglio allarmare se
una qualsiasi delle temperature capita di essere
oltre 90 gradi che è l’uso molto comune
caso per l’Internet of Things roba noi
può tipo di applicare lo stesso modello qui noi
può tipo di spingere queste applicazioni che
abbiamo derivato da una singola applicazione a
il bordo e poi possiamo avere questi margini
le applicazioni eseguono questo programma e noi
può determinare i sensori che sono finiti
e realisticamente in questi modelli tu
tipo di eliminare questa aggregazione
upstream quindi un sacco di Internet di
Le cose tipo di applicazioni che siamo
guardando che esiste oggi tipo di
aggregare tutti i loro dati a monte o
prova ad aggregare tutti i loro dati
a monte c’è stato un sacco di lavoro
guardando il problema dell’industria
Modello di Internet of Things dove sai
stai aggregando dati dal tuo
sensori in qualche cosa HDFS nel tuo
DC centralizzato ma ora il problema è questo
hai anche i tuoi sensori generano
dati come dati di analisi sui sensori
quindi anche i sensori potrebbero fallire
hai il problema che hai tu
anche bisogno di fare tipo di sensore di rete
roba in cima ai sensori che tu
hanno schierato e molto del tipo di
il lavoro che sta accadendo è stato solo un
carta alcune settimane fa tipo di discorsi
bene, non posso aggregare tutto questo
roba a monte non è pratico
aggregare tutto questo a un
centro dati centralizzato, quindi è necessario
spingere i calcoli al limite quindi ci sono
alcune interessanti applicazioni di RX e
un IDL in stile corba che è davvero pazzesco
ma non so perché qualcuno lo userebbe
quello oggi ma lo sai che le persone lo sono
guardando anche a questo problema quindi se
hai visto cristiani in magazzino
ieri a
ha parlato di alcune delle cose RX come
bene, quindi, di nuovo, cosa stiamo cercando di fare
quindi stiamo cercando di eseguire calcoli
al limite stiamo provando ad averlo così
scrivi questi programmi dove pensi
su tutti i tuoi dati e poi siamo
cercando di fare questo trasparente
distribuzione e stiamo cercando di usare
crdt in modo che possiamo replicare
cose per renderlo fault tolerant e
avere un po ‘di questi bei ordini
proprietà che ci permettono di sapere se
abbiamo visto oggetti nel sistema o no
e un po ‘ di ragione per le cose in quel modo
quindi che tipo di guardare solo brevemente
alcuni degli altri sistemi esistenti
oggi per fare alcune cose così
la maggior parte del lavoro che abbiamo fatto è
basato su oz distribuito così distribuito
oz è una semantica distribuita per il
linguaggio di programmazione odds per il suo
modello di programmazione del flusso di dati deterministico
ancora una volta questo focus di modello è immutabile
i dati si concentra sul singolo incarico
variabili in modo gentile della stessa
il paradigma di programmazione si applica ma tu
tipo di dover cambiare le cose quando
hai a che fare con dati mutevoli come CEO
i doveri sono il nostro lavoro precedente che abbiamo
tipo di discusso prima e ho parlato
riguardo a questo ultimo anno a ricognizione è che noi
tipo di avere un flusso di dati deterministico
modello che ha funzionato su reticoli ma
non era ricco come il modello che ho appena
parlato di oggi fiorire L un sacco di
le persone sono come me, questo è molto
simile alla fioritura quindi è simile a
sbocciare alcuni dei problemi fondamentali di
le differenze fondamentali sono quelle
la fioritura funziona efficacemente a tenuta a
dato il tempo quindi se ho un reticolo così
anche i loro reticoli non supportano
tipo di rimozione senza coordinamento quindi
Non posso usare qualcosa di così ricco come e
osservare rimuovere set nel modello blu come
esiste oggi anche da allora
queste cose sono insiemi che crescono sempre
se hai una funzione a cui è applicato
quello impostato in modo efficace come una funzione
potrebbe calcolare come un booleano oltre set se
la cardinalità è maggiore di 10 o
qualcosa una volta che viene attivato il trigger
il fronte la funzione sigilla efficacemente
non lo distribuisce più sul grafico
e quando leggi quel valore è solo
sempre che così è impostato lo sai
ovviamente quella proprietà del soffitto e il
idea che non puoi usare cose che tu
rimuoviamo il tipo di rimozione
restrizione sul nostro modello così è gentile
di un’estensione di quel lavoro di nuovo il
la roba di fioritura è una specie di logica
approccio di programmazione come
tipo di approccio di programmazione logica
il nostro sta cercando di essere più funzionale
approccio quindi stiamo cercando di farlo molto
simile ai linguaggi funzionali
il lavoro degli alvars è molto simile ai VAR
il focus del lavoro è su un Toron
concorrenza deterministica su un singolo
nota l’elv a cui il nostro non pensa
distribuzione un’altra critica del
il lavoro degli alvars è quello che devi avere
come una sorta di conoscenza a priori di come
la tua struttura dati cambierà
tu sempre bene che la soglia di lettura
il primitivo ha sempre bisogno di conoscere lo stato
e questo è problematico quando usi una o
sono impostati perché genera o set
identificatore univoco non locale questi unici
identificatori ai nodi che sono
eseguendo l’aggiornamento e dato che tu
non può soglia su qualcosa come un no
sono ambientati senza sapere cosa li
identificatori univoci saranno e se tu
soglia sul valore che devi
congelare quindi c’è un lavoro simile e
Lindsay ha un altro articolo chiamato join
forza quel tipo di tentativi di bridge
questi due modelli e in qualche modo estendiamo
funziona anche così se lo sei
interessato a questo e questo è un haskell
libreria in modo da poter giocare con quello
simili i flussi di D funzionano come
si concentra sul fare tipo di avere
calcoli che tracciano la discendenza lì
sono alcune idee interessanti se lo sai
i dati sono un po ‘se non li hai
questa proprietà in cui i dati sono immutabili
e stai per tipo di negozio
dati in HDFS e puoi rieseguire questi
calcola o aggiusta le cose che sono
il fallimento delle informazioni sul lignaggio è gentile
non abbastanza se si dispone di dati mutabili
o se hai dati al limite, così noi
stanno cercando di dire che il
il lavoro di lignaggio non è abbastanza per te
bisogno di questa informazione sulla storia causale a
tagliare per fare alcune di queste cose correttamente
e infine un colibrì è molto
simile modello questo è un questo è un
piattaforma di analisi che Twitter
sviluppato e ha scritto un articolo su
qualcosa gli uccelli un modello simile
il colibrì usa un semi commutativo
gruppi usiamo il commutativo I di CRT T
lo ha scaricato in semigruppi quindi è un po ‘
un modello leggermente modificato ma ha un
tonnellate di somiglianze quindi questo è un
carta interessante se sei curioso
costruire sistemi come quello in modo da concludere
Sto solo andando a parlare di qualcosa
dove stiamo andando con il lavoro così
il primo è la conservazione invariante
se torniamo a quel contatore add
esempio e pensiamo a come ho dato
quelle pubblicità ai clienti i clienti
alla fine ha parlato con il server e
quindi il server disabiliterebbe l’aggiunta
che I Clinton la prossima volta leggesse il cliente
è grandioso ma questo ci permette solo di farlo
imporre un limite inferiore almeno del
numero di annunci che vogliamo
mostra così cosa succede se vogliamo
impone un limite superiore
quindi alcuni dei lavori che di altare e
il nuovo gruppo di naso ha fatto fuoco inova
sull’uso di tecniche di escrow come
i contatori che inviamo al cliente
avere un limite superiore che il cliente può solo
incremento che contrasta un mucchio di volte
prima che debba fermare il trade-off
c’è questo se esaurisci tutti quelli
impressioni prima di tornare online
cosa fai bene in modo che sia
interessante pensare a bene possiamo noi
avere questo tipo di modello ibrido dove
alcuni di quei contatori sono limitati
a causa di alcune restrizioni che il
posti del cliente dove alcuni di quelli potrebbero
non essere così c’è un modello interessante
e hanno una variante di tè crd che
sì che l’escrow genere di cose così
traccia dove sono in corso le locazioni e
lo fa in una conversione completa
autostrada di sincronizzazione che è
diverso dall’impegno originale e
la demarcazione funziona se hai familiarità con
che stiamo guardando al plus causale
consistenze è una grande cosa come
parte del gruppo di ricerca al lavandino
gruppo di ricerca libero sta esplorando le chiamate a
più coerenza causale più coerenza
estende il modello di coerenza causale
transazioni tumorali jable così tu
effettivamente avere transazioni che mai
mai tornare indietro se stai operando sopra
puoi sempre continuare a muoverti
inoltrare questo tipo di estensione come il
Eiger pioggia gentile e quella serie
del lavoro di transazione che è successo e
abbiamo un database di ricerca che siamo
lavorando su chiamato antidoto che è il
altro progetto su cui lavoro su questa parte
di sincronizzazione libera che ha che ha un
protocolli di esempio per plus causali
coerenza quindi questo è così uno dei marchio
gli studenti uno degli studenti del marchio ha fatto il suo
Dottorato di ricerca su questo e credo che abbiano
una prova che dimostra che questo è il più forte
questo è, mi dispiace, questo è il più forte
protocollo di consistenza che puoi fornire
pur essendo disponibile al cento per cento
finalmente tutte le cose che ti ho mostrato
oggi uso quei set che li memorizzano
tre tuple che tracciano ogni edizione
questo è mai accaduto sul set
ovviamente questo cresce senza limiti, quindi è così
un problema g così di nuovo sappiamo come
risolviamo questo abbiamo una struttura di dati
chiamato il set di rimozione osservato senza
lapidi o il o swat e questi dati
la struttura usa i vettori di versione
utilizzare in modo efficace questo tipo di punteggiato
versione vettoriale tecnica divergente
vector set tecnica per memorizzare a sorta di
abbassa questi metadati così non lo fai
preoccuparsi della garbage collection
quindi devi solo preoccuparti per il
numero di attori
nel vostro sistema al posto del numero di
le operazioni sono davvero belle che non abbiamo
ha implementato, ma sappiamo come dovrebbe
lavoro quindi è solo questione di fare
un po ‘di ingegneria e infine Delta State
CR DTS e operazioni crd T sono
due modi per ridurre la quantità di dati
che devi inviare sulla rete il
quantità di dati che devi propagare così
questo è un lavoro molto importante e
la deforestazione è un lavoro interessante
anche se ci pensi se lo facciamo
se facciamo così questa distribuzione arbitraria
se sai se ti è familiare
la deforestazione c’è una carta che
L’acqua di Phillip è stata pubblicata e si concentra
su eliminazione albero intermedio quindi se
fai come una mappa una mappa e mappa il
il compilatore può fondamentalmente ottimizzarlo
quindi lingue come Haskell e chiusura
avere una chiusura di convinzione ha questo ma hanno
avere questo ha implementazioni di questo
anche in Scala e quindi è interessante
per dire bene come si applica questo a un
modello di distribuzione arbitraria proprio così
ora se le cose sono state distribuite sai
cose che non puoi fondamentalmente fare
fusione, ma puoi avere un sistema
deriva un modello di distribuzione migliore che
ti permetterebbe di fare meno calcoli
quindi questa è un’area molto interessante
Ho parlato con alcune persone in merito
quindi finalmente c’è il codice open source
posso controllare che abbiamo questo documento
puoi leggere e questo e c’è
questa conferenza ha chiamato recon che è
e in un bel poke a casa , io e me
parlato a e bachelor unze e tu
dovrebbe venire ad esso e se ti piace
parlando di informatica è lui giusto
Un colloquio con lui quindi consiglio vivamente
quello e sì sarei nei guai se io
non ha menzionato che questa ricerca è
finanziato dal progetto free sink che è
un settimo quadro un settimo quadro
progetto finanziato dal programma nell’ambito dell’UE così
Penso che saresti molto per tutti
i soldi e tutto ciò che hanno
fatto per lasciarci andare avanti
così e questo è tutto grazie

Please follow and like us: