Press "Enter" to skip to content

GOTO 2016 • Stability Patterns & Antipatterns • Michael T. Nygard


quindi gran parte della mia carriera sono stato un
sviluppatore e architetto ma nel
primi anni 2000 attraverso un po ‘ bizzarro
e un po ‘disperato insieme di
circostanze ho fatto un viaggio in
operazioni e ho vissuto in operazioni per
un po ‘ e infatti ho vissuto in una parte di
operazioni in cui non ero solo
responsabile della disponibilità di
sistemi che ero responsabile per il
disponibilità di sistemi che non ho fatto
scrivere che dovevo mantenere il codice degli altri
in esecuzione e ottenere la sveglia quando
il loro codice è fallito nel mezzo del
sera la mia reazione iniziale è stata oh ho
ho capito che ho usato roba del genere
produzione per lungo tempo nessun problema
e poi dopo alcune settimane set di realtà
e ho iniziato a rendermene conto quasi
tutti i fallimenti produttivi che eravamo
trattare con non aveva nulla a che fare con
hardware e niente a che fare con il
rete sono stati divisi approssimativamente in
due categorie uno era l’errore dell’operatore
e in genere una sorta di errore indotto
perché le cose erano fuorvianti o
ambiguo e l’ altro era software
errore di errore dell’operatore che è un separato
argomento per un diverso tipo di conferenza
un sacco di cose interessanti da queste parti
ma i difetti del software sono qualcosa
che dovremmo essere in grado di fare qualcosa
circa quindi ero una delle poche persone in
operazioni che hanno avuto un background in
sviluppo e potrebbe guardare il
difetti software scavare alla
singole linee di codice sorgente e invia
il mio bug riporta con patch e correzioni
ritorno ai team di sviluppo e io
trovato che questi problemi sono arrivati
categorie o tipi che ho iniziato a vedere
situazioni ricorrenti comunemente ricreate
problemi questo è in realtà una speranza
scoperta perché se i problemi arrivano
tipi quindi forse possiamo trovare categorici
soluzioni per quei tipi di problemi così
Ho preso le mie esperienze di sai
che vivono in un altro campo e una sorta di
essere in un paese straniero per un po ‘
e ho provato a riportarli nel
mondo dello sviluppo con questa versione del libro
esso
che è tutto su di te sai cosa facciamo
fare per far funzionare il nostro software
produzione come fa?
per sopravvivere più di Hugh a come farlo
sopravvivi al contatto con il mondo reale
e quando sono entrato in questo mi sono messo in contatto
con alcuni dei lunghi e ricchi
disciplina dell’affidabilità ingegneria in
altre aree meccaniche ed elettriche
e ingegneria civile e così via così io
vuole iniziare, fornendo solo un po ‘
un po ‘di terminologia un paio di
definizioni il primo è la disponibilità quindi
cosa significa per qualcosa essere
disponibile è la probabilità che il
il sistema funziona al tempo T così quando io
provare a fare qualcosa è il sistema in corso
per completare con successo quella cosa ora
notare che questo non parla di server
essere attivo e funzionante non parla
sull’hardware che è vivo o sulle reti
funziona di cui parla davvero
essere in grado di completare la missione
Lo sto dando così se sto cercando di fare un
processo aziendale posso completare il
processo aziendale se sto facendo un
transazione posso fare una transazione e
così via ora la disponibilità non è qualcosa
puoi controllare direttamente il risultato
è una variabile di output è dipendente
variabile in base alla tua capacità di creare
stabilità nel tuo sistema e stabilità
è la caratteristica architettonica che
ti consente di mantenere la disponibilità in
il volto della fortuna oltraggiosa il
imbracature e frecce di difetti ed errori
ora solo un po ‘più di terminologia quando
Dico che quello di cui sto parlando è un errore
stato interno errato nel tuo
applicazione quindi si presenta un errore nel tuo
applicazione attraverso uno dei due modi uno
è che hai un difetto latente e
quel difetto crea un errore
lo stato interno l’altro posto che a
colpa può entrare nel tuo sistema è attraverso
il perimetro attraverso le interfacce in
il tuo sistema dati errati che non sei
il controllo corretto per te potrebbe chiamare
che un difetto di omissione è deformato
i pacchetti di rete sono un ottimo posto da vedere
guasti essendo iniettato ora un guasto non è
necessariamente che si verificano errori gravi
ce ne sono due ampi
scuole di pensiero su come affrontare
i guasti uno è la tolleranza ai guasti significa più
o meno esattamente quello che dice che puoi
tollerare i difetti e recuperare è possibile
ripara lo stato interno errato e
tornare a uno stato operativo nominale
l’altro approccio è l’intolleranza alla colpa
l’intolleranza alla faglia sostanzialmente dice quanto prima
quando rilevo uno stato interno errato
l’uscita termina l’ intollerante dell’errore
la scuola dice che non esiste uno Stato così pulito
il tuo avvio iniziale quindi la cosa migliore
fare è uscire e lasciare qualcun altro
iniziare a fare il backup questa è la scuola di
pensavo che vediamo in compagnia o attore
sistemi basati su tolleranza agli errori tende a
sii lo stato che vedi o si avvicina
vedi nelle lingue con eccezioni
come Java c-tagliente Scala Ruby ecc ora il
ragione per cui facciamo uno di questi
approcci è perché vogliamo prevenire
un errore nel creare un errore l’errore
è quando la colpa diventa osservabile
errato in modo che l’errore possa essere latente nel tuo
domanda per un lungo periodo ma se
nessuno lo vede mai in realtà
importa
è un bug di haizen l’errore è quando tu
in realtà producono output errati o tu
iniziare a prendere comportamenti che vorresti
normalmente non prendere così forse non è un
uscita ma se il tuo sistema improvvisamente
inizia
martellare un altro sistema remoto con
richieste eccessive è un errore anche
anche se non è davvero un essere in uscita
prodotto alcuni errori portano a fallimenti così
il fallimento è una perdita di disponibilità
non può più portare a termine la missione
che il tuo sistema è destinato a realizzare
e il fallimento è ciò che davvero vogliamo
per evitare di essere così all’interno di questo quadro
andando a guardare alcuni di quelli ricorrenti
schemi che ho osservato che creano
i guasti su una base frequente ora mi riferisco
a questi come modelli anti quindi se a
pattern è una soluzione a un problema in a
contesto un anti-modello è semplicemente un
soluzione a un problema in un contesto che
produce un contesto peggiore come risultato
è qualcosa che la gente riscopre o
ricreare molto intenzionalmente o
altrimenti, ma non ci piace
produce risultati che preferiremmo non
ho così il primo e più importante io sono
solo facendo un sottoinsieme degli anti-pattern
perché l’ intera cosa richiede
tre ore e sicuramente non ne ho
così tanto tempo che ho intenzione di darti
i più importanti di gran lunga il
la più importante è l’integrazione
indica che un punto di integrazione è qualsiasi luogo
in cui l’applicazione fa un fuori
chiamata di processo in modo che stai parlando a
Prendi un tubo
forse stai creando un nuovo processo
la procedura remota chiama tutti questi
le cose sono fuori per distruggere il tuo sistema
dovresti guardare ad ogni integrazione
punto come un male da evitare se
possibile e contenuto se non possibile
e ho intenzione di mostrare un esempio di
come anche il tuo quartiere amichevole
il database è fuori per farti ora la maggior parte di
probabilmente hai incontrato delle cose
come i deadlock del database
hai due thread di cui uno
tenere un lucchetto ha bisogno di un altro blocco
l’altra sostiene che la serratura ha bisogno di quella
bloccare il problema del libro di testo infatti è stato
indirizzato nei libri di testo per I do not
conoscere 40 anni che è in realtà uno dei
situazioni facili che il server di database può fare
rilevare quel problema e abortire uno solo
delle transazioni ottenute da un thread
errore l’altro arriva a completare no
problema ma ho avuto una situazione in cui
c’era un database dall’altra parte
di un firewall dal mio server delle applicazioni
e durante le ore piccole della notte
le connessioni al database erano una specie di
inattivo per un lungo periodo di tempo e come
erano inattivi, il firewall era scaduto
connessioni dalla sua tabella di permessi
consentito il traffico in modo da firewall esiste per
rompere internet è un computer con
risorse limitate ha un tavolo di
regole per quando consente i pacchetti
su un pacchetto che sta tentando di aprire a
connessione consulta regole sul
sorgente IP l’IP di destinazione la porta
numero tutto ciò una volta che una connessione è
stabilito che consente solo i pacchetti
attraverso ma se scade una connessione
da quella tabella poi un nuovo pacchetto da
l’applicazione
il server si lascia cadere sul pavimento
il firewall non restituisce un ICMP
resettare che direbbe al server quello
la connessione non è più disponibile è
lascia cadere il pacchetto sul pavimento così
TCP dice che la tua rete non è affidabile
Ho intenzione di ritrasmettere e questo
ritrasmette e questo viene lasciato cadere sul
piano e questo continua fino al
tcp / ip abort intervallo trascorre il
il valore predefinito è dieci minuti su quel tcp / ip
interrompi l’intervallo, quindi lo manterrà
ritrasmettendo per 10 minuti 10 minuti
su un’applicazione web in un data center
l’eternità 10 minuti potrebbe anche essere 5
giorni quindi ciò che accadrebbe è il
la connessione sembrerebbe rotta dopo di essa
era stato inattivo per più di un’ora ora
questo problema è apparso alle 5:00 nel
mattina perché durante la notte abbiamo avuto
pochi utenti sufficienti che era una sola pagina
essere servito da ogni applicazione
server alla volta il pool di connessioni
era usato per servire queste pagine
era l’ultimo nel primo fuori così un database
la connessione si eserciterebbe tutto
per tutta la notte gli altri 39 si sarebbero seduti
ci invecchiamento e ottenere eliminato dalla
il firewall 5:00 del mattino si è spento
per essere la prima volta che dovevamo servire
due pagine contemporaneamente su uno di questi
i server di app bene il primo otterrebbe
servito dalla connessione che era stata
tenuto caldo e il secondo andrebbe bene
bloccherebbe la ritrasmissione e
ritrasmettendo e ritrasmettendo fino a
Passarono 10 minuti a che punto a
l’eccezione sequel sarebbe lanciata e il
server delle applicazioni ha detto aha questo
la connessione non è più un bene di cui ho bisogno
per chiudere la connessione e scartarla
ovviamente chiudendo la connessione
invia un pacchetto al server del database così
quello si lascia cadere sul pavimento e
passiamo attraverso tutti i dieci minuti
timeout di ritrasmissione di nuovo in modo sostanzialmente a
5:00 di mattina tutti i nostri
i server delle applicazioni sono appesi ogni giorno fino a
abbiamo diagnosticare questo problema ci sono voluti pochi
settimane ora la cosa interessante di
questo è
il numero di parametri che doveva essere
esattamente giusto per osservare questo
problema particolare con cui abbiamo a che fare
una connessione al database ogni applicazione
ha un database con cui parli con tutti i database
il tempo
in modo che questo problema possa manifestarci
doveva avere un firewall nel modo in cui il
firewall doveva avere un breve timeout
la sua tabella delle connessioni live dovevamo
avere un server applicativo abbastanza grande
pool che non abbiamo bisogno di utilizzare più
connessioni attraverso il centro del
notte il pool di connessione doveva essere l’ultimo
al primo posto, non primo nel primo fuori
altrimenti avrebbero ottenuto
abbastanza aggiornato posso probabilmente trovare
altri parametri se tcp / ip si interrompe
l’intervallo era stato impostato su un numero basso
poi molte persone al mattino presto
otterrebbe errori ma il server
non sarebbe impiccato che potrebbe effettivamente avere
è stato peggio perché non avremmo avuto
rilevato questo problema ancora più a lungo
ma il mio punto qui è proprio quello di dirvelo
che è impossibile per ingegnere di distanza
tutti i fallimenti che potrebbero
succede invece devi aspettarti dei fallimenti
verificarsi intorno a ogni punto di integrazione
hai e ti occupi di loro di cui hai bisogno
a mettere le cose a posto per evitare che un
fallimento in un punto di integrazione come
questo da propagare all’intero
sistema e abbattere l’intero sistema
ora che un sacco di sviluppatori nel
pubblico siamo tutti risolutori di problemi
natura se non ti dico come risolvere
questo problema ti siedi qui
pensandoci e cercandoci su google
invece di ascoltare il resto del mio
parla così ti dirò come risolvere
questo è per abilitare una funzionalità
il server del database ha chiamato dead
il rilevamento della connessione in pratica è così
solo un modo per verificare se il cliente è
ancora vivo e ripulire il lato server
risorse se il cliente è morto
periodicamente invia il server del database
fuori un piccolo pacchetto di ping fino al
il cliente e dice che sei ancora vivo
sei ancora vivo, non ti rispondi
deve essere una scatola di Windows, probabilmente
Mi sono schiantato, sto pulendo tutto il mio
roba di connessione bene nel nostro caso
in realtà non si preoccupava delle cose
schiantarsi e scomparire non ci serviva
il rilevamento della connessione morta
per rilevare connessioni non funzionanti ma il ping
il pacchetto era sufficiente per dire al
firewall che la connessione era ancora
vivo, ecco come lo abbiamo risolto
e la buona notizia è che non avrai mai
questo problema perché mi hai sentito
descrivi questo e sarai in allerta
per questo ogni volta che vedi un firewall
tra la tua applicazione e la tua
database c’è una soluzione alternativa
dove puoi eseguire una query banale su a
base molto più frequente rispetto al
timeout nel firewall che uno
richiede un piccolo sforzo in più
codice quindi preferisco la configurazione
soluzione potremmo averlo impedito
beh, potremmo averlo impedito
abbattere il resto del sistema così
una delle cose che stava succedendo qui
useremo una discussione da a
pool di connessioni in primo piano o da a
thread pool in anticipo che stava ricevendo
le richieste in arrivo che thread avrebbe
quindi essere lo stesso che è andato e fatto
la query del database e non c’era
meccanismo per un altro timeout
applicato tutto era sincrono e
sullo stesso thread abbiamo introdotto
un po ‘di asincronia, forse potremmo
hanno disaccoppiato il pool di thread front-end
dal pool di thread interno che era
emettendo effettivamente le query del database
questo è il tipo di tecnica che fai
assicurati di poter rimanere disponibile anche
di fronte a fallimenti parziali okay
stiamo per lasciare il database dietro
ora e parliamo solo di altri problemi
con i punti di integrazione una cosa che io
vedere molto è che ci testiamo e noi
progettazione per guasti che sono definiti
all’interno delle specifiche del
protocolli che stiamo usando in modo da sapere quando
abbiamo a che fare con la connessione TCP
rifiutato è un tipo perfettamente legittimo
di risposta a una richiesta di connessione TCP
accettando la connessione in un ascolto
fare la fila ma poi non completarlo e
lasciandolo in uno stato semi-aperto che è
non è davvero una parte accettabile del
protocollo ma succede quando siamo
parlare di HTTP per ottenere una risposta
codice 500 perfettamente ragionevole lo sappiamo
come affrontarlo se pensi
stai parlando di HTTP e invece il
risposte del server
con smtp avrai molto
problema più grande giusto non sei in realtà
parlando del protocollo che hai pensato
stavano parlando così nessuno dei tuoi parsing
Funzionerà Mi piace fare cose come
testare i servizi inviando un infinito
flusso di tag elemento aperto quando loro
Penso che stiano parlando XML spegne
quasi ogni parser XML sulla terra loro
semplicemente non può non in grado di gestire e
alla fine consumare tutta la memoria e buttare
conosci errori di memoria o solo
interrompere un processo questi fuori specifica
i fallimenti sono il tipo di cose che chiamo
errori malvagi che accadono in
produzione non accadrà mai in QA
a meno che non li costringi a volte
anche cercare di forzarli in QA sembra un
un po ‘folle sai che sto progettando
un punto di integrazione che dovrebbe
parlare JSON su HTTP perché dovrei inviare
torna in streaming file binari mp3 bene
solo per vedere se il server può gestirlo
perché da qualche parte un giorno dentro
produzione qualcuno ti manderà un
forse un flusso senza fine di dati binari
lo fanno casualmente forse lo sono
facendolo deliberatamente per cercare di uccidere
il tuo sistema con un altro problema
punti di integrazione è che il debugging
i problemi con loro spesso richiedono
staccando uno o più strati di
astrazione quindi pensa al database
problema che stavo parlando in
per osservare che dovevamo ottenere tutto
la strada verso il basso per fare tracce di pacchetti
il filo per vedere un elevato numero di TCP
ritrasmette bene nel codice dell’applicazione
avevamo a che fare con un sequel di Java a
sequel oggetto di connessione che l’oggetto è
un’astrazione su alcuni byte in memoria
a destra l’oggetto ci dice come
interpretare i byte in memoria uno dei
le sezioni di byte dovrebbero essere a
puntatore a un socket andiamo a vedere
la presa è fondamentalmente un altro pezzo
della memoria uno degli elementi è un file
gestire che è un indice in una tabella in
il kernel che la tabella ha solo un mucchio
di numeri che dicono che lo sai
porta di indirizzo di destinazione e sequenza
il numero rappresenta una connessione, quindi siamo
perforazione attraverso molti strati di
astrazione per arrivare finalmente a quello che è
accadendo a un livello dove possiamo
diagnosticarlo
più grande è il tuo sistema più veloce
questi problemi si propagheranno quindi tendiamo
pensare che scalare qualcosa acquista
noi più tempo o ci dà più capacità di
sopravvivere ma in realtà di solito solo
significa che c’è più traffico e te
amplificare questi errori ancora più velocemente lì
ci sono alcuni modelli che possiamo utilizzare per
aiutaci con questi punti di integrazione
Ho intenzione di parlare di alcuni di questi a
poco dopo sono testate le imbracature
non qualcosa che ho intenzione di parlare
circa oggi ma è un modo che puoi
prova per queste condizioni prima di te
raggiungere la produzione fondamentalmente facendo del male
cose al tuo sistema prima di qualcuno
altro
una volta che si è verificato un errore in un nodo
sei in realtà più probabilità di ottenere
fallimenti in altri nodi quindi è allettante
a guardare una orizzontale in scala una fattoria
di server o macchine o container o
qualunque cosa e statisticamente trattarli come
identici dispositivi indipendenti che sono
non sono altamente correlati in un modo
che sono correlati è attraverso il tuo
software così il software che hai messo
questi dispositivi è sempre una modalità comune
tra questi in questo caso supponiamo di averlo
qualcosa che va giù a causa di un carico
condizione correlata forse è un ricordo
perdita forse è una condizione di gara in cui
maggiore è il carico che hai, più è probabile
devi osservare le condizioni della gara
ma in ogni caso abbiamo uno dei
i nodi S 4 qui scendono a causa di
carica bene il carico poi ottiene
ridistribuito sugli altri nodi no
solo lo sono altrettanto bene se lo fossero
non correlati ci aspetteremmo che fossero
ugualmente probabile fallire come l’originale
uno ma in realtà stiamo distribuendo di più
caricare su di loro in modo che il loro fallimento dato il
il fallimento di quello originale è più
probabilmente puoi guardare questo tipo di
scoppiettando come una fila di flash su un
fotocamera e vedrai che ognuno fallisce
più veloce di quello precedente
questo è qualcosa che è molto comune
quando hai perdite di memoria perché
le cose tendono a riavviarsi tutto intorno
nello stesso momento in cui distribuisci una versione
e quindi stanno tutti perdendo memoria
all’incirca lo stesso tasso solo uno di loro
suggerimenti su prima e poi sul traffico
gli altri li fanno andare più veloci e
più veloce quindi se hai una vasta gamma di
server non è come il segno illuminato
di fronte a un casinò dove una lampadina
non è un grosso problema e tu aspetti fino a quando
Il 10% di loro sono giù per ripararlo quando
uno va giù è necessario scoprire perché
e risolvere il più rapidamente possibile questo
capita spesso con perdite di risorse e
pool di connessioni e separa il tuo
capacità in diverse paratie com’è
uno dei modi in cui sconfiggi questo
una volta che hai una reazione a catena
in uno strato devi essere preoccupato
su cosa succede con gli altri livelli
chiama in quello così è
qualcosa che penso come il micro
modalità di errore del sistema di servizio perché noi
spesso hanno questa profonda pila di livelli di
servizi di chiamata di altri servizi che
chiamare altri servizi quando uno di quelli
va giù il tuo sistema può amplificare
il fallimento e consentire il danno a
salta il divario o può smorzare il
fallimento purtroppo la maggior parte dei modi in cui noi
scrivere le chiamate tra i sistemi sono
sincrono richiede chiamate di risposta con
nessun timeout e che amplifica il
fallimento quindi abbiamo davvero bisogno di mantenere un
mentalità di contenere danni e
impedendogli di saltare il gap uno
dei posti che vedi questo è molto
intorno a cose come pool di connessioni o
pool di thread per effettuare chiamate una volta
quelli si esauriscono inizierai
consumando i thread nel tuo layer e
poi smetterai di rispondere al tuo chiamante
i timeout e gli interruttori automatici sono
efficace contro questo il prossimo anti
lo schema che voglio condividere con voi è
qualcosa che il mio amico Paul Lord
descritto come un buon marketing può uccidere
il tuo sistema in qualsiasi
tempo infatti migliore è il tuo marketing
è la più probabile che tu debba soffrire
da questo si tratta di un attacco di sé
rifiuto perché lo stai facendo
voi stessi rivenditori di modelli molto comuni
ho dimostrato questo per noi molti
volte ricordo quando era la Xbox 360
nuovissima Amazon ha inviato un sondaggio a
tutti i clienti di Amazon Prime chiedono
quale di queste tre cose faresti
più come uno sconto durante
Ringraziamento ti piacerebbe uno sconto
su una Xbox 360
ti piacerebbe una Xbox su uno sgabello da giardino
che puoi mettere il tuo giardinaggio
implementa o ti piacerebbe un
sconto su una bicicletta bene, naturalmente il
il voto è stato del 98 percento per Xbox
e così hanno offerto un forte sconto su
la Xbox 360 in un giorno particolare a
particolare tempo con il fuso orario
specificato così si sono assicurati che tutti fossero
si presenterà esattamente allo stesso minuto
dello stesso giorno e Amazon ha preso
se stessi per 20 minuti e quando
tu pensi al tipo di capacità
loro sanno che tu sei
vulnerabile a questo ci sono cose voi
può fare per difendersi da questa marca
certo le offerte di marketing non vengono inviate
collegamenti profondi Ho avuto un cliente in cui il
il marketer stava solo navigando da solo
il desktop ha scelto un collegamento incluso
una macchina specifica a cui erano legati
ad esso bypassato il CDN perché dentro
le mura della società non volevano andare
completamente fuori attraverso il CDN e
incorrere in tali costi e ha avuto una sessione
L’ID in esso conteneva il link che è stato inserito
nell’e – mail che è stata distribuita a
tutti ci sono cose che puoi fare
rendere statico il servizio del semaforo
le pagine di destinazione sono un ottimo approccio per te
può anche mettere una pagina di destinazione statica fuori
al tuo CDN e permetti solo il secondo
clicca per raggiungere i tuoi server attuali e
ci sono cose come strozzatura e
pagine leggere che puoi fare
la cattura è che funziona solo se lo sai
che il traffico sta arrivando e in molti
società di marketing
ottenuto il no da così spesso che
non parlano nemmeno più così uno
cosa che puoi fare è provare e ristabilire
linee di comunicazione parlando con
il vostro reparto marketing e dicendo hey
posso vedere prima il calendario di marketing
di tutto sarà divertente vederli svenire
perché qualcuno dall’IT è in realtà
interessati al marketing quando ottengono
torneranno dal pavimento saranno felici
condividi il calendario di marketing perché
queste cose non accadono
sono immediatamente pianificati
anticipo e se non si supporta il tuo
i marketer lavoreranno intorno a te e
passeranno attraverso servizi di terze parti
e fare cose che potrebbero mettere a repentaglio la tua
sistemi ancora peggiori rispetto all’originale
offrire che stavano contemplando così
passare a un altro grosso problema è ridimensionare
effetti quindi tendiamo a costruire cose che
sono come 1 a 1 a 1 sai che ho
il mio servizio e ho una cosa che sono
chiamando e ho un database e
sono tutti quanti più o meno lo stesso
un’istanza di tutto ciò che è in esecuzione sul mio
scatola e poi si arriva alla produzione e
sei come se il mio servizio ne avesse cinque
istanze e viene chiamato da
qualcosa con 4000 istanze
rapporto è un po ‘diverso il
i modelli di traffico sono un po ‘
diverso e può causare un grosso problema
per i vostri servizi, per esempio uno dei
modelli di comunicazione che mai
appartiene alla produzione è point-to-point
messaggistica quindi era un particolare
piattaforma in cui avevano uno strato di cache
come parte della loro astrazione del database
strumento e se hai scritto al
database a cui il tuo nodo avrebbe comunicato
tutti gli altri nodi per battere quell’oggetto
fuori dalla cache bene quando sei in dev
è solo una chiamata locale che non è nemmeno andata
fuori attraverso una rete in QA era ordinata
di notabile perché ce n’era uno
chiamata locale e una connessione a T in
la produzione è un po ‘ come N
funzione quadrata proprio così in produzione
avevamo circa cento nodi ciascuno
aprirebbe 99 connessioni invia uno
pacchetto a ciascuno e poi chiudere 99
connessioni quasi tutta la nostra rete
la larghezza di banda era solo questa cache
invalidazione
nota perché era point-to-point no
ragione per nulla che avrebbe dovuto essere
trasmesso quindi fai attenzione a questo tipo di
la comunicazione modella un altro posto
dove vediamo davvero gli effetti di ridimensionamento
kicking in è con risorse condivise così
qualsiasi cosa come un gestore di cluster un blocco
componenti di rete manager come
firewall API gateway Elettrodomestici ESB
questo tipo di cose sono tutte a
posto dove hai un fan in alcuni
cosa ridimensionata orizzontalmente ad alcuni
cosa in scala verticale puoi sempre
vincere a scala orizzontale sopra il
quantità di ridimensionamento verticale che puoi fare
ora questo non è il tipo di cosa che
puoi testare molto dall’esistenza
facilmente perché non costruiamo QA
ambienti fino alle stesse dimensioni di noi
fare la produzione non è economicamente
percorribile quindi questo è un posto dove tu hai
per applicare un po ‘di ingegneria sai scrivania
controllare i rapporti tra le cose che
hai a che fare con tutto il diverso
strati del tuo sistema fai attenzione al
cose che sono invisibili nel tuo
diagramma tipico così normalmente quando tu
disegnare un diagramma di architettura dell’applicazione
non si descrivono i componenti di rete
fanno parte del substrato ma il
i componenti di rete sono una canalizzazione
il traffico passa anche dopo che l’hai fatto
fatto quel banco di controllo in cui potresti incorrere
questo tipo di problema in cui ti trovi
diverse dimensioni a diversi strati di
il tuo sistema e tu hai quello
deliberatamente perché la maggior parte del tempo
la maggior parte del traffico da qualcosa di simile
il tuo negozio online non va a
gestione degli ordini e quindi è sorta di
va bene che il negozio online ha sei volte
come molti thread disponibili per effettuare chiamate
come il livello intermedio deve rispondere a
loro ma se i modelli di traffico cambiano
non sei veramente stabile, sei solo
sorta di stabile per convenzione e sotto
schemi normali così a questo particolare
rivenditore c’era una grande offerta durante
Week-end del Ringraziamento che offre casa libera
consegna e installazione di
TV a grande schermo appena in tempo per il picco
della stagione calcistica e che ha causato un grande
cambiare i modelli di traffico delle persone
improvvisamente molte più persone stavano guardando
date di consegna e disponibilità per
installazione domestica e quindi molto più grande
frazione di quei thread del negozio online
stavano facendo chiamate alla gestione degli ordini
e stava facendo più chiamate a
pianificazione del normale
bene che ha causato tutto da accumulare
così il sistema di programmazione si fermò
rispondendo al sistema di gestione degli ordini
è diventato lento non è in grado di elaborare qualsiasi
ordini perché tutti i suoi fili erano
occupato cercando di cercare date di consegna
e abbiamo dovuto sederci lì online
memorizzare accendere e spegnere tutte le funzionalità
fine settimana per provare e sai eke fuori
un po ‘più entrate e girarla
fuori quando le cose stavano diventando traballanti così
è un tipo di effetto di scala che è molto
comune in una grande impresa perché tu
tu tendi a costruire ognuna di queste cose
isolatamente in gruppi diversi possiamo
fai un po ‘di controllo sulla scrivania e guarda se
è un potenziale problema quando è a
potenziale problema la tua migliore scommessa è quella di
sottolinea così entrambi i lati dell’interfaccia
sganciare il collare estremità anteriore e mettere in un
generatore di carico che chiama il back-end
con molto più carico rispetto al suo inteso
prendere e vedere cosa succede semplicemente
crollare o dà errori veloci
diventa lento forse è buono e si perde
carica e dice al front end che non posso fare
questo adesso chiedere di nuovo in seguito fare lo
stessa cosa con il front-end e vedere
cosa succede quando le chiamate sta facendo
viene rallentato o smesso di rispondere al tuo
il front end dovrebbe essere sicuro contro questo
tipo di cosa, ma è necessario testare per
e osserva cosa succede veramente ora
Sottolineo le risposte lente perché
questo è un altro anti-modello che vorrei
molto piuttosto hanno un veloce no o a
connessione rifiutata allora qualcuno dice di sì
Posso provare a farlo e poi trascinare
fuori e trascinarlo fuori e trascinarlo fuori
oh, dovrei parlare di
sistemi non collaboratori con sistemi che vorrei
piuttosto avere un digiuno
sei veloce no di una risposta lenta o a
fallimento lento, quindi guardi qualcosa
come una connessione TCP rifiutata e basta
come un’operazione di un microsecondo tu
guarda qualcosa come permettere un
connessione in una coda di ascolto e poi
semplicemente non andare in giro ad esso fino a quando non
timeout e questo è come un secondo
a un minuto di operazione quindi non leghiamo
le risorse sul front-end
perché più a lungo ci sono le risposte
un fornitore di servizi maggiore è il chiamante
ha bisogno di scalare per gestire la stessa quantità
del traffico quindi è in realtà come un guadagno
manopola sul nostro ridimensionamento del lato chiamante
e molto spesso la risposta lenta termina in a
fallimento o un timeout e il lavoro è stato
sprecato comunque, questo può insinuarsi molto
di posti in eccesso è il massimo
ovvio uno e il più comune ma
possiamo anche trovare cose come la rete
essendo troppo occupato quindi sono stato in società
quando avevano a che fare con un verme
scatenando la loro rete e
improvvisamente conosci le loro reti come
Saturazione dell’80% per tutto il tempo e back-end
le chiamate ottengono componenti molto lenti come
i firewall possono sovraccaricarsi , sai
la prima volta che ho avuto un amministratore di rete
dimmi che la CPU dei firewall era a
cento per cento è stata una rivelazione
come oh sì hanno CPU che possono essere
sovraccaricato su alcuni protocolli tu davvero
deve essere dove NFS ha tentativi
DNS integrato ha tentativi di integrazione
infatti alcune versioni precedenti di NFS avevano
tentativi fatti nel kernel che erano
non interrompibile il tuo telecomando
i protocolli potrebbero essere un problema anche se tu
fai cose come una N più una query
modello che chiedi per l’estensione di
tutti i risultati e poi chiedi
ogni risultato una risposta lenta alla volta
sono uno dei modi in cui il danno salta
il divario e provoca quelle a cascata
fallimenti fanno provocare la gente in
ricarica rapida al livello dell’utente finale
e provocano sistemi di chiamata in
riprovare le loro chiamate, quindi vogliamo guardare
fuori per quello l’ anti-modello finale i
voglio parlare di risultato illimitato
imposta così quando fai una query non lo fai
spesso anche tu
da quanti risultati voglio se lo sei
è attraverso qualcosa come un ORM
sicuramente non il comportamento predefinito e
se stai attraversando un ORM e
in realtà attraversando una relazione da
un record genitore su un tipo di record figlio
è molto difficile dire no, io davvero
voglio solo il primo milione di quelli
le cose non mi mandano tutti i 12 milioni
sequel query è possibile aggiungere limiti al
clausole ma sai che devi pensare
su di esso e la sintassi è un po ‘
diverso per ogni sapore del sequel I
spesso vedere questo con il servizio
architetture così avrai di nuovo questo
n più 1 modello dove chiedi
l’estensione e poi chiedi a ciascuno
oggetto in modo da assicurarti che tu
prova con volumi di dati reali e reali
relazioni e distribuzioni reali così
sai se stai costruendo un social
rete assicurati di provare con a
legge di potenza per il numero di connessioni
che ogni persona non ha un gaussiano tutto
giusto perché li troverai quelli
persone buco nero che hanno 50.000
connessioni invece della mediana di uno
collegamento va bene così che era gentile del
cattiva sezione news voglio parlare
la buona notizia si conosce uno dei
i modelli che è possibile utilizzare sono i timeout
quindi un sacco di anti modelli io
descritti sono solo errori da applicare
time out e la disponibilità a
bloccare cose infinitamente come la connessione
piscine quasi sempre hanno una versione di
controlla che blocchi per sempre e uno
versione che ha un timeout che auguro alle persone
sarebbe solo sbarazzarsi della versione che
blocca per sempre e fornisce solo il
versione che prende un timeout quando tu
applica i timeout devi decidere cosa
lo farai se si verifica il timeout
così ritento il lavoro lo accodo
per chiamarlo più tardi
come farò a gestire quello che faccio solo
riporta un errore all’utente di un’altra area
quello di cui sono veramente diffidente è binario
i jar del cliente o la dll del client sono quel tipo di
cosa
perché sono scritti da programmatori
proprio come noi non ne hanno abbastanza
tempo non riescono a fare abbastanza test
forse non sanno di questi tipi
di problemi la differenza principale sei tu
non posso vederlo e così quando c’è
qualcosa di problematico dentro quel codice
è molto più difficile da raggiungere
quindi i timeout sono piuttosto utili contro a
molti di questi circuiti anti-pattern
gli interruttori sono il tipo del modello
questo è diventato il più popolare e
colto di più il ronzio credo che l’idea sia
non dovremmo fare retry loop come
questo dove tu provi un’operazione
fallisce e tu fondamentalmente immediatamente
tentare di nuovo ci vuole quello che 1
nanosecondo per arrivare dal basso di
che mentre loop torna in cima a cosa
il tipo di problema scompare dopo 1
nanosecondo ciò che rende questo più probabile
riuscire sul terzo tentativo o il
quinto tentativo invece del primo e
se il terzo tentativo è più probabile
non dovrei impostare i miei tentativi su qualcosa
come un migliaio di pozzo, non voglio
non voglio fare i tentativi a tutti i
i problemi sono molto probabilmente ancora presenti
presente 1 nanosecondo dopo l’unico tipo
del problema che scompare è così veloce
qualcosa come un pacchetto scartato che
il tuo protocollo di livello inferiore si prende cura di
comunque, i tentativi fanno in modo che gli utenti attacchino
su chiamare risorse sul sistema loro
molto spesso finiscono per fallire comunque
stai solo ritardando la risposta e
provocando una risposta lenta quindi l’idea
con un interruttore automatico lo avvolgiamo
intorno a qualsiasi tipo di chiamata pericolosa e
mi hai già sentito parlare di cosa
chiamate pericolose significa che contiamo i fallimenti
nel fare quella chiamata e quando ci sono
troppi fallimenti che abbiamo praticamente tagliato
fuori dall’interfaccia e dì che lo faremo
restituire un errore immediato o un
ripiego immediato piuttosto che fare
la chiamata fino in fondo dopo alcuni
il periodo di tempo è trascorso e e
di solito questo è un periodo di scala umana di
tempo sono disposto a provare di nuovo a fare
la chiamata se la chiamata funziona quindi alla grande
Sono tornato al normale funzionamento e posso
reintegrare la funzionalità in pieno
operazione se non lo fa
lavoro allora qualcosa è ancora sbagliato e io
torna allo stato in cui non tengo
provare una delle cose belle di
utilizzando l’interruttore automatico non è così
richiede ogni thread e ogni richiesta
per scoprire di nuovo che la cosa è
cercando di parlare è rotto sai se
hai un timeout un millisecondo fa
perché emetteresti un’altra chiamata quando
pensi di dare un altro
timeout ci sono un sacco di open-source
librerie che implementano il circuito
interruttori Vi consiglio caldamente di raccolta
uno di quelli invece di fare il tuo
proprio lavoro perché stai condividendo
informazioni attraverso i thread che è difficile
attività che non consiglio di condividere
interruttore di circuito Stato attraverso tutti i tuoi
chiamare i servizi e questo è fondamentalmente
solo un compromesso tra dire di sì di più
dei miei nodi devono indipendentemente
scoprire il fallimento contro il rischio di
nuove modalità di fallimento dalla condivisione dello stato
attraverso il server di cui hai assolutamente bisogno
parlare di cosa fare quando il
l’interruttore di circuito è stato spuntato
qual è la tua strategia di fallback puoi
usa i dati della cache hai bisogno di cue il
lavoro per ritentare dopo c’è a
servizio secondario puoi provare questi sono
tutti gli approcci legittimi sono entrambi a
tecnico e un processo aziendale
discussione per aver esposto lo stato di
interruttori di circuito attraverso il vostro sistema
è un ottimo modo per guardare un po ‘
salute generale se ho 20 nodi e
stanno tutti mostrando il rosso sullo stesso
interruttore allora sono abbastanza sicuro del
il problema è con il provider se ho
20 nodi e due di loro stanno mostrando rosso
allora è probabile che il problema sia attivo
il lato chiamante o c’è un
problema intermittente nella rete in
tra loro così il prossimo schema mi piace
applicare è qualcosa che chiamo paratie e
la metafora qui proviene dalle navi
non importava del Titanic, erano solo
implementato sbagliato lì era il design
bene è stata cattiva attuazione l’idea
è che abbiamo suddiviso in compartimenti il sistema
in modo che alcune parti del sistema possano andare
giù e altre parti sopravvivono
quando creiamo più pool di thread
all’interno di un’applicazione ne stiamo creando due
scomparti o compartimenti multipli
con le paratie tra di loro processo
vincolante per le CPU
ancora compartimenti con paratie uno
approccio che mi piace particolarmente
specialmente in una sorta di SAS è dell’arena
diversi pool di server per diversi
i clienti prioritari quindi se sei su un
modello freemium sai che dovresti
sicuramente pensare di allocare alcuni
piscine ai tuoi clienti premium e avere
tutti i tuoi clienti gratuiti si uniscono a
riunirsi in classe di manovra
le paratie hanno davvero aiutato con questo tipo
della dipendenza dalla modalità comune foo e bar
qui ognuno può danneggiare l’altro in a
rifiuto del servizio da parte di Baz eccessivamente oneroso
se puoi separarli in diversi
piscine con clienti dedicati quindi
nessuno può danneggiare l’altro ora
che cosa ne pensi di fare le paratie?
hai davvero bisogno di scegliere un livello utile
di granularità per applicarlo a questo
non è utile farlo a tutti i livelli
quindi non hai bisogno di fare pool di thread e
processo di binding e server binding e
contenitori e così via bene che sto per
salta avanti un po ‘ il prossimo
modello molto importante è fallire velocemente
è spesso possibile scoprire se
un’operazione avrà successo prima
ci arrivi fino in fondo
quindi ci sono cose come l’ acquisizione
risorse critiche e controllo
parametri e controllo sul tuo interno
affermare che questi sono tutti modi di rilevare
se sarai in grado di farlo
completa una richiesta prima di aver speso a
molto tempo per farlo è utile farlo
questo genere di cose in modo da smorzare
fallimenti quindi se puoi applicare fallire velocemente
e fallo guardando allo stato di
i tuoi interruttori di circuito quindi puoi dire
conosci danni a quest’altra parte di
il sistema normalmente stressare
l’intero entra
ma in realtà mi comporterò come uno shock
assorbire e non trasmettere quel danno
risorse di controllo verso l’alto e
punti di integrazione tramite interruttori automatici
è uno dei modi migliori per farlo
la convalida dell’input è un altro ottimo modo per
farlo abbiamo spesso può applicare più la convalida
di quanto tu possa pensare a volte sembra
un po ‘come rompere l’incapsulamento
ma potrei anche dimostrare che è così
è possibile farlo fornendo un
API più ricca sugli oggetti del dominio
modello di stabilità finale voglio parlare
sta usando il middleware di disaccoppiamento e
fondamentalmente si tratta di andare asincroni
se guardiamo a questo spettro di accoppiamento
penso che David Gardner sia nato
ci sono molte posizioni lungo questo
spettro che possiamo esplorare quando siamo
non facciamo le chiamate al metodo di processo
preoccuparsi troppo del differenziale
disponibilità se la biblioteca è lì il
il chiamante è lì perché stai correndo
nello stesso processo continuiamo a reinventare
chiamate di procedura remota sotto differenti
nomi circa una volta ogni dieci anni ne riceviamo uno nuovo
acronimo per chiamate di procedura remota ma
c’è molto valore da avere dentro
spostando ulteriormente a destra su questo
spettro quando facciamo messaggi per
esempio abbiamo la capacità per il
fornitore di essere offline mentre il chiamante
funziona ancora o viceversa abbiamo
avere la capacità di assorbire un picco
caricare e diffondere nel tempo perché
abbiamo dei messaggi in coda che noi
può digerire al rendimento della schiena
fine e quindi quelle capacità sbilanciate
e gli effetti di ridimensionamento sono molto più facili
avere a che fare con
ora purtroppo cambia il middleware
spesso richiede una riscrittura, non è un
semplice tipo di drop in cosa commutazione
da te si conoscono le richieste di HTTP JSON
Messaggi Avro su un bus caf-co sì
questo è un grande cambiamento e
a volte quelle decisioni sono prese a
livello in cui non ci arriviamo davvero
Contattiamoli ma dirò di più
questi diversi stili architettonici voi
può
avere la tua cassetta degli attrezzi e più tardi tu
può prendere le decisioni, meglio è
possibilità che avrai di creare un
sistema con molta stabilità quindi noi
dobbiamo accettare che i problemi stiano andando
per accadere i difetti saranno
iniziato avremo bug che siamo
avranno problemi latenti il ​​grosso problema
o la grande domanda è che amplifichiamo
quelli in tutta la nostra impresa o facciamo noi
trovare modi per smorzarli o annullarli e
Considero questo molto come recitare
in metallo quindi quando il metallo è fatica a
crack inizia da qualche parte e poi
forse la struttura del metallo è tale
che il crack viene fermato a
confine cristallino e niente di male
succede se questo non si verifica il crack
accelera a velocità supersonica attraverso
il metallo e tu hai una catastrofica
fallimento del metallo qualcosa come un
aereo fusoliera strappo aperto non lo facciamo
voglio che la fusoliera del nostro aereo si stacchi
vogliamo qualcosa di più simile a questo dove
abbiamo cracker che abbiamo
modi di smorzare il fallimento e
impedendogli di propagarsi e
accelerare il sistema è ancora danneggiato
non possiamo impedirlo completamente, spero
Ti ho convinto di questo con il
5 am problema con il database ma a
almeno possiamo preservare alcune funzionalità per
alcuni utenti e possiamo prevenirli
fallimenti catastrofici e con ciò io
grazie per la vostra attenzione e io
credo che abbiamo tempo per alcune domande
grazie Michele
Sono molto interessante che effettivamente abbiamo
domanda qui ti faccio vedere prima e
allora abbiamo tempo per altri ancora
quali sono i tuoi pensieri su strumenti come
scimmia del caos Sono un grande fan del caos
scimmia e l’intero esercito di scimmie che voglio
vederli andare in un tour mondiale, penso
quegli strumenti sono fantastici per
esattamente la ragione per cui ho detto che è
difficile testare questi problemi in QA
hai bisogno di una vera produzione
ambienti topologie reali in scala reale
e adoro l’ idea di forzarti
essere anti-fragile creando problemi
quando non ce n’è abbastanza lo paragono a
la teoria che i disordini autoimmuni
sono in aumento perché le nostre difese immunitarie
i sistemi non sono abbastanza sfidati e così
lo sai che sono gli immunologi
raccomandando che usciamo e mangiamo terra
per ottenere più sfide alle nostre difese immunitarie
sistema la scimmia del caos è un po ‘come
mangiare lo sporco bene, in realtà lo abbiamo fatto
un’altra domanda ne abbiamo un’altra
domanda qui come può ma durante
aiuto o dolore alla progettazione del sistema di monitoraggio
fallimenti a cascata è fantastico
domanda
sfortunatamente c’è c’è un grande
problema con molti sistemi di monitoraggio
in quanto riportano solo quando cose
succede che non riportano quando cose
non succede e quindi questo è uno di quelli
luoghi dove l’assenza di un segnale viene
le informazioni che vuoi quindi guarderei
per il monitoraggio di sistemi che sanno come
raccogli i battiti del cuore e non appena tu
smettere di vedere battiti del cuore che è un grande
problema ok abbiamo ce l’abbiamo ancora
tempo per possibilmente un’altra domanda se
qualcuno non ha messo uno in e quali come
per far salire chiunque altro, torna indietro
qui va bene quindi cosa ne faremo ancora uno qui
vai, prendi il microfono così che vogliamo
per assicurarsi che tutti lo sentano
quando uscirà la seconda edizione no
commento
oh questa è stata una risposta rapida a chiunque altro
voglio gettare un’estremità prima di romperci
per pranzo o tutti pronti per il pranzo
ok ascolta, sono pronto

Please follow and like us: