
[Musica]
Grazie, Bridget è davvero fantastico
essere qui presentando a tutti è molto
eccitante se ti sei perso il primo
istanza di questa traccia è molto
discorso argomento terapeutico penso a tutti
di noi che lavorano in sistemi distribuiti
perché molti dei problemi che
Jeff ha parlato nel suo discorso vediamo in
Manta a un gigante quindi lo consiglio davvero
di verificare che fuori
quindi il nome del mio discorso come dice il
slide sta progettando funzionalità per adulti
lezioni di sistema apprese da Manta così
Manta è un’applicazione di archiviazione di oggetti
questo è un sistema distribuito su cui lavoro
su un comune e ci sono stato un paio
anni e così ho visto un bel po ‘ di
il sistema ora e ho anche il
opportunità di progettare una nuova funzionalità per
è questo che è principalmente questo discorso
motivato da e questo è il mio mio twitter
gestire se si desidera vedere tutto il
cose terribili che ho twittato prima
tutto solo a parte sul sito web
per questo discorso c’era una descrizione
che ho presentato diversi mesi fa e
quello che ho scritto me stesso e poi io
notato un paio di settimane fa che lì
sono stati aggiunti anche questi tag aggiuntivi
e io dico tag tra virgolette
perché non potevo cliccare su di loro così io
non so in realtà quali altri discorsi
hanno questi stessi tag ma uno di loro in
in particolare potresti essere in grado di indovinare
quale si protese verso di me e il
primi tre distribuiti open source
nuvola quelle sono tutte cose che penso
ha senso basato sulla mia descrizione
che ho inviato è distribuito
sistema tutto il nostro gigante del software è aperto
fonte incluso Manta ed è
infrastruttura per un cloud in modo che
va bene e poi c’è quest’altra
l’eredità di parole che era lì e
Credo che l’eredità non per colpa del
la parola stessa ha un tipo di negativo
connotazione ed è anche molto divertente
per me quel Manta che è solo un sistema
quello di cinque anni è già legato
ma questo è il mondo in cui viviamo credo
quindi prima di entrare nella nuova funzione
che ho aggiunto a Manta, voglio farlo
datti ragazzi
panoramica di ciò che Manta è e come è
progettato in modo da poter comprendere il
diversi trade-off e design
le decisioni prese per Manta prima di aggiungere
nuova funzionalità ad esso e così è
una specie di versione ridotta del discorso
che diamo ai nuovi ingegneri congiunte che
stanno unendo la squadra di Manta così è
che ti capita che per oggi gratis il
passo dell’elevatore di base per il marketing
Manta è che è un negozio di oggetti e
se questo non significa niente per te
se si ha familiarità con Amazon S3 è
lo stesso tipo di API stessa idea se questo
non significa niente per te è un
posto dove è possibile caricare file e ottenere
indietro e quell’API stessa non è il
più interessante immagino da un utente
prospettiva ma ciò che lo rende veramente
cool per noi persone dell’infrastruttura e
persone che lavorano su sistemi distribuiti
è che è altamente scalabile e
distribuito e ha la capacità di scalare
molti componenti diversi da aggiungere
la capacità del sistema in quanto è necessario
l’API stessa di Manta è basata su HTTP
per ottenere un oggetto fai un HTTP GET per
un put fai un HTTP put e così via e
la cosa che rende veramente Manta
diverso penso da altro oggetto
soluzioni di archiviazione là fuori è così
il calcolo è stato progettato per essere di prima classe
cittadino nel mondo di Manta che chiamiamo questi
Lavori di manta e cosa significa questo
il sistema stesso è progettato con noi
in mente e lo faremo quando invierete un
Il lavoro di Manta è in realtà il programma
spedito ai tuoi dati a riposo invece di
per dire assemblando il tuo oggetto con a
programma in qualche contenitore da qualche parte
il programma che si desidera eseguire verrà eseguito
i dati sul server di archiviazione che è
memorizzato e questo consente una coppia
cose carine come non dover copiare
oggetti attorno al sistema e e
eseguendolo direttamente sui tuoi dati come
chiudi il più possibile per eseguirlo sul tuo
macchina locale l’interfaccia per Manta
sembra molto simile a un file UNIX
sistema quindi questo è un esempio di percorso per un
oggetto J Hendricks è il mio nome utente oops
spiacente
il negozio è la directory principale in fondo
per Manta e poi c’è una directory
lì e un oggetto chiamato il mio oggetto
testo quindi ho una breve demo che non conosco
se giocherà tutto
dove passo attraverso questa diapositiva ma questa
questi sono gli strumenti CLI che puoi usare
interagire con la manta per il nostro nudo
Manta CLI e sto solo creando un
directory mettendo un file in questo
directory ottenere di nuovo fuori
rimuovendo gli oggetti cancellando il
directory quindi tutto il tipo di operazioni
che ti aspetteresti di avere dentro
un file system che puoi fare con il nostro
strumenti da riga di comando quindi sistema Manta
primitivi come ho iniziato ad alludere al nostro
oggetti e directory e oggetti sono
i nostri file e file system parlano e da
una prospettiva di archiviazione in realtà sono
memorizzato come un file flat su disco così noi
non rompere l’oggetto in pezzi
e metterlo su diversi server di archiviazione
per iniziare, per esempio, è solo
qualsiasi oggetto caricato è presente su
server di archiviazione da qualche parte sul disco
oggetti stessi da un utente
la prospettiva è immutabile, quindi se vuoi
per cambiare ciò che un percorso punta solo a te
sovrascrivi completamente quell’oggetto e
allora abbiamo directory che sono molte
come quello che ti aspetti che le directory siano
come e soprattutto sono una lista di
tutto ciò che può sembrare ovvio per a
directory ma in realtà è qualcosa che
è stato davvero pensato da prima
principi nel design e così sarà
vedremo cosa che sembra un po ‘
altri sistemi distribuiti i disegni
vincoli che potresti essere interessato
in è che mantas un sistema CP in termini
del teorema cap che è il motivo per cui esiste
un tappo sulla diapositiva in modo che cosa significa in
termini pratici e pratici è che se
c’è una partizione di rete all’interno di Manta
sta per scegliere di avere un consistente
vista del mondo per l’intero sistema
oltre la disponibilità dei tuoi dati e
uno dei fattori motivanti per questo
è che puoi creare un sistema AP
parte superiore di un sistema CP ma non il contrario
intorno così quando era la squadra di Mansi
hanno deciso di progettare Manta in origine
è stato un buon compromesso perché se
sei interessato a un sistema AP tu
può ancora usare Manta per costruirlo e
l’altra cosa importante è che Manta è
scalabile orizzontalmente ove possibile e
questo significa fondamentalmente se c’è un
collo di bottiglia in alcuni componenti del
sistema possiamo solo distribuire più istanze
Qualunque cosa sia il collo di bottiglia e
speriamo di risolvere il problema e lo abbiamo
visto che per essere vero abbiamo ridimensionato
Manta fino a implementazioni davvero grandi
Samsung ha effettivamente acquistato un gigante
un paio di anni fa con soprattutto con un
interesse per Manta e utilizzo di quello per
la loro infrastruttura in modo che abbiamo questi
schieramenti giganti di Manta e abbiamo
stato in grado di scalarli per Samsung
bisogni che sono stati davvero interessanti
guardo così ora sto andando passeggiata attraverso un
richiedere una richiesta get di base di un oggetto
e questo ti darà il
vortice del sistema e poi
lo useremo per parlare del nuovo
caratteristica che volevo aggiungere in modo tale
la prima cosa che fai come cliente è fare un
ottenere la richiesta – questo è l’ URL per il nostro
distribuzione pubblica di Manta per noi uniti
L’uomo dell’est si unisce alla comunicazione e funzionalmente
questo diventerà una richiesta a questo
servizio muppet che prende il nome
i Muppets ma è un TLS e
servizio di bilanciamento del carico e altro
o meno semplicemente andando a proxy della richiesta
a un server API chiamato muskie e
il muskie farà tutto il resto
coordinamento e sollevamento pesante per
capire dove questo oggetto è e
trasmettendolo in streaming all’utente in modo da Muskies
andando ad autorizzare l’utente per questo
richiesta con mahi a cui inizierai
vedi un tema nautico e tutti i nostri
nomi di componenti se non hai scelto
fuori un raccolto su quello già e ora
stiamo andando a vedere l’architettonico
separazione e all’interno di Manta tra
metadati e archiviazione così i metadati
livello è ciò che memorizza i metadati
oggetti e directory, ma soprattutto
memorizza dove gli oggetti sono nel
sistema in modo che questa separazione sia logica
termini di come pensiamo al sistema
quando lo scriviamo in un diagramma ma
anche in sistemi di produzione veramente grandi
in realtà ottimizzerà i server per
server di metadati o server di archiviazione e
scegli diverse proprietà basate su
che tipo di server è e quindi il
il livello di archiviazione è responsabile per entrambi
memorizzare gli oggetti stessi e anche per
in esecuzione lavori di calcolo sull’oggetto quindi io
accennato in precedenza che quando si esegue a
lavoro in Manta di spedire il programma al
dove i dati vivono così
questi server sono ottimizzati per l’esecuzione
calcolo hanno un sacco di software
c’è già che ti serve se hai bisogno
come la JVM o un nodo o bash qualunque sia
quello sarà lì okay così a questo
point muskie sta per fare un metadata
richiesta perché ha bisogno di capire
dove questo testo di cibo di dati è memorizzato così
parlerà con Electric Moray
che è generalmente un supporto di dati
servizio agnostico del database in cima a
archiviazione di base e parla una chiave di base
protocollo del valore e ne ha anche un altro
funzione che è quella che divide le chiavi
all’interno del protocollo dei valori chiave
in diversi frammenti e questo sei tu
frammenti non familiari è l’idea
di hashing coerente in uno spazio chiave
quindi avremo approssimativamente un numero pari
le chiavi attraverso quei frammenti così elettrici
Moray ora troverà questi metadati
registra nei frammenti e sta andando
per fare coerenza è un hashing coerente
algoritmo e noterete sulla diapositiva
che in realtà non prendiamo la chiave
stesso ma il nome dur di quello e il
la ragione è che vogliamo in ordine
perché le directory siano selezionabili , vogliamo
tutti gli oggetti che si trovano nello stesso
directory per essere sullo stesso frammento
in questo modo possiamo richiederli entro un
quantità limitata di tempo e lo so
saremo in grado di elencare la directory
quindi abbiamo cancellato il nome dur di quell’oggetto
e vedi che è in ormeggio libero
per questo esempio e poi più elettrico
Lo farò solo per quella richiesta fuori a
altri tre per quella particolare carica e
più è un Maury elettrico simile che parla
lo stesso protocollo che non ha
questo ulteriore passaggio di hashing al suo interno
e poi raggiungerà i colpi
negozio di dati reali e per Amanda che usiamo
un servizio chiamato lamantino che è un post
cluster di erba con replica per entrambi
alta disponibilità e durata
garanzie e maggiore facilità andando a chiedere a
Postgres per questo particolare oggetto e
è andare a cercare qualcosa di simile
questo è ciò che molti dei nostri metadati
i record sembrano così c’è una chiave a
tipo che è
sarà un oggetto o una directory
ci sono intestazioni utente che puoi memorizzare
gli oggetti questi sono in realtà sistema
intestazioni non intestazioni utente ma contenuto
la lunghezza è la dimensione dell’oggetto
il livello di durabilità riflette il numero di
copie che archiviamo e per impostazione predefinita
Manta memorizzerà due copie dei tuoi dati
e vedremo un po ‘di più
quello in un secondo tipo di contenuto e poi
c’è anche questo oggetto chiamato squali
e se avete seguito insieme
quasi tutti i nostri componenti sono
squali a tema nautico non lo è
un altro componente a tema nautico e
che si riferisce ai server di archiviazione
loro stessi così questo oggetto ci sta dicendo
quella tassa alimentare è memorizzata in dc2 su cinque
dot store che è un nome dns per a
server e dc37 dot store, quindi questo è
andando a farsi avanti fino alla fine
per muskie attraverso Moray attraverso Electric
Moray e a questo punto ha muskie
completato ciò di cui ha bisogno dal
medita qui e raggiungerà il
archiviazione qui per ottenere effettivamente questo oggetto
e restituire restituirlo per la richiesta e
quindi sta andando a scegliere solo uno di questi
a caso e chiedere per quell’oggetto e questo
ritorna indietro
c’è il contenuto dell’oggetto e nel
evento che questo nodo di archiviazione non è
disponibile perché è andato in crash perché
la DC non è disponibile Sono colpito da
qualunque cosa sia, c’è un altro lampo
server e lo abbiamo trovato nella maggior parte dei casi
avere un livello di durabilità di due è
sufficienti per avere i vostri dati siano
disponibile sempre indipendentemente da quanti
i server sono in fase di riavvio o arresto anomalo
attraverso la flotta e così sette punti o
in grado di rispondere e che la richiesta è buono io
non passerà attraverso un full put perché questo
sembra molto , è carino
simili ma le cose chiave che sono
questo è lo stesso che fa il muskie
autorizzazione e sta per fare
contattando i metadati per il tuo in
livello di archiviazione nel caso di mettere a
il nuovo oggetto muskie ha bisogno di scegliere quale
gli squali quali nodi di archiviazione per memorizzare il file
oggetto in anticipo
e farà in modo che quello
le copie sono distribuite su almeno due
data center e di nuovo questo ci fornisce
disponibilità e la perdita di un intero
giorno giusto
o nella perdita dei server di stress così entrambi
garanzie di durata e disponibilità
e poi muskie manda quelli al
Squali e quindi inserisce nuovi metadati
registrare per gli oggetti elettrici
ormeggio è l’acqua, così ho detto
in primo piano che Manta era davvero progettata
con calcoli in mente e alcuni dei
cose che motivano questo o quello
gli oggetti possono essere molto grandi e spesso
le cose che vuoi eseguire calcolare
i lavori sono e saranno grandi
è per questo che probabilmente sei interessato a
loro e quindi vogliamo in generale evitare
copiare i dati avanti e indietro in modo simile a me
gli oggetti menzionati sono memorizzati come piatti
i file non sono assemblati in fase di runtime
o qualcosa del genere è un singolo file
su disco che questo è il tuo file e di
spedire il lavoro allo stoccaggio
server stesso evitiamo di dover copiare
quello intorno e così una rapida illustrazione
di questa una piccola mano che ondeggia di parti
ma questa è l’idea di base se volessi
per eseguire il programma WC su questo oggetto
allora vorrei che il cliente lo mandasse a
Muskie e Messi lo spediranno
richiesta direttamente al server di archiviazione
lo eseguirà su una sola lettura
versione di questo file e restituirli
restituisce all’utente l’ ok, quindi è così
Manta 101 e ora parleremo
sulla nuova funzione che ho aggiunto
Manta che è stato caricato in più parti e
se hai familiarità con s3 di nuovo questo
potrebbe essere qualcosa che hai visto prima
l’idea base di upload di più parti è quella
vuoi caricare un file in parti e
poi quando sei pronto lo impegni al
fine ed esporre i nuovi oggetti, invece
di fare un singolo dire e per i dati
sistemi di archiviazione che usano come blocco
metadati basati o metadati basati su extant
questo è molto più ovvio, penso come
implementare perché lo sei
cambiando i puntatori a dove i blocchi di
il file invece di farlo in a
in modo diverso quindi per Manta siamo davvero
necessario partire dai primi principi
e pensa a che tipo di cose fanno
vogliamo da questa API che tipo di
le cose stanno andando a interpretare Manta
o darci la libertà di fare e quello
era la vera chiave che penso a pensare
grazie così ho detto che hai caricato
un oggetto in parti e poi quando è
fatto che vuoi fare un commit come tre
ci chiama completo se questo ha senso
tu e, cosa importante, penso da a
prospettiva progettuale che vogliamo essere sicuri
che gli oggetti creati tramite questo separato
Le API non hanno un aspetto diverso da
normale API put object e perché ciò
sarebbe solo essere davvero bizzarro in modo che sia
una cosa importante da tenere presente
i casi d’ uso per questo sono file veramente grandi
o come connessioni di rete flappy se
sei su un telefono che prova a caricarne alcuni
il video e si sta andando dentro e fuori
Wi-Fi potrebbe essere bello se si può pezzo
quello su invece di dover fare affidamento su a
richiesta unica mantenendo il suo
connessione per lungo tempo un altro uso
caso che è abbastanza vicino e caro a
il mio cuore perché ho uno sfondo in
chimica e streaming di dati da a
fonte così quando stavo facendo p-chem noi
farebbe spesso esperimenti laser e
raccogliere molti dati contemporaneamente
e non sapevamo necessariamente quanto
dati che stavamo per raccogliere ma noi
Sapevamo che avevamo bisogno di un grande duro
guidare per tenere tutto e potrebbe avere
è stato bello poterlo caricare su
manta come siamo andati ma è troppo tardi ora
quindi alcune domande di progettazione di base che pensano
di questo ancora per i primi principi
come identificare un caricamento multiparte
è qualcosa che ha un ciclo di vita finito
diverse richieste e questo intero sistema
è distribuito quindi nessun singolo componente
ha una visione dell’intero sistema così noi
bisogno di un identificatore univoco che può consentire
qualsiasi componente nel sistema per sapere cosa
output multiparte sta funzionando con come
conserviamo le parti che sappiamo che non possiamo
basta aggiungerli a un oggetto perché
non è qualcosa che abbiamo due
supporta con oggetti immutabili e cosa
questa operazione di commit è simile a e
impegnarsi di nuovo è il processo da intraprendere
tutte le parti rendendole nuove
oggetto ed esponendo quello in Manta e
poi alcune altre considerazioni che sono
importante se pensi al
prospettiva di qualcuno che utilizza questa API
che è veramente importante è se ho
un parlamentare u come faccio a fare in modo che posso
vedere quali parti ho caricato posso elencare
loro per un
se ho un sacco di queste cose posso
vedere tutti gli usi in corso e P che ho
cosa succede se sto usando diversi
clienti a cui forse sta lavorando il tuo amico
lo stesso MPU o più probabilmente come il tuo
applicazione ha un sacco di istanze di
questa cosa cosa succede se lo sono
Operando sullo stesso imp, lo fai tu
bisogno di coordinarsi tra di loro
come vogliamo affrontare questo e
perché questo è un sistema distribuito
ci sarà già il fallimento
Sappiamo che così abbiamo bisogno di pensare a
fallimento sì come saranno le parti
ripulito se non ci abbiamo pensato
che ancora e mentre ci siamo, sarebbe
ottimo se posso cancellare un diavolo se io
non voglio impegnarmi credo che le chiamate S3
questo abortire che chiamiamo anche chiamata
Chiamare interrompere infondere a Manta bene così
entrare nei dettagli del design
identificare l’ uso di MP è difficile se tu
dovevano usare solo ciò che chiamiamo il
percorso oggetto di destinazione quindi se volessi
esporre alcuni grandi oggetti chiamati / j
il negozio slash slash taglia un grosso oggetto
testo se dovessi usare quello come il
identificatore dal punto di vista del cliente
non è veramente sufficiente perché quello
percorso potrebbe essere tagliato per comprare un altro cliente
o compra un altro MP tu anche così noi
probabilmente vorresti un altro unico
identificatore per una specifica istanza di
questa cosa quindi useremo au
annuncio perché è così che lo facciamo
le cose qui disegnano le parti quindi questo è uno
area in cui Manta ne ha già molte
infrastruttura a nostra disposizione
sviluppare questa caratteristica che è quella di noi
avere oggetti che è una cosa in
sistema ci sono tonnellate di codice da affrontare
gli oggetti sotto sono compresi
in tutto il sistema, quindi lo faremo
e li metteremo tutti su un singolo
directory e questo risolve il problema di
essere in grado di elencarli c’è un limite
sul numero di voci che puoi avere
una directory ma è il numero di parti
volevamo essere in grado di supportare nel
API è molto meno di così, così non è stato
una preoccupazione e quella convenzione di 10.000
le parti sono il massimo che si possa avere
è un’altra convenzione da parte di Amazon
che abbiamo adottato molti dei loro
convenzioni perché erano ragionevoli
e i nostri utenti li hanno già capiti
e solo veramente deviato dove ha fatto
senso per noi così abbiamo questi parte
directory un determinato caricamento multiparte
ha una directory dove vanno tutte le sue parti
dove li mettiamo e fortunatamente Manta
ha qualche precedente per noi già su come
per fare questo il nostro lavoro non ho menzionato
questo prima, ma i tuoi lavori sono archiviati
sotto un’altra directory chiamata barra
lavori e tutto lo stato per in corso
posti di lavoro vivono in una struttura di directory lì
quindi con quello va bene ne avremo una nuova
directory di primo livello che è qualcosa di nostro
gli utenti hanno familiarità con è qualcosa
che il sistema comprende e possiamo
inserisci caricamenti multiparte così come sono
in corso ma la directory di upload stessa
è anche una directory che significa che
ha quel limite di 1 milione di directory
voci che ho citato prima e che
sarebbe per i clienti molto grandi come
Samsung o altri nostri clienti 1
milioni non è così tanti in corso
carica come puoi immaginare, quindi non lo facciamo
voglio davvero limitarci a solo
quanto possiamo adattare in quella directory così
invece abbiamo aggiunto un po ‘di a
compromesso dove abbiamo uno strato di
indiretta in questa directory
struttura ciò che chiamiamo prefisso
directory e sono chiamati prefisso
directory perché coincidono con
prefisso del UID della NPU e si può
regola la lunghezza di quanto tempo
prefisso è quello di aumentare o diminuire
il numero di directory che abbiamo e
questo significa che puoi ancora elencarli tutti
i caricamenti multi-parte su un account e
è limitato dal numero del prefisso
directory quindi non è un arbitrario
operazione lunga che è buona ma noi
hai ancora il compromesso che hai
potenzialmente più richieste da fare ma noi
ha deciso che era accettabile e
davvero rendere questo concreto questo è un
esempio di quella struttura di directory per
un determinato ID di caricamento, quindi è l’UUID I
menzionato per identificare questo ciclo di vita di
un MP che la directory delle parti è dove
le sue parti vengono caricate e lo vediamo
directory prefisso sì sì così là
potrebbe essere fino a come 4096 directory I
pensare
in base al numero di prefissi possibili
e le parti di esempio sono solo parti
identificato dall’ordine in cui entrano così
zero è il primo è il secondo
uno e così via e questi sono solo di nuovo
Manta obietta di nuovo tutto il sistema
primitivi che conosciamo e capiamo
quindi ora parlerò di qualcosa
che penso sia probabilmente il più
parte interessante di questa intera API che
è l’operazione di commit e così quando noi
stavamo pensando a questo noi
volevo pensare a ciò che è nostro
i vincoli erano e che tipo di
proprietà che vogliamo che questa operazione abbia
quindi l’ operazione di commit è di nuovo il
cosa che prenderà le parti fanno un
oggetto sul disco in qualche modo e quindi esporre a
nuovo record di metadati e Manta che dice grande
il testo dell’oggetto è archiviato su questi archivi
server e non vogliamo che guardino
qualsiasi diverso rispetto agli oggetti normali così
la prima cosa che abbiamo deciso è stata quella
questa operazione ha davvero bisogno di essere
idempotenza idempotente è la proprietà
che una determinata operazione che se ci provi
l’operazione di nuovo o fai un
operazione una volta e poi fare di nuovo il
il risultato è lo stesso della prima volta
un banale esempio banale di un
l’operazione potente dell’articolo è moltiplicata per
uno così se si prende un valore moltiplicato per
uno però molte volte è sempre in corso
essere lo stesso risultato e distribuito
sistemi questo di solito significa se si riprova
un’operazione che ha lo stesso effetto
che è ciò che vogliamo qui e il
ragione per cui vogliamo che sia così
i sistemi distribuiti mancano le cose
tutto il tempo non sentirai una richiesta o
una risposta da un server che pensi
dovresti e in tal caso devi
conosci come cliente o come yeah come cliente
cosa fare Wow se questo significa che
la tua richiesta è fallita, se ciò significa
che quel server è andato e in grado di farlo
per riprovare in modo sicuro rimuove davvero molto
di quelle preoccupazioni e l’altra cosa noi
decidere è che deve essere atomico
tentativo di necessità atomica si riferisce a per
operazione significa che o la
operazione è successo o non è successo a
tutto dalla prospettiva di un cliente e il
la ragione è importante è che lo faremo
avere clienti concorrenti all’interno di
sistema che funziona sullo stesso mpu non lo facciamo
li voglio davvero finire in modo strano
stato indefinito dove forse uno di loro
hanno terminata e l’altra
non l’ha fatto
e noi se perdiamo quello stato che può essere
problematico quindi questi sono i due obiettivi
abbiamo davvero con questa operazione e
quindi ripensando a ciò che abbiamo imparato
riguardo l’ architettura mantis che è attuale
i passaggi di implementazione devono accadere per
questo – per questo ulteriore impegno
completo e il livello di metadati di cui abbiamo bisogno
a come ho detto inserire quell’oggetto
registrare all’interno del livello dei metadati per il
oggetto finale e nel livello di archiviazione noi
bisogno di prendere in qualche modo tutte quelle parti
che sono memorizzati come oggetti Manta e
rendili nell’oggetto finale così siamo
comincerà con il livello di archiviazione
l’implementazione prima e i vincoli
non possiamo aggiungere o mutare Manta
oggetti che non è solo qualcosa che il
il sistema lo supporta sarebbe molto
lavoro confuso e potenzialmente in perdita
fuori su altre garanzie che manta ha
e vorremmo anche se potessimo evitare
copiare i dati avanti e indietro perché è
costoso è un colpo di latenza è giusto
non è l’ ideale se possiamo aiutarlo, quindi cosa fa
questo disegno sembra la prima cosa che facciamo noi
deciso è che modificheremo il
definizione di parti con cui assomigliare
rispetto agli oggetti Manta solo un po ‘
un po ‘così invece di scegliere casualmente con
quale nodo di archiviazione ogni parte continua
sceglieremo solo i nodi di archiviazione
vuole l’oggetto finale di vivere su un massimo
davanti e poi co-localizzare le parti su questi
server e come potresti essere in grado di
deduco questo ha la bella proprietà di solo
dovendo copiare i dati localmente che è un
operazione molto più veloce rispetto all’invio
fuori dalla rete e lo sai
attraverso stack TCP e così via e così via
abbiamo creato questa nuova operazione chiamata
Mako ha finalizzato Mako come gli squali mako
servizio di archiviazione di nodi di archiviazione che conosco
ci sono molti termini nautici mi dispiace
Spero di non confondervi un nuovo
operazione chiamata Mako finalizzata che è
la finalizzazione di un MP tu ed è
andando a prendere come input una serie di party
tag che sono identificatori come per il
parti o qualsiasi oggetto amantha davvero e
quindi questa è una visualizzazione di ciò che noi
avere questo nodo di archiviazione 3 dot store e
questa richiesta arriva per combinarli
parti e
questo nuovo oggetto con questo nome e questi
sono tutte le parti come sono su disco e
le loro dimensioni e vedi la vecchia mappa degli ID
alla richiesta quindi make sarà finalizzato
creerà quel nuovo file oggetto di destinazione
e poi che sarà appuntata parti a questo file
e questo sarà l’ultimo piatto
file che vive su disco e a questo
non vogliamo davvero averti
conoscere il doppio dei dati per ogni MP voi
in giro in modo da finalizzare Mako volontà
rimuovere quelle parti e così ci siamo
quell’oggetto piatto su disco e possiamo
esponilo a Manta invece così il prossimo
la domanda sta tornando al nostro design
i vincoli sono un’operazione atomica
è una operazione potente e
è per pensare attraverso questo penso
è davvero utile pensarci
diversi punti in cui il server può
crash quindi prima pensiamo a se Mako
si blocca mentre sta scrivendo questo
traccia il file oggetto target mentre è
aggiungendo quelle parti così crollare cosa cosa
succede in quel caso bene perché noi
preso la decisione di non rimuovere il
parti fino a dopo questo file è a livello
disco quindi sappiamo che le parti sono
ancora lì e non importa quello che possiamo
ricostruire l’oggetto in modo che va bene
cosa succede se è già stato scritto
il file oggetto di destinazione è lì e
quindi rimuove le parti e si blocca
che tipo di stato abbiamo lasciato
in modo che sembra qualcosa di simile a
questo caso è ancora ok per riprovare
perché il file è lì, ci siamo davvero
bisogno di un modo per verificare che il file è
non corrotto corrisponde a quello che
richiesta vuole fare così anche noi
una somma md5 del file come noi come sua
creato e anche controllare il numero di
byte come un ulteriore controllo che
questo file è ciò che ci aspettiamo e così via
questo caso Mako verrebbe a verificare che l’md5
somma sulle corrispondenze del file oggetto di destinazione
ciò che la richiesta si aspetta anche se
non è nella diapositiva scusa e basta
vedrei anche che sono 16 Meg’s che
è previsto e quindi dire va bene questo ha
già provato appena posso
rimuovere queste parti e andare avanti
Tornerò al successo
quindi una cosa che non ha parlato in
quelle diapositive precedenti sono ciò che accade
se una richiesta invia un set diverso di
parti così invece di dire come sai
in queste quattro parti mando solo il primo
tre e se ne hai due di quelli
operazioni in corso allo stesso tempo
dove sono in conflitto tra loro
è possibile che una delle operazioni
rimuoverà una delle parti l’ altra
uno ha bisogno e poi siamo in uno strano
stato in cui abbiamo come 3/4 di un obiettivo
file oggetto scritto e non lo è
necessariamente ciò che l’utente voleva così noi
aggiunto alcuni vincoli aggiuntivi al
Livello API al di fuori del produttore finalizzato a
impedire questo tipo di cose da
succedendo così la cosa fondamentale qui siamo noi
non voglio che due clienti si impegnino
un diverso set di parti perché al più presto
poiché quell’operazione accade è possibile
che abbiamo iniziato a rimuoverli e noi
non abbiamo più i dati di cui abbiamo bisogno
ricostruisci quel file così questo è esterno
di Mako finalizzato ma una parte importante
dell’operazione essendo idempotente
e così controlliamo quei conflitti
ancora prima ancora di invocarlo e noi
anche voler abortire con
si impegna soprattutto per motivi di convenienza
perché sarebbe più complicato da
implementalo altrimenti non è molto
possibile, penso di farlo ma noi
ha deciso che davanti così tutto ciò
indica che ne abbiamo bisogno
stato aggiuntivo qui Mako finalizza fa
non avere informazioni su quali client
stanno provando quali sono le cose sullo stesso in PU
e non abbiamo bisogno di protezione contro
così ora penseremo a
i dettagli di implementazione su
livello dei metadati abbiamo il livello di archiviazione
coperto pensiamo ai metadati
quindi dove dovremmo archiviare questo stato noi
hanno già alcuni record di metadati
associato a un MP in modo specifico
il record della directory parti che è il
directory che contiene tutte le parti
e possiamo solo aggiungere cose arbitrarie a
quel record di metadati fondamentalmente perché
è solo un oggetto JSON che possiamo fare
siamo in grado di modificare l’implementazione in modo
Considerazioni Singh qui MP che commetti
nel suo complesso deve essere un oggetto atomico
potente che significa anche che lo è
le operazioni secondarie devono essere atomiche
o idempotente da soli o al lavoro
insieme per creare così se solo noi
aveva lo stato riguardo al NP in cui ti eri immagazzinato
la directory delle parti come ho detto
prima è questo atomico questa è una domanda
pensare e potrebbe essere immediatamente
apparente dalla diapositiva che non lo è
in base al modo in cui l’ho strutturato ma
abbiamo il frammento del record di upload
riferendosi al frammento che il caricamento
o il registro delle directory parti che è il
stessa cosa mi dispiace anche se se n’è andato e poi
abbiamo anche il frammento dell’oggetto di destinazione
qual è il frammento in cui sono contenuti i metadati di
quell’obiettivo finale sta andando a
vivi e non c’è questo non lo sono
necessariamente lo stesso grafico a tutti
perché non sono la stessa directory
giusto questa è l’ unica cosa che sappiamo
le garanzie sono sullo stesso frammento e così via
questo è un altro esempio in più parti
caricare e questo è il muskie coordinante
un MP si commette richiesta quindi sta andando
chiedere lo stato e questo è un
esempio di come le cose non funzionano solo per
sii chiaro e dice che è stato creato
nessuno lo ha ancora commesso o abortito e
quindi dice ok, giusto che lo stato sia
impegnato in questo disco che sto rivendicando
che questo cliente ha l’ultima parola
su cosa succede a questo MP tu ed ora
il muskie andrà a destra dell’oggetto bersaglio
registra per esporre il grande oggetto in Manta e
il frammento dice ok bene
ok ora esempio di dove questo potrebbe andare
sbagliato succede la stessa cosa ma invece
di udito o risposta muskie no
ascoltare una risposta così a questo punto siamo
in uno stato indefinito perché non lo facciamo
sapere per certo che l’oggetto target
shard ha risposto a questo particolare
richiesta è possibile che potremmo solo guardare
per vedere se quell’oggetto è in Manta ma
perché è un oggetto normale che potrebbe
immediatamente cancellato quindi la sua presenza
o la sua assenza è una garanzia di nessuno dei due
che è stata commessa o interrotta esso
potrebbero essere eliminati da altri utenti in modo
non funzionerà
così chiaramente questo non è il modo
avanti così in ordine per questa operazione
di essere atomica
abbiamo bisogno del cambiamento di stato del
caricamento multiparte e l’esposto
esposizione dell’oggetto target in Manta
essere nella stessa transazione e un
energia atomica ama quai così o quello
succede o non succede affatto ma
entrambe queste cose devono accadere a
nello stesso tempo sullo stesso frammento così il
la soluzione è che metteremo il funzionario
stato del si ampli sul frammento del
oggetto bersaglio che sembra come sarebbe
lavoro e possiamo ancora mettere un po ‘di stato
la directory delle parti registra semplicemente come un
ottimizzazione ma alla fine la finale
lo stato è ciò che esiste su quell’obiettivo
oggetto shard e per fare ciò abbiamo creato a
nuovo tipo di record di metadati di Manta
chiamato il record di finalizzazione ed è dentro
una tabella di database diversa e ha un
identificatore univoco sia per la mpu che per
l’oggetto target in modo che tu possa vedere
quello per un identificatore particolare alcuni
il cliente ha commesso o ha interrotto questa cosa
e questo è lì indipendentemente dal fatto
il record dell’oggetto target è lì così
che sta per essere simile a questa
muskie legittima lo stato finalizzato
invece di impegnarsi per il caricamento
registra e questa è la parte di ottimizzazione
ma fondamentalmente sta raccontando qualsiasi futuro
Muskies che chiedono questo disco vanno a dare un’occhiata
al frammento dell’oggetto di destinazione invece di
vedi se questo ti impegna e così
quando si verifica effettivamente il commit
questa transazione
così ai diritti muskie sia il grande oggetto
record di metadati e poi questo finalizzazione
registra che è solo un po ‘come la chiave
sembra ma quelli vanno nella stessa cosa
transazione e quindi se ascoltiamo una risposta
da quella allora sappiamo che siamo in
chiaro che è un’operazione atomica quella
il mpu ora è finito e questo oggetto
il record è lì e non importa
cosa succede dopo perché noi
avere questo record di metadati aggiuntivo a
dicci cosa è successo a quel particolare
MPU quindi nel caso in cui quella risposta
è perduto, va bene, possiamo solo chiedere
quel disco di finalizzazione di nuovo e sapere
che è stato completato anche se l’obiettivo
oggetto è stato cancellato
e quindi mi sono riferito a
gli stati di Imp usano penso che sia utile
vedere lo stato davvero di base
macchina per quello che sembrano così a
cliente quando inizi un MP tu
spostalo nello stato creato e poi tu
carica le tue parti in questa fase e poi
puoi o commetterlo o annullarlo quale
lo sposta nello stato di finalizzazione e
quello è lo spazio tra l’ inizio del
richiedere e vedere effettivamente quello atomico
transazione batch che abbiamo appena visto
la diapositiva precedente e così una volta il
finalizzazione del record interruzione del commit commit o
la registrazione di abort è scritta allora è
fatto e questa è la fine di non più
le richieste possono accadere su di esso e per il
per completezza questo è tutto il
passi come in pseudocodice sul muskie
lato non ho intenzione di leggere attraverso di loro
ma li avrò di queste dimensioni se
sei interessato a voler tipo di
basta riconvalidare tutto ciò che ho detto e
per altre operazioni di caricamento multiparte
atomicità di concorrenza e idempionalità
tutte queste cose sono importanti ma
commettere è davvero il più interessante
uno dei motivi per cui mi sono concentrato su di esso
ma per abortire e mpu non invochiamo
invocare Mako finalizzato a creare il
oggetto è ma ha lo stesso
finalizzare la proprietà di inserimento del record così
invece di inserire un oggetto target
record e il disco di finalizzazione abbiamo appena
inserito il record di finalizzazione per dire
questo uso abortito non puoi commettere
più sì sì, ripensando alla gentilezza
della vista dall’alto a volo d’uccello di
quello che volevo che questo discorso fosse
pensando molto al design
vincoli che avevamo entrambi per questo
nuova funzionalità e anche ciò che Manta già
aveva colpito il sistema maturo come un retaggio
sistema che ha i suoi invarianti e
trade-off che sono stati fatti cinque anni fa
quando è stato creato e dobbiamo lavorare
intorno a quelli così alcune cose che noi
voleva realizzare caricamenti multi-parte
sono stati commessi e aborti atomici anche oggetto
potenza lì
e sano elenco di entrambe le parti e tutto
dell’IMP utilizzare nel tuo account ma noi
dovuto lavorare con queste cose
oggetti così immutabili i metadati in
memorizzare
implementazione del ponte di Manta non lo facciamo
avere supporto per cross shard
transazioni così una cosa che potresti avere
mi sono chiesto tra le diapositive dov’ero
parlando di diversi i caricati
registrare il frammento e il frammento dell’oggetto bersaglio
anche perché non puoi semplicemente fare un lotto
operazione attraverso quei due e quello è
solo non qualcosa che abbiamo nel nostro
sistema e ne avrebbe molti altri
considerazioni se dovessimo introdurre
così abbiamo appena deciso di non andare con
questo e perché questo è distribuito
sistemi tutto può fallire tutto il tempo
inaspettatamente
quindi dobbiamo pensare che non importa
cosa così come possiamo risolvere questi
cose immutabili abbiamo deciso che
mutare gli oggetti Manta era un antipasto
semplicemente non abbiamo il supporto per questo
quindi quella non era una soluzione, c’è questa
separazione tra metadati e archiviazione
il che significa che dovevamo pensare
tutte le proprietà che volevamo queste API
operazioni da avere entrambi da un metadata
prospettiva e una prospettiva di archiviazione
perché entrambi stanno per essere
coinvolto senza il frammento di croce
supporto per le transazioni non ci limitiamo a usare a
singolo frammento che funziona è il nostro
singolo strato la nostra singola unità di
atomicità in Manta e abbiamo pensato per
i sistemi distribuiti falliscono
inaspettatamente abbiamo solo pensato a cosa
accadrebbe se cose diverse non lo facessero
rispondere e come ogni componente
affrontarlo ma ce n’erano alcuni
i trade-off qui così rendono o finalizzare è
in realtà una specie di strana operazione in
Manta rispetto al resto delle cose
che Mako lo fa fondamentalmente è il motore X.
che se si utilizza per lo più esegue il mapping di un file
sistema su un server a un URI richiesto così
è piuttosto limitato in termini di suo
richiedi tempo e e davvero
semplice ma poi abbiamo aggiunto questo
un po ‘ come la cosa complessa del file system
o cosa o operazione che sta interagendo
con il file system piuttosto e ha
latenza variabile perché sta per
dipende dalla dimensione dell’oggetto e
quindi non è qualcosa che davvero
piace presentare in Manta ma noi
deciso era un compromesso accettabile per
tutte le altre cose di cui abbiamo parlato io
menzionato prima come copiare i dati
attraverso la rete che probabilmente
essere ancora più lento
e un’altra cosa che potrebbe non essere stata
immediatamente ovvio è il musky
quando carica queste parti è gentile
di deviazioni dal normale oggetto messo
percorso un po ‘perché deve metterli
tutto sugli stessi squali e questo può avere
alcune implicazioni per la disponibilità
di queste parti quindi se ad esempio un imp
sei stato creato e ha scelto gli squali 1
e 4 e poi lo squalo 4 va via bene
ora non possiamo caricare parti su quello squalo
quindi c’è questa finestra dove perdiamo a
un po ‘ di durata nel tempo
stiamo caricando e quello è
un altro compromesso che dovevamo fare ma
dopo aver fatto qualche analisi di noi
decise che probabilmente stava bene
perché la maggior parte di queste cose sono davvero
di breve durata quindi se uno squalo sta andando via
è probabile che non colpirà dentro
quella finestra ma è un po ‘di compromesso
è ancora lì e quindi qualche finale
i pensieri sono se vuoi vedere davvero
completa discussione di tutto ciò che ho appena
Ho parlato di avere un RFT RFT sono un
cosa facciamo a Giant dove se vogliamo
discutere le modifiche alla funzionalità delle idee e
e vanno dal software all’assunzione
pratiche per voi sapere organizzative
cose e noi tutti lo facciamo tutto nel
aperto perché tutto ciò che facciamo è aperto
fonte in modo da poter vedere che i nostri piedi se
siete interessati a leggere di più
tutto questo in modo molto più dettagliato e quando
stai aggiungendo una nuova funzionalità a a
sistema sai che avrai bisogno di
pensa all’invarianza del sistema
e se li violate cosa costa
sono ciò che le cose stanno perdendo nel
processo e quali cose stai guadagnando
perché tutto è solo un compromesso
per praticamente tutte le decisioni tecniche
e persino i sistemi legacy possono avere nuovi
caratteristiche che siamo al di fuori del
portata progettuale di ciò che sono immaginati
il sistema operativo immagino sia un’eredità
sistema e continuiamo a innovare su questo a
congiunto – quindi sai di sognare in grande, quindi non posso
aspetta di vedere un’altra presentazione su a
nuova funzionalità per Manta il 10
compleanno che è tra cinque anni e io
penso che sia tutto grazie, grazie mille
tu
e abbiamo solo un paio di minuti se
abbiamo una domanda o due mi sento come la mia
il cervello è brulicante ne ho così tanti
mi interrogo ma ne lasceremo altri
la gente chiede loro così abbiamo parlato
multi-parte applaude a destra diciamo a
il file ha cinque caricamenti falliti sul
terzo upload terzo o quarto upload noi
non ho discusso di quello scenario che cosa farà
accadrà dovrò passare attraverso così è
c’è qualcosa come un punto di salvataggio o
qualcosa so che hai un impegno ma
se arriviamo a metà strada e poi falliamo cosa
vuoi dire che stai parlando
sul processo di caricamento delle parti
a un deputato tu in quel caso puoi solo
riprova quindi non ho parlato dell’API per
tanto ma è come ho detto
lì c’è l’uomo da obiettare quindi è solo un
tagliare al sistema in modo che tu lo voglia
riprovare e perché ci sono oggetti
puoi sovrascriverli e cambiarli
come desideri , non so se rispondo
la tua domanda sì sì sì sì
scusa lasciami scusarmi fammi dare
tu il microfono è anche un po ‘difficile sì
è difficile sentirti parlare del microfono sì
quindi quello che sto cercando di mettere a fuoco qui è la volontà
Devo ripetere il primo e il secondo se lo è
fallisce il terzo non ho ragione quindi se ci
è una transazione che fallisce durante il
commit o durante il finalize così io il
la prima domanda era dovrei
ripeti che hai risposto no ora
se fallisce durante finalizzato quando sono
colpire finalizzare e fallisce sì è così
quell’oggetto trattato come orfano o
qualcosa di no nel caso in cui
fallito durante finalizzato come il
Mako finalizza l’operazione o l’inserimento
del passaggio dei metadati puoi ancora riprovare
anche se quella era una delle cose che noi
volevo davvero essere sicuro di non farlo
devo ricominciare da capo
Ho sperabilmente tre domande brevi
va bene va bene
una multa c’è una compatibilità s3
strato per Manta I abbiamo software
per averlo fatto non so cosa sia
lo stato è perché non è un
squadra diversa ma abbiamo software
scritto da joint che lo fa ma no
un lato server ci va bene grazie e
in realtà stiamo appena arrivando
contro pranzo quindi sarai disponibile
a chiacchierare con le persone a pranzo
[Applausi]
Grazie, Bridget è davvero fantastico
essere qui presentando a tutti è molto
eccitante se ti sei perso il primo
istanza di questa traccia è molto
discorso argomento terapeutico penso a tutti
di noi che lavorano in sistemi distribuiti
perché molti dei problemi che
Jeff ha parlato nel suo discorso vediamo in
Manta a un gigante quindi lo consiglio davvero
di verificare che fuori
quindi il nome del mio discorso come dice il
slide sta progettando funzionalità per adulti
lezioni di sistema apprese da Manta così
Manta è un’applicazione di archiviazione di oggetti
questo è un sistema distribuito su cui lavoro
su un comune e ci sono stato un paio
anni e così ho visto un bel po ‘ di
il sistema ora e ho anche il
opportunità di progettare una nuova funzionalità per
è questo che è principalmente questo discorso
motivato da e questo è il mio mio twitter
gestire se si desidera vedere tutto il
cose terribili che ho twittato prima
tutto solo a parte sul sito web
per questo discorso c’era una descrizione
che ho presentato diversi mesi fa e
quello che ho scritto me stesso e poi io
notato un paio di settimane fa che lì
sono stati aggiunti anche questi tag aggiuntivi
e io dico tag tra virgolette
perché non potevo cliccare su di loro così io
non so in realtà quali altri discorsi
hanno questi stessi tag ma uno di loro in
in particolare potresti essere in grado di indovinare
quale si protese verso di me e il
primi tre distribuiti open source
nuvola quelle sono tutte cose che penso
ha senso basato sulla mia descrizione
che ho inviato è distribuito
sistema tutto il nostro gigante del software è aperto
fonte incluso Manta ed è
infrastruttura per un cloud in modo che
va bene e poi c’è quest’altra
l’eredità di parole che era lì e
Credo che l’eredità non per colpa del
la parola stessa ha un tipo di negativo
connotazione ed è anche molto divertente
per me quel Manta che è solo un sistema
quello di cinque anni è già legato
ma questo è il mondo in cui viviamo credo
quindi prima di entrare nella nuova funzione
che ho aggiunto a Manta, voglio farlo
datti ragazzi
panoramica di ciò che Manta è e come è
progettato in modo da poter comprendere il
diversi trade-off e design
le decisioni prese per Manta prima di aggiungere
nuova funzionalità ad esso e così è
una specie di versione ridotta del discorso
che diamo ai nuovi ingegneri congiunte che
stanno unendo la squadra di Manta così è
che ti capita che per oggi gratis il
passo dell’elevatore di base per il marketing
Manta è che è un negozio di oggetti e
se questo non significa niente per te
se si ha familiarità con Amazon S3 è
lo stesso tipo di API stessa idea se questo
non significa niente per te è un
posto dove è possibile caricare file e ottenere
indietro e quell’API stessa non è il
più interessante immagino da un utente
prospettiva ma ciò che lo rende veramente
cool per noi persone dell’infrastruttura e
persone che lavorano su sistemi distribuiti
è che è altamente scalabile e
distribuito e ha la capacità di scalare
molti componenti diversi da aggiungere
la capacità del sistema in quanto è necessario
l’API stessa di Manta è basata su HTTP
per ottenere un oggetto fai un HTTP GET per
un put fai un HTTP put e così via e
la cosa che rende veramente Manta
diverso penso da altro oggetto
soluzioni di archiviazione là fuori è così
il calcolo è stato progettato per essere di prima classe
cittadino nel mondo di Manta che chiamiamo questi
Lavori di manta e cosa significa questo
il sistema stesso è progettato con noi
in mente e lo faremo quando invierete un
Il lavoro di Manta è in realtà il programma
spedito ai tuoi dati a riposo invece di
per dire assemblando il tuo oggetto con a
programma in qualche contenitore da qualche parte
il programma che si desidera eseguire verrà eseguito
i dati sul server di archiviazione che è
memorizzato e questo consente una coppia
cose carine come non dover copiare
oggetti attorno al sistema e e
eseguendolo direttamente sui tuoi dati come
chiudi il più possibile per eseguirlo sul tuo
macchina locale l’interfaccia per Manta
sembra molto simile a un file UNIX
sistema quindi questo è un esempio di percorso per un
oggetto J Hendricks è il mio nome utente oops
spiacente
il negozio è la directory principale in fondo
per Manta e poi c’è una directory
lì e un oggetto chiamato il mio oggetto
testo quindi ho una breve demo che non conosco
se giocherà tutto
dove passo attraverso questa diapositiva ma questa
questi sono gli strumenti CLI che puoi usare
interagire con la manta per il nostro nudo
Manta CLI e sto solo creando un
directory mettendo un file in questo
directory ottenere di nuovo fuori
rimuovendo gli oggetti cancellando il
directory quindi tutto il tipo di operazioni
che ti aspetteresti di avere dentro
un file system che puoi fare con il nostro
strumenti da riga di comando quindi sistema Manta
primitivi come ho iniziato ad alludere al nostro
oggetti e directory e oggetti sono
i nostri file e file system parlano e da
una prospettiva di archiviazione in realtà sono
memorizzato come un file flat su disco così noi
non rompere l’oggetto in pezzi
e metterlo su diversi server di archiviazione
per iniziare, per esempio, è solo
qualsiasi oggetto caricato è presente su
server di archiviazione da qualche parte sul disco
oggetti stessi da un utente
la prospettiva è immutabile, quindi se vuoi
per cambiare ciò che un percorso punta solo a te
sovrascrivi completamente quell’oggetto e
allora abbiamo directory che sono molte
come quello che ti aspetti che le directory siano
come e soprattutto sono una lista di
tutto ciò che può sembrare ovvio per a
directory ma in realtà è qualcosa che
è stato davvero pensato da prima
principi nel design e così sarà
vedremo cosa che sembra un po ‘
altri sistemi distribuiti i disegni
vincoli che potresti essere interessato
in è che mantas un sistema CP in termini
del teorema cap che è il motivo per cui esiste
un tappo sulla diapositiva in modo che cosa significa in
termini pratici e pratici è che se
c’è una partizione di rete all’interno di Manta
sta per scegliere di avere un consistente
vista del mondo per l’intero sistema
oltre la disponibilità dei tuoi dati e
uno dei fattori motivanti per questo
è che puoi creare un sistema AP
parte superiore di un sistema CP ma non il contrario
intorno così quando era la squadra di Mansi
hanno deciso di progettare Manta in origine
è stato un buon compromesso perché se
sei interessato a un sistema AP tu
può ancora usare Manta per costruirlo e
l’altra cosa importante è che Manta è
scalabile orizzontalmente ove possibile e
questo significa fondamentalmente se c’è un
collo di bottiglia in alcuni componenti del
sistema possiamo solo distribuire più istanze
Qualunque cosa sia il collo di bottiglia e
speriamo di risolvere il problema e lo abbiamo
visto che per essere vero abbiamo ridimensionato
Manta fino a implementazioni davvero grandi
Samsung ha effettivamente acquistato un gigante
un paio di anni fa con soprattutto con un
interesse per Manta e utilizzo di quello per
la loro infrastruttura in modo che abbiamo questi
schieramenti giganti di Manta e abbiamo
stato in grado di scalarli per Samsung
bisogni che sono stati davvero interessanti
guardo così ora sto andando passeggiata attraverso un
richiedere una richiesta get di base di un oggetto
e questo ti darà il
vortice del sistema e poi
lo useremo per parlare del nuovo
caratteristica che volevo aggiungere in modo tale
la prima cosa che fai come cliente è fare un
ottenere la richiesta – questo è l’ URL per il nostro
distribuzione pubblica di Manta per noi uniti
L’uomo dell’est si unisce alla comunicazione e funzionalmente
questo diventerà una richiesta a questo
servizio muppet che prende il nome
i Muppets ma è un TLS e
servizio di bilanciamento del carico e altro
o meno semplicemente andando a proxy della richiesta
a un server API chiamato muskie e
il muskie farà tutto il resto
coordinamento e sollevamento pesante per
capire dove questo oggetto è e
trasmettendolo in streaming all’utente in modo da Muskies
andando ad autorizzare l’utente per questo
richiesta con mahi a cui inizierai
vedi un tema nautico e tutti i nostri
nomi di componenti se non hai scelto
fuori un raccolto su quello già e ora
stiamo andando a vedere l’architettonico
separazione e all’interno di Manta tra
metadati e archiviazione così i metadati
livello è ciò che memorizza i metadati
oggetti e directory, ma soprattutto
memorizza dove gli oggetti sono nel
sistema in modo che questa separazione sia logica
termini di come pensiamo al sistema
quando lo scriviamo in un diagramma ma
anche in sistemi di produzione veramente grandi
in realtà ottimizzerà i server per
server di metadati o server di archiviazione e
scegli diverse proprietà basate su
che tipo di server è e quindi il
il livello di archiviazione è responsabile per entrambi
memorizzare gli oggetti stessi e anche per
in esecuzione lavori di calcolo sull’oggetto quindi io
accennato in precedenza che quando si esegue a
lavoro in Manta di spedire il programma al
dove i dati vivono così
questi server sono ottimizzati per l’esecuzione
calcolo hanno un sacco di software
c’è già che ti serve se hai bisogno
come la JVM o un nodo o bash qualunque sia
quello sarà lì okay così a questo
point muskie sta per fare un metadata
richiesta perché ha bisogno di capire
dove questo testo di cibo di dati è memorizzato così
parlerà con Electric Moray
che è generalmente un supporto di dati
servizio agnostico del database in cima a
archiviazione di base e parla una chiave di base
protocollo del valore e ne ha anche un altro
funzione che è quella che divide le chiavi
all’interno del protocollo dei valori chiave
in diversi frammenti e questo sei tu
frammenti non familiari è l’idea
di hashing coerente in uno spazio chiave
quindi avremo approssimativamente un numero pari
le chiavi attraverso quei frammenti così elettrici
Moray ora troverà questi metadati
registra nei frammenti e sta andando
per fare coerenza è un hashing coerente
algoritmo e noterete sulla diapositiva
che in realtà non prendiamo la chiave
stesso ma il nome dur di quello e il
la ragione è che vogliamo in ordine
perché le directory siano selezionabili , vogliamo
tutti gli oggetti che si trovano nello stesso
directory per essere sullo stesso frammento
in questo modo possiamo richiederli entro un
quantità limitata di tempo e lo so
saremo in grado di elencare la directory
quindi abbiamo cancellato il nome dur di quell’oggetto
e vedi che è in ormeggio libero
per questo esempio e poi più elettrico
Lo farò solo per quella richiesta fuori a
altri tre per quella particolare carica e
più è un Maury elettrico simile che parla
lo stesso protocollo che non ha
questo ulteriore passaggio di hashing al suo interno
e poi raggiungerà i colpi
negozio di dati reali e per Amanda che usiamo
un servizio chiamato lamantino che è un post
cluster di erba con replica per entrambi
alta disponibilità e durata
garanzie e maggiore facilità andando a chiedere a
Postgres per questo particolare oggetto e
è andare a cercare qualcosa di simile
questo è ciò che molti dei nostri metadati
i record sembrano così c’è una chiave a
tipo che è
sarà un oggetto o una directory
ci sono intestazioni utente che puoi memorizzare
gli oggetti questi sono in realtà sistema
intestazioni non intestazioni utente ma contenuto
la lunghezza è la dimensione dell’oggetto
il livello di durabilità riflette il numero di
copie che archiviamo e per impostazione predefinita
Manta memorizzerà due copie dei tuoi dati
e vedremo un po ‘di più
quello in un secondo tipo di contenuto e poi
c’è anche questo oggetto chiamato squali
e se avete seguito insieme
quasi tutti i nostri componenti sono
squali a tema nautico non lo è
un altro componente a tema nautico e
che si riferisce ai server di archiviazione
loro stessi così questo oggetto ci sta dicendo
quella tassa alimentare è memorizzata in dc2 su cinque
dot store che è un nome dns per a
server e dc37 dot store, quindi questo è
andando a farsi avanti fino alla fine
per muskie attraverso Moray attraverso Electric
Moray e a questo punto ha muskie
completato ciò di cui ha bisogno dal
medita qui e raggiungerà il
archiviazione qui per ottenere effettivamente questo oggetto
e restituire restituirlo per la richiesta e
quindi sta andando a scegliere solo uno di questi
a caso e chiedere per quell’oggetto e questo
ritorna indietro
c’è il contenuto dell’oggetto e nel
evento che questo nodo di archiviazione non è
disponibile perché è andato in crash perché
la DC non è disponibile Sono colpito da
qualunque cosa sia, c’è un altro lampo
server e lo abbiamo trovato nella maggior parte dei casi
avere un livello di durabilità di due è
sufficienti per avere i vostri dati siano
disponibile sempre indipendentemente da quanti
i server sono in fase di riavvio o arresto anomalo
attraverso la flotta e così sette punti o
in grado di rispondere e che la richiesta è buono io
non passerà attraverso un full put perché questo
sembra molto , è carino
simili ma le cose chiave che sono
questo è lo stesso che fa il muskie
autorizzazione e sta per fare
contattando i metadati per il tuo in
livello di archiviazione nel caso di mettere a
il nuovo oggetto muskie ha bisogno di scegliere quale
gli squali quali nodi di archiviazione per memorizzare il file
oggetto in anticipo
e farà in modo che quello
le copie sono distribuite su almeno due
data center e di nuovo questo ci fornisce
disponibilità e la perdita di un intero
giorno giusto
o nella perdita dei server di stress così entrambi
garanzie di durata e disponibilità
e poi muskie manda quelli al
Squali e quindi inserisce nuovi metadati
registrare per gli oggetti elettrici
ormeggio è l’acqua, così ho detto
in primo piano che Manta era davvero progettata
con calcoli in mente e alcuni dei
cose che motivano questo o quello
gli oggetti possono essere molto grandi e spesso
le cose che vuoi eseguire calcolare
i lavori sono e saranno grandi
è per questo che probabilmente sei interessato a
loro e quindi vogliamo in generale evitare
copiare i dati avanti e indietro in modo simile a me
gli oggetti menzionati sono memorizzati come piatti
i file non sono assemblati in fase di runtime
o qualcosa del genere è un singolo file
su disco che questo è il tuo file e di
spedire il lavoro allo stoccaggio
server stesso evitiamo di dover copiare
quello intorno e così una rapida illustrazione
di questa una piccola mano che ondeggia di parti
ma questa è l’idea di base se volessi
per eseguire il programma WC su questo oggetto
allora vorrei che il cliente lo mandasse a
Muskie e Messi lo spediranno
richiesta direttamente al server di archiviazione
lo eseguirà su una sola lettura
versione di questo file e restituirli
restituisce all’utente l’ ok, quindi è così
Manta 101 e ora parleremo
sulla nuova funzione che ho aggiunto
Manta che è stato caricato in più parti e
se hai familiarità con s3 di nuovo questo
potrebbe essere qualcosa che hai visto prima
l’idea base di upload di più parti è quella
vuoi caricare un file in parti e
poi quando sei pronto lo impegni al
fine ed esporre i nuovi oggetti, invece
di fare un singolo dire e per i dati
sistemi di archiviazione che usano come blocco
metadati basati o metadati basati su extant
questo è molto più ovvio, penso come
implementare perché lo sei
cambiando i puntatori a dove i blocchi di
il file invece di farlo in a
in modo diverso quindi per Manta siamo davvero
necessario partire dai primi principi
e pensa a che tipo di cose fanno
vogliamo da questa API che tipo di
le cose stanno andando a interpretare Manta
o darci la libertà di fare e quello
era la vera chiave che penso a pensare
grazie così ho detto che hai caricato
un oggetto in parti e poi quando è
fatto che vuoi fare un commit come tre
ci chiama completo se questo ha senso
tu e, cosa importante, penso da a
prospettiva progettuale che vogliamo essere sicuri
che gli oggetti creati tramite questo separato
Le API non hanno un aspetto diverso da
normale API put object e perché ciò
sarebbe solo essere davvero bizzarro in modo che sia
una cosa importante da tenere presente
i casi d’ uso per questo sono file veramente grandi
o come connessioni di rete flappy se
sei su un telefono che prova a caricarne alcuni
il video e si sta andando dentro e fuori
Wi-Fi potrebbe essere bello se si può pezzo
quello su invece di dover fare affidamento su a
richiesta unica mantenendo il suo
connessione per lungo tempo un altro uso
caso che è abbastanza vicino e caro a
il mio cuore perché ho uno sfondo in
chimica e streaming di dati da a
fonte così quando stavo facendo p-chem noi
farebbe spesso esperimenti laser e
raccogliere molti dati contemporaneamente
e non sapevamo necessariamente quanto
dati che stavamo per raccogliere ma noi
Sapevamo che avevamo bisogno di un grande duro
guidare per tenere tutto e potrebbe avere
è stato bello poterlo caricare su
manta come siamo andati ma è troppo tardi ora
quindi alcune domande di progettazione di base che pensano
di questo ancora per i primi principi
come identificare un caricamento multiparte
è qualcosa che ha un ciclo di vita finito
diverse richieste e questo intero sistema
è distribuito quindi nessun singolo componente
ha una visione dell’intero sistema così noi
bisogno di un identificatore univoco che può consentire
qualsiasi componente nel sistema per sapere cosa
output multiparte sta funzionando con come
conserviamo le parti che sappiamo che non possiamo
basta aggiungerli a un oggetto perché
non è qualcosa che abbiamo due
supporta con oggetti immutabili e cosa
questa operazione di commit è simile a e
impegnarsi di nuovo è il processo da intraprendere
tutte le parti rendendole nuove
oggetto ed esponendo quello in Manta e
poi alcune altre considerazioni che sono
importante se pensi al
prospettiva di qualcuno che utilizza questa API
che è veramente importante è se ho
un parlamentare u come faccio a fare in modo che posso
vedere quali parti ho caricato posso elencare
loro per un
se ho un sacco di queste cose posso
vedere tutti gli usi in corso e P che ho
cosa succede se sto usando diversi
clienti a cui forse sta lavorando il tuo amico
lo stesso MPU o più probabilmente come il tuo
applicazione ha un sacco di istanze di
questa cosa cosa succede se lo sono
Operando sullo stesso imp, lo fai tu
bisogno di coordinarsi tra di loro
come vogliamo affrontare questo e
perché questo è un sistema distribuito
ci sarà già il fallimento
Sappiamo che così abbiamo bisogno di pensare a
fallimento sì come saranno le parti
ripulito se non ci abbiamo pensato
che ancora e mentre ci siamo, sarebbe
ottimo se posso cancellare un diavolo se io
non voglio impegnarmi credo che le chiamate S3
questo abortire che chiamiamo anche chiamata
Chiamare interrompere infondere a Manta bene così
entrare nei dettagli del design
identificare l’ uso di MP è difficile se tu
dovevano usare solo ciò che chiamiamo il
percorso oggetto di destinazione quindi se volessi
esporre alcuni grandi oggetti chiamati / j
il negozio slash slash taglia un grosso oggetto
testo se dovessi usare quello come il
identificatore dal punto di vista del cliente
non è veramente sufficiente perché quello
percorso potrebbe essere tagliato per comprare un altro cliente
o compra un altro MP tu anche così noi
probabilmente vorresti un altro unico
identificatore per una specifica istanza di
questa cosa quindi useremo au
annuncio perché è così che lo facciamo
le cose qui disegnano le parti quindi questo è uno
area in cui Manta ne ha già molte
infrastruttura a nostra disposizione
sviluppare questa caratteristica che è quella di noi
avere oggetti che è una cosa in
sistema ci sono tonnellate di codice da affrontare
gli oggetti sotto sono compresi
in tutto il sistema, quindi lo faremo
e li metteremo tutti su un singolo
directory e questo risolve il problema di
essere in grado di elencarli c’è un limite
sul numero di voci che puoi avere
una directory ma è il numero di parti
volevamo essere in grado di supportare nel
API è molto meno di così, così non è stato
una preoccupazione e quella convenzione di 10.000
le parti sono il massimo che si possa avere
è un’altra convenzione da parte di Amazon
che abbiamo adottato molti dei loro
convenzioni perché erano ragionevoli
e i nostri utenti li hanno già capiti
e solo veramente deviato dove ha fatto
senso per noi così abbiamo questi parte
directory un determinato caricamento multiparte
ha una directory dove vanno tutte le sue parti
dove li mettiamo e fortunatamente Manta
ha qualche precedente per noi già su come
per fare questo il nostro lavoro non ho menzionato
questo prima, ma i tuoi lavori sono archiviati
sotto un’altra directory chiamata barra
lavori e tutto lo stato per in corso
posti di lavoro vivono in una struttura di directory lì
quindi con quello va bene ne avremo una nuova
directory di primo livello che è qualcosa di nostro
gli utenti hanno familiarità con è qualcosa
che il sistema comprende e possiamo
inserisci caricamenti multiparte così come sono
in corso ma la directory di upload stessa
è anche una directory che significa che
ha quel limite di 1 milione di directory
voci che ho citato prima e che
sarebbe per i clienti molto grandi come
Samsung o altri nostri clienti 1
milioni non è così tanti in corso
carica come puoi immaginare, quindi non lo facciamo
voglio davvero limitarci a solo
quanto possiamo adattare in quella directory così
invece abbiamo aggiunto un po ‘di a
compromesso dove abbiamo uno strato di
indiretta in questa directory
struttura ciò che chiamiamo prefisso
directory e sono chiamati prefisso
directory perché coincidono con
prefisso del UID della NPU e si può
regola la lunghezza di quanto tempo
prefisso è quello di aumentare o diminuire
il numero di directory che abbiamo e
questo significa che puoi ancora elencarli tutti
i caricamenti multi-parte su un account e
è limitato dal numero del prefisso
directory quindi non è un arbitrario
operazione lunga che è buona ma noi
hai ancora il compromesso che hai
potenzialmente più richieste da fare ma noi
ha deciso che era accettabile e
davvero rendere questo concreto questo è un
esempio di quella struttura di directory per
un determinato ID di caricamento, quindi è l’UUID I
menzionato per identificare questo ciclo di vita di
un MP che la directory delle parti è dove
le sue parti vengono caricate e lo vediamo
directory prefisso sì sì così là
potrebbe essere fino a come 4096 directory I
pensare
in base al numero di prefissi possibili
e le parti di esempio sono solo parti
identificato dall’ordine in cui entrano così
zero è il primo è il secondo
uno e così via e questi sono solo di nuovo
Manta obietta di nuovo tutto il sistema
primitivi che conosciamo e capiamo
quindi ora parlerò di qualcosa
che penso sia probabilmente il più
parte interessante di questa intera API che
è l’operazione di commit e così quando noi
stavamo pensando a questo noi
volevo pensare a ciò che è nostro
i vincoli erano e che tipo di
proprietà che vogliamo che questa operazione abbia
quindi l’ operazione di commit è di nuovo il
cosa che prenderà le parti fanno un
oggetto sul disco in qualche modo e quindi esporre a
nuovo record di metadati e Manta che dice grande
il testo dell’oggetto è archiviato su questi archivi
server e non vogliamo che guardino
qualsiasi diverso rispetto agli oggetti normali così
la prima cosa che abbiamo deciso è stata quella
questa operazione ha davvero bisogno di essere
idempotenza idempotente è la proprietà
che una determinata operazione che se ci provi
l’operazione di nuovo o fai un
operazione una volta e poi fare di nuovo il
il risultato è lo stesso della prima volta
un banale esempio banale di un
l’operazione potente dell’articolo è moltiplicata per
uno così se si prende un valore moltiplicato per
uno però molte volte è sempre in corso
essere lo stesso risultato e distribuito
sistemi questo di solito significa se si riprova
un’operazione che ha lo stesso effetto
che è ciò che vogliamo qui e il
ragione per cui vogliamo che sia così
i sistemi distribuiti mancano le cose
tutto il tempo non sentirai una richiesta o
una risposta da un server che pensi
dovresti e in tal caso devi
conosci come cliente o come yeah come cliente
cosa fare Wow se questo significa che
la tua richiesta è fallita, se ciò significa
che quel server è andato e in grado di farlo
per riprovare in modo sicuro rimuove davvero molto
di quelle preoccupazioni e l’altra cosa noi
decidere è che deve essere atomico
tentativo di necessità atomica si riferisce a per
operazione significa che o la
operazione è successo o non è successo a
tutto dalla prospettiva di un cliente e il
la ragione è importante è che lo faremo
avere clienti concorrenti all’interno di
sistema che funziona sullo stesso mpu non lo facciamo
li voglio davvero finire in modo strano
stato indefinito dove forse uno di loro
hanno terminata e l’altra
non l’ha fatto
e noi se perdiamo quello stato che può essere
problematico quindi questi sono i due obiettivi
abbiamo davvero con questa operazione e
quindi ripensando a ciò che abbiamo imparato
riguardo l’ architettura mantis che è attuale
i passaggi di implementazione devono accadere per
questo – per questo ulteriore impegno
completo e il livello di metadati di cui abbiamo bisogno
a come ho detto inserire quell’oggetto
registrare all’interno del livello dei metadati per il
oggetto finale e nel livello di archiviazione noi
bisogno di prendere in qualche modo tutte quelle parti
che sono memorizzati come oggetti Manta e
rendili nell’oggetto finale così siamo
comincerà con il livello di archiviazione
l’implementazione prima e i vincoli
non possiamo aggiungere o mutare Manta
oggetti che non è solo qualcosa che il
il sistema lo supporta sarebbe molto
lavoro confuso e potenzialmente in perdita
fuori su altre garanzie che manta ha
e vorremmo anche se potessimo evitare
copiare i dati avanti e indietro perché è
costoso è un colpo di latenza è giusto
non è l’ ideale se possiamo aiutarlo, quindi cosa fa
questo disegno sembra la prima cosa che facciamo noi
deciso è che modificheremo il
definizione di parti con cui assomigliare
rispetto agli oggetti Manta solo un po ‘
un po ‘così invece di scegliere casualmente con
quale nodo di archiviazione ogni parte continua
sceglieremo solo i nodi di archiviazione
vuole l’oggetto finale di vivere su un massimo
davanti e poi co-localizzare le parti su questi
server e come potresti essere in grado di
deduco questo ha la bella proprietà di solo
dovendo copiare i dati localmente che è un
operazione molto più veloce rispetto all’invio
fuori dalla rete e lo sai
attraverso stack TCP e così via e così via
abbiamo creato questa nuova operazione chiamata
Mako ha finalizzato Mako come gli squali mako
servizio di archiviazione di nodi di archiviazione che conosco
ci sono molti termini nautici mi dispiace
Spero di non confondervi un nuovo
operazione chiamata Mako finalizzata che è
la finalizzazione di un MP tu ed è
andando a prendere come input una serie di party
tag che sono identificatori come per il
parti o qualsiasi oggetto amantha davvero e
quindi questa è una visualizzazione di ciò che noi
avere questo nodo di archiviazione 3 dot store e
questa richiesta arriva per combinarli
parti e
questo nuovo oggetto con questo nome e questi
sono tutte le parti come sono su disco e
le loro dimensioni e vedi la vecchia mappa degli ID
alla richiesta quindi make sarà finalizzato
creerà quel nuovo file oggetto di destinazione
e poi che sarà appuntata parti a questo file
e questo sarà l’ultimo piatto
file che vive su disco e a questo
non vogliamo davvero averti
conoscere il doppio dei dati per ogni MP voi
in giro in modo da finalizzare Mako volontà
rimuovere quelle parti e così ci siamo
quell’oggetto piatto su disco e possiamo
esponilo a Manta invece così il prossimo
la domanda sta tornando al nostro design
i vincoli sono un’operazione atomica
è una operazione potente e
è per pensare attraverso questo penso
è davvero utile pensarci
diversi punti in cui il server può
crash quindi prima pensiamo a se Mako
si blocca mentre sta scrivendo questo
traccia il file oggetto target mentre è
aggiungendo quelle parti così crollare cosa cosa
succede in quel caso bene perché noi
preso la decisione di non rimuovere il
parti fino a dopo questo file è a livello
disco quindi sappiamo che le parti sono
ancora lì e non importa quello che possiamo
ricostruire l’oggetto in modo che va bene
cosa succede se è già stato scritto
il file oggetto di destinazione è lì e
quindi rimuove le parti e si blocca
che tipo di stato abbiamo lasciato
in modo che sembra qualcosa di simile a
questo caso è ancora ok per riprovare
perché il file è lì, ci siamo davvero
bisogno di un modo per verificare che il file è
non corrotto corrisponde a quello che
richiesta vuole fare così anche noi
una somma md5 del file come noi come sua
creato e anche controllare il numero di
byte come un ulteriore controllo che
questo file è ciò che ci aspettiamo e così via
questo caso Mako verrebbe a verificare che l’md5
somma sulle corrispondenze del file oggetto di destinazione
ciò che la richiesta si aspetta anche se
non è nella diapositiva scusa e basta
vedrei anche che sono 16 Meg’s che
è previsto e quindi dire va bene questo ha
già provato appena posso
rimuovere queste parti e andare avanti
Tornerò al successo
quindi una cosa che non ha parlato in
quelle diapositive precedenti sono ciò che accade
se una richiesta invia un set diverso di
parti così invece di dire come sai
in queste quattro parti mando solo il primo
tre e se ne hai due di quelli
operazioni in corso allo stesso tempo
dove sono in conflitto tra loro
è possibile che una delle operazioni
rimuoverà una delle parti l’ altra
uno ha bisogno e poi siamo in uno strano
stato in cui abbiamo come 3/4 di un obiettivo
file oggetto scritto e non lo è
necessariamente ciò che l’utente voleva così noi
aggiunto alcuni vincoli aggiuntivi al
Livello API al di fuori del produttore finalizzato a
impedire questo tipo di cose da
succedendo così la cosa fondamentale qui siamo noi
non voglio che due clienti si impegnino
un diverso set di parti perché al più presto
poiché quell’operazione accade è possibile
che abbiamo iniziato a rimuoverli e noi
non abbiamo più i dati di cui abbiamo bisogno
ricostruisci quel file così questo è esterno
di Mako finalizzato ma una parte importante
dell’operazione essendo idempotente
e così controlliamo quei conflitti
ancora prima ancora di invocarlo e noi
anche voler abortire con
si impegna soprattutto per motivi di convenienza
perché sarebbe più complicato da
implementalo altrimenti non è molto
possibile, penso di farlo ma noi
ha deciso che davanti così tutto ciò
indica che ne abbiamo bisogno
stato aggiuntivo qui Mako finalizza fa
non avere informazioni su quali client
stanno provando quali sono le cose sullo stesso in PU
e non abbiamo bisogno di protezione contro
così ora penseremo a
i dettagli di implementazione su
livello dei metadati abbiamo il livello di archiviazione
coperto pensiamo ai metadati
quindi dove dovremmo archiviare questo stato noi
hanno già alcuni record di metadati
associato a un MP in modo specifico
il record della directory parti che è il
directory che contiene tutte le parti
e possiamo solo aggiungere cose arbitrarie a
quel record di metadati fondamentalmente perché
è solo un oggetto JSON che possiamo fare
siamo in grado di modificare l’implementazione in modo
Considerazioni Singh qui MP che commetti
nel suo complesso deve essere un oggetto atomico
potente che significa anche che lo è
le operazioni secondarie devono essere atomiche
o idempotente da soli o al lavoro
insieme per creare così se solo noi
aveva lo stato riguardo al NP in cui ti eri immagazzinato
la directory delle parti come ho detto
prima è questo atomico questa è una domanda
pensare e potrebbe essere immediatamente
apparente dalla diapositiva che non lo è
in base al modo in cui l’ho strutturato ma
abbiamo il frammento del record di upload
riferendosi al frammento che il caricamento
o il registro delle directory parti che è il
stessa cosa mi dispiace anche se se n’è andato e poi
abbiamo anche il frammento dell’oggetto di destinazione
qual è il frammento in cui sono contenuti i metadati di
quell’obiettivo finale sta andando a
vivi e non c’è questo non lo sono
necessariamente lo stesso grafico a tutti
perché non sono la stessa directory
giusto questa è l’ unica cosa che sappiamo
le garanzie sono sullo stesso frammento e così via
questo è un altro esempio in più parti
caricare e questo è il muskie coordinante
un MP si commette richiesta quindi sta andando
chiedere lo stato e questo è un
esempio di come le cose non funzionano solo per
sii chiaro e dice che è stato creato
nessuno lo ha ancora commesso o abortito e
quindi dice ok, giusto che lo stato sia
impegnato in questo disco che sto rivendicando
che questo cliente ha l’ultima parola
su cosa succede a questo MP tu ed ora
il muskie andrà a destra dell’oggetto bersaglio
registra per esporre il grande oggetto in Manta e
il frammento dice ok bene
ok ora esempio di dove questo potrebbe andare
sbagliato succede la stessa cosa ma invece
di udito o risposta muskie no
ascoltare una risposta così a questo punto siamo
in uno stato indefinito perché non lo facciamo
sapere per certo che l’oggetto target
shard ha risposto a questo particolare
richiesta è possibile che potremmo solo guardare
per vedere se quell’oggetto è in Manta ma
perché è un oggetto normale che potrebbe
immediatamente cancellato quindi la sua presenza
o la sua assenza è una garanzia di nessuno dei due
che è stata commessa o interrotta esso
potrebbero essere eliminati da altri utenti in modo
non funzionerà
così chiaramente questo non è il modo
avanti così in ordine per questa operazione
di essere atomica
abbiamo bisogno del cambiamento di stato del
caricamento multiparte e l’esposto
esposizione dell’oggetto target in Manta
essere nella stessa transazione e un
energia atomica ama quai così o quello
succede o non succede affatto ma
entrambe queste cose devono accadere a
nello stesso tempo sullo stesso frammento così il
la soluzione è che metteremo il funzionario
stato del si ampli sul frammento del
oggetto bersaglio che sembra come sarebbe
lavoro e possiamo ancora mettere un po ‘di stato
la directory delle parti registra semplicemente come un
ottimizzazione ma alla fine la finale
lo stato è ciò che esiste su quell’obiettivo
oggetto shard e per fare ciò abbiamo creato a
nuovo tipo di record di metadati di Manta
chiamato il record di finalizzazione ed è dentro
una tabella di database diversa e ha un
identificatore univoco sia per la mpu che per
l’oggetto target in modo che tu possa vedere
quello per un identificatore particolare alcuni
il cliente ha commesso o ha interrotto questa cosa
e questo è lì indipendentemente dal fatto
il record dell’oggetto target è lì così
che sta per essere simile a questa
muskie legittima lo stato finalizzato
invece di impegnarsi per il caricamento
registra e questa è la parte di ottimizzazione
ma fondamentalmente sta raccontando qualsiasi futuro
Muskies che chiedono questo disco vanno a dare un’occhiata
al frammento dell’oggetto di destinazione invece di
vedi se questo ti impegna e così
quando si verifica effettivamente il commit
questa transazione
così ai diritti muskie sia il grande oggetto
record di metadati e poi questo finalizzazione
registra che è solo un po ‘come la chiave
sembra ma quelli vanno nella stessa cosa
transazione e quindi se ascoltiamo una risposta
da quella allora sappiamo che siamo in
chiaro che è un’operazione atomica quella
il mpu ora è finito e questo oggetto
il record è lì e non importa
cosa succede dopo perché noi
avere questo record di metadati aggiuntivo a
dicci cosa è successo a quel particolare
MPU quindi nel caso in cui quella risposta
è perduto, va bene, possiamo solo chiedere
quel disco di finalizzazione di nuovo e sapere
che è stato completato anche se l’obiettivo
oggetto è stato cancellato
e quindi mi sono riferito a
gli stati di Imp usano penso che sia utile
vedere lo stato davvero di base
macchina per quello che sembrano così a
cliente quando inizi un MP tu
spostalo nello stato creato e poi tu
carica le tue parti in questa fase e poi
puoi o commetterlo o annullarlo quale
lo sposta nello stato di finalizzazione e
quello è lo spazio tra l’ inizio del
richiedere e vedere effettivamente quello atomico
transazione batch che abbiamo appena visto
la diapositiva precedente e così una volta il
finalizzazione del record interruzione del commit commit o
la registrazione di abort è scritta allora è
fatto e questa è la fine di non più
le richieste possono accadere su di esso e per il
per completezza questo è tutto il
passi come in pseudocodice sul muskie
lato non ho intenzione di leggere attraverso di loro
ma li avrò di queste dimensioni se
sei interessato a voler tipo di
basta riconvalidare tutto ciò che ho detto e
per altre operazioni di caricamento multiparte
atomicità di concorrenza e idempionalità
tutte queste cose sono importanti ma
commettere è davvero il più interessante
uno dei motivi per cui mi sono concentrato su di esso
ma per abortire e mpu non invochiamo
invocare Mako finalizzato a creare il
oggetto è ma ha lo stesso
finalizzare la proprietà di inserimento del record così
invece di inserire un oggetto target
record e il disco di finalizzazione abbiamo appena
inserito il record di finalizzazione per dire
questo uso abortito non puoi commettere
più sì sì, ripensando alla gentilezza
della vista dall’alto a volo d’uccello di
quello che volevo che questo discorso fosse
pensando molto al design
vincoli che avevamo entrambi per questo
nuova funzionalità e anche ciò che Manta già
aveva colpito il sistema maturo come un retaggio
sistema che ha i suoi invarianti e
trade-off che sono stati fatti cinque anni fa
quando è stato creato e dobbiamo lavorare
intorno a quelli così alcune cose che noi
voleva realizzare caricamenti multi-parte
sono stati commessi e aborti atomici anche oggetto
potenza lì
e sano elenco di entrambe le parti e tutto
dell’IMP utilizzare nel tuo account ma noi
dovuto lavorare con queste cose
oggetti così immutabili i metadati in
memorizzare
implementazione del ponte di Manta non lo facciamo
avere supporto per cross shard
transazioni così una cosa che potresti avere
mi sono chiesto tra le diapositive dov’ero
parlando di diversi i caricati
registrare il frammento e il frammento dell’oggetto bersaglio
anche perché non puoi semplicemente fare un lotto
operazione attraverso quei due e quello è
solo non qualcosa che abbiamo nel nostro
sistema e ne avrebbe molti altri
considerazioni se dovessimo introdurre
così abbiamo appena deciso di non andare con
questo e perché questo è distribuito
sistemi tutto può fallire tutto il tempo
inaspettatamente
quindi dobbiamo pensare che non importa
cosa così come possiamo risolvere questi
cose immutabili abbiamo deciso che
mutare gli oggetti Manta era un antipasto
semplicemente non abbiamo il supporto per questo
quindi quella non era una soluzione, c’è questa
separazione tra metadati e archiviazione
il che significa che dovevamo pensare
tutte le proprietà che volevamo queste API
operazioni da avere entrambi da un metadata
prospettiva e una prospettiva di archiviazione
perché entrambi stanno per essere
coinvolto senza il frammento di croce
supporto per le transazioni non ci limitiamo a usare a
singolo frammento che funziona è il nostro
singolo strato la nostra singola unità di
atomicità in Manta e abbiamo pensato per
i sistemi distribuiti falliscono
inaspettatamente abbiamo solo pensato a cosa
accadrebbe se cose diverse non lo facessero
rispondere e come ogni componente
affrontarlo ma ce n’erano alcuni
i trade-off qui così rendono o finalizzare è
in realtà una specie di strana operazione in
Manta rispetto al resto delle cose
che Mako lo fa fondamentalmente è il motore X.
che se si utilizza per lo più esegue il mapping di un file
sistema su un server a un URI richiesto così
è piuttosto limitato in termini di suo
richiedi tempo e e davvero
semplice ma poi abbiamo aggiunto questo
un po ‘ come la cosa complessa del file system
o cosa o operazione che sta interagendo
con il file system piuttosto e ha
latenza variabile perché sta per
dipende dalla dimensione dell’oggetto e
quindi non è qualcosa che davvero
piace presentare in Manta ma noi
deciso era un compromesso accettabile per
tutte le altre cose di cui abbiamo parlato io
menzionato prima come copiare i dati
attraverso la rete che probabilmente
essere ancora più lento
e un’altra cosa che potrebbe non essere stata
immediatamente ovvio è il musky
quando carica queste parti è gentile
di deviazioni dal normale oggetto messo
percorso un po ‘perché deve metterli
tutto sugli stessi squali e questo può avere
alcune implicazioni per la disponibilità
di queste parti quindi se ad esempio un imp
sei stato creato e ha scelto gli squali 1
e 4 e poi lo squalo 4 va via bene
ora non possiamo caricare parti su quello squalo
quindi c’è questa finestra dove perdiamo a
un po ‘ di durata nel tempo
stiamo caricando e quello è
un altro compromesso che dovevamo fare ma
dopo aver fatto qualche analisi di noi
decise che probabilmente stava bene
perché la maggior parte di queste cose sono davvero
di breve durata quindi se uno squalo sta andando via
è probabile che non colpirà dentro
quella finestra ma è un po ‘di compromesso
è ancora lì e quindi qualche finale
i pensieri sono se vuoi vedere davvero
completa discussione di tutto ciò che ho appena
Ho parlato di avere un RFT RFT sono un
cosa facciamo a Giant dove se vogliamo
discutere le modifiche alla funzionalità delle idee e
e vanno dal software all’assunzione
pratiche per voi sapere organizzative
cose e noi tutti lo facciamo tutto nel
aperto perché tutto ciò che facciamo è aperto
fonte in modo da poter vedere che i nostri piedi se
siete interessati a leggere di più
tutto questo in modo molto più dettagliato e quando
stai aggiungendo una nuova funzionalità a a
sistema sai che avrai bisogno di
pensa all’invarianza del sistema
e se li violate cosa costa
sono ciò che le cose stanno perdendo nel
processo e quali cose stai guadagnando
perché tutto è solo un compromesso
per praticamente tutte le decisioni tecniche
e persino i sistemi legacy possono avere nuovi
caratteristiche che siamo al di fuori del
portata progettuale di ciò che sono immaginati
il sistema operativo immagino sia un’eredità
sistema e continuiamo a innovare su questo a
congiunto – quindi sai di sognare in grande, quindi non posso
aspetta di vedere un’altra presentazione su a
nuova funzionalità per Manta il 10
compleanno che è tra cinque anni e io
penso che sia tutto grazie, grazie mille
tu
e abbiamo solo un paio di minuti se
abbiamo una domanda o due mi sento come la mia
il cervello è brulicante ne ho così tanti
mi interrogo ma ne lasceremo altri
la gente chiede loro così abbiamo parlato
multi-parte applaude a destra diciamo a
il file ha cinque caricamenti falliti sul
terzo upload terzo o quarto upload noi
non ho discusso di quello scenario che cosa farà
accadrà dovrò passare attraverso così è
c’è qualcosa come un punto di salvataggio o
qualcosa so che hai un impegno ma
se arriviamo a metà strada e poi falliamo cosa
vuoi dire che stai parlando
sul processo di caricamento delle parti
a un deputato tu in quel caso puoi solo
riprova quindi non ho parlato dell’API per
tanto ma è come ho detto
lì c’è l’uomo da obiettare quindi è solo un
tagliare al sistema in modo che tu lo voglia
riprovare e perché ci sono oggetti
puoi sovrascriverli e cambiarli
come desideri , non so se rispondo
la tua domanda sì sì sì sì
scusa lasciami scusarmi fammi dare
tu il microfono è anche un po ‘difficile sì
è difficile sentirti parlare del microfono sì
quindi quello che sto cercando di mettere a fuoco qui è la volontà
Devo ripetere il primo e il secondo se lo è
fallisce il terzo non ho ragione quindi se ci
è una transazione che fallisce durante il
commit o durante il finalize così io il
la prima domanda era dovrei
ripeti che hai risposto no ora
se fallisce durante finalizzato quando sono
colpire finalizzare e fallisce sì è così
quell’oggetto trattato come orfano o
qualcosa di no nel caso in cui
fallito durante finalizzato come il
Mako finalizza l’operazione o l’inserimento
del passaggio dei metadati puoi ancora riprovare
anche se quella era una delle cose che noi
volevo davvero essere sicuro di non farlo
devo ricominciare da capo
Ho sperabilmente tre domande brevi
va bene va bene
una multa c’è una compatibilità s3
strato per Manta I abbiamo software
per averlo fatto non so cosa sia
lo stato è perché non è un
squadra diversa ma abbiamo software
scritto da joint che lo fa ma no
un lato server ci va bene grazie e
in realtà stiamo appena arrivando
contro pranzo quindi sarai disponibile
a chiacchierare con le persone a pranzo
[Applausi]
Please follow and like us: