Press "Enter" to skip to content

GOTO 2016 • Building a Distributed Build System at Google Scale • Aysylu Greenberg


va bene, parliamo di costruire un
sistema di generazione distribuito su scala Google
e prima di buttarci dentro, discutiamo
con la scala di Google significa solitamente quando
la gente dice che la scala di Google è destinata a
suono impressionante e sai come
che il sistema si è dimostrato perché
può supportare la scala di Google, quindi facciamolo
vedere cosa significa in realtà in numeri così
abbiamo 30.000 ingegneri in oltre 40
uffici e la costruzione distributiva
il sistema su cui lavoro è supportato da tutti
quegli ingegneri in tutto il mondo e
ci sono circa 45.000 di Kamil cattivi
vengono inviati al codebase ogni giorno
15.000 di quelli sono da umani di Google
ingegneri e poi 30.000 sono di
script automatici quindi questi sono i
script di rilascio questi sono i
script di automazione di integrazione che
cambia la configurazione e così via e
così via potresti essere sorpreso di sentire il
seguendo ma anche se ne abbiamo tanti
di ingegneri di talento è ogni volta che io
funziona su qualsiasi sistema di grandi dimensioni che si sentisse
non abbiamo mai avuto abbastanza persone così se ne avessi
fare qualcosa due volte diventa semplicemente
molto fastidioso e così provo ad automatizzare
quello il più possibile e quello sei tu
sapere dove ci affidiamo all’automazione
gli script è incluso nel codice sorgente
circa 2 miliardi di righe di codice in modo che
significa che il sistema di generazione distribuita ha bisogno
essere in grado di supportare la costruzione di tutti quelli
2 miliardi di righe di codice nei binari
e così via e ogni giorno circa la metà di
il codebase cambia così che significa 1
miliardi di righe di modifiche del codice devono essere
compilazioni testate costantemente compilate
rilasciato e così via build così distribuito
sistema su Google è il codice build rabid e
ottiene approssimativamente 5 milioni di build e test
richieste al giorno e genera
petabyte di artefatti questi costruiscono
gli artefatti sono i binari che il tuo
sistema di generazione genera questi sono i
binari che i test sono stati eseguiti
contro e così via e tutto questo è
fatto in un repository
quando si seminano lo strumento di legge open source
da Google è uscito e c’era un
menzione del repository monolitico
che usiamo ci sono un sacco di domande
e molta confusione non ci siamo mossi
lontano da repository monolitici cosa
stiamo facendo qui perché perché Google
usa un repository quindi lasciami prendere un po ‘
di un lato e chiarire i vantaggi
del perché lo usiamo e perché funziona così
bene per noi, quindi com’è lavorare in
un repository
quindi prima di tutto è molto facile avere un
cronologia delle revisioni lineare così quando sono io
quando il sistema sta fallendo nella produzione
e voglio capire quale dei
rivelare le versioni del binario era
rilasciato e quale del codice è stato
andando a questa versione e cosa no
sarebbe molto confuso come provare a
abbinare tutte le diverse librerie e
tutta la differenza di altri binari che
si allungherà nel mio binario per capire
fuori che codice sta funzionando ma avendo
la cronologia delle revisioni lineari lo rende semplicemente
molto più facile essere in grado di dirlo bene
è dove era il taglio per quello che noi
rilascio e tutto è sovvenzioni
riferimento come puoi immaginare di Google
la base di codice è poliglotta quindi il codice è
scritto in Java C ++ Python girl e a
poche altre lingue e potendo
riferimento ed essere in grado di trovare l’uso e
Co siti attraverso la base di codice su tutto
le diverse lingue è incredibilmente
importante per noi essere in grado di
Traccia la storia capire che cosa
i casi d’uso sono come i nostri clienti usano il
codice e così via e ci si potrebbe chiedere
esattamente come possiamo impedirlo
rilascia una versione in corso di
biblioteche ricevono da uscire così per
che usiamo componenti è simile a
ottenere sub albero o ottenere sub componenti può
si alza delle mani per le persone che sono
usandolo bene vedo se le tue mani sì
quindi è fondamentalmente è essere in grado di
dì qual è la versione corretta con il controllo di
il team della biblioteca e qual è il
versione work-in-progress quindi se lo sono
riallineare una sorta di libreria che
lo fa la manipolazione di stringhe non ho davvero
cura di usare il sai il precedente
versione o differenziare tra il
versioni oh mi interessa ciò che è stato il
l’ultima versione corretta per questo
biblioteca
e poi vai avanti e se lo sono
interessato a costruire per il futuro
le loro versioni non pubblicate posso anche fare
che da solo basandosi sulla
work-in-progress versioni come bene e
le versioni work in progress sono simili a
istantanee se sei nel mondo Java
e stai usando Maven e il tutto
ecosistema in modo onesto se ci pensi
avendo un repository centrale di
artefatti per il modo in cui Maven è centrale
l’esempio lo fa e avere qualcosa
che puoi compilare da un sorgente a
repository monolitico sono solo due
lati della stessa medaglia
ci sono alcuni vantaggi nel doverlo fare
essere in grado di costruire da sorgenti come
avere build ripetibili prevedibili
dalla fonte quindi per esempio se il
reporter se l’artefatto viene corrotto
nel repository di Maven quindi avremmo
essere in grado di rilevare questo e potremmo
memorizzare gli hash MD5 e prevenirli
ci impedisce di scaricare qualcosa di simile
non vogliamo scaricare danneggiato
file o impedirci di aiutarci a rilevare se
il binario è ciò che afferma di essere
facendolo dalla fonte, sappiamo che tutti
getta a revisione data la sua
sarà lo stesso binario su e
più volte e anche quando diamo
bandiere diverse quando stiamo compilando
con diverse opzioni che vogliamo fare
certo che produce sempre lo stesso
binario ci sono molte ottimizzazioni
evitare di dover compilare lo stesso
artefatti più e più volte così noi
in realtà non finiscono per pagare il costo di
costruendo continuamente dalla fonte così
per un sacco di librerie di base ci sarà solo
finiscono per immagazzinarli e incassarli e
riutilizzandoli per tutte le altre build
quel vantaggio di costruire da fonti
che possiamo disaccoppiare il processo di ogni squadra
per quanto possibile, quindi se mi interessa
nello scrivere un nuovo servizio che si basa su
l’inedito ma in futuro molto
servizio utile per me o l’utilizzo di un cliente
libreria che non è stata ancora rilasciata posso
fallo senza dover negoziare
senza dover coordinarsi con molti
altre squadre diverse e capire
che cosa esattamente è che
biblioteca
quando è pronto quel cliente così posso
usalo per i miei casi d’uso che puoi
saperne di più su come il sistema di origine
lavora in Rachel Parsons parla di lei
dato in scala non andrei troppo
in dettaglio sul sistema di origine
perché oggi parleremo di
sistema di build distribuito che è costruito
in cima a quello e usa la fonte
sistema così abbiamo discusso per la scala di Google
significa e quali sfide presenta
dato solo il numero di persone
lavorando su un numero di persone
contribuendo al codice base e
la dimensione della base di codice in modo parliamone
circa il sistema di generazione distribuita come
molte persone nel pubblico hanno un
buona idea per il distribuito
sistema di costruzione va bene, si spera
un po ‘ più di te alla fine di
questo discorso così onestamente non tutte le squadre no
ogni organizzazione raggiungerà mai il
punto di aver bisogno di una build distribuita
sistema serve un problema molto specifico
per le persone quindi diamo un’occhiata a cosa
l’evoluzione è generalmente al di sopra
disegno di legge del desktop singolo ad una distribuita
Costruisci il sistema in modo tale da cominciare
uno un ingegnere del software che lavora su un
progetto e il progetto è in verde e
forse stanno facendo una specie di
progetti di computer vision saranno
basandoci sull’opencv in modo che ne costruissero due
andrà a prendere se la dipendenza OpenCV da
le nuvole e quindi collegarlo e costruirlo
per loro e ora avranno il locale
versione di CD aperto sul loro desktop così
ora per essere sicuri di essere sulla stessa pagina
parliamo di cosa significa costruire cosa
significa costruire un binario e cosa?
significa testare così il tuo tipico
lo scenario di costruzione va come segue così noi
avere un progetto con dipendenze definite
e le tue dipendenze potrebbero essere definitive
una sorta di linguaggio specifico del dominio
di solito le persone iniziano un XML o llamo e
quindi uno strumento di costruzione che è peggio di
un unico desktop li troverà
dipendenze e questo conto potrebbe essere
Maven
fai Gradle immagino il pubblico
familiare con quegli strumenti e il suo uso
loro posso vedere a portata di mano
Whoo bene grande a tutti impressionante così
quindi questo disegno di legge su un muro costruisce a
progetto con le dipendenze e poi
scaricherà gli artefatti di costruzione e
ora una volta ho il manufatto build
questo è il raccoglitore che posso usare
rilasciarlo e così via ora per il test
scenario che fondamentalmente tu passi attraverso
quasi gli stessi passi che avranno
ha definito un progetto con dipendenze
e il Builder sarà in grado di trovare
quelle dipendenze e costruiscile per noi
ma lo stesso binario non è così
utile per noi nell’era dei test ma noi
voglio fare è vogliamo eseguire il test
e poi l’output che ci interessa
in sta ottenendo i risultati del test
va bene così ora che siamo sulla stessa pagina
su cosa intendo quando dico di costruire
e test passiamo alla Hulk il
il sistema di costruzione si evolve nel tempo, quindi lo faremo
avere una persona che lavora a un progetto
che diventa molto molto popolare così o forse
ottiene supporto organizzativo e ora il nostro
la squadra ci sta lavorando e il team lo farà
devono mantenere le proprie macchine proprie
servire sul lato che verrà facendo tutto
le build e le versioni e sarebbe
integrandosi con tutto il continuo
quadri di integrazione come Jenkins e
così via così ora una squadra diversa in
stessa organizzazione se si tratta di un computer
Probabilmente farò affidamento anche sulla società di visione
su CV aperto e dovrò costruirlo
avere una dipendenza e costruire
i loro progetti e poi ottenere un’altra squadra
e quindi quello che vediamo qui è che ogni
la squadra singola deve avere il proprio
macchina di mettere da parte sono stati ora hanno bisogno di
capire e affrontare il sovraccarico di
mantenimento operativo e mantenimento
aggiornato e sistemando tutti i corpi
il loro sistema di costruzione a quel punto il
la squadra ha trascorso una parte del loro tempo
invece di lavorare sul progetto dove
le loro abilità e talenti sono molto utili
facendo questo, questo è il momento in cui
squadra come la mia arriverà e fornirà
l’infrastruttura condivisa per i team
quindi ora continueremo a operare
il sistema il sistema di generazione distribuito
e poi le squadre possono solo entrare e
richiesta di costruire e testare i loro progetti
e otterranno solo i risultati
il Carib
quindi se hai team di apprendimento automatico
esperti che possono concentrarsi solo sulla costruzione
i migliori modelli che hanno invece
di preoccuparsi di tutta l’infrastruttura
dettagli e questa infrastruttura che sono
parlare di qui è molto simile a
il tipo di infrastruttura che Travis
CI sta usando le persone usano Travis CI
nel pubblico tutti okay, sì grandioso
strumento quindi parliamo di costruire Abbott
il sistema di generazione distribuito di googles è
puoi vederlo come basato
sulle nuvole quindi l’ incastonatura è l’aperto
fonte interna di Google costruita oh che
è stato open source l’anno scorso e lo ha reso avido
fondamentalmente crea uno strato distribuito su
in cima a ciò, quindi cosa fa costruire un Badou
barabba è nel mezzo della build
e prova stack dell’infrastruttura così
i tipi di squadre e progetti che
starebbe usando il nostro coniglio
sistema di integrazione continua per essere in grado
per eseguire l’ infrastruttura di rilascio di prova
per costruire e quindi recuperare il recupero binario
gli artefatti che il rilascio
l’infrastruttura verrà successivamente distribuita e
quindi su singoli ingegneri di Google come
così come le squadre che sono lì non possono usare
qualsiasi altra build esistente e
infrastruttura di prova e stanno cercando
fare qualcos’altro con la build
sistema
e anche i test di integrazione
infrastruttura che sarà in grado di chiamare
la build e quindi impostare tutto il
ambiente di cui hai bisogno per il
test di integrazione ed eseguire i test
e io costruirò un po ‘di per se stessa
molti componenti diversi quindi prima di
tutto e tu avrai bisogno di essere scaricato
i codici il codice sorgente al
revisione richiesta da un cliente
il sistema di origine e come ti dico
può imparare di più sul sistema sorgente
a Google dai piatti di Rachel parliamo
Scala e mi collego più tardi nel
diapositive e quindi costruisci rapidi sedili sopra
fiammata fondamentalmente è uno strato distribuito
in cima alla fiammata è lo strumento interno
conosciuto come beso e mondo esterno
e poi blaze eseguirà le build
per noi e poi metterà tutti quelli
artefatti nell’artefatto di costruzione
deposito e anche se sarei in grado di
servire quegli artefatti all’utente
chiedendoli così bill coniglio si siede molto
bene in questo mezzo della pila
eseguendo specificamente le build e
prova e si occupa di una distribuzione
strato per le esigenze di costruzione e test quindi noi
parlato di cosa è stata distribuita
sistema è abbiamo parlato di tutto il
diverse sfide che deve affrontare
con perché deve funzionare su Google
scala quindi parliamo di realtà
costruendo costruiscono sistema e
in particolare parleremo di evoluzione
di costruire Rabbid puoi pensarci
da come l’architettura si è evoluta
essere una spinta per tirare il modello e vedremo
perché in un secondo è iniziato il conto del coniglio
fuori come un progetto sperimentale e it
molto rapidamente si è trasformato in una chiave
il pezzo di Go Go si sta sviluppando
infrastruttura quindi c’era molto
diverse squadre che avevano bisogno di questo e
a quanto pare avevano bisogno presto e noi
pensato e quindi il progetto iniziale di esso
l’ architettura iniziale era molto semplice
e giustamente perché non ne aveva bisogno
essere più complesso perché al
tempo che stavo costruendo non lo sapevamo
chi lo userebbe e dove il bisogno
sarebbe e così è stato costruito come un semplice
spingere il modello per cui abbiamo un cliente
utente come un cliente piuttosto malato e oh esso
deve fare inviare il lavoro di costruzione al
richiesta di prova per il build I lavoratore e
dato che il client libreria soda
abbastanza spessa di spessore poi carichiamo molto
della scoperta e del bilanciamento del carico
preoccupazioni per la build un po ‘di pianificazione
ora ci sono problemi di coppia con questo
design che abbiamo scoperto in seguito come noi
iniziato a spingere il soffitto del
scalabilità che potremmo fornire e
questo è il routing così dato che abbiamo
una linea spessa ha bisogno di capire a
sacco di diversi sistemi di costruzione specifici
preoccupazioni e anche in modo che tu lo faccia
il routing deve fare molto di loro
comprensione delle risposte dello scheduler
e capire cosa significa per il
sistemi disponibili
abilità e così via così l’ interno
di routing diventa molto difficile c’è
una comunicazione piuttosto complicata
protocollo perché tutto il diverso
uscite che il cliente potrebbe essere
interessato come artefatti che
loro chiederanno al lavoratore e
anche costruiscono informazioni di avanzamento in modo
se stiamo facendo un test e ce ne sono 100
test e la nostra suite di test che vogliamo vedere
quale dei test ha effettivamente fallito
quelli 100 e che avrebbero ottenuto questo
informazioni di nuovo sullo stesso canale
dal lavoratore e così quando abbiamo iniziato
colpendo il limite di scalabilità lo faremo
passare al motto della piscina che chiamerebbe
servizio in barca quindi sembra approssimativamente questo
così lascia che ti accompagni tutto questo
quindi in pratica ora l’utente al posto di
rendere il riconoscimento al programma a
connessione diretta al lavoratore loro
lo metterà nel persistente
coda fanno una ricerca perché al
fine del giorno l’utente non in realtà
cura di parlare immediatamente con il lavoratore
quello a cui stanno a cuore è quello loro
costruisce e verifica la richiesta viene eseguita
ad un certo punto nel prossimo futuro e
vogliono solo sapere cosa sta succedendo
con esso è ancora e carino è essere
elaborato cosa sta succedendo
e così ora saranno metterlo in
coda persistente e poi ad un certo punto
quando c’è capacità costruisci un po ‘di
lavorare, cosa vorresti guarito e poi si
inizierà lo streaming che costruiscono i progressi
informazioni a un servizio separato che
è responsabile per la memorizzazione e il servizio
il progresso della costruzione e anche nessuno dei
artefatti creati dalla build
il sistema sarà messo in un altro
servizio in modo che l’ utente possa recuperare
quelli costruiscono artefatti più tardi e così ora
l’utente se è realmente interessato
nel progresso della costruzione, allora possono
iscriversi possono opt-in per ottenere il
informazioni sullo stato di avanzamento del
costruire e potrebbero non essere interessati
nel riportare indietro il binario così se lo facessero
fare il test nello scenario di test
in realtà non si preoccupano per il
binario così poi saranno solo farne richiesta
se ne hanno bisogno se sono in realtà
cercando di fare versioni dalla build
conservazione degli artefatti così per una volta posso andare
indietro specificamente per il resto del
parlo Parlerò di come abbiamo ri
architettato e specificamente come siamo
architettato le parti in cui si trovava l’utente
mettere
la richiesta nella cura persistente e
poi i lavoratori del Bilderberg iniziarono a farlo
fare la coda di quelle richieste dopo il
coda persistente ho effettivamente portato il
lancio per questa parte di rielaborazione del
motore di esecuzione ed è stato un impegno
attraverso cinque diverse squadre su tre
diverse zone geografiche e due
diversi fusi orari e una cosa che
era molto difficile per noi è non avevamo
il lusso di avere un periodo di inattività noi
non poteva semplicemente dire alla gente solo aspettare un
un paio d’ ore come forse sabato
Domenica
fammi ricostruire il nostro sistema e
lanciare uno nuovo in modo da dare quelle preoccupazioni
mi è sembrato di dover sostituire
un motore a reazione e vola e ci ho provato
cerca online per le immagini che lo farebbero
comunicare davvero bene quale sia questo compito
era circa e l’ unica cosa che potevo
trovare è rifornimento aereo così apparentemente tu
non è possibile rifornire di carburante un aereo a mezz’aria, ma tu
in grado di sostituire un motore a reazione quindi ho dovuto
disegnare qualcosa per rappresentare davvero cosa
mi sembrava che fosse probabilmente io
cercando di capire come fare
lanciare quella cosa e sostituirla mentre
Stavo ancora volando e continuo a volare
quindi per riassumere un pò così l’architettura
il tubo è andato da un client molto semplice
push model request che trova lo scheduler
il lavoratore spinge il lavoro sul
lavoratore e poi ottiene i risultati
e poi l’architettura che muoviamo
c’è questo servizio costruito la piscina
modello in cui l’utente avrebbe appena messo il
lavorare sulla coda persistente e poi
il lavoratore tirerà il lavoro e poi
riporta tutte le diverse cose e
quindi quando l’utente si interessa se il
l’utente è interessato al loro diverso
uscite quindi li prenderebbero quando
hanno bisogno di loro se ne hanno bisogno e
in realtà dovrei dire così come ho detto
un cliente un po ‘prima era in grado di ottenere
hanno anche costruito informazioni sul progresso
come i loro artefatti collegandoti
direttamente al lavoratore e così ora noi
diviso in due diversi
componenti in modo da costruire un sistema di artefatti
così come l’ applicazione del progresso costruttivo
servizio che tutti sono stati mantenuti
e sviluppato dal mio team così come abbiamo fatto noi
reimplementato nella build architettata
sistema
zero tempi morti come siamo riusciti a fare
spegnere il motore e con il fluido per
il resto del discorso vorrei parlare
alcune delle sfide e come noi
effettivamente raggiungere questo con effettivamente zero
tempo di inattività che è onestamente sorprendente
Mi ghiaccio sto ancora riprendendo dalla
fatto che in realtà è successo così così
la prima cosa che è stata molto importante
noi dobbiamo essere in grado di migrare verso il retro
prima perché abbiamo iniziato a colpire il
limiti di scalabilità siamo ora i nostri utenti
non erano più in grado di utilizzare nella misura
che volevano era importante
che proviamo le nostre mani posteriori
effettivamente in grado di sopportare il carico e
sono scalabili rispetto a quando ne abbiamo bisogno
contabilmente anche per la crescita
la migrazione prima nel back – end consente
per dimostrare che ogni singola parte di
il sistema è in realtà fino alla velocità e
ha spazio per la crescita del contrario
lo sono stato se decidessimo di ricostruire
il cliente e darlo al nuovo utente
cosa succederebbe in quel caso bene
prima di tutto se ci rendiamo conto che il nostro
implementazione o anche la nostra architettura
dei backend non era sufficiente per
il carico quindi cosa devono dire al
cliente di tornare oh puoi usare quello
da due settimane fa oh no no
anche male puoi tornare indietro da quattro settimane
fa e dato loro tutti i diversi
I team di ingegneri di Google che stanno utilizzando
questo loro che creerebbe enorme
quantità di spese generali di comunicazione che
era solo non fattibile che non ha fatto
senso quindi abbiamo bisogno di concentrarsi sul
backends e dimostrano che possono supportare
i nuovi carichi prima di considerare il
lancio di successo e quindi dovevamo
creare un sacco di lancio dei codici
perché i nostri clienti si affidano al nostro sistema
per correre e parlerò
finestra di compatibilità in un secondo ma per
compatibilità a ritroso che dobbiamo fare
sicuro che con nuove funzionalità e con nuove
implementazione noi gli output che noi
produrre ai clienti dagli utenti
la prospettiva non è peggiore di quello che noi
usato per e la nostra finestra di compatibilità è
in realtà diversi mesi quindi che cosa
significa è se l’utente sta utilizzando un client
libreria di sei mesi fa si aspettano
che le loro uscite sono almeno altrettanto buone
come anche se abbiamo spento il rovescio
e l’altra sfida è quella no
puoi sempre dirti che puoi
effettivamente confrontare le mele con le mele
uscite diverse perché tu sei
sistema architettato funziona il sistema
molto diversamente e così e così è molto
importante per essere sicuri di poter correre
questa analisi e capire cosa fa
significa anche confrontare i due
diversi tipi di output al fine di
abilitare questo abbiamo bisogno di indirizzare il lancio
clienti amichevoli prima effettivamente
passare tutti così come ho detto
ci sono tre diversi backend
lavoriamo su e ho lavorato sul conto
coniglio come il motore di esecuzione e it
protezione da una coda persistente e
poi costruisce i fatti e costruisce
servizio di avanzamento e cosa era
interessante è se abbiamo scoperto il loro
diversi clienti erano in realtà
più disponibile a noi apportando questi cambiamenti
quindi per la sicurezza abbiamo scoperto che a
un altro team di infrastruttura per sviluppatori
era disposto a mettere lo sforzo che era
effettivamente necessario che ciò accada e così
sono stati in grado di darci una mano e via
avere un’esperienza condivisa ha condiviso il gergo
Vocabolario condiviso sul diverso
sfide e anche preoccupazioni condivise noi
sono stati in grado di fare il lancio con successo
perché erano sia l’utente che noi
interessato al successo di questo e
per gli artefatti di costruzione d’altra parte
c’era un altro cliente che era
effettivamente amichevole verso il lancio
quale era il sistema di distribuzione e il
sistema di rilascio e siamo stati in grado di lavorare
molto più strettamente con loro così per ciascuno
dei componenti c’era un diverso
lanciare un client amichevole e ne avevamo bisogno
assicurati di fare un buon lavoro per loro
prima prima di poter dire a posto il sistema
è abbastanza buono da lanciare per tutti
altrimenti e ciò che questo significava che dovevamo
disaccoppiare il lancio di servizi se dovessimo
contare su tutte le tre differenti
componenti pronti allo stesso tempo
quello che significa è che probabilmente lo farebbe
non ho lanciato in qualsiasi momento presto perché
ogni singolo componente avrebbe il suo
robot diversi in diversi punti in
tempo e contando su tutti per essere
pronto allo stesso punto e fornendo
lo stesso
qualità che è irragionevole così e
dato che avevamo tutti e tre
diversi tipi di utenti che noi
targeting per il lancio di cui avevamo bisogno
lavorare partendo dal presupposto che nessuno di
gli altri servizi di notizie saranno sempre
pronto per noi e che è andato anche con il
un sacco di codice usa e getta che è stato scritto
per la transizione quando dovevamo
anticipare tutti i vecchi scenari e
allora se questi due servizi erano su se
uno di loro era attivo e così via e così via
tutte le diverse permutazioni solo tutte
questi ponti in cima ai ponti proprio così
potremmo lanciare con grande sicurezza
un’altra cosa importante per il lancio
stava avendo la massima visibilità nel
stato del sistema come sistemi distribuiti
ingegnere la cosa meno interessante
potrebbe scoprire da solo è che il
servizio il sistema fallito mi aspetto che
fallirebbe è sorprendente per me quando
non mi sembra così importante a me
circa è come ha fallito spesso è
molto difficile da chiedere all’utente di riprodurre
la loro cintura o anche doverla riprodurre
per loro perché a volte si deve
aspetta quel particolare scenario e
tutti i posti cadono nel perfetto
spazio in cui provoca l’errore e così via
avere la massima visibilità in questo è
essenziale ciò che significa è necessario
per capire l’intera abilità di debug
storia ma è anche costoso da impostare
assicurandoti che tutti i log siano presenti
assicurati che sia dato
richieste che possiamo gradire distribuite
tracciamento o uno di questi approcci sono
costoso e così per il lancio iniziale
anche loro non sono necessari non necessari
molte volte, ma avere una buona idea su
quale registro sto andando a vedere se questo
il tipo di errore si verifica per uno sguardo
informazioni registra i log binari dove trovo
cosa è successo come si mettono i pezzi
insieme era molto importante e poi il
resto dell’investimento in debug
capacità appena seguita verso questo
era sorprendente per molti di noi quando noi
dichiarato che eravamo completi e lo siamo
come va bene proviamo a lanciarlo
nel QA e basta vedere cosa succede
e il sistema lo ha rapidamente fallito
a malapena era già attivo e funzionante
e quello era sorprendente perché al
tempo in cui ogni singola squadra partecipa
questo ha avuto un numero sufficiente di
test di integrazione con numero sufficiente
dei test unitari abbiamo avuto tutto ciò che noi
sapevo sul posto pronto e fuori di testa
la qualità è stata accettata da molti di noi
questo molto pratico tutto questo
il processo di rilascio ci ha permesso di avviare
con grande fiducia in ciò che significava
avevamo una lista di controllo molto specifica per noi
seguito e perché questi lanci prendono
un po ‘di tempo per preparare solo dare il
in scala reale era molto importante
che tutti erano sulla stessa pagina
su cosa succederebbe e qualche volta
le persone lo fanno – le loro circostanze di vita
non siamo in grado di partecipare ad alcuni
tempi e ci uniremo in seguito e altri
e assicurandosi che tutti sappiano cosa sia
succederà quando lanceremo e cosa
accadrà ogni singolo fallimento
scenario e cosa farebbero tutti così
che qualcuno non debba essere svegliato
alle 4 del mattino perché sono gli unici
esperto che sa cosa farsene
era essenziale per noi e questo vale
il piano di rollback oltre a sapere come
ripristinare la nostra nuova architettura il nostro nuovo
il rilascio era essenziale per noi altrimenti
sarebbe come liberare un mostro
la gabbia e non avere modo di sapere
riportandoli indietro e vedendo cosa
è andato storto, così ci ha dato il piano di rollback
un pizzico di fiducia in più per ora
4 sapevamo che se qualcosa fosse andato storto
gli utenti avranno un impatto minimo o nullo
qualunque e potremmo continuare con
la nostra vecchia infrastruttura io con il vecchio
architettura fino a quando non saremo in grado di provare
di nuovo e dimostrare che funziona così che se
voi di diventare più interessato a come la
strumenti e sistemi di costruzione funzionano in generale
c’è una parte dei riferimenti che io
consiglio e posterò le diapositive
online anche solo per chiamarli
questo è il primo è il discorso
di cui ho parlato di un Potvin bi-razziale a
conferenza di scala si può imparare di più
su come il sistema di origine è in grado di
supportare la scala di Google richiede il
è il post del blog di archiviazione degli artefatti
parlando di come conserviamo in tutto il
diverse sfide in cui ci imbattiamo
memorizzazione e
hanno distribuito azioni costruite che non ho fatto
discuterne tanto ma è anche molto
interessante quindi è usato dalla fiammata
sistema dal basilico e in pratica proviamo
ottenere il massimo parallelismo dal
costruisce che stiamo facendo così ogni build
avrà un sacco di dipendenze e
allora possiamo costruire una costruzione di una penalità
grafico dove erano in grado di capire
quali parti di esso possono essere eseguite in
parallelo fino a quando non incontrano il punto in cui
si sono uniti e tutto deve essere
collegati insieme quindi questo è il sistema
questo fa la massima paralisi per noi
e quindi se siete interessati come tutti
questo si inserisce in uno degli utenti
di costruttore e uno degli utenti del
il sistema di costruzione è continuo
sistema di integrazione c’è una grande carta
su questo e vorrei estendere il mio
grazie a persone che mi hanno aiutato a perfezionare
questo discorso e mi piacerebbe chiamare il nostro
scherzo a McCaffrey grazie per avermi invitato
qui è stato molto divertente provare come
preparando per il dare questo discorso e
questo è il nostro massimo per oggi, quindi prendo
qualsiasi domanda tu abbia e per favore
ricorda di valutare la sessione quando tu
testa fuori dalla stanza grazie
tu

Please follow and like us: