
quindi sì cerchiamo di iniziare ho intenzione di
parlaci oggi di questo
verifica di un sistema distribuito e
il punto di questo discorso non è quello di piacere
belabor metodi formali e accademici
prove perché le persone nell’industria non lo fanno
usali la scuola di cui parleremo
su alcuni veri modi in cui puoi farlo
e devo menzionare le prove ormonali
solo perché piace la loro cosa e là
è alcuni usi interessanti nell’industria
questo sta accadendo adesso, quindi facciamolo
iniziare mi sto prendendo in giro
Ecco, io sono Katie McCaffrey come me
ho detto che sono un ingegnere di sistemi distribuiti
Ho trascorso la mia carriera costruendo principalmente
backend su larga scala al potere
esperienze di intrattenimento e video
giochi così per Microsoft su Xbox così
halo serie Gears of War HBO e ora I
lavoro su Twitter, dove sono a I was the
piombo tecnologico dell’osservabilità e io ho
recentemente ramificato in distribuito
costruire strumenti che è molto eccitante
sono io su internet i miei DMS sono aperti se
hai domande o vuoi chattare
dopodiché parlo totalmente a me cuz II
come fare che è grande per sentire da
tutti ok così inizieremo questo
parla con una citazione di Leslie
Lamport perché quali sistemi distribuiti
parlare non ha bisogno di un Leslie Lamport
riferimento
così Leslie ha definito il giorno in cui a
la distribuzione è quella in cui il fallimento
di un computer che non conoscevi nemmeno
esistito può rendere il proprio uso del computer
inutilizzabile quindi forse era così
bene questo non è OK oggi se come uno
il computer va giù e si rompe completamente
il tuo intero sistema allora ne abbiamo davvero
grosso problema perché i tuoi utenti sono più
probabile essere colpiti e che impatti
la vostra linea di fondo quindi il punto di questo
parlare oggi è una specie di come facciamo noi
aumentare la nostra fiducia che il nostro sistema
sta facendo la cosa giusta in modo che questo
un computer fastidioso che scende o
più computer che scendono o un dato
il centro che scende non influenza il nostro
sistema e può continuare a funzionare anche io
andando a prendere una parentesi da parte per dire noi
stanno tutti costruendo sistemi distribuiti
anche se non stai costruendo la scala di Google
o la scala di Twitter o qualsiasi altra cosa
inserisci la scala aziendale che stiamo costruendo
sistemi distribuiti e siamo stati tutti
per un po ‘i nostri clienti parlano con i nostri
servizi che comunicano con un database e
questo è anche quando eravamo di nuovo su uno
unico database e
questo potrebbe essere un piccolo sistema semplice ma
è ancora distribuito perché lì
stiamo parlando sulla nostra rete
i componenti possono fallire e quindi tutti questi
strumenti sono che stiamo andando a passare attraverso
oggi sono applicabili a qualsiasi sistema di dimensioni
il tuo sistema potrebbe essere semplice potrebbe essere
molto grande e complicato come
Servizi di Twitter questa è una traccia
creato da Zipkin che è il nostro
sistema di tracciamento distribuito su Twitter di
tutti i nostri micro servizi questi hanno
a volte è stato indicato come Deathstar
architetture così come questa è una specie di
pazzo e come testare tutto questo è molto
importante perché vogliamo mantenere
Twitter installato e funzionante in modo da poter utilizzare
e poi sai a volte costruiamo
questi sistemi sono un po ‘pazzi
e ti potrebbe piacere di graffiare il tuo
testa e sii come quello che diavolo hai
costruito ma vogliamo ancora testarli
sistemi e assicurarsi che funzionino bene
– Ok, quindi una rapida panoramica di dove siamo
gonna go oggi stiamo andando a parlare di
verifica formale molto brevemente questo è
e poi solo perché è un po ‘come
il gold standard del nostro modo di verificare che
i nostri sistemi sono corretti e poi lo faremo
passare la maggior parte del tempo a parlare
come puoi testare le tue cose in natura
e mentre questi non ti danno un oro
standard come sei approvazione stella d’oro
che probabilmente è corretto farlo
hai molta più fiducia che puoi ordinare
di mescolare e abbinare quelli che funzionano per voi
in base al tempo, al budget e agli investimenti
in strumenti e risorse che hai e
quindi ne parleremo brevemente alcuni
ricerca che penso sia davvero
interessante che ci sta dando come un nuovo
spero che forse costruisca e collauda
i sistemi distribuiti non sono così terribili
Ne vado fuori a tonnellate
informazioni in questo discorso e non sentire
come se dovessi prendere appunti o altro
Ho una pagina github in cui si parla
elencati e tutti i riferimenti sono
anche lì se vuoi immergerti profondamente
in più non ti preoccupare di provare a
leggi che c’è un link più grande al
fine e lo twitterò anche se tu
voglio guardarlo bene, allora prendiamoci
nel testare cosa fare quando testiamo e
formalmente quello che diciamo è che siamo
cercando di dimostrare certe proprietà o
sul nostro sistema e stiamo cercando di
dimostrare le proprietà di sicurezza e questo è il
idea che qualcosa di brutto non lo farà mai
capita nel nostro sistema e ci stiamo provando
Dimostrare anche le proprietà di vita e questo
è la garanzia che qualcosa sarà
alla fine capita nel nostro sistema che il nostro
il sistema può fare progressi che puoi
ovviamente costruisci semplicemente un sistema
che ha l’uno o l’altro di questi
proprietà come esclusivamente ma è
generalmente non è un sistema utile per te
può anche pensare a proprietà di sicurezza come
l’idea di come quello che è il sistema
permesso di fare fondamentalmente come questo potrebbe
essere una garanzia che tutti i dati impegnati
quindi tutto bene riconosciuto o riconosciuto
i diritti sono persistenti e corretti e
come durevolmente immagazzinato e non sarà mai
perso in modo equivalente puoi anche dire a
proprietà del processo di leggerezza è questa idea
di come ciò che il sistema deve alla fine
fai così è un’idea di come quando io
ricevere una richiesta che alla fine
rispondere a quella richiesta così quelli sono
una sorta di termini formali molto simili a cosa
lo stiamo facendo quando stiamo testando come me
detta verifica formale è questa idea
quel genere di cose provenivano dal mondo accademico e questo
è come dimostriamo che i sistemi sono corretti
questo è davvero grande perché noi quando noi
costruisci come sai programmare
lingue e cose del genere ci genere
di avere un’idea che in realtà funzionano
o un algoritmo di consenso e questo dà
noi questa stella d’oro piace il nostro sistema
provabilmente corretto abbiamo fatto come noi
avere la matematica che ci ha detto che il
il sistema farà ciò che pensiamo sia
andando a fare e questo è davvero utile per
alcune cose specifiche formali
generalmente uso ci sono due tipi di quelli
di cui le persone hanno generalmente sentito parlare
c’è TLA plus e poi c’è il coq
stiamo andando a fare un rapido TL A +
esempio nel caso non l’abbiate mai visto
e tu sei totalmente come ho sentito
questo ma e la gente parla di come
è terribile e noioso solo perché io
penso sia interessante vedere um e
questa è una citazione che ancora una volta Leslie
Lamport
ha inventato TL A + presso Microsoft Research e
scrive nel suo libro specificando i sistemi
che puoi leggere un PDF online
è bello che sia una buona idea capire
il sistema prima di costruirlo, quindi questo è
l’idea che ci piacerebbe forse
progettare qualcosa prima di iniziare a programmare
ma continua anche a dire che lo è
una buona idea per scrivere una specifica di
il tuo sistema prima di implementarlo
sta dicendo come definiamo cosa
proprietà che i nostri sistemi avranno
e questo dimostra che queste proprietà sono
andando a tenere e in realtà produrre il
risultati che pensiamo che stanno per
produrre quindi questo è un esempio da
specificando i sistemi di TLA plus e i
la nostra specifica dell’orologio quindi lui fondamentalmente
scrive una specifica molto semplice di
un’ora fa questa è solo l’idea
visualizza l’ora dalle simili 1 a 12
e così scriverai la tua prova e
lo definirai come questo
linea sta dicendo che come l’ora può essere
uno al numero 12 come quelli interi
numeri e poi definisce come
aggiorna se è 12 diventa più
altrimenti aumenta di un’ora in più
uno e poi prendi questo è come
sai che sembra codice giusto e
lo prendi e lo fai usare TL
TL C che è un modello di controllo o TL ApS
che è un assistente di prova e poi tu
metti le tue specifiche in una di quelle
e ti dirà se il tuo sistema
è corretto o meno e quindi lo hai
un sistema verificabile in modo verificabile, quindi è così
l’ industria pulita ha effettivamente usato questo
questa non è solo una cosa accademica così dentro
2014 Amazon ha rilasciato un rapporto tecnico
su come usano TL a plus per verificare 10
più pezzi fondamentali della loro infrastruttura
incluso s3 questo è un super
carta accessibile quindi se sei
interessato a forse usando questo per verificare
elementi chiave dell’infrastruttura I altamente
consiglio di leggerlo, così passeremo attraverso
alcuni dei punti salienti ma fondamentalmente
hanno dichiarato alla fine di questo articolo
quei metodi formali sono stati enormi
successo e sono ora nel loro annuale
pianificazione in realtà tempo di budgeting in
costruendo sistemi in modo da allocarli
tempo di ingegneria per utilizzare TL a più e
scrivere le specifiche per il loro cruciale
pezzi di infrastruttura come s3 quando
hanno fatto questo hanno trovato due diversi
bug gravi che dicono che non potevano
ho trovato in qualsiasi altro modo di
test e poi ha anche permesso loro di farlo
aumentare la fiducia per rendere tutti questi
una specie di perf perfetto molto simile
ottimizzazioni che stavano cambiando il
sottostante e implementazione e il
algoritmo un po ‘ e lo hanno sentito
non avrebbero avuto questa fiducia
per fare queste ottimizzazioni in questi
pezzi fondamentali di archiviazione perché è così
tipo di rischioso senza avere un formalmente
prova corretta, quindi è fantastico
come se si sta costruendo qualcosa che
le altre persone faranno molto affidamento
su come un sistema di archiviazione o un database
o stai offrendo qualcosa come a
servizio come forse questo è qualcosa di te
voglio investire soprattutto se hai
forte coerenza garantisce intorno ad esso
essi chiamano anche in questo articolo
uno dei e questo è in genere uno dei
le più grandi critiche di tli Plus e
i metodi formali sono generalmente loro
scrivi questa logica o questa come la tua
codice di specifica formale e non lo è
codice che generalmente esegue il tuo sistema e
così si potrebbe avere una completamente corretto
specifica del tuo sistema e del tuo
il codice che si scrive è ancora sbagliato e
è come una sfida, ne vale la pena
notando che cazzo, che non ho avuto
il tempo di andare in realtà può generare
Haskell o cammello obiettivo per
la specifica e che è eseguibile
primo sottoinsieme non credo che faccia il
tutto il linguaggio credo che lo faccia solo
il sottoinsieme della lingua perché altro
come devi essere in grado di dimostrare
proprietà che come finisce e
sai che non posso farlo con il linguaggio
la maggior parte delle lingue quindi è come qualcosa
questo tipo di aiuto aiuta a colmare il divario ma
ovviamente non siamo ancora fino in fondo
lì anche se hai un formale
specifica che probabilmente è ancora necessario
prova il codice che hai scritto quindi facciamolo
parla di come testeremo il
codice su come i praticanti statunitensi stanno andando
fai questo in natura e così mentre possiamo
non avere questa idea di una formalmente corretta
o un sistema provatamente corretto che tu conosca
avere questa idea sembra abbastanza legittima
quindi lo metterò in produzione ok
questo è super-base
Non voglio fare test unitari ma
come scriverli per favore um tipicamente questo
è come l’idea che è implementato
dallo sviluppatore che sta scrivendo il codice
può essere eseguito localmente con CI o no
l’ambiente necessario è solo la tua CPU
e questo è per verificare di base
funzionalità e casi di errore questo
aumenta la tua fiducia che il tuo
i codici effettivamente fanno la cosa giusta
tipicamente mi piacciono i casi di test per questo
aumentando la mia fiducia che come te
conoscere sei mesi su tutta la linea i miei codici
stanno facendo sta facendo sempre la stessa cosa
quando qualcuno è come se sapessi fare un grande
refactoring o modifica di un’implementazione e
allora mi piacerebbe rompere per un breve
Fai un Festo perché se entri
i linguaggi di programmazione tap track o
qualsiasi cosa o hai usato una programmazione tipizzata
i tipi di lingue non sono tipi di test
Impedisci che le tue lingue digitate siano fantastiche
In realtà preferisco usarli così voglio
mi piace totalmente parlare del mio pregiudizio
perché questa è una prospettiva ma
come quando scrivi da un tipo di
linguaggio ti dà solo così tanto
può solo dimostrare quanto il tuo tipo
il sistema è espressivo come il tuo tipo
il sistema è quindi questo è come un breve
esempio in Scala I definire un metodo add
e poi come se facessi un errore di battitura e lo sono
moltiplicando effettivamente i valori
tornare così come ovviamente il sistema di tipo
non ha reso il sistema corretto questo è
restituirò la cosa sbagliata come test unitario
lo troverei e io mi spezzerei
qui perché penso sia una specie di a
c’è un sacco di dibattito in
programmazione della comunità ma non abbiamo
linguaggi di programmazione abbastanza espressivi
e quelli che in genere stavano usando
un settore su cui contare si basa su questo
in realtà la ricerca in corso che maggio maggio
questo meglio, ma non siamo ancora arrivati I
anche una sorta di voler chiamare fuori che è
conosce questo è una sorta di questo è un si tratta di una
cosa succede molto
c’era una storia di uno sviluppatore più giovane
con cui stavo lavorando a un certo punto, chi
era molto innamorato dei sistemi di tipi
e le prove matematiche dietro di loro
e la teoria dei tipi e questo è grandioso, ma lui
credevo che non avresti dovuto scrivere
casi di test e se sei nella mia squadra
scriverò casi di test così simili
avvertimento se vi capitasse di voler lavorare con me
così ho scritto in una recensione del codice che mi piace
hey devi aggiungere alcuni casi di test a
questo e mi piace è passato e ho fatto un
revisione approfondita del codice e io in realtà
trovato un bug che era la sua ricorsione
l’algoritmo non lo abbandonerebbe mai
in realtà sarebbe recurse per sempre e potrebbe
fai esplodere il suo stack e così se lo schiudi
in produzione che causerà un brutto colpo
tempo e un semplice caso di test unitario
prendi questo giusto così e poi lo sai
molto ben scritto perché volevo
di utilizzare questo come un momento di insegnamento che
hey penso che ci sia un danno
bug di tenda qui potresti per favore fuori a
caso specifico per questo e lui
fatto e poi ci siamo trasferiti tutti e il nostro
le vite erano migliori, anche io voglio
Fai notare che come TCP non è davvero così
preoccupati del tuo sistema di tipi così quando tu
iniziare ad andare nella rete come tutti
le scommesse sono disattivate e il tuo sistema di tipi non lo è
ti aiuterò qui ancora giusto ancora una volta
programmazione di ricerca linguistica persone che
forse nel pubblico che conosci
per favore risolvi questo problema per me ma
come TCP non interessa così questo tipo di
mi porta al mio prossimo argomento di cui hai bisogno
test di integrazione e so che c’è un
molte metodologie di test differenti in
industria, ma ho sorta di definito
test di integrazione se vuoi resistere
su un piccolo un qualche tipo di ambiente
stai andando a scrivere questi test così
che stai esercitando una specie di the
confini di rete tra i tuoi sistemi
quindi questo sta parlando al tuo database o
testare il tuo protocollo di rete testin e
inversioni del tuo protocollo di rete anche
importante c’è questa specie di storia divertente
che avevo quando stavamo spedendo Halo 4
che abbiamo beccato un bug abbastanza grande
avrebbe davvero martellato il nostro sistema a
lancio perché avevamo una corretta integrazione
test, quindi ho lavorato sulla statistica
servizio di Halo 4 hai caricato il tuo
statistiche alla fine di una partita e noi
elaborali li abbiamo notato durante
test di integrazione del gioco
caricamento coerente del blob delle statistiche
tre volte e questa cosa è grande e
è costoso elaborare così come fare
tre volte il carico che abbiamo proiettato
sarebbe stato un brutto momento in
produzione Sono così tornerò e
avanti con lo sviluppatore della rete o il
gioco dev who
responsabile di questa funzionalità dalla sua parte
e avevo scritto API dalla nostra parte e
Sono come guardare i nostri log che siamo
restituendo HTV 200 come perché sei tu
pensando abbiamo fallito e mantenere inviarlo
a noi tre volte e continuo a pensare che
non sei riuscito a caricare le statistiche e lui è come
Non so come voi ragazzi dovreste essere
mandandoci qualcosa di sbagliato e abbiamo avuto
questa bella piccola battuta avanti e indietro
e alla fine quello che abbiamo scoperto è quello
a causa del codice legacy quale è il gioco
il codice era in realtà cercando era il
parole fatte in maiuscolo nel carico utile
punto esclamativo per contrassegnare una cosa come a
il successo così i test sugli androgeni sono davvero
utile perché sta testando il
ripartizione tra le tue interfacce
e, ancora una volta, molto intelligente
gli sviluppatori fanno cose molto diverse e
tutti abbiamo a che fare con il codice legacy
dovremmo sai esercitare questi
confini e dimostrare che sono
correggi prima di sapere che sai
codice lanciato là fuori per i nostri utenti a
testare anche per supportare unità e migrazione
prova c’è questa carta davvero bella
questo è probabilmente uno dei miei preferiti da
2014 siamo chiamati test di simboli can
prevenire la maggior parte dei guasti critici e cosa
hanno fatto gli autori, hanno studiato 198
campionamento casuale dei fallimenti del mondo reale
segnalato su software open source quindi questo
incluso cose come Cassandra HBase
HDFS MapReduce e Redis e poi loro
avere un sacco di informazioni in questo documento
ma io passerò attraverso alcune delle chiavi
mette in evidenza che penso siano davvero
interessante ma piace anche leggere questo
carta anche così uno dei risultati chiave
che penso sia stato molto interessante
perché smonta un mito popolare che
hai bisogno di una messa in scena tutta intera
ambiente che sembra proprio
produzione per riprodurre alcuni di questi
come i brutti bug di livello di produzione è quello
del 98% dei fallimenti che hanno
analizzato tre nodi o meno fotocamera
riproduci questo puoi alzarti in piedi tre
nodi sul tuo laptop ed eseguilo correttamente così
come possiamo vedere abbastanza nodi liberi in a
ambiente dev che è super
economico è super economico quindi
non c’è davvero quasi nessuna ragione per noi
non dovrebbe fare questo livello di test
è davvero efficace nel trovare i fallimenti
nei nostri sistemi e quando dico
fallimenti catastrofici come sono
parlare è come un sistema di perdita di dati
si blocca da questi sistemi principali che sono
in realtà dovrebbe essere molto stabile e
memorizza i nostri dati ed essere molto affidabili quindi
questo è come fare i test di integrazione
un’altra cosa è testare la gestione degli errori
il codice avrebbe potuto presentare il 58% di
fallimenti catastrofici quindi questa è una volta
di nuovo non l’abbiamo fatto
test di unità giusti che hanno provato qualcosa
oltre il sentiero dorato o no
scrivere test unitari a tutti e quindi cosa
dice a me e come praticante e uno
cosa che ho preso a cuore è usare un codice
strumento di copertura
So codice strumenti di copertura sono super voi
sai come non ti dice se tu
avere una copertura del cento per cento
il tuo codice è corretto ma ti dà un
idea dove hai un buco e se c’è
come tutti questi grandi come oh non l’abbiamo fatto
prova l’errore gestendo casi come 58
il percento di fallimenti catastrofici era
causato dalla gestione degli errori di destra
si così così così così fai questo è super facile
come so che scrivere casi di test non è il
la cosa più divertente del mondo ma come te
so che siamo pagati anche per questo
pensare è interessante qui è così
lo sai e abbiamo fatto tutto bene
come in Gears of War eravamo come
indagando su un bug dopo il lancio e
stiamo passando attraverso il codebase e noi
trova questo come sai se fai questo
se fare questo errore altrimenti si prega di correggere kay
grazie ciao in un commento e c’era
come se non ci fosse un codice così che in realtà
non era il bug ma lo sai come penso
tutti noi abbiamo questi nelle nostre basi di codice così
solo in realtà la loro movimentazione ci aiuterà
Un sacco
infine uno degli altri l’ultimo punto
da questo articolo che ti lascerò
con oggi è quel certo 5% di
I fallimenti catastrofici sono stati causati da
cose molto semplici come internet
il codice di gestione degli errori è semplicemente vuoto o
conteneva solo una dichiarazione di registro loro
effettivamente trovato nella carta che la maggior parte di
gli errori catastrofici sono stati registrati così
questo è almeno il bene che hai
informazioni per risolverli ma loro solo
non sono stati gestiti handler di errori interrotti
cluster interrompe il cluster in modo eccessivo
eccezione generale quindi questo è come Oh
cattura l’eccezione e poi come sai
abbattere il cluster che è così male
forse mi piace pensare un po ‘di più
su come dovrebbero essere i tuoi sistemi
fallire o questa idea di come gestore di errori
il codice contiene righe di commento come mi aggiusta
o per fare questo è pigrizia e questo
sta causando fallimenti catastrofici nel nostro
sistema e mi piace così come abbiamo parlato
su quanto terribile e difficile distribuire
i sistemi sono da costruire, possiamo aggiustare un sacco di
quei problemi semplicemente facendo unità
test di integrazione e questo tipo di carta
ci ha mostrato così mi piace molto questo
carta parlerò davvero
a questo proposito a Q Khan oa New York
documenti che amiamo in giugno se sei lì
come say hi Va bene così passiamo per
qualcosa che forse non hai sentito
circa e non sono solo io che batto
scrivere casi di test questo è basato sulla proprietà
testare questo è un po ‘ ispirato da
dama modello di vita che sono
in realtà come un metodo formale di
verificando dove vai e in realtà
esercitare l’intero spazio statico di input
nel tuo sistema su quel formale
specifica quindi quale proprietà basata
il test è questo è ciò che sai fatto
più amichevole del settore e stanno andando
eseguire
scriverai proprietà sul tuo
sistema che vuoi che tengano e
allora verrà eseguito casualmente
quello spazio degli stati così mentre non lo fa
dimostrare che il sistema sia corretta è
esercitare più lo spazio statale di
solo un caso di test unitario può esserci
sono un sacco di strumenti per fare questo veloce
controllare è stato inventato da John
Hughes e questo è stato il primo
uno e c’è una versione in Haskell e
Erlang che puoi usare e quindi cosa tu
fare qui è semplicemente definire il
specifica invece di un caso di prova o
puoi scrivere entrambi se vuoi davvero
usi uno strumento che genera molti
input per testare lo scope e il
specifica e ciò che è super bello è
che se passano tutti e ottieni un
verde sai pollici e se uno
fallisce, in realtà ti dirà questo
caso d’uso specifico che ha causato il
fallimento in modo che ti dà un sacco di
informazioni per iniziare il debugging
questo diritto non è solo come oh
qualcosa è fallito in natura e ora io
devo andare a sfregarti come sai
miglia di tronchi per capire cosa
è successo attraverso il mio sistema
annoying questo è veramente bello e poi
un’altra breve nota da quella precedente
carta su test e catastrofici
i fallimenti sono che hanno scoperto questo
praticamente come tre ingressi o meno
potrebbe riprodurre più catastrofico
fallimenti e l’ordine era deterministico
quindi se puoi definire la tua proprietà
abbastanza largo potresti prenderli con a
strumento come questo in modo rapido i trucchi
quello originale ho usato il controllo Scala
che è scritto in Scala e Java e
la JVM e poi se vuoi usarla
come tutte queste lingue anche qui
avere porte di controllo rapido e collegamento a
questo dai riferimenti perché se tu
non posso leggere tutto questo ma fondamentalmente
ce n’è uno per quasi tutti
linguaggio che stiamo usando in produzione
oggi che è bello vale anche la pena
notando che il controllo rapido è davvero grandioso
perché è stato utilizzato dalle aziende
denunciato con successo utilizzato da aziende come
mostra bash che ha reagito che è un no
sequel archivio dati coerente alla fine
e hanno un ottimo discorso su come
una sorta di coerenza finale del modello
proprietà che è nel mio riferimento
sezione usando il controllo rapido che hanno usato
per trovare un controllo rapido per trovare bug in
Auto Volvo e più di recente c’è stato un
parlare in un articolo pubblicato su come loro
uso
per trovare bug e Dropbox e così questi
scoprirò qualcuna di più
bug gnarly perché si eserciterà
su una serie più ampia di input e tu semplicemente
Mi piace pensare a um solo un super
esempio veloce in modo da poter vedere fondamentalmente
è come se non fosse che non ti sto chiedendo
per scrivere una specifica pazzesca questo è
il Scala controlla uno perché è quello che
L’ho usato in questo modo, quello principale è fondamentalmente
dicendo che definirò un tipo piccolo
interi e quindi questo è un livello base
proprietà che ti può piacere combinare proprietà
insieme per rendere più complicato
dichiarazioni, ma fondamentalmente sta per
dì che come il numero dovrebbe sempre
tra 0 e 100 e così ogni volta che ordino
di vedere questo poi si sa che quel
la proprietà terrà questo secondo è
come invertire un elenco collegato o invertire
una lista e così dice che conosci il
invertire il retro di una lista dovrebbe
essere uguale alla lista e poi come cosa
Il controllo di Scala farà è andare e generare un
un sacco di input per questo e garantire che
tiene così non hai avuto come non trovare
Un errore o come si sa qualunque come
qualche bug nel tuo sistema e tornerà
sei un controesempio, quindi questo è questo
abbastanza facile da fare e um sai che
penso di pensare per le cose di base è
molto simile ai casi di test unitari di scrittura
sul tempo di investimento e si potrebbe
ovviamente faccio molto di più con questo così io
come il test basato sulla proprietà che io sono
incoraggiare molti miei team a usarlo
più perché penso che trova un sacco di
bug ed è un po ‘basso
investimento per un reparto ibrido finalmente io
voglio passare alla nostra iniezione colpa
che è un altro modo in cui possiamo testare
sistemi distribuiti penso che sia così
particolarmente utile per la distribuzione
sistemi perché stiamo praticamente forzando
i nostri sistemi falliscono e poi lo siamo
osservando ciò che accade, credo pienamente
che se non forzare il sistema a
fallire tutta la teoria e le prove in
il mondo come oltre formale
le specifiche non stanno andando
per darti non dovresti averne
fiducia che funzionerà
correttamente in modalità fallimento, quindi dovresti
alzalo e costringilo a fallire e vedere
cosa succede realmente e prova il tuo
progettare un esempio di iniezione di guasti
sistema che probabilmente conosci
con is netflix simian army non lo sono
spenderò un sacco di tempo su questo, ma io
piacerebbe mostrarlo come questo si adatta
in quella classificazione dei test così
è come se avessero la scimmia del caos
che uccide la latenza delle istanze casuali
scimmia che introduce il ritardo di rete e
tra i pacchetti e poi hanno
gorilla del caos che prende
un’intera area di disponibilità per essere sicuri
che ci sono più tolleranti DC e
cose del genere ovviamente questa è una tonnellata
di investimento e non dobbiamo andare
fino ad ora con test di iniezione guasti
non devi costruire qualcosa di
questa scala per trarne benefici
un’altra prova di iniezione di difetto popolare è
Jepsen quindi questo è uno strumento che è
open-source che è stato scritto da Kyle
Kingsbury e quando va come lo fa
simula le partizioni di rete in
sistema sotto test e poi dopo il
le operazioni di test e i risultati vengono analizzati
basterà dire come il tuo
garanzie consistenza rivendicazione tengono Were
hanno sostenuto che ha usato questo per testare un
mazzo di diversi sistemi inclusi
come MongoDB elasticsearch Kafka c’è
un’intera lista sul suo sito web, se vuoi
andare a leggerli e sostanzialmente a cosa Kyle
tipo di ci ha mostrato come ha iniziato a fare
questo alcuni anni fa è che il
sistemi distribuiti su cui fare affidamento o forse
non affidabile come pensiamo che siano e
questo non è perché le persone sono cattive persone
sono cattivi sviluppatori è solo perché
i sistemi distribuiti sono difficili e
previsione di tutti i casi di fallimento e
occuparsi di parziale fallimento parziale e
una sincronia è difficile e quindi ciò che è veramente
ottimo per questo progetto penso sia quello
pubblica questi risultati e archivia bug
su di te conosci github e open source
progetti e molte di queste cose hanno
stato come corretto a destra e il sistema
stanno migliorando l’obiettivo non è quello
come prendere in giro le persone trovando bug
l’obiettivo è quello di rendere il sistema
meglio che usiamo anche se così
l’immagine è esilarante ed era questi erano
disegnato da Kyle e mi ha permesso di usarli
anche tu puoi ora fare pipì Kyle – Geoff’s
e sistema di tester quindi se stai costruendo
come un database o qualcosa di simile
un pezzo di infrastruttura potrebbe farlo
Voglio fermarmi davvero brevemente per essere
come passare nessuno di questi test che ho
ti ha mostrato mentre loro aumenteranno
fiducia che il tuo sistema stia facendo il
la cosa giusta passandoli non garantisce
che non ci sono errori nel tuo sistema
potrebbero ancora esserci bug ma noi
probabilmente ne abbiamo di più più noi
utilizzare e più che questi strumenti che
usiamo il più fiducia abbiamo che
il nostro sistema sta facendo la cosa giusta
un altro metodo finale di iniezione dei guasti
test è questa idea dei giorni del gioco, quindi questo
è stato sviluppato da Jesse Robbins su Amazon
in 2000 mm e in realtà aveva il titolo
lì del maestro del disastro perché
fondamentalmente quello che avrebbe fatto è che lo farebbe
basta interrompere la produzione e lui lo farebbe
farebbe questo in modo responsabile dove
avrebbe detto agli ingegneri che c’è
sarà un’interruzione importante tra le tre e le quattro
mesi preparano i tuoi sistemi
loro non saprebbero esattamente cosa
maggiore interruzione potrebbe essere potrebbe essere tu
sappiamo che abbiamo perso un intero data center
Immagino che una volta l’abbiano imitato
c’è stato un incendio nel data center o
potresti perdere un rack o una serie di
rack e ridurre la tua capacità
significativamente e così l’idea qui è
che stiamo dicendo agli sviluppatori come te
sai che i tuoi sistemi falliranno piano
per questo e renderli più affidabili e
quindi l’altra idea qui è che sono
testare i loro processi di persone in
Oltre ai loro sistemi così il sistema
fallito e ora abbiamo i nostri DevOps
persone e il nostro personale di guardia che cercano di
risolvilo e come possiamo assicurarci che lo sia
corretto come sono quei processi
anche bene dov’è la rottura in
comunicazione lì così stai testando
la tua gente e i tuoi processi dentro
Oltre al tuo software così questo ha
stato usato in un sacco di cose diverse
ti aiuta anche se ne hai una tonnellata
data center o pop o sai
istanze installate in tutto il mondo se
diventi più globale a capire
dove hai questi strani bizzarri
dipendenze penso che abbiano trovato un bug
siamo fondamentalmente il centro dati che loro
tirò fuori contenuto l’unico che fosse il
solo l’istanza del loro sistema di paging
come se nessuno avesse avvisi che i dati
il centro era giù e questo è un po ‘brutto
ma così è come li trovi
cose che sai forse più
operativo forse più orientato alla configurazione
errore quelli sono ancora molto difficili
cose da provare, quindi se lo vuoi
organizza una giornata di gioco nella tua azienda come fa
lo fai e potrebbe non essere come
coinvolto come un Amazon, giusto
informerai i tuoi ingegneri
un fallimento sta arrivando come probabilmente
non dovrebbe essere come staccare la spina
giorno e sii sorpreso quando lo farai
indurre un fallimento quindi in un futuro
periodo di tempo che controllerai questi
sistemi che sono in fase di test in genere
ci sarà anche solo nell’osservare
squadra quindi sono seduti lì e
sono più il loro lavoro è quello di monitorare il
processo di recupero è così che trovi
i bug e le persone processi e
dove i guasti sono i guasti
non vuoi gli sviluppatori che sono
un po ‘ come oh mio Dio come noi
perso un intero rack i sistemi in fiamme
e cercando di aggiustarlo anche per provare
valutare come i processi questo è
l’idea di avere un osservatore obiettivo
e poi quando hai finito con te
bisogno di sedersi e passare attraverso la lista
di come qui è dove tutto è fallito
tu e una priorità di quei bug e ottenere
comprando attraverso le squadre perché
in genere dove hanno trovato errori in
questo è specialmente nei processi delle persone
attraverso i confini del team giusto perché
che è sempre in cui la ripartizione in
la comunicazione è
va bene solo per indicare come
semplice questo può essere e piace quanto sia critico
di bug che possono trovare stripe ha scritto a
post sul blog su come hanno corso una giornata di gioco
e tutto quello che hanno fatto è che in pratica hanno funzionato
kill9 sul loro nodo Redis primario e
poi è andato giù e come gli altri due
come iniziato a gestire le richieste e questo
andava bene ma poi è tornato e basta
non aveva dati e ha deciso che era ancora
leader e ha propagandato il fatto lì
non c’erano dati nel cluster per tutti
nel cluster e hanno perso tutto il
i dati nel cluster, quindi è male
per fortuna avevano fatto un backup perché
stavano facendo sapevano che lo erano
fare fallimento controllato e così giusto
c’è questo tweet che Kelly Somers
fatto allo stesso tempo una volta questo blog
il post è stato pubblicato perché non lo faccio
sapere se siete stati su Twitter quando
questo è successo ma è stato davvero
divertente per guardare Twitter mentre questo
stava succedendo ma hanno fatto questa idea di
come conosci un settore che dobbiamo essere
meglio di questo, basta correre su Hill nine
proprio come letteralmente come scattare una nota
nella testa in un ambiente di test o
come nella produzione può portare a
risultati davvero disastrosi e lo sai
vale la pena notare che piace quello che loro
è come se l’ offerta di Redis fosse tornata
e disse dopo questa interruzione che aveva
non previsto la configurazione che loro
stavano usando ed è per questo che questo fallimento
successo questa è una sorta di richiama
specialmente in questo mondo open source se
stiamo andando a prendere una dipendenza e
usalo allora è una specie di noi di controllare
quella dipendenza giusta se specialmente se
è una parte fondamentale dell’infrastruttura
perché sai soprattutto con simili
questi database e cose pazzi di configurazione
così e come le code tributate
e tutto quel genere di roba se lo sei
allontanarsi dal normale come sei
potresti avere un problema perché quel percorso
potrebbe non essere stato del tutto pensato o
potresti fare qualcosa che il
gli autori non pensavano che avresti fatto
e quindi non è stato ben testato okay
faremo un altro piccolo veloce
sproloquio valutato oltre l’AIDS, perché ho avuto
alcune riflessioni sui test in
produzione che è stata eseguita in produzione
quel test case ha bisogno di essere eseguito
produzione per dimostrare che quel fallimento
è successo così penso che ci sia un sacco di
valore nel test con i dati di produzione
Sono un grande sostenitore di ciò che tendo ad usare
in molti dei miei sistemi ho modo di biforcarti
nei dati di produzione per testare cose e
test in scena e stiamo andando a parlare
su alcuni test e produzione reali
codice ma stai influenzando i tuoi utenti
questo punto e
è problematico perché i tuoi utenti
stanno avendo un brutto momento quando il tuo sistema
fallisce nella produzione quindi è questo rischio
cosa contro ricompensa se non è un super
sistema critico forse va bene per testare
in produzione ma se questo è come un
pezzo fondamentale della tua spina dorsale
infrastruttura o come componente principale di
il tuo servizio il rischio è piuttosto alto
solo un po ‘come sai mandare un po’
codice antastico là fuori ed essere come se fosse
bene o no e poi tornare indietro così ho solo
Volevo solo dire che penso
so che c’è un sacco di entusiasmo in giro
test e produzione ma questo no
significa come il test in produzione dovrebbe
essere l’ultimo passo che dovremmo avere molto
di fiducia e ne ha implementato alcuni
di queste altre cose in scena
ambienti o in unit test e
test di integrazione per dimostrare che pensiamo
Il nostro sistema funziona Devo anche dire che
come il monitoraggio non sta testando le persone
dì questo, a me manca il direttore
osservabilità squadra su Twitter e io sono
come il monitoraggio non sta testando il monitoraggio
è super critico per il tuo sistema e
capire cosa sta succedendo nel tuo
sistema e recupero da fallimento in
il tuo sistema non sta testando tutto
Farò è come dirti che se tu
avere un grafico che capita di mostrare a
fallimento che come forse vedrai il
fallimento se si ha un arco nel grafico
o forse otterrà una pagina giusta ma questa
è un approccio reattivo, non lo è
verificando che il tuo sistema sia corretto
è solo una sorta di dirti cos’è
accadendo così ho il monitoraggio ma piace fare
più cose del semplice monitoraggio per testare
il tuo sistema finalmente un altro modo per
verificare in produzione lo chiamo
verifica giusta perché è come a
questo punto sta già influenzando il tuo
gli utenti è davvero la verifica è quella
lo sai e penso che questo sia in realtà un
davvero un buon processo non sono come provare
per dire non canarino ma fai altre cose
prima questo a volte viene chiamato come
test rosso-verde o altro che il
l’idea qui è che tu gradualmente
introdurre un nuovo codice nella produzione e
questo riduce notevolmente il rischio di fare
distribuisce ed è in realtà super potente
da come una prospettiva operativa
anche se le Canarie ne hanno molte
limitazioni così le Canarie stanno andando solo
ti dico che il percorso d’oro in genere
è giusto che lo avete voglia di lavorare
funzionalità utente rotti che sono
usando tutto il tempo perché Canarie può
solo dire che si esibiscono pure
come assistere la vecchia versione in questo esatto
momento nel tempo e così a meno che a questo
momento nel tempo c’è una rete
partizione accadendo o si conosce un dato
il centro è inattivo o un altro errore è
succede che tu non sappia davvero se
come il canarino è buono come il
vecchia versione lo verifica solo
sentiero d’oro e basta
ti dà e quindi penso super potente
lo uso ma lo capisco
limitazioni alle persone erano come scherzare
sono come perché non c’è un canarino
uccello questa è la farfalla delle isole Canarie
per le persone che usano la mia fetta così io
ha provato bene quindi abbiamo passato molto
di cose sulla verifica in natura
lo sai che ovviamente sono molto
realistico sul fatto che ci sono
le scadenze e che ne abbiamo così tante
risorse e così come forse non possiamo tutti
costruire un esercito simian o non avere il
il tempo di apprezzare Jepson prova ogni sistema
costruisci ma abbiamo il tempo di scrivere
test di integrazione dell’unità che dovrebbe essere
come lo sforzo ingegneristico di livello base e
come quel documento che abbiamo passato
mostra che sono incredibilmente incredibili
credo che basti test sulla proprietà di base
è anche un investimento abbastanza basso e alto
ricompensa quindi vorrei ALTAMENTE incoraggiare se
non l’hai usato provalo su qualcuno
dei tuoi progetti, anche l’iniezione può farlo
essere molto basso o scusato basso investimento e
alta ricompensa come abbiamo visto con il kill9
nodi
forse fallo prima nella scena e poi
e poi scrivere Canarie sono una bella
processo per tipo di ridurre il rischio
di schierare e quindi dimostrare che questo nuovo
il codice non ha completamente violato l’ utente
funzionalità mentre la implementiamo e e
realisticamente mi piacciono le Canarie
testando che non ho rovinato la mia
configurazione in qualche modo che è al
livello di ciò che sto effettivamente testando
quel punto va bene quindi diamo un rapido
momento per passare attraverso alcune ricerche sono
non andando a passare attraverso tutti questi
oggi queste sono solo cose che penso
sono particolarmente interessanti che sono
attualmente sta accadendo nell’ultimo anno
o così
e ho collegamenti a tutti loro nel
sezione di riferimenti se si desidera
esplorare ulteriormente ma andremo
attraverso io sono uno che penso sia davvero
cool e anche legami con l’ industria perché
si chiama sale guidato dalla stirpe
Iniezione quindi questa è una carta di Peter
alvaro da UC berkeley è ora un
professore UC Santa Cruz e così la
l’idea alla base di questo articolo è e questo è questo
strumento che costruisce per andare insieme ad esso
chiamato molly è che un lignaggio guidato
l’iniettore di guasti sta per esplorare il
dichiarare come provare ed esplorare lo stato
spazio di come tutti gli input e gli errori
quello potrebbe accadere ma lo farà solo
fallo per quelli che effettivamente
importa così inizia con un successo
risultato di come sai che ho memorizzato
qualcosa ed è conservato a lungo nel mio
database giusto e poi andrà
guarda come tutto il
il grafico il grafico di Cole da capire
quello che è successo e inizia come un’ascia
richieste o cose che sono successe lungo
quel percorso e iniziare a iniettare i fallimenti
solo lungo quel percorso, quindi solo noi
prova le cose che potrebbero effettivamente
influire sul sistema e questo ci dà
dimostra ragionevolmente, quindi va bene
e puoi correre attraverso lo spazio degli stati
di fallimenti in un sai una più piccola
quantità di tempo rispetto ad alcuni controllori del modello
può quindi questo è un esempio dalla carta
lo usa per replicare un bug che aveva
stato in Kafka qualche anno fa che ho
penso che Jepsen abbia effettivamente trovato, ma lì
era un problema dove come come fare se a
partizione di rete è successo questo questo
nodo sul taglio più in alto a diventa il
primario ed è anche l’unico membro di
il cluster perché conosci B e C
non posso parlare con il guardiano dello zoo che sei tu
conoscere l’appartenenza a un membro
riconosciuto il tuo diritto dal cliente
Ho detto che tu sai che ho durato a lungo
insistito ma poi si è schiantato e così
quel diritto è perso perché non lo era
in grado di replicarlo a chiunque altro in
il cluster così come a destra come questo
la carta non ha trovato questo libro ma lo è
dimostrare come questo è come lo troveremmo
e questo bug è stato corretto ora come
questo è come un vecchio bug, ma lo era
una questione importante per ordinare di spettacolo perché
come questo è proprio quello che sta succedendo
qui è molto complesso, c’è di più
sistemi coinvolti e più tipi di
come protocolli che stanno facendo come
trasmissione affidabile quindi questo è un po ‘
bello perché poi piace quando corri
qualcosa attraverso Molly ti darà
il caso d’uso esatto in cui qualcosa
fallito e questo è molto più facile da
capire come possiamo tutti guardare a questo
ed essere come oh come un non dovrebbe avere
riconosciuto che giusto come
questo è chiaramente il problema, ma è molto
più facile ragionare sul fallimento I
pensa in questo modello penso Molly e
L’ iniezione di guasti urbani di Laneige è super
bello perché Peter ha effettivamente lavorato con
Netflix e implementato questo nel loro
tipo di modello di iniezione di guasti, quindi Peter
e Colton Andres dalle reti Netflix
partner per fare un prototipo di questo
e ci sono molte cose interessanti
succede quando provi a prendere come un
progetto di ricerca e poi come metterlo
in produzione e c’è davvero
discorso stupefacente che è collegato nel
riferimenti che danno su di esso e
c’è anche un articolo ma alcuni di
le scoperte chiave sono state proprio come sono
come il Netflix Deathstar o
diagramma di micro-servizi che ho preso in prestito
da Adrian e quindi mi piace proprio come
forse non abbiamo un intero
ma quello che sta succedendo questo è Seminole
questo è che stanno parlando tra loro
perché come quello non è scoperto a
priori che è definito tramite codice e così via
usano tracciamento distribuito e loro
avere uno strumento già definito adatto che è
il loro sistema di iniezione dei guasti da iniettare
fallimenti e loro così conoscono gli avversari
dove possono iniettare errori nella
sistemi che usano per costruire il
call graph in modo che lo facciano in qualche modo
come vivere a destra usano la metrica
sistema per determinare se la chiamata è a
successo o fallimento
perché hanno tutti questi come un HTTP
200 non è stato sufficiente perché hai tutto
questo tipo di strani clienti certi
sai comportarti male se li mandi a
500 indietro e devono sostenere un
gamma di clienti e come qualsiasi cosa
mondo di come internet è terribile
così bene lo facciamo e usiamo la metrica
sistemi per determinare se le chiamate a
successo e poi come il Mali sarebbe una specie di
come elaborare questo grafico delle chiamate e cose del genere
così e quindi determinare dove si adatta
dovrebbe iniettare un fallimento e poi loro
potrebbe capire come è successo
e ce n’è un altro paio interessante
cose a cui dovevano andare problemi a
vai a risolvere e quindi consiglio vivamente di farlo
leggere i discorsi ma è davvero bello
perché sono corsi e ne hanno trovati alcuni
bug e questo è un bene
uso di come come iniziamo a pensare
sull’integrazione di alcune di queste cose
negli ambienti di produzione ok così dentro
conclusione utilizzare verifiche formali a
prova i tuoi componenti critici se tu
avere qualcosa che è super
mission-critical che forse eri
vendere e fare soldi fuori di esso non è
una cattiva idea di scrivere un formale
specifica e investire in questo
Software
Penso ai test unitari e ai test di integrazione
dovrebbe essere come se trovassero una moltitudine di
i loro errori dovrebbero essere minimi
per qualsiasi software che stai scrivendo e
poi scrivi possiamo aumentare il nostro
fiducia usando testamento di proprietà e
Iniezione di guasti nei nostri sistemi e I
penso che questi siano altamente sottoutilizzati in
questo ultimo punto è una sorta di dove
possiamo vedere un sacco di guadagni per equamente
investimento minimo e quindi se lo sai
sei una società gigante in cui puoi entrare e
costruire questo tipo di come veramente grande
strumenti e, infine, mi piacerebbe finire con a
citazione dal mio amico Camille piace il
cavalcate divertitevi e mettete alla prova il vostro impazzire
codice grazie a tutti questi adorabili
persone che mi hanno aiutato con questo discorso e
l’articolo
tu
parlaci oggi di questo
verifica di un sistema distribuito e
il punto di questo discorso non è quello di piacere
belabor metodi formali e accademici
prove perché le persone nell’industria non lo fanno
usali la scuola di cui parleremo
su alcuni veri modi in cui puoi farlo
e devo menzionare le prove ormonali
solo perché piace la loro cosa e là
è alcuni usi interessanti nell’industria
questo sta accadendo adesso, quindi facciamolo
iniziare mi sto prendendo in giro
Ecco, io sono Katie McCaffrey come me
ho detto che sono un ingegnere di sistemi distribuiti
Ho trascorso la mia carriera costruendo principalmente
backend su larga scala al potere
esperienze di intrattenimento e video
giochi così per Microsoft su Xbox così
halo serie Gears of War HBO e ora I
lavoro su Twitter, dove sono a I was the
piombo tecnologico dell’osservabilità e io ho
recentemente ramificato in distribuito
costruire strumenti che è molto eccitante
sono io su internet i miei DMS sono aperti se
hai domande o vuoi chattare
dopodiché parlo totalmente a me cuz II
come fare che è grande per sentire da
tutti ok così inizieremo questo
parla con una citazione di Leslie
Lamport perché quali sistemi distribuiti
parlare non ha bisogno di un Leslie Lamport
riferimento
così Leslie ha definito il giorno in cui a
la distribuzione è quella in cui il fallimento
di un computer che non conoscevi nemmeno
esistito può rendere il proprio uso del computer
inutilizzabile quindi forse era così
bene questo non è OK oggi se come uno
il computer va giù e si rompe completamente
il tuo intero sistema allora ne abbiamo davvero
grosso problema perché i tuoi utenti sono più
probabile essere colpiti e che impatti
la vostra linea di fondo quindi il punto di questo
parlare oggi è una specie di come facciamo noi
aumentare la nostra fiducia che il nostro sistema
sta facendo la cosa giusta in modo che questo
un computer fastidioso che scende o
più computer che scendono o un dato
il centro che scende non influenza il nostro
sistema e può continuare a funzionare anche io
andando a prendere una parentesi da parte per dire noi
stanno tutti costruendo sistemi distribuiti
anche se non stai costruendo la scala di Google
o la scala di Twitter o qualsiasi altra cosa
inserisci la scala aziendale che stiamo costruendo
sistemi distribuiti e siamo stati tutti
per un po ‘i nostri clienti parlano con i nostri
servizi che comunicano con un database e
questo è anche quando eravamo di nuovo su uno
unico database e
questo potrebbe essere un piccolo sistema semplice ma
è ancora distribuito perché lì
stiamo parlando sulla nostra rete
i componenti possono fallire e quindi tutti questi
strumenti sono che stiamo andando a passare attraverso
oggi sono applicabili a qualsiasi sistema di dimensioni
il tuo sistema potrebbe essere semplice potrebbe essere
molto grande e complicato come
Servizi di Twitter questa è una traccia
creato da Zipkin che è il nostro
sistema di tracciamento distribuito su Twitter di
tutti i nostri micro servizi questi hanno
a volte è stato indicato come Deathstar
architetture così come questa è una specie di
pazzo e come testare tutto questo è molto
importante perché vogliamo mantenere
Twitter installato e funzionante in modo da poter utilizzare
e poi sai a volte costruiamo
questi sistemi sono un po ‘pazzi
e ti potrebbe piacere di graffiare il tuo
testa e sii come quello che diavolo hai
costruito ma vogliamo ancora testarli
sistemi e assicurarsi che funzionino bene
– Ok, quindi una rapida panoramica di dove siamo
gonna go oggi stiamo andando a parlare di
verifica formale molto brevemente questo è
e poi solo perché è un po ‘come
il gold standard del nostro modo di verificare che
i nostri sistemi sono corretti e poi lo faremo
passare la maggior parte del tempo a parlare
come puoi testare le tue cose in natura
e mentre questi non ti danno un oro
standard come sei approvazione stella d’oro
che probabilmente è corretto farlo
hai molta più fiducia che puoi ordinare
di mescolare e abbinare quelli che funzionano per voi
in base al tempo, al budget e agli investimenti
in strumenti e risorse che hai e
quindi ne parleremo brevemente alcuni
ricerca che penso sia davvero
interessante che ci sta dando come un nuovo
spero che forse costruisca e collauda
i sistemi distribuiti non sono così terribili
Ne vado fuori a tonnellate
informazioni in questo discorso e non sentire
come se dovessi prendere appunti o altro
Ho una pagina github in cui si parla
elencati e tutti i riferimenti sono
anche lì se vuoi immergerti profondamente
in più non ti preoccupare di provare a
leggi che c’è un link più grande al
fine e lo twitterò anche se tu
voglio guardarlo bene, allora prendiamoci
nel testare cosa fare quando testiamo e
formalmente quello che diciamo è che siamo
cercando di dimostrare certe proprietà o
sul nostro sistema e stiamo cercando di
dimostrare le proprietà di sicurezza e questo è il
idea che qualcosa di brutto non lo farà mai
capita nel nostro sistema e ci stiamo provando
Dimostrare anche le proprietà di vita e questo
è la garanzia che qualcosa sarà
alla fine capita nel nostro sistema che il nostro
il sistema può fare progressi che puoi
ovviamente costruisci semplicemente un sistema
che ha l’uno o l’altro di questi
proprietà come esclusivamente ma è
generalmente non è un sistema utile per te
può anche pensare a proprietà di sicurezza come
l’idea di come quello che è il sistema
permesso di fare fondamentalmente come questo potrebbe
essere una garanzia che tutti i dati impegnati
quindi tutto bene riconosciuto o riconosciuto
i diritti sono persistenti e corretti e
come durevolmente immagazzinato e non sarà mai
perso in modo equivalente puoi anche dire a
proprietà del processo di leggerezza è questa idea
di come ciò che il sistema deve alla fine
fai così è un’idea di come quando io
ricevere una richiesta che alla fine
rispondere a quella richiesta così quelli sono
una sorta di termini formali molto simili a cosa
lo stiamo facendo quando stiamo testando come me
detta verifica formale è questa idea
quel genere di cose provenivano dal mondo accademico e questo
è come dimostriamo che i sistemi sono corretti
questo è davvero grande perché noi quando noi
costruisci come sai programmare
lingue e cose del genere ci genere
di avere un’idea che in realtà funzionano
o un algoritmo di consenso e questo dà
noi questa stella d’oro piace il nostro sistema
provabilmente corretto abbiamo fatto come noi
avere la matematica che ci ha detto che il
il sistema farà ciò che pensiamo sia
andando a fare e questo è davvero utile per
alcune cose specifiche formali
generalmente uso ci sono due tipi di quelli
di cui le persone hanno generalmente sentito parlare
c’è TLA plus e poi c’è il coq
stiamo andando a fare un rapido TL A +
esempio nel caso non l’abbiate mai visto
e tu sei totalmente come ho sentito
questo ma e la gente parla di come
è terribile e noioso solo perché io
penso sia interessante vedere um e
questa è una citazione che ancora una volta Leslie
Lamport
ha inventato TL A + presso Microsoft Research e
scrive nel suo libro specificando i sistemi
che puoi leggere un PDF online
è bello che sia una buona idea capire
il sistema prima di costruirlo, quindi questo è
l’idea che ci piacerebbe forse
progettare qualcosa prima di iniziare a programmare
ma continua anche a dire che lo è
una buona idea per scrivere una specifica di
il tuo sistema prima di implementarlo
sta dicendo come definiamo cosa
proprietà che i nostri sistemi avranno
e questo dimostra che queste proprietà sono
andando a tenere e in realtà produrre il
risultati che pensiamo che stanno per
produrre quindi questo è un esempio da
specificando i sistemi di TLA plus e i
la nostra specifica dell’orologio quindi lui fondamentalmente
scrive una specifica molto semplice di
un’ora fa questa è solo l’idea
visualizza l’ora dalle simili 1 a 12
e così scriverai la tua prova e
lo definirai come questo
linea sta dicendo che come l’ora può essere
uno al numero 12 come quelli interi
numeri e poi definisce come
aggiorna se è 12 diventa più
altrimenti aumenta di un’ora in più
uno e poi prendi questo è come
sai che sembra codice giusto e
lo prendi e lo fai usare TL
TL C che è un modello di controllo o TL ApS
che è un assistente di prova e poi tu
metti le tue specifiche in una di quelle
e ti dirà se il tuo sistema
è corretto o meno e quindi lo hai
un sistema verificabile in modo verificabile, quindi è così
l’ industria pulita ha effettivamente usato questo
questa non è solo una cosa accademica così dentro
2014 Amazon ha rilasciato un rapporto tecnico
su come usano TL a plus per verificare 10
più pezzi fondamentali della loro infrastruttura
incluso s3 questo è un super
carta accessibile quindi se sei
interessato a forse usando questo per verificare
elementi chiave dell’infrastruttura I altamente
consiglio di leggerlo, così passeremo attraverso
alcuni dei punti salienti ma fondamentalmente
hanno dichiarato alla fine di questo articolo
quei metodi formali sono stati enormi
successo e sono ora nel loro annuale
pianificazione in realtà tempo di budgeting in
costruendo sistemi in modo da allocarli
tempo di ingegneria per utilizzare TL a più e
scrivere le specifiche per il loro cruciale
pezzi di infrastruttura come s3 quando
hanno fatto questo hanno trovato due diversi
bug gravi che dicono che non potevano
ho trovato in qualsiasi altro modo di
test e poi ha anche permesso loro di farlo
aumentare la fiducia per rendere tutti questi
una specie di perf perfetto molto simile
ottimizzazioni che stavano cambiando il
sottostante e implementazione e il
algoritmo un po ‘ e lo hanno sentito
non avrebbero avuto questa fiducia
per fare queste ottimizzazioni in questi
pezzi fondamentali di archiviazione perché è così
tipo di rischioso senza avere un formalmente
prova corretta, quindi è fantastico
come se si sta costruendo qualcosa che
le altre persone faranno molto affidamento
su come un sistema di archiviazione o un database
o stai offrendo qualcosa come a
servizio come forse questo è qualcosa di te
voglio investire soprattutto se hai
forte coerenza garantisce intorno ad esso
essi chiamano anche in questo articolo
uno dei e questo è in genere uno dei
le più grandi critiche di tli Plus e
i metodi formali sono generalmente loro
scrivi questa logica o questa come la tua
codice di specifica formale e non lo è
codice che generalmente esegue il tuo sistema e
così si potrebbe avere una completamente corretto
specifica del tuo sistema e del tuo
il codice che si scrive è ancora sbagliato e
è come una sfida, ne vale la pena
notando che cazzo, che non ho avuto
il tempo di andare in realtà può generare
Haskell o cammello obiettivo per
la specifica e che è eseguibile
primo sottoinsieme non credo che faccia il
tutto il linguaggio credo che lo faccia solo
il sottoinsieme della lingua perché altro
come devi essere in grado di dimostrare
proprietà che come finisce e
sai che non posso farlo con il linguaggio
la maggior parte delle lingue quindi è come qualcosa
questo tipo di aiuto aiuta a colmare il divario ma
ovviamente non siamo ancora fino in fondo
lì anche se hai un formale
specifica che probabilmente è ancora necessario
prova il codice che hai scritto quindi facciamolo
parla di come testeremo il
codice su come i praticanti statunitensi stanno andando
fai questo in natura e così mentre possiamo
non avere questa idea di una formalmente corretta
o un sistema provatamente corretto che tu conosca
avere questa idea sembra abbastanza legittima
quindi lo metterò in produzione ok
questo è super-base
Non voglio fare test unitari ma
come scriverli per favore um tipicamente questo
è come l’idea che è implementato
dallo sviluppatore che sta scrivendo il codice
può essere eseguito localmente con CI o no
l’ambiente necessario è solo la tua CPU
e questo è per verificare di base
funzionalità e casi di errore questo
aumenta la tua fiducia che il tuo
i codici effettivamente fanno la cosa giusta
tipicamente mi piacciono i casi di test per questo
aumentando la mia fiducia che come te
conoscere sei mesi su tutta la linea i miei codici
stanno facendo sta facendo sempre la stessa cosa
quando qualcuno è come se sapessi fare un grande
refactoring o modifica di un’implementazione e
allora mi piacerebbe rompere per un breve
Fai un Festo perché se entri
i linguaggi di programmazione tap track o
qualsiasi cosa o hai usato una programmazione tipizzata
i tipi di lingue non sono tipi di test
Impedisci che le tue lingue digitate siano fantastiche
In realtà preferisco usarli così voglio
mi piace totalmente parlare del mio pregiudizio
perché questa è una prospettiva ma
come quando scrivi da un tipo di
linguaggio ti dà solo così tanto
può solo dimostrare quanto il tuo tipo
il sistema è espressivo come il tuo tipo
il sistema è quindi questo è come un breve
esempio in Scala I definire un metodo add
e poi come se facessi un errore di battitura e lo sono
moltiplicando effettivamente i valori
tornare così come ovviamente il sistema di tipo
non ha reso il sistema corretto questo è
restituirò la cosa sbagliata come test unitario
lo troverei e io mi spezzerei
qui perché penso sia una specie di a
c’è un sacco di dibattito in
programmazione della comunità ma non abbiamo
linguaggi di programmazione abbastanza espressivi
e quelli che in genere stavano usando
un settore su cui contare si basa su questo
in realtà la ricerca in corso che maggio maggio
questo meglio, ma non siamo ancora arrivati I
anche una sorta di voler chiamare fuori che è
conosce questo è una sorta di questo è un si tratta di una
cosa succede molto
c’era una storia di uno sviluppatore più giovane
con cui stavo lavorando a un certo punto, chi
era molto innamorato dei sistemi di tipi
e le prove matematiche dietro di loro
e la teoria dei tipi e questo è grandioso, ma lui
credevo che non avresti dovuto scrivere
casi di test e se sei nella mia squadra
scriverò casi di test così simili
avvertimento se vi capitasse di voler lavorare con me
così ho scritto in una recensione del codice che mi piace
hey devi aggiungere alcuni casi di test a
questo e mi piace è passato e ho fatto un
revisione approfondita del codice e io in realtà
trovato un bug che era la sua ricorsione
l’algoritmo non lo abbandonerebbe mai
in realtà sarebbe recurse per sempre e potrebbe
fai esplodere il suo stack e così se lo schiudi
in produzione che causerà un brutto colpo
tempo e un semplice caso di test unitario
prendi questo giusto così e poi lo sai
molto ben scritto perché volevo
di utilizzare questo come un momento di insegnamento che
hey penso che ci sia un danno
bug di tenda qui potresti per favore fuori a
caso specifico per questo e lui
fatto e poi ci siamo trasferiti tutti e il nostro
le vite erano migliori, anche io voglio
Fai notare che come TCP non è davvero così
preoccupati del tuo sistema di tipi così quando tu
iniziare ad andare nella rete come tutti
le scommesse sono disattivate e il tuo sistema di tipi non lo è
ti aiuterò qui ancora giusto ancora una volta
programmazione di ricerca linguistica persone che
forse nel pubblico che conosci
per favore risolvi questo problema per me ma
come TCP non interessa così questo tipo di
mi porta al mio prossimo argomento di cui hai bisogno
test di integrazione e so che c’è un
molte metodologie di test differenti in
industria, ma ho sorta di definito
test di integrazione se vuoi resistere
su un piccolo un qualche tipo di ambiente
stai andando a scrivere questi test così
che stai esercitando una specie di the
confini di rete tra i tuoi sistemi
quindi questo sta parlando al tuo database o
testare il tuo protocollo di rete testin e
inversioni del tuo protocollo di rete anche
importante c’è questa specie di storia divertente
che avevo quando stavamo spedendo Halo 4
che abbiamo beccato un bug abbastanza grande
avrebbe davvero martellato il nostro sistema a
lancio perché avevamo una corretta integrazione
test, quindi ho lavorato sulla statistica
servizio di Halo 4 hai caricato il tuo
statistiche alla fine di una partita e noi
elaborali li abbiamo notato durante
test di integrazione del gioco
caricamento coerente del blob delle statistiche
tre volte e questa cosa è grande e
è costoso elaborare così come fare
tre volte il carico che abbiamo proiettato
sarebbe stato un brutto momento in
produzione Sono così tornerò e
avanti con lo sviluppatore della rete o il
gioco dev who
responsabile di questa funzionalità dalla sua parte
e avevo scritto API dalla nostra parte e
Sono come guardare i nostri log che siamo
restituendo HTV 200 come perché sei tu
pensando abbiamo fallito e mantenere inviarlo
a noi tre volte e continuo a pensare che
non sei riuscito a caricare le statistiche e lui è come
Non so come voi ragazzi dovreste essere
mandandoci qualcosa di sbagliato e abbiamo avuto
questa bella piccola battuta avanti e indietro
e alla fine quello che abbiamo scoperto è quello
a causa del codice legacy quale è il gioco
il codice era in realtà cercando era il
parole fatte in maiuscolo nel carico utile
punto esclamativo per contrassegnare una cosa come a
il successo così i test sugli androgeni sono davvero
utile perché sta testando il
ripartizione tra le tue interfacce
e, ancora una volta, molto intelligente
gli sviluppatori fanno cose molto diverse e
tutti abbiamo a che fare con il codice legacy
dovremmo sai esercitare questi
confini e dimostrare che sono
correggi prima di sapere che sai
codice lanciato là fuori per i nostri utenti a
testare anche per supportare unità e migrazione
prova c’è questa carta davvero bella
questo è probabilmente uno dei miei preferiti da
2014 siamo chiamati test di simboli can
prevenire la maggior parte dei guasti critici e cosa
hanno fatto gli autori, hanno studiato 198
campionamento casuale dei fallimenti del mondo reale
segnalato su software open source quindi questo
incluso cose come Cassandra HBase
HDFS MapReduce e Redis e poi loro
avere un sacco di informazioni in questo documento
ma io passerò attraverso alcune delle chiavi
mette in evidenza che penso siano davvero
interessante ma piace anche leggere questo
carta anche così uno dei risultati chiave
che penso sia stato molto interessante
perché smonta un mito popolare che
hai bisogno di una messa in scena tutta intera
ambiente che sembra proprio
produzione per riprodurre alcuni di questi
come i brutti bug di livello di produzione è quello
del 98% dei fallimenti che hanno
analizzato tre nodi o meno fotocamera
riproduci questo puoi alzarti in piedi tre
nodi sul tuo laptop ed eseguilo correttamente così
come possiamo vedere abbastanza nodi liberi in a
ambiente dev che è super
economico è super economico quindi
non c’è davvero quasi nessuna ragione per noi
non dovrebbe fare questo livello di test
è davvero efficace nel trovare i fallimenti
nei nostri sistemi e quando dico
fallimenti catastrofici come sono
parlare è come un sistema di perdita di dati
si blocca da questi sistemi principali che sono
in realtà dovrebbe essere molto stabile e
memorizza i nostri dati ed essere molto affidabili quindi
questo è come fare i test di integrazione
un’altra cosa è testare la gestione degli errori
il codice avrebbe potuto presentare il 58% di
fallimenti catastrofici quindi questa è una volta
di nuovo non l’abbiamo fatto
test di unità giusti che hanno provato qualcosa
oltre il sentiero dorato o no
scrivere test unitari a tutti e quindi cosa
dice a me e come praticante e uno
cosa che ho preso a cuore è usare un codice
strumento di copertura
So codice strumenti di copertura sono super voi
sai come non ti dice se tu
avere una copertura del cento per cento
il tuo codice è corretto ma ti dà un
idea dove hai un buco e se c’è
come tutti questi grandi come oh non l’abbiamo fatto
prova l’errore gestendo casi come 58
il percento di fallimenti catastrofici era
causato dalla gestione degli errori di destra
si così così così così fai questo è super facile
come so che scrivere casi di test non è il
la cosa più divertente del mondo ma come te
so che siamo pagati anche per questo
pensare è interessante qui è così
lo sai e abbiamo fatto tutto bene
come in Gears of War eravamo come
indagando su un bug dopo il lancio e
stiamo passando attraverso il codebase e noi
trova questo come sai se fai questo
se fare questo errore altrimenti si prega di correggere kay
grazie ciao in un commento e c’era
come se non ci fosse un codice così che in realtà
non era il bug ma lo sai come penso
tutti noi abbiamo questi nelle nostre basi di codice così
solo in realtà la loro movimentazione ci aiuterà
Un sacco
infine uno degli altri l’ultimo punto
da questo articolo che ti lascerò
con oggi è quel certo 5% di
I fallimenti catastrofici sono stati causati da
cose molto semplici come internet
il codice di gestione degli errori è semplicemente vuoto o
conteneva solo una dichiarazione di registro loro
effettivamente trovato nella carta che la maggior parte di
gli errori catastrofici sono stati registrati così
questo è almeno il bene che hai
informazioni per risolverli ma loro solo
non sono stati gestiti handler di errori interrotti
cluster interrompe il cluster in modo eccessivo
eccezione generale quindi questo è come Oh
cattura l’eccezione e poi come sai
abbattere il cluster che è così male
forse mi piace pensare un po ‘di più
su come dovrebbero essere i tuoi sistemi
fallire o questa idea di come gestore di errori
il codice contiene righe di commento come mi aggiusta
o per fare questo è pigrizia e questo
sta causando fallimenti catastrofici nel nostro
sistema e mi piace così come abbiamo parlato
su quanto terribile e difficile distribuire
i sistemi sono da costruire, possiamo aggiustare un sacco di
quei problemi semplicemente facendo unità
test di integrazione e questo tipo di carta
ci ha mostrato così mi piace molto questo
carta parlerò davvero
a questo proposito a Q Khan oa New York
documenti che amiamo in giugno se sei lì
come say hi Va bene così passiamo per
qualcosa che forse non hai sentito
circa e non sono solo io che batto
scrivere casi di test questo è basato sulla proprietà
testare questo è un po ‘ ispirato da
dama modello di vita che sono
in realtà come un metodo formale di
verificando dove vai e in realtà
esercitare l’intero spazio statico di input
nel tuo sistema su quel formale
specifica quindi quale proprietà basata
il test è questo è ciò che sai fatto
più amichevole del settore e stanno andando
eseguire
scriverai proprietà sul tuo
sistema che vuoi che tengano e
allora verrà eseguito casualmente
quello spazio degli stati così mentre non lo fa
dimostrare che il sistema sia corretta è
esercitare più lo spazio statale di
solo un caso di test unitario può esserci
sono un sacco di strumenti per fare questo veloce
controllare è stato inventato da John
Hughes e questo è stato il primo
uno e c’è una versione in Haskell e
Erlang che puoi usare e quindi cosa tu
fare qui è semplicemente definire il
specifica invece di un caso di prova o
puoi scrivere entrambi se vuoi davvero
usi uno strumento che genera molti
input per testare lo scope e il
specifica e ciò che è super bello è
che se passano tutti e ottieni un
verde sai pollici e se uno
fallisce, in realtà ti dirà questo
caso d’uso specifico che ha causato il
fallimento in modo che ti dà un sacco di
informazioni per iniziare il debugging
questo diritto non è solo come oh
qualcosa è fallito in natura e ora io
devo andare a sfregarti come sai
miglia di tronchi per capire cosa
è successo attraverso il mio sistema
annoying questo è veramente bello e poi
un’altra breve nota da quella precedente
carta su test e catastrofici
i fallimenti sono che hanno scoperto questo
praticamente come tre ingressi o meno
potrebbe riprodurre più catastrofico
fallimenti e l’ordine era deterministico
quindi se puoi definire la tua proprietà
abbastanza largo potresti prenderli con a
strumento come questo in modo rapido i trucchi
quello originale ho usato il controllo Scala
che è scritto in Scala e Java e
la JVM e poi se vuoi usarla
come tutte queste lingue anche qui
avere porte di controllo rapido e collegamento a
questo dai riferimenti perché se tu
non posso leggere tutto questo ma fondamentalmente
ce n’è uno per quasi tutti
linguaggio che stiamo usando in produzione
oggi che è bello vale anche la pena
notando che il controllo rapido è davvero grandioso
perché è stato utilizzato dalle aziende
denunciato con successo utilizzato da aziende come
mostra bash che ha reagito che è un no
sequel archivio dati coerente alla fine
e hanno un ottimo discorso su come
una sorta di coerenza finale del modello
proprietà che è nel mio riferimento
sezione usando il controllo rapido che hanno usato
per trovare un controllo rapido per trovare bug in
Auto Volvo e più di recente c’è stato un
parlare in un articolo pubblicato su come loro
uso
per trovare bug e Dropbox e così questi
scoprirò qualcuna di più
bug gnarly perché si eserciterà
su una serie più ampia di input e tu semplicemente
Mi piace pensare a um solo un super
esempio veloce in modo da poter vedere fondamentalmente
è come se non fosse che non ti sto chiedendo
per scrivere una specifica pazzesca questo è
il Scala controlla uno perché è quello che
L’ho usato in questo modo, quello principale è fondamentalmente
dicendo che definirò un tipo piccolo
interi e quindi questo è un livello base
proprietà che ti può piacere combinare proprietà
insieme per rendere più complicato
dichiarazioni, ma fondamentalmente sta per
dì che come il numero dovrebbe sempre
tra 0 e 100 e così ogni volta che ordino
di vedere questo poi si sa che quel
la proprietà terrà questo secondo è
come invertire un elenco collegato o invertire
una lista e così dice che conosci il
invertire il retro di una lista dovrebbe
essere uguale alla lista e poi come cosa
Il controllo di Scala farà è andare e generare un
un sacco di input per questo e garantire che
tiene così non hai avuto come non trovare
Un errore o come si sa qualunque come
qualche bug nel tuo sistema e tornerà
sei un controesempio, quindi questo è questo
abbastanza facile da fare e um sai che
penso di pensare per le cose di base è
molto simile ai casi di test unitari di scrittura
sul tempo di investimento e si potrebbe
ovviamente faccio molto di più con questo così io
come il test basato sulla proprietà che io sono
incoraggiare molti miei team a usarlo
più perché penso che trova un sacco di
bug ed è un po ‘basso
investimento per un reparto ibrido finalmente io
voglio passare alla nostra iniezione colpa
che è un altro modo in cui possiamo testare
sistemi distribuiti penso che sia così
particolarmente utile per la distribuzione
sistemi perché stiamo praticamente forzando
i nostri sistemi falliscono e poi lo siamo
osservando ciò che accade, credo pienamente
che se non forzare il sistema a
fallire tutta la teoria e le prove in
il mondo come oltre formale
le specifiche non stanno andando
per darti non dovresti averne
fiducia che funzionerà
correttamente in modalità fallimento, quindi dovresti
alzalo e costringilo a fallire e vedere
cosa succede realmente e prova il tuo
progettare un esempio di iniezione di guasti
sistema che probabilmente conosci
con is netflix simian army non lo sono
spenderò un sacco di tempo su questo, ma io
piacerebbe mostrarlo come questo si adatta
in quella classificazione dei test così
è come se avessero la scimmia del caos
che uccide la latenza delle istanze casuali
scimmia che introduce il ritardo di rete e
tra i pacchetti e poi hanno
gorilla del caos che prende
un’intera area di disponibilità per essere sicuri
che ci sono più tolleranti DC e
cose del genere ovviamente questa è una tonnellata
di investimento e non dobbiamo andare
fino ad ora con test di iniezione guasti
non devi costruire qualcosa di
questa scala per trarne benefici
un’altra prova di iniezione di difetto popolare è
Jepsen quindi questo è uno strumento che è
open-source che è stato scritto da Kyle
Kingsbury e quando va come lo fa
simula le partizioni di rete in
sistema sotto test e poi dopo il
le operazioni di test e i risultati vengono analizzati
basterà dire come il tuo
garanzie consistenza rivendicazione tengono Were
hanno sostenuto che ha usato questo per testare un
mazzo di diversi sistemi inclusi
come MongoDB elasticsearch Kafka c’è
un’intera lista sul suo sito web, se vuoi
andare a leggerli e sostanzialmente a cosa Kyle
tipo di ci ha mostrato come ha iniziato a fare
questo alcuni anni fa è che il
sistemi distribuiti su cui fare affidamento o forse
non affidabile come pensiamo che siano e
questo non è perché le persone sono cattive persone
sono cattivi sviluppatori è solo perché
i sistemi distribuiti sono difficili e
previsione di tutti i casi di fallimento e
occuparsi di parziale fallimento parziale e
una sincronia è difficile e quindi ciò che è veramente
ottimo per questo progetto penso sia quello
pubblica questi risultati e archivia bug
su di te conosci github e open source
progetti e molte di queste cose hanno
stato come corretto a destra e il sistema
stanno migliorando l’obiettivo non è quello
come prendere in giro le persone trovando bug
l’obiettivo è quello di rendere il sistema
meglio che usiamo anche se così
l’immagine è esilarante ed era questi erano
disegnato da Kyle e mi ha permesso di usarli
anche tu puoi ora fare pipì Kyle – Geoff’s
e sistema di tester quindi se stai costruendo
come un database o qualcosa di simile
un pezzo di infrastruttura potrebbe farlo
Voglio fermarmi davvero brevemente per essere
come passare nessuno di questi test che ho
ti ha mostrato mentre loro aumenteranno
fiducia che il tuo sistema stia facendo il
la cosa giusta passandoli non garantisce
che non ci sono errori nel tuo sistema
potrebbero ancora esserci bug ma noi
probabilmente ne abbiamo di più più noi
utilizzare e più che questi strumenti che
usiamo il più fiducia abbiamo che
il nostro sistema sta facendo la cosa giusta
un altro metodo finale di iniezione dei guasti
test è questa idea dei giorni del gioco, quindi questo
è stato sviluppato da Jesse Robbins su Amazon
in 2000 mm e in realtà aveva il titolo
lì del maestro del disastro perché
fondamentalmente quello che avrebbe fatto è che lo farebbe
basta interrompere la produzione e lui lo farebbe
farebbe questo in modo responsabile dove
avrebbe detto agli ingegneri che c’è
sarà un’interruzione importante tra le tre e le quattro
mesi preparano i tuoi sistemi
loro non saprebbero esattamente cosa
maggiore interruzione potrebbe essere potrebbe essere tu
sappiamo che abbiamo perso un intero data center
Immagino che una volta l’abbiano imitato
c’è stato un incendio nel data center o
potresti perdere un rack o una serie di
rack e ridurre la tua capacità
significativamente e così l’idea qui è
che stiamo dicendo agli sviluppatori come te
sai che i tuoi sistemi falliranno piano
per questo e renderli più affidabili e
quindi l’altra idea qui è che sono
testare i loro processi di persone in
Oltre ai loro sistemi così il sistema
fallito e ora abbiamo i nostri DevOps
persone e il nostro personale di guardia che cercano di
risolvilo e come possiamo assicurarci che lo sia
corretto come sono quei processi
anche bene dov’è la rottura in
comunicazione lì così stai testando
la tua gente e i tuoi processi dentro
Oltre al tuo software così questo ha
stato usato in un sacco di cose diverse
ti aiuta anche se ne hai una tonnellata
data center o pop o sai
istanze installate in tutto il mondo se
diventi più globale a capire
dove hai questi strani bizzarri
dipendenze penso che abbiano trovato un bug
siamo fondamentalmente il centro dati che loro
tirò fuori contenuto l’unico che fosse il
solo l’istanza del loro sistema di paging
come se nessuno avesse avvisi che i dati
il centro era giù e questo è un po ‘brutto
ma così è come li trovi
cose che sai forse più
operativo forse più orientato alla configurazione
errore quelli sono ancora molto difficili
cose da provare, quindi se lo vuoi
organizza una giornata di gioco nella tua azienda come fa
lo fai e potrebbe non essere come
coinvolto come un Amazon, giusto
informerai i tuoi ingegneri
un fallimento sta arrivando come probabilmente
non dovrebbe essere come staccare la spina
giorno e sii sorpreso quando lo farai
indurre un fallimento quindi in un futuro
periodo di tempo che controllerai questi
sistemi che sono in fase di test in genere
ci sarà anche solo nell’osservare
squadra quindi sono seduti lì e
sono più il loro lavoro è quello di monitorare il
processo di recupero è così che trovi
i bug e le persone processi e
dove i guasti sono i guasti
non vuoi gli sviluppatori che sono
un po ‘ come oh mio Dio come noi
perso un intero rack i sistemi in fiamme
e cercando di aggiustarlo anche per provare
valutare come i processi questo è
l’idea di avere un osservatore obiettivo
e poi quando hai finito con te
bisogno di sedersi e passare attraverso la lista
di come qui è dove tutto è fallito
tu e una priorità di quei bug e ottenere
comprando attraverso le squadre perché
in genere dove hanno trovato errori in
questo è specialmente nei processi delle persone
attraverso i confini del team giusto perché
che è sempre in cui la ripartizione in
la comunicazione è
va bene solo per indicare come
semplice questo può essere e piace quanto sia critico
di bug che possono trovare stripe ha scritto a
post sul blog su come hanno corso una giornata di gioco
e tutto quello che hanno fatto è che in pratica hanno funzionato
kill9 sul loro nodo Redis primario e
poi è andato giù e come gli altri due
come iniziato a gestire le richieste e questo
andava bene ma poi è tornato e basta
non aveva dati e ha deciso che era ancora
leader e ha propagandato il fatto lì
non c’erano dati nel cluster per tutti
nel cluster e hanno perso tutto il
i dati nel cluster, quindi è male
per fortuna avevano fatto un backup perché
stavano facendo sapevano che lo erano
fare fallimento controllato e così giusto
c’è questo tweet che Kelly Somers
fatto allo stesso tempo una volta questo blog
il post è stato pubblicato perché non lo faccio
sapere se siete stati su Twitter quando
questo è successo ma è stato davvero
divertente per guardare Twitter mentre questo
stava succedendo ma hanno fatto questa idea di
come conosci un settore che dobbiamo essere
meglio di questo, basta correre su Hill nine
proprio come letteralmente come scattare una nota
nella testa in un ambiente di test o
come nella produzione può portare a
risultati davvero disastrosi e lo sai
vale la pena notare che piace quello che loro
è come se l’ offerta di Redis fosse tornata
e disse dopo questa interruzione che aveva
non previsto la configurazione che loro
stavano usando ed è per questo che questo fallimento
successo questa è una sorta di richiama
specialmente in questo mondo open source se
stiamo andando a prendere una dipendenza e
usalo allora è una specie di noi di controllare
quella dipendenza giusta se specialmente se
è una parte fondamentale dell’infrastruttura
perché sai soprattutto con simili
questi database e cose pazzi di configurazione
così e come le code tributate
e tutto quel genere di roba se lo sei
allontanarsi dal normale come sei
potresti avere un problema perché quel percorso
potrebbe non essere stato del tutto pensato o
potresti fare qualcosa che il
gli autori non pensavano che avresti fatto
e quindi non è stato ben testato okay
faremo un altro piccolo veloce
sproloquio valutato oltre l’AIDS, perché ho avuto
alcune riflessioni sui test in
produzione che è stata eseguita in produzione
quel test case ha bisogno di essere eseguito
produzione per dimostrare che quel fallimento
è successo così penso che ci sia un sacco di
valore nel test con i dati di produzione
Sono un grande sostenitore di ciò che tendo ad usare
in molti dei miei sistemi ho modo di biforcarti
nei dati di produzione per testare cose e
test in scena e stiamo andando a parlare
su alcuni test e produzione reali
codice ma stai influenzando i tuoi utenti
questo punto e
è problematico perché i tuoi utenti
stanno avendo un brutto momento quando il tuo sistema
fallisce nella produzione quindi è questo rischio
cosa contro ricompensa se non è un super
sistema critico forse va bene per testare
in produzione ma se questo è come un
pezzo fondamentale della tua spina dorsale
infrastruttura o come componente principale di
il tuo servizio il rischio è piuttosto alto
solo un po ‘come sai mandare un po’
codice antastico là fuori ed essere come se fosse
bene o no e poi tornare indietro così ho solo
Volevo solo dire che penso
so che c’è un sacco di entusiasmo in giro
test e produzione ma questo no
significa come il test in produzione dovrebbe
essere l’ultimo passo che dovremmo avere molto
di fiducia e ne ha implementato alcuni
di queste altre cose in scena
ambienti o in unit test e
test di integrazione per dimostrare che pensiamo
Il nostro sistema funziona Devo anche dire che
come il monitoraggio non sta testando le persone
dì questo, a me manca il direttore
osservabilità squadra su Twitter e io sono
come il monitoraggio non sta testando il monitoraggio
è super critico per il tuo sistema e
capire cosa sta succedendo nel tuo
sistema e recupero da fallimento in
il tuo sistema non sta testando tutto
Farò è come dirti che se tu
avere un grafico che capita di mostrare a
fallimento che come forse vedrai il
fallimento se si ha un arco nel grafico
o forse otterrà una pagina giusta ma questa
è un approccio reattivo, non lo è
verificando che il tuo sistema sia corretto
è solo una sorta di dirti cos’è
accadendo così ho il monitoraggio ma piace fare
più cose del semplice monitoraggio per testare
il tuo sistema finalmente un altro modo per
verificare in produzione lo chiamo
verifica giusta perché è come a
questo punto sta già influenzando il tuo
gli utenti è davvero la verifica è quella
lo sai e penso che questo sia in realtà un
davvero un buon processo non sono come provare
per dire non canarino ma fai altre cose
prima questo a volte viene chiamato come
test rosso-verde o altro che il
l’idea qui è che tu gradualmente
introdurre un nuovo codice nella produzione e
questo riduce notevolmente il rischio di fare
distribuisce ed è in realtà super potente
da come una prospettiva operativa
anche se le Canarie ne hanno molte
limitazioni così le Canarie stanno andando solo
ti dico che il percorso d’oro in genere
è giusto che lo avete voglia di lavorare
funzionalità utente rotti che sono
usando tutto il tempo perché Canarie può
solo dire che si esibiscono pure
come assistere la vecchia versione in questo esatto
momento nel tempo e così a meno che a questo
momento nel tempo c’è una rete
partizione accadendo o si conosce un dato
il centro è inattivo o un altro errore è
succede che tu non sappia davvero se
come il canarino è buono come il
vecchia versione lo verifica solo
sentiero d’oro e basta
ti dà e quindi penso super potente
lo uso ma lo capisco
limitazioni alle persone erano come scherzare
sono come perché non c’è un canarino
uccello questa è la farfalla delle isole Canarie
per le persone che usano la mia fetta così io
ha provato bene quindi abbiamo passato molto
di cose sulla verifica in natura
lo sai che ovviamente sono molto
realistico sul fatto che ci sono
le scadenze e che ne abbiamo così tante
risorse e così come forse non possiamo tutti
costruire un esercito simian o non avere il
il tempo di apprezzare Jepson prova ogni sistema
costruisci ma abbiamo il tempo di scrivere
test di integrazione dell’unità che dovrebbe essere
come lo sforzo ingegneristico di livello base e
come quel documento che abbiamo passato
mostra che sono incredibilmente incredibili
credo che basti test sulla proprietà di base
è anche un investimento abbastanza basso e alto
ricompensa quindi vorrei ALTAMENTE incoraggiare se
non l’hai usato provalo su qualcuno
dei tuoi progetti, anche l’iniezione può farlo
essere molto basso o scusato basso investimento e
alta ricompensa come abbiamo visto con il kill9
nodi
forse fallo prima nella scena e poi
e poi scrivere Canarie sono una bella
processo per tipo di ridurre il rischio
di schierare e quindi dimostrare che questo nuovo
il codice non ha completamente violato l’ utente
funzionalità mentre la implementiamo e e
realisticamente mi piacciono le Canarie
testando che non ho rovinato la mia
configurazione in qualche modo che è al
livello di ciò che sto effettivamente testando
quel punto va bene quindi diamo un rapido
momento per passare attraverso alcune ricerche sono
non andando a passare attraverso tutti questi
oggi queste sono solo cose che penso
sono particolarmente interessanti che sono
attualmente sta accadendo nell’ultimo anno
o così
e ho collegamenti a tutti loro nel
sezione di riferimenti se si desidera
esplorare ulteriormente ma andremo
attraverso io sono uno che penso sia davvero
cool e anche legami con l’ industria perché
si chiama sale guidato dalla stirpe
Iniezione quindi questa è una carta di Peter
alvaro da UC berkeley è ora un
professore UC Santa Cruz e così la
l’idea alla base di questo articolo è e questo è questo
strumento che costruisce per andare insieme ad esso
chiamato molly è che un lignaggio guidato
l’iniettore di guasti sta per esplorare il
dichiarare come provare ed esplorare lo stato
spazio di come tutti gli input e gli errori
quello potrebbe accadere ma lo farà solo
fallo per quelli che effettivamente
importa così inizia con un successo
risultato di come sai che ho memorizzato
qualcosa ed è conservato a lungo nel mio
database giusto e poi andrà
guarda come tutto il
il grafico il grafico di Cole da capire
quello che è successo e inizia come un’ascia
richieste o cose che sono successe lungo
quel percorso e iniziare a iniettare i fallimenti
solo lungo quel percorso, quindi solo noi
prova le cose che potrebbero effettivamente
influire sul sistema e questo ci dà
dimostra ragionevolmente, quindi va bene
e puoi correre attraverso lo spazio degli stati
di fallimenti in un sai una più piccola
quantità di tempo rispetto ad alcuni controllori del modello
può quindi questo è un esempio dalla carta
lo usa per replicare un bug che aveva
stato in Kafka qualche anno fa che ho
penso che Jepsen abbia effettivamente trovato, ma lì
era un problema dove come come fare se a
partizione di rete è successo questo questo
nodo sul taglio più in alto a diventa il
primario ed è anche l’unico membro di
il cluster perché conosci B e C
non posso parlare con il guardiano dello zoo che sei tu
conoscere l’appartenenza a un membro
riconosciuto il tuo diritto dal cliente
Ho detto che tu sai che ho durato a lungo
insistito ma poi si è schiantato e così
quel diritto è perso perché non lo era
in grado di replicarlo a chiunque altro in
il cluster così come a destra come questo
la carta non ha trovato questo libro ma lo è
dimostrare come questo è come lo troveremmo
e questo bug è stato corretto ora come
questo è come un vecchio bug, ma lo era
una questione importante per ordinare di spettacolo perché
come questo è proprio quello che sta succedendo
qui è molto complesso, c’è di più
sistemi coinvolti e più tipi di
come protocolli che stanno facendo come
trasmissione affidabile quindi questo è un po ‘
bello perché poi piace quando corri
qualcosa attraverso Molly ti darà
il caso d’uso esatto in cui qualcosa
fallito e questo è molto più facile da
capire come possiamo tutti guardare a questo
ed essere come oh come un non dovrebbe avere
riconosciuto che giusto come
questo è chiaramente il problema, ma è molto
più facile ragionare sul fallimento I
pensa in questo modello penso Molly e
L’ iniezione di guasti urbani di Laneige è super
bello perché Peter ha effettivamente lavorato con
Netflix e implementato questo nel loro
tipo di modello di iniezione di guasti, quindi Peter
e Colton Andres dalle reti Netflix
partner per fare un prototipo di questo
e ci sono molte cose interessanti
succede quando provi a prendere come un
progetto di ricerca e poi come metterlo
in produzione e c’è davvero
discorso stupefacente che è collegato nel
riferimenti che danno su di esso e
c’è anche un articolo ma alcuni di
le scoperte chiave sono state proprio come sono
come il Netflix Deathstar o
diagramma di micro-servizi che ho preso in prestito
da Adrian e quindi mi piace proprio come
forse non abbiamo un intero
ma quello che sta succedendo questo è Seminole
questo è che stanno parlando tra loro
perché come quello non è scoperto a
priori che è definito tramite codice e così via
usano tracciamento distribuito e loro
avere uno strumento già definito adatto che è
il loro sistema di iniezione dei guasti da iniettare
fallimenti e loro così conoscono gli avversari
dove possono iniettare errori nella
sistemi che usano per costruire il
call graph in modo che lo facciano in qualche modo
come vivere a destra usano la metrica
sistema per determinare se la chiamata è a
successo o fallimento
perché hanno tutti questi come un HTTP
200 non è stato sufficiente perché hai tutto
questo tipo di strani clienti certi
sai comportarti male se li mandi a
500 indietro e devono sostenere un
gamma di clienti e come qualsiasi cosa
mondo di come internet è terribile
così bene lo facciamo e usiamo la metrica
sistemi per determinare se le chiamate a
successo e poi come il Mali sarebbe una specie di
come elaborare questo grafico delle chiamate e cose del genere
così e quindi determinare dove si adatta
dovrebbe iniettare un fallimento e poi loro
potrebbe capire come è successo
e ce n’è un altro paio interessante
cose a cui dovevano andare problemi a
vai a risolvere e quindi consiglio vivamente di farlo
leggere i discorsi ma è davvero bello
perché sono corsi e ne hanno trovati alcuni
bug e questo è un bene
uso di come come iniziamo a pensare
sull’integrazione di alcune di queste cose
negli ambienti di produzione ok così dentro
conclusione utilizzare verifiche formali a
prova i tuoi componenti critici se tu
avere qualcosa che è super
mission-critical che forse eri
vendere e fare soldi fuori di esso non è
una cattiva idea di scrivere un formale
specifica e investire in questo
Software
Penso ai test unitari e ai test di integrazione
dovrebbe essere come se trovassero una moltitudine di
i loro errori dovrebbero essere minimi
per qualsiasi software che stai scrivendo e
poi scrivi possiamo aumentare il nostro
fiducia usando testamento di proprietà e
Iniezione di guasti nei nostri sistemi e I
penso che questi siano altamente sottoutilizzati in
questo ultimo punto è una sorta di dove
possiamo vedere un sacco di guadagni per equamente
investimento minimo e quindi se lo sai
sei una società gigante in cui puoi entrare e
costruire questo tipo di come veramente grande
strumenti e, infine, mi piacerebbe finire con a
citazione dal mio amico Camille piace il
cavalcate divertitevi e mettete alla prova il vostro impazzire
codice grazie a tutti questi adorabili
persone che mi hanno aiutato con questo discorso e
l’articolo
tu
Please follow and like us: