Press "Enter" to skip to content

GOTO 2016 • Microservices in Go • Matt Heath


intro così veloce sono a te puoi trovarmi
qui su Twitter, quindi se avete qualsiasi
altre domande non esitate a fare ping
ping me e io sono fondamentalmente lavoro come un
ingegnere di back-end ho lavorato
in particolare con andare per circa tre
quattro anni ora e al momento sono io
lavorare con una società chiamata Mons oh so
Mons oh sono un nuovo antipasto formiamo il
società febbraio dell’anno scorso e sostanzialmente
stiamo cercando di costruire un nuovo tipo di banca
e questo è un po ‘un po’
cosa interessante da fare bancari per me
è un po ‘come questo non so se
chiunque altro ha questo tipo di esperienza
se mai andrai in una filiale bancaria che è
super datato e certamente nel Regno Unito
l’attività bancaria è terribile come un cellulare
l’esperienza è come arrivare l’ultimo
un paio d’anni ma non puoi proprio farlo
dalle cose che ti aspetteresti di fare
qualsiasi altro tipo di prodotto Internet e
puoi prenotare un taxi e arriverà
in due minuti puoi prenotare cibo e
arriva tra mezz’ora ma io ancora
non mi piace pagare qualcuno che non ho mai pagato
prima attraverso una delle mia bancaria applicazioni che
è necessario accedere al proprio set di siti Web
loro come una nuova persona e poi posso
in qualche modo farlo ed è solo un terribile
esperienza del cliente e molto del
la ragione per questo è perché al loro centro
le banche hanno una tecnologia abbastanza datata e
questo ad esempio è il divertimento del sistema / 360
Infatti se hai scritto COBOL o altre cose
che girano su questo è ancora possibile eseguire tale
sull’attuale IBM ha detto che i mainframe della serie sono così
è fantastico come si può eseguire il codice da
50 anni fa ma non è proprio l’ideale
se stai cercando di creare nuovi prodotti
si dispone di questi estremamente grande
sistemi monolitici al centro del tuo
banca e molte banche usano estremamente
le tecnologie moderne come una sorta di impiallacciatura
intorno a queste cose ma non possono
cambia il core e come esempio
Barclays nel Regno Unito ha speso tre miliardi
sterline sull’infrastruttura IT nel 2014
chi qui ha tre miliardi di sterline
spendere su di esso
chiunque ha messo un ragazzo freddo così semplicemente
pensa a cosa potresti costruire con tre
miliardi di sterline come probabilmente qualcosa a
molto meglio del corrente bancario
esperienza e non ne abbiamo tre
miliardi di sterline non non da molto tempo e
in pratica stiamo cercando di costruire
qualcosa che le persone normali userebbero
persone che trascorrono tutto il loro tempo a loro
smartphone e si aspettano molto velocemente
interazioni per risolvere le loro finanze
si aspettano che le cose siano automatizzate e
preso cura di tipo automaticamente così noi
iniziato l’anno scorso diamo un super divertimento
Hot carte prepagate corallo e abbiamo
fondamentalmente sta attraversando il processo
diventare una banca pienamente regolamentata e
questo è successo un paio di mesi
fa così queste auto si convertiranno in
conti correnti normali probabilmente presto
l’anno prossimo
e questi sono collegati a un’app
che è mobile per prima cosa lo diamo
tu spendi analisi ti diciamo come
tanto spendi per esempio che ho pagato
James mi ha mandato dei soldi qui e
in realtà mostra il suo profilo davvero basico
cose come icone di dove ho fatto acquisti e
questo non è qualcosa che nessuno
la banca attuale non sa perché
loro non sono in grado di farlo e loro sono un po ‘
costretto dalla loro tecnologia e da tutti
specie di altre cose divertenti che puoi fare
cercando in cui puoi effettivamente cercare
emoji quindi guardiamo il caffè è a
caratteristica molto importante che possiamo allegare
le ricevute allego le foto del mio brunch
e altre cose come accendere la tua carta
e via con un solo tocco, quindi se perdi
puoi sapere come disabilitarlo
è perso e quindi puoi riattivarlo
magia e voglio dire che questo è ovviamente come
una bandiera boon nel nostro database ma
tecnicamente un enum, ma intendo
è solo qualcosa che non puoi fare
qualsiasi altra banca quindi se stiamo iniziando da
zero ne avremmo ovviamente alcuni
forma di applicazione e tutto bene il
iniziando siamo start-up quindi dovremmo
iniziare davvero molto semplice e
inevitabilmente avremo qualche tipo di
applicazioni e database e nel tempo
questo sta per diventare progressivamente
più grande e nel nostro caso noi
bisogno di lavorare con un sacco di distribuito
squadre perché dobbiamo integrare con
un sacco di diversi sistemi non appena noi
espandere a livello internazionale dobbiamo
integrare con molti sistemi di pagamento
e queste cose diventano davvero complicate
per esempio dobbiamo avere reale
fibra fisica consegnata al fisico
data center che è un po ‘un po’
Strano, ho pensato che avresti potuto mettere tutto
di quella roba in Amazon in questi giorni ma
non è una cosa
così alla fine queste cose sono diventate
abbastanza complicato e noi potenzialmente
bisogno di più database la nostra applicazione è
molto grandi forse abbiamo avuto alcune ricerche
e memorizzando nella cache varie altre funzionalità
sono essenziali per una banca e inevitabilmente
e intendo la ragione per cui siamo un po ‘
tutto in questa stanza è che queste cose
come se tu avessi problemi con loro e
in realtà sei nascosto abbastanza velocemente e
Ho lavorato molto in grande
progetti in cui abbiamo solo un grande
applicazione ovviamente dobbiamo spedire
che abbiamo cicli di rilascio e tu solo
non si può fare nulla e così questo è una specie di
come la mia impressione su questo così giusto da
All’inizio abbiamo abbiamo deciso non abbiamo
voglio fare loro e iniziando da
rompendo la nostra applicazione in
essenzialmente una serie di micro servizi
all’inizio è piuttosto rischioso
prospettiva c’è un numero di cose che
tu non necessariamente capisci e tu
non necessariamente tipo di rompere le cose
sulla strada giusta ma siamo riusciti a
inizia ad isolare quelle cose così noi
iniziato con una serie di micro servizi
abbastanza piccoli questi comunicati via
sia sincrono o asincrono
bus di messaggi e il tipo principale di
i principi dietro questo erano di nuovo come
cose standard che abbiamo sentito
persone come Netflix Amazon Twitter sono
i nostri servizi hanno un singolo
responsabilità fanno un lavoro specifico
molto bene al fine di decidere ciò che
prendiamo la nostra parte per tutto il nostro dominio e
legato il contesto in modo che abbiamo piccolo
pezzi della nostra logica aziendale che noi
può isolare in applicazioni uniche e
quindi facendo ciò possiamo costruire molto
interfacce ben definite
per esempio possiamo dividerci
modello di transazione e la nostra transazione in
il mio conto in banca non dovrebbe realmente bisogno di
conoscere le cose sul commerciante come se io
comprare qualcosa in un negozio ovviamente
ha un logo ma la transazione no
bisogno di conoscere che possiamo mettere in relazione
quelli separatamente e possiamo anche perché
lo stiamo facendo possiamo applicare diversi
vincoli di disponibilità a quelli così nostri
modello transazionale deve essere
estremamente affidabile ma che tipo di like
dati del commerciante se non funziona noi
potrebbe tipo di fornire quattro byte a
i clienti e possiamo tipo di astratto
che via e una volta che noi spezziamo questi a parte
otteniamo quindi una buona composabilità così
possiamo rompere i nostri servizi infrangere il nostro
applicazione a parte in unità riutilizzabili
servizi riutilizzabili e poi effettivamente noi
può costruire prodotti molto più velocemente
perché siamo in grado di riutilizzare alcuni di tale
funzionalità così quando abbiamo iniziato abbiamo avuto
un certo numero di diverse opzioni e uno di
le cose che volevamo a guardare
era il tipo di linguaggio che avremmo fatto
costruisci la maggior parte di queste cose nel nostro caso
abbiamo scelto di andare così ha qualcuno qui usato andare
sì, un sacco di gente fantastica così se
chiunque non abbia usato Go Go ha un super
figa mascotte davvero carina questo è il Go
gopher che fa un’apparizione carina
molto ogni discorso e la cosa che io
mi piace molto di Coe è che come
il linguaggio è estremamente semplice, quindi lì
non sono un milione di modi che puoi fare
le cose e andare lì è un po ‘ come uno
ci sono altri modi, ma lo sono
di solito non è facile ematico e lo sei
quasi combattendo contro il linguaggio per
fare le cose in un modo diverso comunque dentro
Oltre a essere tipizzato staticamente quale
per una banca è abbastanza utile che non lo facciamo
voglio davvero tipo di abbiamo avuto tipo
conversioni e cose ovviamente
arrotondare i soldi è un ego piuttosto pericoloso
ha anche uno standard davvero completo
libreria quindi anche se la lingua stessa
è molto semplice lì viene il linguaggio
con un numero enorme di
che puoi usare e come esempio il
Server HTTP puoi creare un nuovo server
in circa tre righe di codice e al
pensa vai 1.6 o 1.7 che è ora
automaticamente HTTP al server quindi tutto
dovresti fare è prendere il tuo codice noi
compilarlo con l’ultima versione fa
e aggiornerà in modo trasparente il tuo
client a HTTP 2 se lo supportano e
è solo qualcosa in cui è incorporato
la lingua come lo standard
la biblioteca ha tutte queste cose integrate
in cima a quello c’è un numero di
caratteristiche linguistiche davvero interessanti così
quello veramente grande in cui andare è estremamente
concorrenza leggera e con ciò io
significa che puoi letteralmente eseguire qualsiasi numero di
funziona solo in concomitanza con ciascuno
altri quasi troppo facilmente per essere sinceri così
se avessimo una funzione per esempio quale
sta andando a gestire una richiesta questo
funzione call block
quindi li eseguiremo e andremo
tipo di tornare ad un certo punto nel
futuro speriamo di avere alcuni timeout
se gestiamo richieste e lo faremo
Presumo che è trattati, se vogliamo che
per eseguire contemporaneamente dire che siamo in un certo modo
di loop che sta leggendo un socket e
con cui stiamo passando richieste a
qualcos’altro che possiamo letteralmente mettere
andare prima che e che ora che il fuoco
fuori in una routine separata e questi
lunghi fili questi sono estremamente
leggero quasi come fili verdi se
nessuno li usa da molto tempo
fa ma sono estremamente leggeri
modi di gestire la tua Co contemporaneamente e
il motivo per cui sono così leggeri è
quando sei lontano da una nuova routine di go tutti
stai facendo davvero sta assegnando come un
K in pila è davvero come davvero
piccoli e in arrivo sono gli stack
espandi automaticamente in modo da non averne bisogno
per tipo di preoccupazione per quello stock
partirà veramente piccolo è estremamente
leggero e poi come sei tipo
lo stack cresce poi passa o dinamicamente
allocare memoria a questo così in pratica
potenzialmente hai migliaia di decine di
migliaia anche centinaia di migliaia di
questi in esecuzione
e andare ha un ottimo programma di pianificazione
built-in quindi lo scheduler sarà fondamentalmente
eseguire un thread del sistema operativo per chiamata
e poi tutto pianificato dinamicamente in
spazio utente
queste vanno in routine attraverso quei fili
e se bloccano l’ I / O, allora lo faranno
tipo di mettere quello al lato e lo farà
pianificare un altro andare routine in modo che tutto
di loro possono fare progressi se qualcuno
vuole leggere che è piace molto
davvero interessante su probabilmente un po ‘
un po ‘troppo per adesso ma il
cosa veramente interessante è come anche Network
IO non sta bloccando così alcuni dei discorsi
Ho visto prima dove stiamo usando
quadri specifici in odio dicono Java
stanno letteralmente bloccando un thread
mentre una richiesta è passata a un esterno
il server ora è ovviamente carino
design scadente ma in questo caso quello
non succede come facciamo le routine di go
corriamo potenzialmente centinaia di migliaia
di loro e ogni volta che spariamo a
richiesta ad un altro server in realtà
entra in un thread i / o separato e tutto
della rete è a cura di e
sarà solo una sorta di passare di nuovo al
vai di routine non appena ci sono dati da essere
consumato così dato che abbiamo tutto
questi tipi concomitanti di quasi discussioni
correndo come possiamo quindi comunicare
tra di loro quindi se abbiamo bisogno di condividere
memoria se abbiamo bisogno di tipo di condivisione
valori tra queste cose inevitabilmente
dovremo mettere un sacco di
mutex e cose intorno a questi e poi
andare non è il modo in cui lo fai
quindi vai a sostenere la condivisione comunicando
tra processi piuttosto che condivisione
memoria e questo è basato su CSP
se qualcuno ha sentito parlare di questo
processi sequenziali penso da Tony
Hall negli anni ’70 e i canali forniscono a
modo che vanno i messaggi di routine tra
loro e questi possono essere sia sincroni
bloccare le chiamate o asincrono, così possiamo
tamponali e mettili in coda e
questa volta è qualcosa di costruito nella
linguaggio in modo che possiamo letteralmente passare
messaggi tra tutte le nostre routine di go e
questo ci permette di fare cose divertenti come
tipo di divertente
i finanziamenti nei messaggi che possiamo eseguire
pool di lavoratori e tutte queste cose sono
tipo di abilitato e utilizzato nello standard
biblioteca semplicemente riuscendo a correre
routine e avendo canali che
comunicare tra loro
in più, se stai costruendo
servizi e distribuirli andare è
collegato staticamente o affittato è se tu
passare un numero specifico di fatturato
i flag così di default useranno Segoe
che usa parte della libreria go di
alcune delle librerie C disponibili su
la tua macchina ma se disabiliti C vai
puoi compilare staticamente tutto il
codice go nativo e lo farà allora
correre su qualsiasi macchina ovunque su qualsiasi macchina
con la stessa architettura senza nessuno
dipendenze di runtime e questo è davvero
bello se poi vuoi molto facilmente
distribuisci i binari puoi compilare il tuo
tutto va al programma per uno solo
singolo file binario si può mettere che
da qualche parte puoi lasciarlo cadere su a
macchina è possibile eseguirlo e basta
non hai bisogno di un runtime di cui non hai bisogno
per installare un sacco di cose sul tuo
macchina così se sei un po ‘come vuoi
infrastruttura più immutabile di questo
è come un modo davvero bello per farlo
se vuoi iniziare, vai come un tipo
del quadro dei servizi micro ci sono a
un paio di cose che puoi usare per fare
questo così uno dei più grandi è go kit io
non so se qualcuno ha sentito parlare di questo a
un paio di persone così peter borgin che è
il tipo di piombo che l’ occhio onesto sta facendo io
pensa a un workshop più tardi questa settimana, quindi se
ti interessa sicuramente andare d’ accordo
e andare kit fornisce una sorta di quadro
che ti permette di costruire servizi davvero
rapidamente molto semplicemente e puoi collegare
in ogni genere di cose come il servizio
scoperta e tracciamento e tipo di tutto
l’altro tipo di strumenti che cose
hai bisogno di uscire dalla scatola e quelli sono
tipo di tutto configurabile in kit go
ce n’è un’altra chiamata micro che
fondamentalmente è abbastanza simile ma ci vuole
una specie di diverso filosofico
approccio così micro è più di un tipo di
ecosistema e oltre a fornire un
quadro che è possibile utilizzare per costruire
servizi fornisce anche molto altro
strumenti quindi ci sono specifici
servizi di scoperta che è possibile eseguire id
servizi di generazione tutti quei tipi di
cose
quindi se vuoi costruire tutto
quelle cose in un sistema davvero
rapidamente allora il microbo fornisce abbastanza a
alcuni di quelli sfortunatamente nessuno dei due
quelli esistevano quando iniziamo la nostra compagnia
quindi abbiamo un mese chiamato call time
è disponibile il MIT con licenza su github
ed è fondamentalmente un tipo davvero di
quadro davvero molto semplice, quindi tutto
ci permette di costruire un po ‘di
client e server che possono comunicare
a vicenda e quindi possiamo configurare
loro in una sorta di modo standardizzato così dentro
il nostro caso è iniziato con potenzialmente
un certo numero di servizi questi sono
comunicare l’un l’altro e il reale
la domanda è come comunicano così dentro
nostro caso proprio all’inizio abbiamo
aveva bisogno di qualcosa che funzionasse
giù la scatola davvero molto velocemente tra
il modo di tipo di imbroglio è fondamentalmente a
metti un messaggio bus nella posta quindi se tu
usare qualcosa Mi stropiccio un McCue voi
essenzialmente ottenere una coda di richieste e tu
possibile denominare queste code di richieste e quindi
puoi avere n numero di istanze di
quello che puoi per tipo di consumare quello
coda nominata e che ti dà
essenzialmente servizio di scoperta gratuito
perché puoi semplicemente pubblicare un messaggio
a una coda che in realtà non c’è bisogno di
sapere dove si trovano le istanze di un servizio
e sarà consumato ad un certo punto da
una coda che ti dà anche un po ‘
tipo di nuovo barare al bilanciamento del carico
perché il modello qui è un modello di tiro
quindi hai una coda di richieste che sono
eccezionale hai potenzialmente un TTL
su quelli all’interno delle code quindi non lo fai
riempire il buffer e se ne abbiamo uno
istanza particolarmente performante e uno
che ha un vicino veramente rumoroso così noi
hanno davvero delle cattive prestazioni poi quelle
consumerà semplicemente messaggi diversi
accelera e ad essere onesti ci ha preso
un bel po ‘di strada da cui siamo partiti
Febbraio e siamo stati progressivamente
aggiungendo altri più servizi ai nostri
infrastruttura che costruisce le caratteristiche
dei nostri principali sistemi bancari bancari
praticamente tutto così il 95% delle cose
che abbiamo costruito è da zero e abbiamo
tipo di inizia a ovviamente zero
e ora siamo circa a circa 140
servizi in modo che i servizi che eseguiamo siano
piuttosto piccoli che fanno di nuovo una cosa che si
cosa bene e corriamo un numero di copie
di quelli all’interno della nostra infrastruttura per
disponibilità quindi quando abbiamo iniziato con
questo è stato assolutamente bene perché
l’ unica lingua che abbiamo usato era andare e io
non so se qualcuno abbia mai avuto il
problema dove devi fare qualcosa
in una lingua particolare e tu no
avere qualsiasi libreria per qualsiasi cosa
qualcuno come tutti deve averlo colpito
problema quindi se stai usando un
la lingua particolarmente nuova e andare è gentile
di arrivare al punto ora che è
abbastanza maturo non necessariamente
librerie che coprono ogni possibile
eventualità e come esempio se lo sei
integrazione con finanziaria
infrastruttura
in pratica devi usare IBM MQ, quindi chi
ha usato IBM MQ qui un sacco di persone o
bravo a chi piace usare IBM MQ qui
letteralmente nessuno, oh, nessuna persona va bene
dispiaciuto e nel nostro caso abbiamo che uno di
muoviti veloce come startup, quindi scrivi bene
ci sono le librerie che ti permetti
usare quelle cose particolari ma da fare
che dovremmo fondamentalmente usare la C
legature e li compila nel nostro go
binario che sarebbe davvero terribile
Inoltre non ha lo stesso livello di
la funzionalità non è altrettanto testata
considerando l’utilizzo di qualcosa come Java per
quel servizio specifico ci dà molto
migliore flessibilità e il problema noi
ora lo è se hai costruito un micro
architettura di servizio e tu hai n
numero di servizi che sono
comunicando tra di loro
probabilmente hai un modo standardizzato
di fare questo e se hai fatto tutto
in una lingua che hai essenzialmente costruito
una catena di strumenti abbastanza grande, proprio così
linguaggio che significa introdurre qualsiasi
altre lingue nella tua infrastruttura
diventa quasi proibitivo
e in realtà il posto che ho elaborato
prima di munzo c’era l’ alone in cui ci muovevamo
da come un tipo di Java PHP
infrastruttura lì a uno che era
costruito dentro
con un paio di servizi Java per alcuni
cose specifiche e il problema che abbiamo avuto
ci siamo finiti con il 198 andare
servizi e due servizi Java così noi
devono in qualche modo mantenere la funzionalità principale
compatibilità su queste librerie anche
anche se solo una piccola quantità di prestito
la struttura stava facendo così rapidamente
way around map è usare un client e
server ogni casa linguistica che è
ovviamente HTTP bit di una cosa stupida
sono andati fino in fondo, ma il cerchio
il motivo per cui lo abbiamo fatto è stato perché
fin dall’inizio potremmo avere tutto
quelle cose come la scoperta di servizi e
il bilanciamento del carico libero e possiamo scrivere
quello in circa tre o quattro giorni mentre
per poter saltare subito con
tipo di servizi fondamentalmente basati su HTTP
hai bisogno di pensare a tutti questi
tipo di cose quindi devi essere in grado di
scopri dove sono le tue istanze
IPS sono porte se stai facendo dns
per risolverli o qualche altra scoperta
meccanismo necessario per bilanciare il carico
fra loro
ovviamente hai bisogno di una rottura del circuito se
alcuni di loro un lento fallirà e il
la vera domanda è come si fa tutto questo
e se lo fai tutto questo ancora una volta nella vostra
la tua lingua il tuo nuovo edificio
questa grande libreria client e server quella
a tutte queste cose così nel nostro caso noi
ha scelto di semplificare quelli abbastanza
in modo significativo e stiamo effettivamente usando
link addi nel mezzo per fare abbastanza a
molte cose
così come qualcuno ha visto un pinnacolo da
Twitter vedo che è scritto in Scala così
non è qualcosa che volevamo direttamente
importare in uno qualsiasi dei nostri servizi
ma il collegamento D ci consente di eseguirlo come
essenzialmente un proxy autonomo localmente
e possiamo scaricare tutte queste cose
tipo di proxy e perché lotti
delle istanze stanno passando attraverso questo
proxy ha una migliore conoscenza di
cosa sta succedendo nella nostra infrastruttura
che lascia veramente i nostri servizi
davvero semplice e possono ancora avere
tutto il genere di prestazioni e
flessibilità di cui abbiamo bisogno ma senza averla
per mantenere una quantità enorme di codice da fare
tutte queste cose complicate te
bisogno in un’architettura di micro-servizi
quindi per iniziare con la parte superiore di
infrastruttura ovviamente abbiamo un carico
equilibrio che arriva a tutti i nostri
trafficanti entriamo in una specie di
routing di livello quindi questo è solo andare a
prendere una richiesta HTTP decidere dove si trova
verrà instradato e lo lascerà cadere
il nostro proxy e questo è indirizzato a un’API
servizio ora questi servizi sono no
diversi in sostanza sono ancora solo
prendere HTTP ma quello che facciamo è definire
tipo dei nostri endpoint sulla nostra API di
questi particolari tipi di servizi e
questo significa per esempio che abbiamo un pubblico
API che ha un endpoint di hook Web
ti consente di registrare ganci Web sul tuo
conti bancari e possiamo indirizzare tutti
cose che vanno al web ami il percorso
attraverso il nostro proxy in questo go binario
e poi, una volta fatto, possiamo farlo
tipo di processo che siamo letteralmente
andando a convalidare la richiesta di inviare
forse a proposito di Authenticator
tipo di creare effettivamente il web hook e
registralo per alcuni callback
punto in futuro e questi hanno di nuovo
diversi database e potenzialmente
quelli possono chiamare a qualcuno
provider esterno letteralmente è solo
diventerà un server HTTP standard della bog
ci occuperemo della nostra richiesta
noi e la cosa bella di questo è
perché tutto quello che sto facendo qui è il dispiegamento
una nuova sezione o API e abbiamo questo
instradamento automatico se voglio
distribuire qualsiasi nuova funzionalità che per
infrastruttura non tocchiamo nessuno dei
altri servizi possiamo implementare servizi
individualmente possiamo aggiungere nuovi servizi noi
aggiungere nuovi endpoint alla nostra API
senza alcun tipo di impatto e il
solo realisticamente è la cosa peggiore
quello che potrebbe accadere sarebbe che ci schieriamo
un numero di istanze e consumano
tutta la CPU e la memoria su quelli
server particolari e tipo di quelli
incidente come risultato e quindi avremmo ottenuto
sostituzioni ad un certo punto così in andare il
il modo in cui lo facciamo è definendo un tipo
che chiamiamo un servizio e tutto ciò che è
sta per fare è prendere qualsiasi richiesta così è
una funzione che accetta una richiesta e
restituisce una risposta quindi se qualcuno viene visto
qualcosa di nuovo come in pinnacle
in pratica lo passi
tipo di definire il tuo servizio come a
funzione si passa solo in alcune richieste
ottenere una risposta e si consente gentile
delle biblioteche per avvolgere tutti
questo tipo di filtri intorno a quelli e
dato che possiamo usare uno standard di palude
Libreria di routing HTTP in modo che possiamo registrarci
rotte su di qui e di nuovo ognuno di
questi sono i registri e il registro D
di nuovo solo una funzione che prende un
richiedi la risposta al reso e può farlo
qualsiasi cosa abbiamo bisogno di fare così questo
roba è abbastanza facile da fare e andare da te
può far letteralmente girare il server HTTP
linee di codice ce ne sono alcune davvero buone
librerie di routing e puoi farlo
registra la tua funzione direttamente
via così il problema principale allora abbiamo come
una banca è che dobbiamo essere veramente
davvero affidabile quindi va tutto bene e
bene avere come fallisce e i nostri servizi
andando giù quando è solo una specie di
app che è interessata ma se è la nostra carta
infrastruttura di pagamento e nessuno può
compra qualcosa nel negozio, allora è così
questo è davvero un grosso problema per
noi e questo è ancora una volta il
ragione per cui abbiamo iniziato con questo
tipo di infrastruttura è perché noi
abbiamo bisogno di quella disponibilità 24/7 che non possiamo
aggiungere tutte le banche del Regno Unito
processi batch notturni o loro
i sistemi si spengono per cinque ore
durante la notte e non possiamo davvero avere
che abbiamo bisogno che i nostri servizi siano attivi
tutto il tempo e questo significa anche
anche se stiamo girando in Amazon o in qualsiasi altro
altro fornitore di cloud ci sarà inevitabilmente
abbiamo un fallimento che dobbiamo affrontare
quindi nel nostro caso ovviamente lo siamo tutti
usando la finestra mobile perché è così caldo giusto
ora, ma nel nostro caso possiamo effettivamente
possiamo compilare staticamente il nostro go binary
collegalo e lo mettiamo in un graffio
contenitore quindi non abbiamo nulla
dentro quel contenitore non c’è niente
anche un guscio quindi se ne hai avuto uno
breakout come una specie di bug nel nostro
codice non c’è shell in realtà
eseguire codice all’interno di quel contenitore e
possiamo quindi eseguire quelli su Kubernet
così chiunque usa kubernetes qui cool a
poche persone quindi dalla nostra prospettiva noi
effettivamente iniziare con misure e
maratona e il
perché proprio all’inizio non l’abbiamo fatto
sentire i nativi di Cuba è stato davvero gentile
livello di produzione a quel punto e noi
aveva una serie di esperienze miste con
che abbiamo trovato operativamente è stato abbastanza
difficile da gestire soprattutto se tu
non sono davvero una specie di negozio di Java che
non erano così debugging era abbastanza
difficile e nel complesso penso che il
tipo di kubernetes di design architettonico
è molto meglio aver detto
che se hai mai voglia di eseguirlo da solo
su Amazon piuttosto che usare a
self-hosted one per eseguire quello in sono
la modalità altamente disponibile è ancora abbastanza
difficile quindi ci sono alcuni blog
intorno a loro ed è una sorta di prova da parte
fuoco però, ma abbiamo testato la nostra
roba molto e ora ha funzionato
abbastanza bene e i vantaggi che abbiamo
visto da ciò è che abbiamo fatto un tipo
di migrazione in agosto quindi cosa due
mesi fa e questa è la spesa
sulla nostra infrastruttura in modo siamo partiti
con questa zona rossa che era la nostra vecchia
infrastruttura e ci siamo concentrati su nuovi di
struttura e poi tipo
chiudere progressivamente le cose e il
ragione per cui abbiamo grandi risparmi sui costi
ecco perché possiamo mettere in valigia i nostri servizi
molto più densamente e anche possiamo usare
capacità inutilizzata per cose come la nostra
lavori di compilazione così come eravamo abituati ad avere
macchine molto grandi di Jenkins che lo farebbero
come compilare tutto e spingere il
binari risultanti fino a s3 dove as
Voci cubane lo rende davvero facile per
noi per eseguire solo quelli con un inferiore
priorità usando la capacità di riserva così noi
non è necessario eseguire nessuno di questi server
più così è stato un enorme massiccio
vinci per noi, dato che abbiamo un
numero di istanze di cui possiamo usufruire
usa una combinazione di comunità e
linker D nel nostro caso per tipo di risoluzione
cose come cambiamenti di topologia, quindi se uno
dei nostri servizi sono esplosioni in un certo modo
di pioggia di fiamme ad un certo punto in modo equo
presto avremo una sostituzione
automaticamente perché abbiamo definito i3
repliche dei nostri pod nelle comunità e
ugualmente se diventiamo lenti o più o meno
errori transienti linka d tipo di
risolvili per noi così internamente
utilizzando
media mobile esponenzialmente ponderata
bilanciamento del carico che rileva i guasti
diventare abbastanza sensibili alla latenza e
tutte queste cose accadono
automaticamente e tu puoi costruirle
cose abbastanza facilmente e andare usando un host
piscina e ci sono davvero un paio di
librerie davvero buone da parte di quello
lo farò per te, ma la mia esperienza
è se vuoi costruire come un micro
architettura di servizio sei tipo
mettendo tutte quelle cose nella tua
i servizi sono il tipo di cosa che dovresti
probabilmente cerca di evitare perché di nuovo
ogni volta che vuoi aggiungere altro
componenti necessari per costruire un
media mobile esponenzialmente ponderata
bilanciamento del carico in quel servizio nel nostro
linguaggio e hai appena un enorme
tipo di passaggio prima di volere
per fare quel lavoro e poi l’altra cosa
noi facciamo parte della struttura RF e ne spingiamo altrettanti
le cose possibili per essere asincrone
quindi ci sono certe cose che dobbiamo
fare quali sono sincrone per esempio se
se compro qualcosa in un negozio, noi
Ovviamente ho bisogno di verificare di averne abbastanza
soldi per essere effettivamente in grado di fare quel
pagamento e in modo che ciò accada
dobbiamo fare qualche chiamata sincrona
attraverso e ottenere una risposta al
carta di rete e che non deve essere
troppo veloce ma deve essere un
risposta sincrona comunque che usiamo
Kafka per pubblicare eventi di tutto
è successo nella nostra infrastruttura
e per esempio se abbiamo un servizio
qui avremmo un qualche tipo di business
evento pubblicheremo che questo ha
è successo poi uno qualsiasi di elsinore
l’infrastruttura può consumarlo e poi
da questi possono poi fare ulteriori
richieste sincrone e se falliscono
il tipo di sistema di accodamento consentirà
loro di riprovare con qualche tipo di
esponenziale back-off il problema con
qualsiasi tipo di infrastruttura come questa è
inevitabilmente non hai idea di cosa stia succedendo
su così potrei sapere come questa sezione e
qualcun altro in azienda lo sa
quella sezione e questo è qualcosa
che devi affrontare se lo sei
effettuare chiamate tra diversi servizi
così avendo interfacce ben definite che
ti permettono di leggere essenzialmente il
documentazione piuttosto che parlare in
la profondità delle diverse squadre è una specie di
davvero molto utile per questo
l’altra cosa che è davvero utile è
vari strumenti così qualcuno ha usato un po ‘ di
sistemi di tracciamento come Zipkin sanno bene a
un paio di persone così Zipkin ti permette di farlo
traccia una richiesta mentre va fino in fondo
attraverso la tua infrastruttura che se tu
avere un certo numero di servizi di tutti i tipi
di attraversare un limite di richiesta che
questo è estremamente prezioso perché lo è
l’unico modo in cui puoi davvero fare bug
cose come questa, quindi, ti permettono di fare
questo davvero facilmente così dato una richiesta
è una specie di propagazione attraverso tre
servizi che iniziamo proprio in cima a noi
nel nostro tag API ogni richiesta con a
ID univoco che è solo un tipo per te
e poi lo passiamo giù
ogni richiesta e tipo di noi fondamentalmente
maresciallo subito il filo lo invia come
intestazioni unmarshal nel server e
tipo di pop tutto fino in fondo
stack e in go possiamo usare il contesto
pacchetto quindi vai come si usa questo
in realtà un pacchetto esterno ed è
di recente a 1.7 è entrato nello standard
libreria quindi è disponibile integrato nel
lingua e il pacchetto di contesto è
essenzialmente fornendo qualcosa di simile
le variabili locali del thread così non vanno
avere variabili locali del thread non ce ne sono
qualsiasi thread e in un contesto è
fondamentalmente un oggetto che è immutabile
quindi è thread-safe e possiamo archiviare
valori di qualsiasi chiave e qualsiasi valore e quello
ci consente di memorizzare il nostro ID traccia e passare
tutto fino in modo che possiamo passare
quell’ID fino in fondo e poi ognuno
uno di questi passaggi che possiamo inviare
fuori dai dati della strumentazione e poi possiamo
aggregare tutto ciò che effettivamente usiamo a
strumento chiamato fosforo internamente ma
Zipkin fondamentalmente fa la stessa cosa e
probabilmente molto meglio e poi otteniamo tutto
di quei dati in qualcosa che è
completamente incomprensibile come questo ma
ovviamente questo è inteso per una macchina
consumo perché possiamo prendere questo e
possiamo generare grafici core così è
un esempio
di un tipo in carica nel negozio così
abbiamo la nostra API proprio nella parte superiore che abbiamo
fatto questa sezione che è sincrono
che è una specie delle cose minime che
può fare per caricare la carta di qualcuno che abbiamo gentile
di bisogno di cercare le auto che dobbiamo
registrare l’aggiornamento della transazione il
tipo di equilibrio di cose come quelle e
allora come parte di ciò, spariamo un
messaggio asincrono su prendere l’Africa
che è affidabile e nient’altro
succede in modo sincrono così nell’app te
avere una lista di cose essenzialmente su
il tuo conto bancario che è successo e a
questo punto che non è apparso e questo
apparirà ad un certo punto perché noi
avere una coda duratura ma non lo è
essenziale che io appaia immediatamente così
possiamo in qualche modo smetterla per piacere a
processore asincrono e poi ad alcuni
punto che verrà raccolto e noi
prenderà la transazione e vedremo
su quello che era la società, proveremo e
prendi un logo per vedere se è già
ho ottenuto un tipo di add così tanto
metadati a ciò che è possibile e poi
faremo un altro messaggio in modo asincrono
e poi qualcosa lo prende e
in realtà inserirla nei clienti
feed nella loro app e poi di nuovo
trova qualcosa è tristemente e poi
ad un certo punto ricevono una spinta
notifica che sembra qualcosa di simile
questo e la cosa bella è qui che abbiamo
una tazza di caffè emoji perché è a
Starbucks che è chiaramente estremamente
caratteristica importante ma la cosa interessante è
che tutte queste cose accadono e tu
ottenere questo prima che le stampe di ricevute su
la macchina anche se tutti questi
le cose sono accadute in modo asincrono ma
se qualcuno fosse rotto la tua carta lo farebbe
funziona ancora e ti capita solo di essere un
messaggio ritardato come 10 secondi dopo o
caso peggiore se è troppo tardi
non invierà la notifica push ma
sarebbe arrivato e le persone possono ancora usare
la loro carta possono spendere i loro soldi
e hanno ancora molto affidabile
sistema anche se abbiamo tutto questo
funzionalità aggiuntive che vogliamo
fornire in realtà bene in realtà questo
è una bugia massiccia ciò che realmente accade
è così che ci sono molte altre cose
ciò accade e l’altra cosa interessante è
ognuna di queste cose che possiamo
linee di registro aggregate
usando una libreria di logging abbiamo questo
traccia ID che possiamo scrivere su ogni registro
linea possiamo pomparlo in analogico
sistema di occupazione e questo significa che otteniamo
ogni linea di registro per ognuno di questi
richieste anche se sono su
diversi server diversi servizi e
possiamo ricollegare tutte queste cose
insieme e ovviamente li espirano abbastanza
rapidamente perché c’è parecchio
dati e di nuovo è possibile utilizzare questo tipo di
dati per aggregare il tipo di mappe del tuo
sistemi e come veramente capire il genere
di come funzionano queste cose, quindi perché dovrebbe
usa vai dal mio punto di vista vai è un piccolo
linguaggio semplice e veramente facile da imparare
quindi abbiamo trovato davvero facile essere in grado di farlo
come assumere persone è ovviamente l’assunzione
abbastanza difficile se è linguaggio
non molte persone hanno imparato a farlo
la capacità di raccogliere davvero facile
il codice idiomatico è stato incredibile per
noi e non pensiamo di aver avuto nessuno
chi ha avuto problemi a questo a
tutti
in cima a quello va eccellente
Concurrency davvero buona comunicazione
il networking si impone in modo sorprendente
quindi per i micro servizi dove essenzialmente
tutto quello che stai facendo è comunicare
la rete tutto il tempo è una specie di
come una cosa veramente bella da avere
ci sono inevitabilmente alcuni aspetti negativi quindi
come ho detto se ti stai integrando
con il tipo di alcune tecnologie specifiche
non ci potrebbe essere essere librerie
in particolare uno testato lì
storicamente sono stati problemi con il distributore
quindi se hai librerie dipendenti loro
ovviamente cambiano nel tempo e tu ne hai bisogno
per tipo di tirare tutto il codice sorgente
nel tuo albero così come lo facciamo noi
questo è il vero fornitore di ogni versione
in un unico repository gigante che è
abbastanza grande ma i vantaggi ci sono
che possiamo controllare queste dipendenze come
Hanno tirato in modo che, ovviamente, dobbiamo
fare cose come il controllo del cambiamento è come a
società finanziaria e possiamo controllare quelli
e sappiamo che questo è il codice che è
compilato ed è una build deterministica
ogni volta quindi dovresti iniziare le cose
con micro servizi
probabilmente una cosa abbastanza controversa che avrei
diciamo che lo svantaggio è farlo
quando abbiamo iniziato a costruire un’azienda I
non sapevo nulla di bancario e io
probabilmente ancora non ne so molto
su bancario e se non si conosce a
enorme quantità di tuoi affari
che stai cercando di costruire, allora è così
molto difficile da fare questo tipo di
Delineazioni tra i servizi che
vuoi costruire e finisci con
interfacce che poi cambiano che poi
causa problemi però se lo fai
capire la tua infrastruttura e te
capire il tuo tipo di prodotto che
stai costruendo davvero bene, allora è così
tipo di una cosa davvero facile da fare
può facilmente estrarre questi servizi e
condiscili e vai perfetti
linguaggio per farli e questo è tutto
Grazie mille
quindi ci sono alcune domande sì come si fa
a livello transazionale, commetti eventi a
Kafka è così cattolico che ci incontriamo
modalità cluster in modo da scrivere su una partizione
prova a ricordare esattamente come il codice
funziona fondamentalmente noi quando arriva una richiesta
in scriveremo quelli in Kafka il
la rete delle carte di credito è una specie di
interessante perché è essenzialmente
un impegno a due fasi che avremo, lo faremo
riceverai un messaggio di autorizzazione
scrivere che nel nostro database delle transazioni
se fallisce, restituiamo il fallimento
torna alla rete della carta se questo
ci riesce ma torniamo ancora al fallimento
poi tipo di riprovare e se questo
fallisce ancora due giorni dopo
essenzialmente viene annullato dalla carta
rete per quanto effettivamente andando
Kafka, scriviamo tutto per tipo
partizione così avrai la tua chiave
praticamente hash su una partizione specifica
e tu lo scrivi direttamente in loro così
sì, non ci sono abbastanza per essere un fallimento
modalità intendo che ci sono sempre dentro
sistemi distribuiti ma sì tipo Kafka
di mezzi una volta che è impegnato è
sicuramente replicato in multiplo
le macchine ok vanno di default ha un molto
modo particolare di organizzare il codice sorgente
file come strutturate la vostra fonte
codice e perché interessante e così via
memorizza il codice nei pacchetti e in sostanza
definiremmo un pacchetto come una cartella
con molti file finché lo faranno
avere lo stesso nome del pacchetto che non ha
importa davvero come sono suddivisi
attraverso quei file ma di solito ci proviamo
e tipo di rompere come un esempio se noi
avere un servizio con più gestori così
più tipi di richieste diverse
che gestirà ognuno di questi
andrà in un file diverso all’interno di a
pacchetto di gestione e quindi andare fornisce a
modo di esportarli o di mantenerli
interno all’interno del pacchetto, così faremmo
esportazione che fondamentalmente dando
loro una lettera maiuscola all’inizio
esporti un tipo di interfaccia definita
e la cosa predefinita è fondamentalmente
mantieni tutto
incapsulato se non specificamente
voglio esportare come una sorta di nodo
interfaccia che va bene come la definisci così
confini a termine del prossimo termine quando
più servizi sono richiamati all’interno di a
singola unità di lavoro e che dire
rollback annulla il servizio
il numero quattro su cinque fallisce all’interno
quell’unità di lavoro così distribuita
transazioni fondamentalmente sì sì
è come se non fosse davvero una cosa così
fondamentalmente il modo in cui lo facciamo
in particolare usando Kafka per quelli
le cose sono Kafka non è davvero una coda
è un tipo di registro replicato e quello
significa che definiamo definire i nostri messaggi
nello specifico in modo tale che ogni messaggio abbia un
schema specifico e pubblichiamo quelli così
un lavoratore consumerà particolare
messaggi quindi se non può elaborare uno di
quei messaggi significa fondamentalmente il
l’intero sistema è giù e quel consumatore
sarà quel tipo di consumatore in un consumatore
pausa incalcolabile di gruppo e tipo di
aspetta fino a quando non possiamo riprenderli così dentro
caso specifico il solo caso
quello che conta davvero è dove sei
spostare denaro atomicamente che è
ovviamente qualcosa è abbastanza
importante e in tal caso ci piace
tipo di commit a due fasi nel database
e ancora se questo fallisce il nostro merluzzo
i processi a monte ci invieranno a
messaggio di errore e ritentano quel muro
il più indefinitamente così tutto quello che potevo davvero
dire è come se ci fosse qualcosa che puoi
mai fare per evitare distribuito
transazioni dovrei essere sicuro che puoi
da proprietà estremamente costose
software per questo ma non c’è niente
davvero nel mondo open source che
lo farò per te
quindi sì , fondamentalmente registriamo le transazioni
e poi tipo di riprovare e avvisare se
quelli hanno fallito il suo supporto del database
bene e vai quello che stai usando sì sì
il supporto del database è in realtà molto buono
se stai usando qualcosa che è SQL
basato sulla libreria standard ha un SQL
autista si può poi giocare
in driver di database specifici in questo
e ti dà un standardizzato
interfaccia essenzialmente per come normale
Database SQL in realtà utilizziamo Cassandra
che è perché eravamo noi abbiamo usato Sandra
se come il 95% dei dati che usiamo
ci sono certe cose che non puoi
usa davvero Cassandra per dove ti serve
tipo di atomicità ma significa Cassandra
che possiamo eseguire un database distribuito
lo eseguiamo con il quorum legge e scrive
all’interno di un data center e ci indirizziamo
richiesta per il tipo di posto corretto così
che possiamo leggere e scrivere un mais il
il supporto per Cassandra va bene e me ne vado
dire la maggior parte dei problemi per lo più interruzioni
abbiamo probabilmente dovuto a questo e
questo è qualcosa che siamo
progressivamente migliorando ma sì un misto
borsa puoi mostrare il codice e andare con a
micro servizio mm-hmm alcuni campioni uh come
in alcuni dei miei codici
sì, certo, andiamo a trovare qualcosa di buono
non molto sicuro non è stato urlare, forse
non è andata così
okay, usiamo il servizio di web poker
ad esempio, sì, sto solo cercando di farlo
trovare la nostra prima uccisione basta chiudere tutto
altre cose che mi vanno bene uh così Oh sbagliato
schermo sì che ne abbiamo parecchio
servizi ma oh non riesco a vederlo affatto
scusa a tutti, va bene se diamo un’occhiata
sulla nostra um web poke API che ho menzionato
un minuto fa le nostre – librerie open source
quindi fondamentalmente in esso con un qualche tipo di
impostazioni conosciute quindi tutti i programmi vanno tutti
avere un estremamente piccolo ci andiamo tutti
andare programmi hanno una funzione principale e questo è
il punto di ingresso dell’intero programma e
in ciò tutto ciò che facciamo veramente è definire a
servizio e quindi eseguiamo tale servizio così
questo tipo di libreria interna
il primo server HTTP e poi tutto
i nostri gestori stanno facendo è ognuno di
queste
cerchiamo le liste quindi se vuoi elencare
i vostri web ganci che si può fare da parte del
API pubblica che abbiamo registrato get slash
quali sarebbero i ganci web barra flash e
questo è bene, è un po ‘come usare un po’
di un terribile livello di compatibilità
probabilmente quello sbagliato che ho scelto
questo sta andando a prendere in una richiesta HTTP
e alcuni parametri e poi sta andando
per verificare la presenza di un ID account
restituisce un errore di convalida e ha verificato
se hai autenticato anche noi tiriamo fuori
il tuo ID client OAuth e poi questo è
la parte interessante dove usiamo
buffer di protocollo chiunque usa il protocollo
respinge poche persone
va bene così i buffer di protocollo per noi sono giusti
un modo di definire essenzialmente
risposta alla richiesta di messaggi e consentono
per compilarlo a un numero qualsiasi di
lingue quindi è davvero bello se tu
vuoi utilizzare le risposte alle richieste attraverso a
numero di servizi e abbiamo solo il nostro
particolare tipo di risposta e facciamo un
chiedere se qualcuno vuole entrare come
specificatamente chiedimi che probabilmente non è così
estremamente utile su questo schermo ma io
puoi guidarti attraverso un po ‘come a
un po ‘più applicazione di esempio che cosa
girare ative x ‘per andare hai preso in considerazione a
buona domanda quindi nel nostro caso um
io e alcune altre persone abbiamo lavorato a
alone prima quindi siamo passati da PHP e
Tipo di Java originariamente tipo di
sistema monolitico ad un servizio orientato
un’architettura che è stata abbastanza piena
di servizi e quindi alcuni altri servizi
e poi abbiamo riscritto quello in a
combinazione di Java e in realtà
come risultato di um go era una specie di nostro
scelta di default che abbiamo preso in considerazione
Ruby per un periodo di tempo davvero breve
solo perché era super veloce
avvio tipo di campagna pubblicitaria ottenere avvicinato fuori
ma non sarebbe mai stato un tipo di
soluzione a lungo termine per un micro servizio
l’aspetto dell’architettura ti suggerisce
dividendo il tuo problema in micro
i servizi sono difficili non è qualcosa
allora può essere fatto continuamente piuttosto
che in anticipo sì è così, se lo sei
ordinando tutto da zero e tu hai a
prodotto veramente veramente di base allora tu
probabilmente hanno solo una manciata di servizi
e probabilmente puoi capirlo
problema abbastanza bene da rompere il problema
a parte così nel nostro caso ovviamente lo abbiamo
qualche tipo di costanti conosciute cose come
un conto bancario ha transazioni così noi
abbiamo un servizio di transazione che abbiamo a
numero di conti bancari quindi abbiamo un
servizio di account in modo uguale le persone hanno un
profilo con il loro nome indirizzo e
varie altre cose e quelle cose
sono facilmente distinguibili il problema
arriva se poi ti rendi conto di non averlo
abbastanza spezzato nel modo giusto e
è qualcosa che è molto più facile se
stai facendo una migrazione perché tu
capisci molto bene il tuo dominio del problema
meglio che se stai creando un problema
come costruire una società interamente da
scratch um quindi è un processo continuo
e in realtà
su una di queste diapositive penso nel
quello di cui non avevamo la merda fino a quando
eccoci, mi dispiace, questo è un bene
esempio dove iniziamo con a
tipo di crescita lenta e poi noi
ricostruito alcune cose e effettivamente cancellato
un’ampia sezione della nostra infrastruttura
e poi è un po ‘andato su e giù
e fluttuante come siamo andati e
ci sono state molte volte dove abbiamo
tipo di rifratto in un servizio in a
accoppiare o eliminare quelli e questo è
sicuramente un processo continuo hai fatto
considerare di incapsulare quel Java MQ e
un servizio di go abbiamo comunque quello che abbiamo
effettivamente fatto è incapsulato letteralmente
in qualcosa che accolga messaggi
e chiama un altro servizio specifico che
è andare così abbiamo un servizio di guida che
essenzialmente si connette a MQ e noi no
estrai i messaggi e questo è virtuale
lo fa è scritto in Scala e
è probabilmente come 50 linee di codice che è
veramente piccola e questo significa che
tutto quello che stiamo facendo è tirare
messaggi disattivati ​​e inviandoli a
un altro servizio che è una ONG che noi
quindi avere tutti i nostri domini o pollo
quindi vuol dire che è davvero bello e
piccolo e in realtà riutilizzabile quindi se finiamo
dover connettersi a più persone
fornitori diversi ma con diversi
configurazione possiamo in realtà solo
configurare come questo insieme di istanze di
quel servizio per spingere i dati lì e questo
uno svaluta che va bene , è così
ricorda di votare e grazie amico grazie
tu molto
tu

Please follow and like us: