
Di solito non presento me stesso o il mio
lavorare molto prima di andare dritto
nelle mie presentazioni in questo caso
sento che probabilmente dovrei leggermente
ho bisogno di darti un po ‘di
sfondo di dove alcune di queste cose
viene da così prima di tutto ho un
confessione per far sì che io non sia un funzionario
programmatore I’m I am an I’m a old-school
programmatore Faccio orientamento agli oggetti no no
non mi piace lambda e faccio alcuni di quelli
genere di cose ma non sono funzionale
programmatore quindi non ho intenzione di parlare
riguardo l’algebra, non ho intenzione di parlare
sulle monadi non parlerò
su questo genere di cose
Penso che queste preoccupazioni separate quando
stiamo parlando di questa roba e io
pensa spesso quando parliamo di reattivo
programmare le preoccupazioni si confondono
il motivo per cui penso di averlo
qualcosa da dire anche su questo argomento
come aiutare a modificare il reattivo
manifesto e facendo alcuni contributi
è come ho lavorato su di lei su uno di quelli
progetti che arrivano così tanto
una volta nella tua carriera e questo progetto è stato
per costruire una frequenza elevata a bassa latenza
scambio commerciale da foglio bianco di
carta nel momento in cui abbiamo iniziato
scrivendo questo non sapevamo come farlo
non ne avevamo la minima idea e così abbiamo fatto molto
di cose per cercare di imparare cosa
era quello che dovevamo fare e parte di
cosa ci siamo evoluti attraverso il nostro sperimentale
approccio era penso quello che hai descritto
come architettura reattiva di un micro servizio
ma ad alte prestazioni e io
voglio descrivere alcuni dei motivi per cui
questo è e alcune delle ragioni per cui
funziona e parlerò a
livello ragionevolmente alto su alcuni di
queste cose quindi non c’è molto lì
non c’è codice in questa presentazione, non lo è
tich dettagliato è tipo di tipo dettagliato
di computer science ha livello
forse ma ma non c’è non c’è
la matematica così o posso pensare così così parte
del motivo per cui queste cose sono importanti
perché il nostro mondo sta cambiando e le persone
continua a dirti questo a questo
conferenza penso ma è ma è
vero
se guardi, sai dove eravamo
solo dieci anni fa il sistema tipico
erano decine di server forse aveva secondi
di tempo di risposta e ore per offline
manutenzione e probabilmente trattata
gigabyte di dati che era una specie di
normale sorta di ragionevolmente grande
sistema di scala aziendale in quei giorni io
pensa ora che le grandi applicazioni hanno ora
migliaia di processori multi-core
millisecondi di tempo di risposta o più veloce
100% di tempo di attività e petabyte di dati
non è insolito in questi giorni se tu
guarda se guardi solo alla memoria
Non sono abbastanza vecchio da avere
memoria di ferrite programmata ma se
ma ma ma ho usato per avere uno di questi
in mia moglie l’ho buttato via ero veramente io
è stato davvero deluso quando l’ha fatto ma
ma questa è una memoria di nucleo di ferrite
unitevi ciascuno di questi ciascuno di questi piccoli
gli anelli magnetici sono circa tre
millimetri di diametro e ciascuno di
quelli rappresenta un po ‘così quel blocco
di cose ci sono otto byte okay questo
è una scheda SD micro SD card che è
otto gigabyte quindi è un po ‘dove
veniamo quindi, questo è un po ‘più lungo di dieci
anni fa è una specie di anni ’70
la tecnologia in cui si trovano le cose
usando te circondano questo tipo di
tempo ma siamo arrivati molto lontano
non è questo è un altro questo è giusto
dieci anni quindi questo è 128 megabyte
questo è 128 gigabyte il gioco è
cambiando e la tag line per il
manifesto reattivo è il 21 ° secolo
problemi e non meglio risolto con 21st
Architetture del 20 ° secolo, se lo fossimo
costruire nella tua architettura è
supportato da un database relazionale che non lo è
un’opzione davvero scalabile non è come
Yanis stava dicendo nella sua
presentazione che ha dato il via a questa pista
non è come si costruisce resiliente
sistemi è ora come si costruisce scalabile
sistemi non è come si costruiscono i sistemi
che puoi distribuire in tutto il tempo
non è come si costruiscono sistemi che possono
essere elastico e che può crescere e
può ridursi così siamo arrivati a mi è stato
coinvolto nella riscrittura dell’agile
manifesto molte delle idee erano in
posto prima del libro di Lynne che abbiamo inventato
un modo di parlarne e questo è
parte di quello di cui stavamo parlando quindi se
vogliamo che il nostro sistema sia reattivo
voglio che siano in grado di reagire a
i nostri utenti in modo efficiente e rapido e in
per fare ciò che devono essere
resilienti hanno bisogno di essere robusti nel
affrontare il fallimento e continuare a fornire
servizi se vogliamo che siano resilienti
abbiamo anche bisogno che siano elastici
allungare e muovere e crescere e
restringere per soddisfare la domanda e abbiamo bisogno di incontrarci
essere guidati dai messaggi per supportare tutti
di quelle cose che sono il fondamento
substrato che ci ha permesso di fare questi
altre cose e voglio descrivere a
un po ‘sul perché penso che sia il
caso così primi sistemi reattivi quindi noi
individuare un sistema reattivo è reattivo
ciò significa che risponde in modo tempestivo
modo questo è la pietra angolare di
riusabilità questo è questo è davvero quello che
la gente intende quando si dice spesso quando
Dicono che è inutilizzabile che tu possa averti
può avere scarsa usabilità in termini di a
modello mentale del sistema sottostante
ma se reagisce bene otterrà un
risposta migliore di qualcosa che è
ha una buona usabilità e reagisce male è
anche veloce per rilevare i problemi che vogliamo
essere in grado di capire quando qualcosa è
andare storto ed essere in grado di
fare qualcosa che abbiamo bisogno di loro per
essere resilienti , vogliamo che siano
reattivo di fronte al fallimento che abbiamo
ho ottenuto il microscopio obbligatorio Monty
Illusione di Python qui vogliamo che siano
reattivo nel di fronte al fallimento
la resilienza dipende dalla replica
contenimento e isolamento e delega
per essere sicuri di essere
in grado di contenere i fallimenti e tu sai
con grazia degra degrada il
comportamento del nostro sistema per incontrarci
domanda ed elasticità reattiva
è importante ed è un po ‘in crescita
come growingly importante nella la
mondo del cloud dove sai se
stai usando Amazon ec2 e tu semplicemente
tipo di fornitura di tutti i tuoi server e
li lasci tutti in esecuzione che puoi
ottenere un conto molto grande alla fine del
mese in cui vuoi che ridimensionino come
bene come vuoi che tu voglia avere
il giusto numero della giusta quantità di
calcolare per soddisfare le esigenze del tuo
sistema
e per farlo abbiamo bisogno di avere un
architettura decentralizzata con no
punti di contesa e dobbiamo essere in grado
per spingere fuori e comportamento in coccio
modi diversi un messaggio asincrono
passare è il fondamento di questo
approccio di tutte queste proprietà e
questo è ciò che ci dà l’accoppiamento libero
l’isolamento e la trasparenza della posizione
questo ci permette di fare queste altre cose
se vai via da questa presentazione
con una sola idea in testa, voglio che tu lo faccia
vai via con l’idea che voglio che tu vada
via con due idee nella tua testa
cenno il primo è che asincrono
la messaggistica è la risposta a molti dei nostri
problemi nel calcolo e il secondo
non è così spaventoso come sembra così così
quali sono le proprietà di un reattivo
sistema in modo che possano essere flessibili
comporli in modi diversi
accoppiato liberamente là non sono
strettamente legati l’uno all’altro così da parti di
il sistema può evolvere a ritmi diversi
ad altre parti del sistema che sono
scalabile possiamo aumentare la fornitura di
servizio aggiungendo un nuovo calcolo di calcolo
nuovi nodi sicuramente nuove nuove versioni di
il servizio sono più facili da sviluppare
e penso che potresti dubitare di me
quello ma spero che alla fine
della presentazione che non spero
Ho intenzione di dimostrare alcuni dei
ragioni per cui credo che sia il
vera la verità di cui sono più tolleranti
fallimento perché possiamo farlo
asincrono e quindi non tagliare l’imbarco
tempo così qualcosa può andare giù e possiamo
rispondere ad esso più tardi quando ritorna
up fino a quando si ottiene il messaggio e
tutto quel genere di cose a cui rispondono
fallimento con garbo e loro sono
reattivo agli utenti anche se è così
uno di quei quattro principi che siamo
mirare alla cosa strana di questo è
è una specie di frattale in architettura
queste idee funzionano a tutte le scale
Recentemente ho partecipato a un corso su
programmazione a bassa latenza senza blocco gestita da
Martyn Thompson, amico mio che eravamo
parlando di prima
e una delle cose che lui lui
stava descrivendo era il modo in cui
i processi moderni al loro interno sono un messaggio
guidato da unità di calcolo asincrone ciascuna
dei nuclei sono collegati da un bus e
passano messaggi tra uno
un altro per ottenere la memoria nella cache così
a livello del silicio su cui il nostro
il codice gestisce il modo in cui il codice
il codice è scomposto in parallelo
percorsi di esecuzione da parte del processore
quello è un sistema reattivo è un it’s a
sistema asincrono basato su messaggio ma
anche questo è scalabile
il modo in cui funziona Netflix e Facebook
scale e quel genere di cose sono
costruito in questo modo perché questo è quello che tu
bisogno di fare quando hai il tipo di
livelli di domanda di cui abbiamo parlato
sui livelli di elaborazione dei dati e
CPU e grandi sistemi sono composti
di questi componenti reattivi più piccoli
beh, questo non significa che dobbiamo farlo
fare stili di programmazione molto bizzarri
ad ogni livello di granularità e lo farò
parlare di più su che più tardi sì, è una
delle cose in cui penso di pensare il
la conversazione si confonde quando noi
confondere la conversazione sul reattivo
sistemi e programmazione funzionale lì
è un crossover perché siamo entrambi
parlando l’uso di parlare spesso
sull’uso di una sincronia quando sei
parlando di funzionale reattivo
architetture e sistemi reattivi ma
non sono necessariamente la stessa cosa
puoi farne uno puoi farne uno senza
l’altro quindi passerò attraverso
varie foto come questa e basta provare
e scomporre questo un po ‘così prima voglio
per parlare di messaggistica sincrona ora
se guardi il mondo, penso che sia
abbastanza difficile da confutare che il
il mondo è praticamente asincrono e noi
i programmatori hanno un po ‘di strati
Pensiero sincrono in cima al mondo
perché è più facile per noi ragionare
a riguardo quindi è facile è molto più facile
per noi di pensare che voglio voglio
aggiungere aggiungere al mio saldo del conto, quindi sono
sto per dirti cosa voglio
aggiungere e poi mi dirà
che è stato aggiunto in questo è facile
capisco che è semplice e il mio programma
si ferma e aspetta quella risposta a
tornare ma ci sono problemi con
quel modello quindi immaginiamo di averlo
questi due componenti e componente a è
invocato con un certo comportamento e
delega parte di tale comportamento a
componente B quindi se stiamo parlando di questo
modello sincrono ora poi ci sono a
numero di posti in cui questa conversazione
può andare storto, quindi potrebbe esserci un bug in
componente a potrebbe esserci un problema
stabilire la connessione con
canale di comunicazione alla comunità di
componente B potremmo avere una perdita in
trasmissione come il messaggio va in mezzo
i componenti a nel componente B potrebbero esserci
è stato un problema con il componente B
collegamento al canale di comunicazione
alla fine potrebbe esserci un bug in
componente B e abbiamo lo stesso set
di problemi sulla via del ritorno ad oggi
qualsiasi sistema distribuito abbiamo tutto
questi problemi quindi se stiamo facendo un
chiamata sincrona abbiamo tutti questi
problemi ora c’è una difficoltà con
questo con sincronicità perché
dal punto di vista del componente a it
posso solo sapere bene che può solo sapere se
c’è un suo fallimento o se lo è
non è possibile stabilire una connessione tutto
altrimenti non può dire la differenza
tutto se non ottiene una risposta
non sa dove il componente B
è stato rotto con il messaggio è stato perso e
quindi ha tutti questi casi di errore in
affrontare peggio di quello che intendo nel
stessa situazione e componente a sta facendo
alcune elaborazioni delegate il
componente B ora ha il peso di a
componente B per finire prima che possa fare
più elaborazione ne ho solo due
componente questi fatto possono componenti loro
può continuare a elaborare c’è il tipo
di definizione di una chiamata sincrona
proprio nel modo in cui otteniamo, così siamo
costruendo sistemi multiutente cosa noi
il modo in cui ci aggiriamo è questo che noi
cominciamo a pensare bene, ma in un certo senso lo blocchiamo
su una sola discussione quindi dovremo andare
multi-threaded right quindi ora abbiamo
molti problemi quindi ora ci sono aggiunti
complessità alla nostra implementazione di
componente a cui dobbiamo preoccuparci
su tutti i problemi di
contesa multi-threading
evitando lo stato condiviso concorrente
la programmazione è una delle più diverse
cose difficili che facciamo nel nostro in
la nostra industria e dobbiamo fare tutto
che solo per aggirare il problema di
perché uno di questi thread è in attesa
per una risposta dal componente B
la comunicazione sincrona aumenta il
accoppiamento in entrambi i luoghi e il tempo
tra i componenti lo rende di più
difficile per noi ridimensionare e rende
siamo più esposti a più casi di fallimento
facciamo lo stesso esperimento e pensiamo
su quello che sembra con lo stesso
pensate agli esperimenti e pensate a cosa
sembra con asincrono
messaggistica così ora abbiamo lo stesso
situazione c’è un comportamento che è
stato invocato in modo asincrono sul componente
a e a sta per scusarmi, mi dispiace
superando me stesso questo è ancora un
caso sincrono quindi questo è un
caso sincrono in cui il componente B è
ora delegando a qualcos’altro in questo
caso sta parlando a un database e
abbiamo altre modalità di errore che
sono anche nascosti dal detto del componente
abbiamo appena aggravato il problema
termini dei fallimenti che abbiamo avuto
esprimere indietro e tornare al componente a
quindi i componenti a sono ancora più a rischio ora
peggio di così se ci fosse un fallimento
nel canale sulla via del ritorno cosa
afferma l’ anello dei dati che non sappiamo è
indeterminato e quindi abbiamo un codice
per tutti quei casi di errore, se è così
se è così che è il nostro mondo, allora facciamolo
parlare di asincrono ora dicono
caso asincrono ora è così componente a
invocato , delega un asincrono
chiama al componente B è fatto che può
continuare a elaborare i messaggi che può
elaborare una nuova chiamata in arrivo o può
aspetta una risposta che non ha
tutto ciò non è altro ha così
dove può questo per un componente B
a volte in seguito invia un messaggio a
componente a così dove può questo romperlo
può rompere in tutti gli stessi posti
tranne gli unici due che contano
quei due e quelli sono i due che
componenti possano sapere su di esso può
sapere se ha una connessione a
al canale di comunicazione che può
sapere se ha un bug in sé
riposa finché dura tutto il tempo
servizio di messaggistica qualunque sia la
protocollo di comunicazione qualunque cosa tu sia
usando consegnerà il messaggio
infine
non gli importa se può mandare il
messaggio che ci arriverà alla fine
non importa vincere perché è
asincrono non è bloccato non è
aspettando qualcos’altro così tutto
quelle altre componenti delle condizioni di guasto
un non deve preoccuparsi di non farlo
dobbiamo codificare per quei casi di errore che noi
non devi preoccuparti se il
database in là in uno stato non valido
oppure no, il nostro codice diventa anche più semplice
significa che può essere single threaded così
diventa ancora più semplice possiamo scrivere questi
le cose in modo efficiente che elaborano
messaggi che fluiscono attraverso il
i messaggi fluiscono attraverso il nostro sistema che prendiamo
un input che elaboriamo generiamo un
uscita e passiamo alla prossima cosa
se questo è un nuovo input o una risposta
da da un’uscita sono tutti
solo messaggi in arrivo e tutti noi giusto
elaborare quei messaggi su un singolo
filo questo va rapidamente questo in modo blisterante
è allineato al modo in cui
i processi sono architettati in questi giorni
questo significa che i tuoi cache sono
probabilmente più coerente significa che
significa che non hai intenzione di ottenere
contesa che non stai andando mai
per ottenere uno stato condiviso di tutte queste cose
se lo fai in modo efficiente, parliamo
un esempio più concreto perché lo so
queste cose astratte possono essere difficili da fare
allenati e perdonami per essere un po ‘
Cheesy ma comprerò una copia del mio
prenota quindi immaginiamo di avere un
negozio di libri e qualcuno fa un ordine
per il libro la consegna continua va bene in
il caso sincrono e stiamo andando a
bisogno di andare all’inventario per
riserva quella copia di continuo
le consegne sono di tipo ID di controllo delle scorte
quindi in questo caso in un caso sincrono a
il punto in cui l’ordine è posto
che dobbiamo fermare quel thread e
dobbiamo solo aspettare i libri
riservato cosa se è esaurito cosa
se è cosa se il sistema è giù cosa
se non si è mai sentito parlare di quel libro
quei casi che devi affrontare se
in questo caso sincrono in qualche modo
ora è immaginare l’asincrono
versione di quella stessa conversazione così noi
possiamo ordinare la consegna continua e lo siamo
andando a chiedere l’ inventario a
ci riservi una copia qualche tempo dopo lo faremo
ottenere un messaggio indietro dicendo che la copia
viene ordinato e possiamo passare tale
messaggio di backup
all’utente in definitiva per dire che il
libri sono stati ordinati questo tipo di turni
in se si immagina il codice in questi in
queste cose con cui finisci è
tipo di alcuni alcuni relativamente
macchine a stati semplici che semplicemente
gestire lo stato attraverso il flusso di
messaggi mentre la conversazione continua
quello che mi piace di questo è che il
l’implementazione di queste cose tende a
iniziare a guardare come quel tipo ideale di
modello di dominio puro Sono un grande fan di
design guidato dal dominio e questo è il
il più vicino che abbia mai avuto davvero
implementando quella simulazione software di
il tuo dominio problema all’interno di ciascuno di questi
servizi che è molto bello ragionare
circa facile da testare tutti quelli buoni
proprietà quindi immaginiamoci solo
cammina ancora una volta in questo caso ora
stiamo facendo un ordine e abbiamo ottenuto
ho un modello di un libro nel nostro dominio
modello ed è nello stato di prenotazione
perché abbiamo inviato il messaggio riservato
forse è giù forse è rotto
forse è esaurito non ci interessa
siamo dentro siamo in uno stato valido e noi
non fare altro ora, forse
c’è forse un ordine per
un altro libro in questo caso sto ordinando
meglio acrobatico che mi aspettavo
per essere un po ‘più criptico
dando l’introduzione di Jonas così è
anche nello stato di prenotazione il
l’inventario non ha nemmeno bisogno di essere
lavorando può essere rotto o potrebbe essere
solo che lentamente non ci interessa
qualche tempo dopo potrebbe essere un nanosecondo
o potrebbero essere giorni in cui avremo un
messaggio indietro dall’inventario e
abbiamo cambiato lo stato del nostro libro
dicendo che i libri sono stati
ordinato questo è in modo coerente questo è
in una scelta coerente questo ha un
visione coerente del mondo è in a
noto bene State è semplice codice semplice
gli scambi di messaggi ci stanno permettendo di fare
questi ovviamente il trucco come persone che
parlare di questo tipo di architetture
dirà sempre sta ottenendo i protocolli
giusto e ottenendo il livello di
astrazioni a destra voglio tuffarmi solo a
un po ‘ sotto le coperte per il solo tipo
di rassicurarti così così tutto questo suona
bello e facile hai queste cose dentro
memoria che elabora questi messaggi
e passando ma per quanto riguarda te
spegni la spina e per quanto riguarda
se qualcosa non funziona come dai
perdona l’affidabilità ora il sistema
su cui ho lavorato a causa del molto basso
latenza e alte prestazioni ci impongono
costruito il nostro proprio messaggio un affidabile
sistema di messaggistica che sto per descrivere
un po ‘a riguardo perché penso
è utile capire le proprietà
dietro il tipo di architetture che
Sto descrivendo che spero che tu non lo voglia
Devo implementare questo tipo di cose
te stesso per farlo funzionare
perché dovresti essere in grado di ottenere questo
fuori da una scatola ma ma per ora voglio solo
per descrivere cosa sta succedendo, ecco qui
i nostri componenti di nuovo e componente lui è
fronteggiato da un buffer ad anello e ha un
buffer circolare all’esterno
canale in uscita – il buffer dell’anello ha a
cursore e ed una serie di scanalature in modo che quando
componenti a invia un messaggio sta andando
per popolare uno degli slot ed è
andando a spostare il cursore su quello successivo
slot come così ad un certo punto quando il thread
diventa gratuito o qualunque sia un separato
thread che è impostato indipendentemente da from
ecco, così ho detto che abbiamo evitato
programmazione concorrente evitiamo dal
spingendo alcune di queste preoccupazioni verso il basso
l’ infrastruttura un po ‘in alcuni
punto decidiamo di inoltrare quel messaggio
sul componente B che sta per essere
inserito nello slot di input per il componente
B ora quando progettiamo questo sistema uno di
le ragioni per cui l’abbiamo fatto è stato perché
volevamo essere in grado di registrarli
le cose in cluster li così lui poteva noi
potrebbe come parte del meccanismo dietro
questo scriveremmo scrivere questi messaggi
su disco e scriveremmo in a
coppia di cluster prima che fossero inoltrati
alla componente B quindi questo significava che avevamo
un sistema durevole abbiamo avuto un sistema
era capace di tolleranza d’errore mettiamoci
alcuni altri messaggi nel Q ora abbiamo
ho un caso in cui abbiamo perso un messaggio
trasmissione
abbiamo inviato un messaggio per questo è stato un
mi aspetto un messaggio perché c’è un
mi aspetto il messaggio tre così dice no
questo è il messaggio sbagliato, quindi ho intenzione di farlo
rispedire un ACK dicendo che mi aspettavo
messaggio tre così questo ne ripristina il suo
il cursore e quindi resettarlo può essere
compilando più messaggi nel buffer
ma la prossima volta lo manda a
rispedire tre quattro e cinque in questo modo noi
riceviamo messaggi idempotenti che diventano affidabili
messaggistica otteniamo la capacità di cluster
e roba come una preoccupazione infrastrutturale
è al di fuori della logica aziendale di
il nostro componente non è un problema
dobbiamo preoccuparci
quindi tutte queste belle proprietà siamo noi
il sistema che abbiamo costruito era essenzialmente
essenzialmente un tipo di server delle applicazioni
potremmo scrivere semplici vecchi oggetti Java noi
potrebbe scrivere in test di processo contro di esso
e potremmo esporlo come servizio
utilizzando i questi meccanismi per consentire noi
per comunicare tra i servizi e
dacci queste proprietà che ci hanno permesso
per costruire questo in modo asincrono
sistemi reattivi di questo tipo
di tipo di abilità ci consente di disaccoppiare
che i nostri componenti sia nel tempo che
spazio non ci importa dove siamo noi
può essere trasmettere i messaggi dei
la posizione non ha molta importanza e noi
non importa quando rispondono perché
siamo asincroni che lo faranno
rispondere in un momento che è conveniente
forse sono giù nel punto in cui
inviamo il messaggio non importa forse
sono lì e loro rispondono
i microsecondi non contano, lo faremo
rispondi avremo solo un messaggio come
qualsiasi altro messaggio entri quando in
risposta questa è una delle chiavi
proprietà che ci dà la possibilità di
per rendere i sistemi elastici per essere in grado di
ridimensionali e ridimensionali possiamo
osservare gli osservatori del nostro sistema
cosa sta succedendo e decidi questo
si sta facendo un bel po ‘di lavoro che ci serve
più versioni di quello per condividere
fuori il lavoro in modo diverso
parte di parte di questo isolamento è
importante essere in grado di per questi
componenti per condividere nulla l’unico
meccanismo di scambio di informazioni
tra di loro è tramite la messaggistica
canali che è di nuovo ciò che ci dà questo
resilienza ed elasticità quindi parliamo
un po ‘ sull’isolamento, quindi questo è
tipo di un modello classico ne hai due
componenti e condividi un database e
ora ora non abbiamo questo isolamento ora
abbiamo una controversia sul punto di fallimento
e potenzialmente il punto di errore che abbiamo
ho dovuto codificare le cose in un modo per essere sicuro
questo è
efficiente non possiamo aggiornare queste cose
indipendentemente e quindi questo non è un bene
modello questo non è un buon modo di
costruire sistemi distribuiti che hanno
le proprietà che stiamo cercando
ciò che realmente vogliamo è che vogliamo
separare queste preoccupazioni che vogliamo essere
in grado di se questa cosa ha bisogno di un database
e che cosa ha bisogno di un dare di database
loro un database ma sono loro
database possono essere all’interno delle bande
del componente del servizio che la sua
business per come funziona se uno di
loro hanno bisogno di un database di oggetti e il
altri un database relazionale che è
va bene , non è un problema, quindi dobbiamo
dobbiamo consolidare questi confini e
assicurarsi che l’unico mezzo di
lo scambio di informazioni avviene tramite il
sistema di messaggistica se questo se siamo se
manterremo le proprietà di
posizione e tempora trasparenza che
stiamo parlando di te non puoi isolare
stress alla fine se un sistema sotto
sottolinea che mostrerà dove
sta andando come le cose vanno male sta andando
verrà fuori da qualche parte
lungo la linea in modo che il sistema come il
tutto ha bisogno di rispondere quando è sotto
è sotto stress è inaccettabile per a
la componente stress stress non funziona
catastroficamente e perdere perdere
informazione che è l’ importanza del
resto del sistema quindi abbiamo bisogno di quelli
tipi di fallimenti da isolare
esempio che ho dato di affidabile
sistema di messaggistica è un mezzo per fornire
un po ‘di quello dell’isolamento così
puoi tipo di replay messaggi che
è successo prima gli altri punti che è
un po ‘ mi ha sorpreso la prima volta
imparato questo, ma i segnali rappresentano un
instabile stato instabile e ho intenzione di
mostra che in un attimo dobbiamo lavorare
abbiamo bisogno di aver bisogno dell’idea di ritorno
pressione davvero per risolvere questo così
vediamo prima le code quindi andiamo
immagina di avere componenti a e
componente B di nuovo e immaginiamolo
il componente a è leggermente più lento e
il componente B è leggermente più veloce in questo
situazione le code sempre vuote
ora immaginiamo il contrario di così
immaginiamo quel componente a
leggermente più veloce e componente B leggermente
in modo più lento a parte l’inizio della
inizializzazione della cosa poi la Q
sta andando sempre ad essere pieno il modo di
carico equilibrato nella Q
è uno stato instabile , è una specie di a
bordo del coltello da cavaliere che può capitare solo
quando entrambi sono perfettamente nello stadio
in termini di velocità con cui sono
elaborare le cose e non è così
non è solo una condizione stabile
non è una condizione normale , questo è
questo è un problema cosa succede
componente a ora bene per la maggior parte di noi cosa
succede a questo punto non va bene cosa
di solito accade è quel componente a
cade forse se stiamo andando bene noi
sistema di registrazione, facciamo il nostro team operativo
lo sanno e tutti si mettono in allarme
campane e iniziare a correre cercando di
capire cosa fare dopo che non lo è
quello non è un sistema resiliente che noi
bisogno di reagire in modo diverso ciò di cui abbiamo bisogno
fare è che dobbiamo passare il
problema il backup non c’è niente
altrimenti possiamo fare o cadere
o possiamo dire che non possiamo fare altro lavoro
al momento quindi abbiamo bisogno di ricambiare
pressione e che la contropressione deve
andare tutto il viaggio di ritorno la linea
in definitiva ciò significa probabilmente per il
utente devi trovare un modo per rallentare
giù l’utente ci sono tutti i tipi di
diversi modi di applicare la contropressione
Mi sono imbattuto in uno adorabile di recente
che inizia a lavorare sul thread
sta arrivando con i messaggi e
allora stai consumando la risorsa di
la cosa che può inviare nuovi messaggi a
fare per fare il lavoro e le persone
morire di fame al fornitore, ma puoi farlo
costruire protocolli che superano il
contropressione e smettere di dare un
eccezione se sai gridare un problema
significa in qualche modo nel punto in cui
stai cercando di inviare comunicazioni
perché questo perché è il sistema
sotto stress una delle idee che è
spesso parlato in questo tipo di
sistemi distribuiti è l’idea di
consistenza finale
e rende le persone nervose ed è così
un po ‘comprensibile e penso di essere io
penso che ci sia un’idea chiave
che è spesso mancato quando si parla di
quindi immaginiamo di avere
un utente e hanno ottenuto che hanno un
vista del sistema e hanno ottenuto a
vista dei componenti a nel componente B
solitamente il componente B sta per
producendo un po ‘diverso
riflessione del mondo e che sta andando
da riflettere da qualche parte nell’utente
interfaccia questi potrebbero essere sullo stesso
stessa interfaccia utente sono solo una specie di
diversi aspetti del sistema va bene e
l’utente apporta una modifica in un unico luogo e
questo è comunicato al componente B ora
a questo punto c’è un c’è
c’è una differenza in the in
la percezione dello stato che
diverse parti del sistema in ora
questo fa un problema solo se il tuo
separazione delle preoccupazioni ti permette di
fanno un problema quindi cerchiamo di immaginare ora che
di cosa stiamo parlando , diciamo
è la libreria amazzonica va bene così questo
è il tuo questo è il tuo cestino il tuo tuo
carrello della spesa e questo è il tuo ordine
la storia importa che siano
leggermente fuori moda in quel contesto
pensa che non importa se noi
devo aspettare fino a qualche tempo dopo per
che cambia per essere preso e
riflessa in un’altra parte del sistema
finché i confini della vostra vostro
il design r-la è piuttosto all’interno
contesto limitato appropriato che
separare le loro preoccupazioni in modo appropriato
quindi la consistenza finale non ha importanza
è una rara occasione quando lo fa
e penso che sia una parte importante di
il design dei sistemi software è a
identificare il contesto limitato e fare
sicuro che gli stati stabili all’interno del
contesto limitato e quello che ha unito
contesto ha un senso in un business
contesto è una parte importante del
progettazione di questo tipo di sistemi noi
parlato per guardare abbiamo parlato un po ‘
sulla trasparenza della posizione ma elastica
sistemi devono essere in grado di reagire alle
cambiamenti nella domanda come abbiamo descritto e
se vogliamo fare quella posizione
la trasparenza è un’idea davvero importante
perché questa è la capacità di essere in grado di
capisci che non ne abbiamo abbastanza
la potenza del computer lancia qualcosa
altro che sarà in grado di fornire
quella potenza del computer e iniziare
inoltro del traffico per quella nuova cosa a
servizio se voi se tutto se tutti
il nodo componente sa dove si trova
componente è a tua conoscenza posizione
indirizzi specifici non hai quello
capacità di scalare perché poi hai
devo distribuire l’indirizzo e
mappa degli indirizzi ovunque intorno così tu
bisogno di queste cose per essere in grado di inviare
messaggi e non importa dove il ricevitore
penso che il pensiero stia andando
oltre a ciò stiamo arrivando al
fase in cui l’infrastruttura che
la gente parla e lui è dentro
alcuni casi è lì non importa
se un servizio è sul
stessa scatola di un altro o di un altro
continente possono comunicare con uno
un altro effettivamente ho già menzionato
che sai che il calcolo distribuito è
diventare competitivo un Civ e essere
onesti come esseri umani non siamo molto
bravo a farlo non siamo molto bravi a
pensandoci così, così abbiamo
per trovare modelli che ci permettono di lavorare in
in questo modo, senza doversi preoccupare di
le preoccupazioni molto difficili di
calcolo simultaneo e quel tipo di
cosa penso che penso se tu sei a meno
sei uno specialista se lo sei se lo sei
lavorare a quel livello di livello che sta per succedere
essere molto, molto difficile e uniforme
gli specialisti non diventerebbero galleggianti
preoccupazioni di lavorare preoccupati
calcolo multi-thread e concorrenza
insieme a lavorare preoccupati per il
problema del dominio che stanno cercando di risolvere
quelle sono preoccupazioni che devono essere
separato anche dai migliori programmatori se
andiamo a costruire sistemi efficienti e
anche questo è uno dei motivi per cui
idee come un messaggio di sincronia che passa
e la trasparenza della posizione sono importanti
quindi parliamo un po ‘ di oggi
quell’idea di scalabilità quindi abbiamo di nuovo ottenuto
componenti a cui inviare messaggi
componente B
okay, questo è un modello che abbiamo
versione del componente B che può
elabora tutti i messaggi e questo è
bene cosa succede quando il componente B non può
mantieni il passo con la domanda
bene possiamo costruire nella capacità di
capire in base al contenuto del
messaggi dove inviarli e avere due
versioni del componente B che sono servizi
forse diverse parti della messaggistica
è su determinati intervalli di account
forse è su diversi tipi di
i messaggi non sanno ma possono essere
in grado di rompere che a parte è un’opzione
questo è disponibile per te quando hai
questa separazione tra i messaggi di
la messaggistica del sistema e la posizione
trasparenza quindi penso che sia moderno
l’hardware dovrebbe cambiare le nostre ipotesi
del modo in cui progettiamo e
sviluppare software uno dei più grandi
i problemi che affrontiamo sono i costi di
spostamento di ram a distanza di dati non casuali
il disco di accesso non è SSD ad accesso casuale
non sono un accesso casuale ciascuno di questi
le cose in termini di prestazioni hanno un
i dischi a profilo variabile sono i più facili da usare
capire sai qualsiasi qualsiasi momento
ci tocchi
per provare e ottenere un morso da un disco che hai
devo aspettare che il disco giri intorno
per ottenere il settore giusto che potrebbe essere necessario
muovi le teste in una certa posizione per
prendi la strada giusta e così via Ram
a causa di tutto il caching
a seconda se si ottiene un colpo di cache
o un miss miss mi manca un drammatico
differenza nella prestazione di quello
migliaia di volte diversi SSD sono
Blocca i dispositivi su cui marciscono se sono
stai scrivendo dati che sono a
penalità di tempo drammaticamente diversa per
leggere i dati e tutte queste cose
non è semplice, è roba del genere
è più complicato di quanto sembri
l’altro grande cambiamento che io certamente se
sei vecchio come me, c’è una specie di
ipotesi integrato che sono cresciuto con
nel mio campo di programmazione
la carriera era che Ram era veloce
la rete era lenta e il disco era da qualche parte
nel mezzo e che è solo sbagliato
Le reti lente di RAM rallentano il disco più lentamente
ci sono alcune reti che possono essere
più veloce in alcune circostanze siamo
arrivare al punto in cui ci sono
alcune topologie di rete che possono essere
più veloce di un accesso Ram ci sono
certamente il disco è notevolmente più lento
di rete Rams cambiando RAM RAM
cambio penso che siamo diventati enormi
Ram non volatile che sta bussando al
porta potrebbe essere un paio di anni in basso
pista, ma lui non è molto molti anni giù
la traccia e questo cambia anche il gioco
quindi dobbiamo pensare a nuovi modi
di architettare i nostri sistemi nei vecchi modi
sono costruiti sui compromessi che erano
imposto su di noi da determinate prestazioni
profili in hardware che eravamo
tutti abituati e quelli che compromettono quelli
le assunzioni non tengono più questo è il
La legge di Conway obbligatoria scivola se tu
non ho sentito parlare della legge di Conway
l’idea è che l’architettura di
il tuo sistema verrà specchiato rispecchierà
la struttura organizzativa del tuo di
l’organizzazione che l’ha creato così se
hai un’organizzazione gerarchica
con squadre a squadre che probabilmente costruirai
un’architettura multi-livello come quella
se hai una squadra distribuita un gruppo
di piccola distribuzione cross-funzionale
squadre che probabilmente costruirai qualcosa
sembra più che sia gentile
di microservice territorio questo è gentile
di questi sono i tipi di sistemi che
stiamo parlando di cui stavamo parlando
su queste queste discrete unità di
elaborazione liberamente accoppiato da uno
un altro utilizzando la messaggistica asincrona
che è micro servizi plus plus a
dacci l’elasticità della resilienza e
scalabilità che noi e reattività
che esigiamo di aver menzionato questa idea
un paio di volte già ed è stato
menzionato nel precedente oratore
così come il contesto complesso il tipo di chiave per
questo in termini di essere in grado di disegnare il
linee attorno ai componenti che noi
costruire in modo appropriato con cui stavo parlando
Jonas all’ora di pranzo e stava dicendo
che è spesso difficile da fare
capire quale sia la migliore programmazione
modello è quello di presentare per alcuni dei
cose perché anche le persone lo prendono
vista semplicistica a volte e sono dispiaciute
Sto mettendo le parole in bocca che lui
non ha parlato ma ma loro lo faranno
rendere tutto una comunicazione remota
chiama devi riflettere attentamente
quali sono i confini di un servizio vendere
cosa cosa cosa racchiude questa cosa
e quelli dovrebbero essere allineati con
contesto aziendale che devi pensare
con attenzione anche se i confini
la squadra e cosa loro
le responsabilità sono e dovrebbero :
dovrebbe essere consentito allineato con delimitato
contesto quei fossati potrebbero essere diversi
componenti all’interno di quel contesto limitato
per rendere la distribuzione ragionevole del lavoro
ma è importante ottenere queste cose
giusto quello che stiamo cercando fino in fondo
in fondo è quello di ridurre al minimo l’accoppiamento
stiamo cercando di minimizzare l’accoppiamento
tra le squadre e ci stiamo provando
minimizzare l’accoppiamento tra i servizi
così quando arriviamo al punto a
di cui abbiamo questi asincroni
conversazioni hanno senso lì
dal momento che sono semplici e diretti
non sono chiacchieroni, non mi danno
questo bit o dammi questo byte o tu
sappi dammi quel numero e quel numero
e li aggiungerò insieme di cui abbiamo bisogno
per progettare i protocolli per assicurarsi
che loro sono sensibili e
accoppiato liberamente il tipo di immagine mentale
che ho di questo è se immagini un
organizzazione senza computer e a
serie di uffici che fanno parti diverse
del lavoro della loro organizzazione all’interno
quegli uffici è giù per le persone
organizzarsi secondo le proprie esigenze
e gli uffici comunicano con uno
un altro dai messaggi ora immagina cosa
sai come progetteresti un sistema
come quello di lavorare è un po ‘come noi
vuole progettare i nostri servizi che vogliamo
questi semplici scambi di informazioni
idealmente se fossimo in grado di visualizzare il
messaggi che fluiscono tra questi
componenti che probabilmente ha senso se
sono una specie di cose di quel genere
qualcuno capisce il problema
dominio che un utente aziendale potrebbe capire
come parte della conversazione che ti vogliamo
conosci posto questo ordine è stata questa cosa
ordinato prenotare questo articolo quelli
tipi di idee di questo tipo relativamente
scambi di informazioni ad alto livello
tra i due sistemi
e dovremmo dovremmo guardare a
una delle idee chiave di banding in
contesto limitato che è davvero importante
è quello nei punti in cui noi
scambiare informazioni tra delimitate
contesto che è un punto di traduzione così
anche se sia quello in due contesto limitato
abbiamo il concetto di account che sono
sono diversi sono diversi
versioni dell’account che potrebbero condividere a
chiave comune a cui potrebbero riferirsi
lo stesso conteggio ma una versione di domini
la vista di un account sta per essere
separati dagli altri, ecco qui
un tipo tipico di alto livello di
diagramma architettonico del sistema che
abbiamo costruito questo è piuttosto un preavviso
piuttosto tenere questo sistema ora è ancora
uno degli scambi più performanti
nel mondo quindi abbiamo avuto i nostri servizi
e i nostri servizi erano abbastanza ragionevoli
grande sulla scala dei micro servizi per
alcune di quelle cose ma erano
contesto limitato sensibile abbiamo avuto corrispondenza
motori per dove vorremmo fare offerte
dove dovremmo fare le operazioni abbiamo avuto un account
servizi di gestione degli account di servizio
dove dovremmo gestire la posizione dal vivo
di persone che commerciavamo
servizio di cronologia degli account dove vorremmo
registra cosa stava succedendo ulteriormente
storicamente ciò che le persone avevano fatto
e così via li abbiamo divisi
in tre gruppi quindi c’è l’idea di
servizi del corso quelli erano i servizi
quelli erano questi erano i più alti
cose di prestazioni queste erano le cose
che stavano facendo la nostra logica aziendale
queste cose erano queste erano una specie di
sistemi di registrazione è il sistema di
registrare era lo stato in memoria di questi
cose e queste cose potrebbero farli volare
stavano servendo centinaia di migliaia di
messaggi al secondo molto facilmente in
microsecondi abbiamo avuto servizi generali
questi erano più lenti di più
il tipo tradizionale di servizi ora più
organizzazioni penso che questi siano i
tipi di servizi che avrebbero costruito
in questo tipo di modello erano queste cose
spesso supportato da un database ma come ho detto
prima della separazione delle preoccupazioni
che abbiamo avuto come risultato del modo in cui
organizzerebbe il loro contesto di raggruppamento
i dati in tempo reale per il trading erano solo esistiti
qui per commerciare non aveva
a voi tipo è passato attraverso gli strati
per arrivare qui, ma questo è dove mestieri
è successo e tu non dovevi andare
altrove nel processo di
eseguire uno scambio che non era necessario
chiedi qualcos’altro per farlo, se tu
volevo cercare la cronologia del tuo account
d’altra parte che era una specie di cosa
commerci che hai fatto prima che sia qui ora
la coerenza finale significa che lo sai
che alla fine sarebbe corretto ma lui
sarebbe al punto che il punto vivo
di trading questo non era esattamente fino a
appuntamento con quello che stava succedendo qui
ma non importa, perché nessuno
curato se la cronologia del loro account non lo era
microsecondo in linea con il commercio
sono live trading al momento
preoccupazioni separate abbiamo anche avuto un sacco di
quelli che chiamiamo servizi gateway erano
servizi di traduzione in modo che così siamo
interagendo con diversi protocolli
diversi sistemi diversi endpoint noi
stavano fornendo pubblico accesso al web
API è possibile scrivere i propri BOT a
arrivare a commerciare contro il sistema che eravamo
fornendo aiuti istituzionali a bi te
userebbe il protocollo fisso che è a
protocollo di scambio di informazioni finanziarie
questo è comune nel settore e molto
di altri posti e quindi di tutti esterni
arrivarono le lattine di comunicazione
attraverso uno di questi servizi gateway
queste cose erano di tipo Border Patrol
quindi tradurrebbero i messaggi in a
forma che sarebbe il resto del sistema
capire il resto del sistema sarebbe
tipo di parlare usando la trasmissione
messaggistica asincrona tra tutti
i servizi e poi lo farebbero
traduci i messaggi in qualsiasi cosa
il protocollo era rilevante per poterlo fare
questo lavoro non era solo molto alto
sistema di prestazioni è stato anche il più
sistema efficiente che abbia mai funzionato
in entrata in termini di potere
fare un nuovo lavoro perché ognuno di questi
i servizi erano single threaded anche il
high-tech seriamente performante
cose perché tutto era single
filettato era era semplice
ragionare perché era un ricco
modello di dominio asso
simulazione del nostro dominio problematico in
memoria era semplice ragionarli
ed è stato semplice testare anche noi
la proprietà veramente adorabile che se noi
ho visto un errore nella produzione che potremmo prendere
i messaggi D che provenivano dalla produzione
riprodurli attraverso il sistema in un test
ambiente e recuperarlo
esattamente lo stesso stato e poi il debug
in un ambiente di test non c’erano
molti sistemi su cui ho lavorato
potresti farlo nella stessa misura
questo è completamente deterministico
sistema in quel caso lo era anche
estremamente scalabile perché potremmo
basta ritagliare la messaggistica
messaggi a qualsiasi livello se fossimo
avevamo bisogno di più motori di corrispondenza che potessimo
aggiungere altri motori di corrispondenza, se lo volessimo
più servizi di account potremmo farlo
tutte queste cose
ovunque guardi il punto di conflitto
era anche da dove cominciare
purtroppo non penso che ci sia
infrastruttura che fa esattamente cosa
Ho appena descritto che penso che questo io
sapere di due o tre persone che sono
lavorando su cose come quelle akka è una cosa sola
una versione di fare le cose che fa di più
di quanto ho descritto e in qualche modo
meno c’è una cosa nuova dalla sfilata di gatti
chiamato tempo Barrow che è stato influenzato
dall’architettura Lmax che sono stato
descrivendoti e loro ne hanno presi un po ‘
delle idee per fare alcune cose
che penso sia sbagliato includere
supporto di messaggistica sincrona che io
pensare è un errore, non ci penso
dovrebbe supportare sincrono
messaggistica in questi tipi di sistemi così
se ci provi prova queste cose penso a
la cura è di gran lunga la più matura e
robusto ma dai un’occhiata a queste cose
se queste idee ti attirano ed esplorano
ma ricordati di ricordare quella chiave
i vincoli riguardano la progettazione del tuo
servizi all’interno di questi contesti limitati
e assicurandoti che tu sia come il
mito i luoghi di scambio sono
accoppiato sciolto a livello di protocollo no
solo a livello tecnico sono io
ma questa è la fine del mio discorso così
Penso di avere qualche minuto per
domande
grazie a tutte le domande hey come puoi
rendere l’interfaccia utente asincrona
è una domanda?
bene così è se sembra che sembra
naturale per essere sincrono ma tu hai
mi hai appena fatto una domanda sei ancora
stai ancora pensando che tu stia ancora facendo
altre cose e ora sto tornando a
tu con una risposta qualche tempo dopo, così noi
possiamo spingere fuori tre asincroni che possiamo fare
possiamo progettare le nostre interazioni da fare
che ora i protocolli su cui sai
comunemente lavoriamo non sono necessariamente
costruito con quelle supposizioni in penso
è qualcosa che dovrebbe cambiare
Sto scrivendo alcuni software in questo momento
che ha una sorta di interfaccia web
e ho spinto in entrambe le direzioni così ho
Inserisco qualcosa per il mio messaggio
canale e quando un servizio vuole
avvisare l’utente di qualcosa che può inviare
un messaggio in questo sarà in modo asincrono
consegnato alla pagina web anche questo
il modo in cui il modello di app Elm ha funzionato
quindi puoi scrivere un modello nel tuo interno
la tua pagina web in qualunque sia la tua preferita
il linguaggio di sviluppo web è o il tuo utente
interfaccia qualunque sia la natura dell’utente
interfacce e rispondere a quegli eventi
ora 99.99999 percento delle volte questo
sarà più veloce o più veloce di a
chiamata sincrona ma quei pochi per cento
dei tempi in cui qualcosa è rotto
non importa che sia ancora
andrà tutto bene, ci riprenderemo prima o poi
successivamente si sta andando per evitare che codifica per
condizioni di errore imbarazzanti ci vuole a
interruttore mentale ci vuole un cambiamento in
avvicino Penso che un po ‘, ma penso
almeno un codice più semplice ma basta
è solo un modo leggermente diverso di
pensandoci più domande
è il ma ripeterò la domanda
ci sono alcuni vantaggi in
usando questo tipo di approccio in un locale
sistema noi non sei distribuito non io
significa distribuirlo penso che penso
che ci sono così penso che tu guadagni
i vantaggi della codifica Inc più semplice
pratiche perché si evita questo errore
condizioni e ottieni anche prestazioni
questo è più alto ma è più alto
architettura delle prestazioni per misura
Voglio dire che so che noi abbiamo misurato esso
misurato l’inferno da questa roba a
ottenere livelli di prestazioni simili
stiamo parlando per lo scambio e
abbiamo provato ogni sorta di cose diverse
prima di arrivare a questo e ci abbiamo provato
provato tutti i tipi di architetture classiche
abbiamo provato a fare cose intelligenti come
allocare lavoro ai thread e abbiamo speso
più tempo a dedicare il lavoro ai thread
di quanto abbiamo effettivamente eseguito il lavoro
discussioni che è il motivo per cui abbiamo finito con un
cosa a singolo thread questo è questo è un
modo molto efficiente di calcolare è
anche il modo che i nostri processi di lavoro è
si allinea perfettamente anche con il modo
quell’hardware sta andando così lo penso anch’io
penso che sia un uso efficiente dell’hardware
quindi penso che ci siano molti pi
credo che ci siano dei benefici se lo sono
Onesto, io non voglio scrivere
codice in un altro modo rispetto a questo perché
questo mi dà la libertà di scrivere il
ricchi per i miei modelli di dominio che mi piace
scrivere come parte del mio sviluppo e
la libertà di essere in grado di ridimensionarlo se
Voglio e distribuirlo se voglio
quindi penso che ci sono benefici che questo
tipo di architettura anche per single
anche se stai cullando app per telefoni cellulari
quindi tendo a pensare a
scrivendo in questo modo dobbiamo arrivare
il livello in cui c’è un migliore
sostenendo dagli strumenti e
infrastrutture intorno a questo e come ho detto
sono ora un paio di progetti che sono
lavorando alla costruzione di quel supporto in
varie aree e spero che stia arrivando
presto perché penso che questo sia ciò che penso
è un interessante passo in avanti
approccio di programmazione
questa è una grande domanda
Mi limiterò a ripetere la domanda se se
abbiamo due squadre che guardano in modo diverso
contesto limitato e sono accoppiati
che stanno scambiando informazioni con
messaggistica che è responsabile per il
lo scambio tra loro è fantastico
domanda e non penso che nessuno abbia
una risposta lì tutti parlano
A proposito di micro-servizi al momento della
organizzazioni che sono probabilmente la maggior parte
maturare microservices al momento è
iniziando a sentire il dolore e
i micro-servizi ti danno qualcosa di meraviglioso
cose come Yui ti danno il
capacità di scala che hanno un sacco di
persone che lavorano su cose indipendenti ma
i protocolli nel tempo ottengono di più e
più importante e penso che Netflix
Amazon e gente così stanno iniziando
per rendersene conto e hanno iniziato a farlo
preoccuparsi di come possono essere più rigidi
nella definizione dei protocolli e
la gestione delle dipendenze il
altro modo quindi per il tipo classico di
micro architettura di servizi molti piccoli
le squadre diventate più grandi
scalabilità grande indipendenza del
squadre e al costo di chi è
responsabile per la croce Pro la croce
comunicazione della squadra l’altro modo di
farlo è costruire un monolite mil
può ancora costruire un micro servizio
architettura sei ancora reattivo
sistema allora il sistema L max era molti
servizi individuali ma in realtà lo era
di proprietà di tutto il team ed è stato
rilasciato insieme come uno così ci siamo abbassati
quel problema perché il protocollo era
sempre la versione era sempre allo stesso
livello abbiamo evitato la dipendenza
problema tra più versioni del
protocollo facendolo uscire da uno
squadra e tu puoi farlo e quello
funziona bene, ma questo arriva al
il costo di te va nella direzione di a
dispiegamento monolitico singolo più grande
infrastruttura di prova , se stai facendo
consegna continua e tutti i tuoi
test è necessario ridimensionarlo meglio
devi investire anche in questo
per farlo funzionare e questo è un po ‘
livello anche se puoi ancora avere abbastanza
c’è molta autonomia in piccoli gruppi
un po ‘di compromesso anche con quello
quindi non penso che ci sia un argento
proiettile risposta a questa domanda penso
è un problema veramente difficile e io no
pensa che qualcuno abbia una risposta perfetta
è un compromesso in entrambi i casi e tu
tipo di prende i soldi che metti il tuo
soldi e prende la tua scelta
questa è una buona tendo a nasconderlo in
il Gateway quindi prova a creare il Gateway
nascondere la sincronia dal resto del
sistema e quello potrebbe essere ingannevole ma
significa che il Gateway sarà brutto e
più complesso di quello che vuoi essere ma
questo è il tipo di spessore della vita
questo è quello che avrebbe dovuto affrontare in
questa circostanza ma avrei voluto
isolarlo il più lontano possibile
banda del sistema il tipo di
la pura semplicità di te è che non puoi nasconderti
quello a che quello è incremento che
lo stile sincrono segreto che vuoi
è per questo che vuoi sapere una volta che vai
lungo il segreto la rotta asincrona
deve essere quasi un corso base tutto
il modo, ma si può tipo di compromesso
è un po ‘lo stesso problema con esso
sai che un database commesso è gentile
di un’azione sincrona e per me
che di solito è troppo lento per me vuole
per prendere il costo ma devi limitare
i dati al database quindi ci sono modi
di isolare utilizzando un l’altro penso
a proposito dell’agente Lee è una specie di a
protocollo di comunicazione fondamentale quindi
puoi creare altre cose su
in alto , quindi non puoi nasconderti
sincrono e ness con una sincronia di
alcuni trucchi intelligenti ma il gateway
il servizio gateway sarà più complesso e
più brutto di quello che vuoi che sia dispiaciuto
ripetermi altre domande no
ok, sarò arrestato
tu
lavorare molto prima di andare dritto
nelle mie presentazioni in questo caso
sento che probabilmente dovrei leggermente
ho bisogno di darti un po ‘di
sfondo di dove alcune di queste cose
viene da così prima di tutto ho un
confessione per far sì che io non sia un funzionario
programmatore I’m I am an I’m a old-school
programmatore Faccio orientamento agli oggetti no no
non mi piace lambda e faccio alcuni di quelli
genere di cose ma non sono funzionale
programmatore quindi non ho intenzione di parlare
riguardo l’algebra, non ho intenzione di parlare
sulle monadi non parlerò
su questo genere di cose
Penso che queste preoccupazioni separate quando
stiamo parlando di questa roba e io
pensa spesso quando parliamo di reattivo
programmare le preoccupazioni si confondono
il motivo per cui penso di averlo
qualcosa da dire anche su questo argomento
come aiutare a modificare il reattivo
manifesto e facendo alcuni contributi
è come ho lavorato su di lei su uno di quelli
progetti che arrivano così tanto
una volta nella tua carriera e questo progetto è stato
per costruire una frequenza elevata a bassa latenza
scambio commerciale da foglio bianco di
carta nel momento in cui abbiamo iniziato
scrivendo questo non sapevamo come farlo
non ne avevamo la minima idea e così abbiamo fatto molto
di cose per cercare di imparare cosa
era quello che dovevamo fare e parte di
cosa ci siamo evoluti attraverso il nostro sperimentale
approccio era penso quello che hai descritto
come architettura reattiva di un micro servizio
ma ad alte prestazioni e io
voglio descrivere alcuni dei motivi per cui
questo è e alcune delle ragioni per cui
funziona e parlerò a
livello ragionevolmente alto su alcuni di
queste cose quindi non c’è molto lì
non c’è codice in questa presentazione, non lo è
tich dettagliato è tipo di tipo dettagliato
di computer science ha livello
forse ma ma non c’è non c’è
la matematica così o posso pensare così così parte
del motivo per cui queste cose sono importanti
perché il nostro mondo sta cambiando e le persone
continua a dirti questo a questo
conferenza penso ma è ma è
vero
se guardi, sai dove eravamo
solo dieci anni fa il sistema tipico
erano decine di server forse aveva secondi
di tempo di risposta e ore per offline
manutenzione e probabilmente trattata
gigabyte di dati che era una specie di
normale sorta di ragionevolmente grande
sistema di scala aziendale in quei giorni io
pensa ora che le grandi applicazioni hanno ora
migliaia di processori multi-core
millisecondi di tempo di risposta o più veloce
100% di tempo di attività e petabyte di dati
non è insolito in questi giorni se tu
guarda se guardi solo alla memoria
Non sono abbastanza vecchio da avere
memoria di ferrite programmata ma se
ma ma ma ho usato per avere uno di questi
in mia moglie l’ho buttato via ero veramente io
è stato davvero deluso quando l’ha fatto ma
ma questa è una memoria di nucleo di ferrite
unitevi ciascuno di questi ciascuno di questi piccoli
gli anelli magnetici sono circa tre
millimetri di diametro e ciascuno di
quelli rappresenta un po ‘così quel blocco
di cose ci sono otto byte okay questo
è una scheda SD micro SD card che è
otto gigabyte quindi è un po ‘dove
veniamo quindi, questo è un po ‘più lungo di dieci
anni fa è una specie di anni ’70
la tecnologia in cui si trovano le cose
usando te circondano questo tipo di
tempo ma siamo arrivati molto lontano
non è questo è un altro questo è giusto
dieci anni quindi questo è 128 megabyte
questo è 128 gigabyte il gioco è
cambiando e la tag line per il
manifesto reattivo è il 21 ° secolo
problemi e non meglio risolto con 21st
Architetture del 20 ° secolo, se lo fossimo
costruire nella tua architettura è
supportato da un database relazionale che non lo è
un’opzione davvero scalabile non è come
Yanis stava dicendo nella sua
presentazione che ha dato il via a questa pista
non è come si costruisce resiliente
sistemi è ora come si costruisce scalabile
sistemi non è come si costruiscono i sistemi
che puoi distribuire in tutto il tempo
non è come si costruiscono sistemi che possono
essere elastico e che può crescere e
può ridursi così siamo arrivati a mi è stato
coinvolto nella riscrittura dell’agile
manifesto molte delle idee erano in
posto prima del libro di Lynne che abbiamo inventato
un modo di parlarne e questo è
parte di quello di cui stavamo parlando quindi se
vogliamo che il nostro sistema sia reattivo
voglio che siano in grado di reagire a
i nostri utenti in modo efficiente e rapido e in
per fare ciò che devono essere
resilienti hanno bisogno di essere robusti nel
affrontare il fallimento e continuare a fornire
servizi se vogliamo che siano resilienti
abbiamo anche bisogno che siano elastici
allungare e muovere e crescere e
restringere per soddisfare la domanda e abbiamo bisogno di incontrarci
essere guidati dai messaggi per supportare tutti
di quelle cose che sono il fondamento
substrato che ci ha permesso di fare questi
altre cose e voglio descrivere a
un po ‘sul perché penso che sia il
caso così primi sistemi reattivi quindi noi
individuare un sistema reattivo è reattivo
ciò significa che risponde in modo tempestivo
modo questo è la pietra angolare di
riusabilità questo è questo è davvero quello che
la gente intende quando si dice spesso quando
Dicono che è inutilizzabile che tu possa averti
può avere scarsa usabilità in termini di a
modello mentale del sistema sottostante
ma se reagisce bene otterrà un
risposta migliore di qualcosa che è
ha una buona usabilità e reagisce male è
anche veloce per rilevare i problemi che vogliamo
essere in grado di capire quando qualcosa è
andare storto ed essere in grado di
fare qualcosa che abbiamo bisogno di loro per
essere resilienti , vogliamo che siano
reattivo di fronte al fallimento che abbiamo
ho ottenuto il microscopio obbligatorio Monty
Illusione di Python qui vogliamo che siano
reattivo nel di fronte al fallimento
la resilienza dipende dalla replica
contenimento e isolamento e delega
per essere sicuri di essere
in grado di contenere i fallimenti e tu sai
con grazia degra degrada il
comportamento del nostro sistema per incontrarci
domanda ed elasticità reattiva
è importante ed è un po ‘in crescita
come growingly importante nella la
mondo del cloud dove sai se
stai usando Amazon ec2 e tu semplicemente
tipo di fornitura di tutti i tuoi server e
li lasci tutti in esecuzione che puoi
ottenere un conto molto grande alla fine del
mese in cui vuoi che ridimensionino come
bene come vuoi che tu voglia avere
il giusto numero della giusta quantità di
calcolare per soddisfare le esigenze del tuo
sistema
e per farlo abbiamo bisogno di avere un
architettura decentralizzata con no
punti di contesa e dobbiamo essere in grado
per spingere fuori e comportamento in coccio
modi diversi un messaggio asincrono
passare è il fondamento di questo
approccio di tutte queste proprietà e
questo è ciò che ci dà l’accoppiamento libero
l’isolamento e la trasparenza della posizione
questo ci permette di fare queste altre cose
se vai via da questa presentazione
con una sola idea in testa, voglio che tu lo faccia
vai via con l’idea che voglio che tu vada
via con due idee nella tua testa
cenno il primo è che asincrono
la messaggistica è la risposta a molti dei nostri
problemi nel calcolo e il secondo
non è così spaventoso come sembra così così
quali sono le proprietà di un reattivo
sistema in modo che possano essere flessibili
comporli in modi diversi
accoppiato liberamente là non sono
strettamente legati l’uno all’altro così da parti di
il sistema può evolvere a ritmi diversi
ad altre parti del sistema che sono
scalabile possiamo aumentare la fornitura di
servizio aggiungendo un nuovo calcolo di calcolo
nuovi nodi sicuramente nuove nuove versioni di
il servizio sono più facili da sviluppare
e penso che potresti dubitare di me
quello ma spero che alla fine
della presentazione che non spero
Ho intenzione di dimostrare alcuni dei
ragioni per cui credo che sia il
vera la verità di cui sono più tolleranti
fallimento perché possiamo farlo
asincrono e quindi non tagliare l’imbarco
tempo così qualcosa può andare giù e possiamo
rispondere ad esso più tardi quando ritorna
up fino a quando si ottiene il messaggio e
tutto quel genere di cose a cui rispondono
fallimento con garbo e loro sono
reattivo agli utenti anche se è così
uno di quei quattro principi che siamo
mirare alla cosa strana di questo è
è una specie di frattale in architettura
queste idee funzionano a tutte le scale
Recentemente ho partecipato a un corso su
programmazione a bassa latenza senza blocco gestita da
Martyn Thompson, amico mio che eravamo
parlando di prima
e una delle cose che lui lui
stava descrivendo era il modo in cui
i processi moderni al loro interno sono un messaggio
guidato da unità di calcolo asincrone ciascuna
dei nuclei sono collegati da un bus e
passano messaggi tra uno
un altro per ottenere la memoria nella cache così
a livello del silicio su cui il nostro
il codice gestisce il modo in cui il codice
il codice è scomposto in parallelo
percorsi di esecuzione da parte del processore
quello è un sistema reattivo è un it’s a
sistema asincrono basato su messaggio ma
anche questo è scalabile
il modo in cui funziona Netflix e Facebook
scale e quel genere di cose sono
costruito in questo modo perché questo è quello che tu
bisogno di fare quando hai il tipo di
livelli di domanda di cui abbiamo parlato
sui livelli di elaborazione dei dati e
CPU e grandi sistemi sono composti
di questi componenti reattivi più piccoli
beh, questo non significa che dobbiamo farlo
fare stili di programmazione molto bizzarri
ad ogni livello di granularità e lo farò
parlare di più su che più tardi sì, è una
delle cose in cui penso di pensare il
la conversazione si confonde quando noi
confondere la conversazione sul reattivo
sistemi e programmazione funzionale lì
è un crossover perché siamo entrambi
parlando l’uso di parlare spesso
sull’uso di una sincronia quando sei
parlando di funzionale reattivo
architetture e sistemi reattivi ma
non sono necessariamente la stessa cosa
puoi farne uno puoi farne uno senza
l’altro quindi passerò attraverso
varie foto come questa e basta provare
e scomporre questo un po ‘così prima voglio
per parlare di messaggistica sincrona ora
se guardi il mondo, penso che sia
abbastanza difficile da confutare che il
il mondo è praticamente asincrono e noi
i programmatori hanno un po ‘di strati
Pensiero sincrono in cima al mondo
perché è più facile per noi ragionare
a riguardo quindi è facile è molto più facile
per noi di pensare che voglio voglio
aggiungere aggiungere al mio saldo del conto, quindi sono
sto per dirti cosa voglio
aggiungere e poi mi dirà
che è stato aggiunto in questo è facile
capisco che è semplice e il mio programma
si ferma e aspetta quella risposta a
tornare ma ci sono problemi con
quel modello quindi immaginiamo di averlo
questi due componenti e componente a è
invocato con un certo comportamento e
delega parte di tale comportamento a
componente B quindi se stiamo parlando di questo
modello sincrono ora poi ci sono a
numero di posti in cui questa conversazione
può andare storto, quindi potrebbe esserci un bug in
componente a potrebbe esserci un problema
stabilire la connessione con
canale di comunicazione alla comunità di
componente B potremmo avere una perdita in
trasmissione come il messaggio va in mezzo
i componenti a nel componente B potrebbero esserci
è stato un problema con il componente B
collegamento al canale di comunicazione
alla fine potrebbe esserci un bug in
componente B e abbiamo lo stesso set
di problemi sulla via del ritorno ad oggi
qualsiasi sistema distribuito abbiamo tutto
questi problemi quindi se stiamo facendo un
chiamata sincrona abbiamo tutti questi
problemi ora c’è una difficoltà con
questo con sincronicità perché
dal punto di vista del componente a it
posso solo sapere bene che può solo sapere se
c’è un suo fallimento o se lo è
non è possibile stabilire una connessione tutto
altrimenti non può dire la differenza
tutto se non ottiene una risposta
non sa dove il componente B
è stato rotto con il messaggio è stato perso e
quindi ha tutti questi casi di errore in
affrontare peggio di quello che intendo nel
stessa situazione e componente a sta facendo
alcune elaborazioni delegate il
componente B ora ha il peso di a
componente B per finire prima che possa fare
più elaborazione ne ho solo due
componente questi fatto possono componenti loro
può continuare a elaborare c’è il tipo
di definizione di una chiamata sincrona
proprio nel modo in cui otteniamo, così siamo
costruendo sistemi multiutente cosa noi
il modo in cui ci aggiriamo è questo che noi
cominciamo a pensare bene, ma in un certo senso lo blocchiamo
su una sola discussione quindi dovremo andare
multi-threaded right quindi ora abbiamo
molti problemi quindi ora ci sono aggiunti
complessità alla nostra implementazione di
componente a cui dobbiamo preoccuparci
su tutti i problemi di
contesa multi-threading
evitando lo stato condiviso concorrente
la programmazione è una delle più diverse
cose difficili che facciamo nel nostro in
la nostra industria e dobbiamo fare tutto
che solo per aggirare il problema di
perché uno di questi thread è in attesa
per una risposta dal componente B
la comunicazione sincrona aumenta il
accoppiamento in entrambi i luoghi e il tempo
tra i componenti lo rende di più
difficile per noi ridimensionare e rende
siamo più esposti a più casi di fallimento
facciamo lo stesso esperimento e pensiamo
su quello che sembra con lo stesso
pensate agli esperimenti e pensate a cosa
sembra con asincrono
messaggistica così ora abbiamo lo stesso
situazione c’è un comportamento che è
stato invocato in modo asincrono sul componente
a e a sta per scusarmi, mi dispiace
superando me stesso questo è ancora un
caso sincrono quindi questo è un
caso sincrono in cui il componente B è
ora delegando a qualcos’altro in questo
caso sta parlando a un database e
abbiamo altre modalità di errore che
sono anche nascosti dal detto del componente
abbiamo appena aggravato il problema
termini dei fallimenti che abbiamo avuto
esprimere indietro e tornare al componente a
quindi i componenti a sono ancora più a rischio ora
peggio di così se ci fosse un fallimento
nel canale sulla via del ritorno cosa
afferma l’ anello dei dati che non sappiamo è
indeterminato e quindi abbiamo un codice
per tutti quei casi di errore, se è così
se è così che è il nostro mondo, allora facciamolo
parlare di asincrono ora dicono
caso asincrono ora è così componente a
invocato , delega un asincrono
chiama al componente B è fatto che può
continuare a elaborare i messaggi che può
elaborare una nuova chiamata in arrivo o può
aspetta una risposta che non ha
tutto ciò non è altro ha così
dove può questo per un componente B
a volte in seguito invia un messaggio a
componente a così dove può questo romperlo
può rompere in tutti gli stessi posti
tranne gli unici due che contano
quei due e quelli sono i due che
componenti possano sapere su di esso può
sapere se ha una connessione a
al canale di comunicazione che può
sapere se ha un bug in sé
riposa finché dura tutto il tempo
servizio di messaggistica qualunque sia la
protocollo di comunicazione qualunque cosa tu sia
usando consegnerà il messaggio
infine
non gli importa se può mandare il
messaggio che ci arriverà alla fine
non importa vincere perché è
asincrono non è bloccato non è
aspettando qualcos’altro così tutto
quelle altre componenti delle condizioni di guasto
un non deve preoccuparsi di non farlo
dobbiamo codificare per quei casi di errore che noi
non devi preoccuparti se il
database in là in uno stato non valido
oppure no, il nostro codice diventa anche più semplice
significa che può essere single threaded così
diventa ancora più semplice possiamo scrivere questi
le cose in modo efficiente che elaborano
messaggi che fluiscono attraverso il
i messaggi fluiscono attraverso il nostro sistema che prendiamo
un input che elaboriamo generiamo un
uscita e passiamo alla prossima cosa
se questo è un nuovo input o una risposta
da da un’uscita sono tutti
solo messaggi in arrivo e tutti noi giusto
elaborare quei messaggi su un singolo
filo questo va rapidamente questo in modo blisterante
è allineato al modo in cui
i processi sono architettati in questi giorni
questo significa che i tuoi cache sono
probabilmente più coerente significa che
significa che non hai intenzione di ottenere
contesa che non stai andando mai
per ottenere uno stato condiviso di tutte queste cose
se lo fai in modo efficiente, parliamo
un esempio più concreto perché lo so
queste cose astratte possono essere difficili da fare
allenati e perdonami per essere un po ‘
Cheesy ma comprerò una copia del mio
prenota quindi immaginiamo di avere un
negozio di libri e qualcuno fa un ordine
per il libro la consegna continua va bene in
il caso sincrono e stiamo andando a
bisogno di andare all’inventario per
riserva quella copia di continuo
le consegne sono di tipo ID di controllo delle scorte
quindi in questo caso in un caso sincrono a
il punto in cui l’ordine è posto
che dobbiamo fermare quel thread e
dobbiamo solo aspettare i libri
riservato cosa se è esaurito cosa
se è cosa se il sistema è giù cosa
se non si è mai sentito parlare di quel libro
quei casi che devi affrontare se
in questo caso sincrono in qualche modo
ora è immaginare l’asincrono
versione di quella stessa conversazione così noi
possiamo ordinare la consegna continua e lo siamo
andando a chiedere l’ inventario a
ci riservi una copia qualche tempo dopo lo faremo
ottenere un messaggio indietro dicendo che la copia
viene ordinato e possiamo passare tale
messaggio di backup
all’utente in definitiva per dire che il
libri sono stati ordinati questo tipo di turni
in se si immagina il codice in questi in
queste cose con cui finisci è
tipo di alcuni alcuni relativamente
macchine a stati semplici che semplicemente
gestire lo stato attraverso il flusso di
messaggi mentre la conversazione continua
quello che mi piace di questo è che il
l’implementazione di queste cose tende a
iniziare a guardare come quel tipo ideale di
modello di dominio puro Sono un grande fan di
design guidato dal dominio e questo è il
il più vicino che abbia mai avuto davvero
implementando quella simulazione software di
il tuo dominio problema all’interno di ciascuno di questi
servizi che è molto bello ragionare
circa facile da testare tutti quelli buoni
proprietà quindi immaginiamoci solo
cammina ancora una volta in questo caso ora
stiamo facendo un ordine e abbiamo ottenuto
ho un modello di un libro nel nostro dominio
modello ed è nello stato di prenotazione
perché abbiamo inviato il messaggio riservato
forse è giù forse è rotto
forse è esaurito non ci interessa
siamo dentro siamo in uno stato valido e noi
non fare altro ora, forse
c’è forse un ordine per
un altro libro in questo caso sto ordinando
meglio acrobatico che mi aspettavo
per essere un po ‘più criptico
dando l’introduzione di Jonas così è
anche nello stato di prenotazione il
l’inventario non ha nemmeno bisogno di essere
lavorando può essere rotto o potrebbe essere
solo che lentamente non ci interessa
qualche tempo dopo potrebbe essere un nanosecondo
o potrebbero essere giorni in cui avremo un
messaggio indietro dall’inventario e
abbiamo cambiato lo stato del nostro libro
dicendo che i libri sono stati
ordinato questo è in modo coerente questo è
in una scelta coerente questo ha un
visione coerente del mondo è in a
noto bene State è semplice codice semplice
gli scambi di messaggi ci stanno permettendo di fare
questi ovviamente il trucco come persone che
parlare di questo tipo di architetture
dirà sempre sta ottenendo i protocolli
giusto e ottenendo il livello di
astrazioni a destra voglio tuffarmi solo a
un po ‘ sotto le coperte per il solo tipo
di rassicurarti così così tutto questo suona
bello e facile hai queste cose dentro
memoria che elabora questi messaggi
e passando ma per quanto riguarda te
spegni la spina e per quanto riguarda
se qualcosa non funziona come dai
perdona l’affidabilità ora il sistema
su cui ho lavorato a causa del molto basso
latenza e alte prestazioni ci impongono
costruito il nostro proprio messaggio un affidabile
sistema di messaggistica che sto per descrivere
un po ‘a riguardo perché penso
è utile capire le proprietà
dietro il tipo di architetture che
Sto descrivendo che spero che tu non lo voglia
Devo implementare questo tipo di cose
te stesso per farlo funzionare
perché dovresti essere in grado di ottenere questo
fuori da una scatola ma ma per ora voglio solo
per descrivere cosa sta succedendo, ecco qui
i nostri componenti di nuovo e componente lui è
fronteggiato da un buffer ad anello e ha un
buffer circolare all’esterno
canale in uscita – il buffer dell’anello ha a
cursore e ed una serie di scanalature in modo che quando
componenti a invia un messaggio sta andando
per popolare uno degli slot ed è
andando a spostare il cursore su quello successivo
slot come così ad un certo punto quando il thread
diventa gratuito o qualunque sia un separato
thread che è impostato indipendentemente da from
ecco, così ho detto che abbiamo evitato
programmazione concorrente evitiamo dal
spingendo alcune di queste preoccupazioni verso il basso
l’ infrastruttura un po ‘in alcuni
punto decidiamo di inoltrare quel messaggio
sul componente B che sta per essere
inserito nello slot di input per il componente
B ora quando progettiamo questo sistema uno di
le ragioni per cui l’abbiamo fatto è stato perché
volevamo essere in grado di registrarli
le cose in cluster li così lui poteva noi
potrebbe come parte del meccanismo dietro
questo scriveremmo scrivere questi messaggi
su disco e scriveremmo in a
coppia di cluster prima che fossero inoltrati
alla componente B quindi questo significava che avevamo
un sistema durevole abbiamo avuto un sistema
era capace di tolleranza d’errore mettiamoci
alcuni altri messaggi nel Q ora abbiamo
ho un caso in cui abbiamo perso un messaggio
trasmissione
abbiamo inviato un messaggio per questo è stato un
mi aspetto un messaggio perché c’è un
mi aspetto il messaggio tre così dice no
questo è il messaggio sbagliato, quindi ho intenzione di farlo
rispedire un ACK dicendo che mi aspettavo
messaggio tre così questo ne ripristina il suo
il cursore e quindi resettarlo può essere
compilando più messaggi nel buffer
ma la prossima volta lo manda a
rispedire tre quattro e cinque in questo modo noi
riceviamo messaggi idempotenti che diventano affidabili
messaggistica otteniamo la capacità di cluster
e roba come una preoccupazione infrastrutturale
è al di fuori della logica aziendale di
il nostro componente non è un problema
dobbiamo preoccuparci
quindi tutte queste belle proprietà siamo noi
il sistema che abbiamo costruito era essenzialmente
essenzialmente un tipo di server delle applicazioni
potremmo scrivere semplici vecchi oggetti Java noi
potrebbe scrivere in test di processo contro di esso
e potremmo esporlo come servizio
utilizzando i questi meccanismi per consentire noi
per comunicare tra i servizi e
dacci queste proprietà che ci hanno permesso
per costruire questo in modo asincrono
sistemi reattivi di questo tipo
di tipo di abilità ci consente di disaccoppiare
che i nostri componenti sia nel tempo che
spazio non ci importa dove siamo noi
può essere trasmettere i messaggi dei
la posizione non ha molta importanza e noi
non importa quando rispondono perché
siamo asincroni che lo faranno
rispondere in un momento che è conveniente
forse sono giù nel punto in cui
inviamo il messaggio non importa forse
sono lì e loro rispondono
i microsecondi non contano, lo faremo
rispondi avremo solo un messaggio come
qualsiasi altro messaggio entri quando in
risposta questa è una delle chiavi
proprietà che ci dà la possibilità di
per rendere i sistemi elastici per essere in grado di
ridimensionali e ridimensionali possiamo
osservare gli osservatori del nostro sistema
cosa sta succedendo e decidi questo
si sta facendo un bel po ‘di lavoro che ci serve
più versioni di quello per condividere
fuori il lavoro in modo diverso
parte di parte di questo isolamento è
importante essere in grado di per questi
componenti per condividere nulla l’unico
meccanismo di scambio di informazioni
tra di loro è tramite la messaggistica
canali che è di nuovo ciò che ci dà questo
resilienza ed elasticità quindi parliamo
un po ‘ sull’isolamento, quindi questo è
tipo di un modello classico ne hai due
componenti e condividi un database e
ora ora non abbiamo questo isolamento ora
abbiamo una controversia sul punto di fallimento
e potenzialmente il punto di errore che abbiamo
ho dovuto codificare le cose in un modo per essere sicuro
questo è
efficiente non possiamo aggiornare queste cose
indipendentemente e quindi questo non è un bene
modello questo non è un buon modo di
costruire sistemi distribuiti che hanno
le proprietà che stiamo cercando
ciò che realmente vogliamo è che vogliamo
separare queste preoccupazioni che vogliamo essere
in grado di se questa cosa ha bisogno di un database
e che cosa ha bisogno di un dare di database
loro un database ma sono loro
database possono essere all’interno delle bande
del componente del servizio che la sua
business per come funziona se uno di
loro hanno bisogno di un database di oggetti e il
altri un database relazionale che è
va bene , non è un problema, quindi dobbiamo
dobbiamo consolidare questi confini e
assicurarsi che l’unico mezzo di
lo scambio di informazioni avviene tramite il
sistema di messaggistica se questo se siamo se
manterremo le proprietà di
posizione e tempora trasparenza che
stiamo parlando di te non puoi isolare
stress alla fine se un sistema sotto
sottolinea che mostrerà dove
sta andando come le cose vanno male sta andando
verrà fuori da qualche parte
lungo la linea in modo che il sistema come il
tutto ha bisogno di rispondere quando è sotto
è sotto stress è inaccettabile per a
la componente stress stress non funziona
catastroficamente e perdere perdere
informazione che è l’ importanza del
resto del sistema quindi abbiamo bisogno di quelli
tipi di fallimenti da isolare
esempio che ho dato di affidabile
sistema di messaggistica è un mezzo per fornire
un po ‘di quello dell’isolamento così
puoi tipo di replay messaggi che
è successo prima gli altri punti che è
un po ‘ mi ha sorpreso la prima volta
imparato questo, ma i segnali rappresentano un
instabile stato instabile e ho intenzione di
mostra che in un attimo dobbiamo lavorare
abbiamo bisogno di aver bisogno dell’idea di ritorno
pressione davvero per risolvere questo così
vediamo prima le code quindi andiamo
immagina di avere componenti a e
componente B di nuovo e immaginiamolo
il componente a è leggermente più lento e
il componente B è leggermente più veloce in questo
situazione le code sempre vuote
ora immaginiamo il contrario di così
immaginiamo quel componente a
leggermente più veloce e componente B leggermente
in modo più lento a parte l’inizio della
inizializzazione della cosa poi la Q
sta andando sempre ad essere pieno il modo di
carico equilibrato nella Q
è uno stato instabile , è una specie di a
bordo del coltello da cavaliere che può capitare solo
quando entrambi sono perfettamente nello stadio
in termini di velocità con cui sono
elaborare le cose e non è così
non è solo una condizione stabile
non è una condizione normale , questo è
questo è un problema cosa succede
componente a ora bene per la maggior parte di noi cosa
succede a questo punto non va bene cosa
di solito accade è quel componente a
cade forse se stiamo andando bene noi
sistema di registrazione, facciamo il nostro team operativo
lo sanno e tutti si mettono in allarme
campane e iniziare a correre cercando di
capire cosa fare dopo che non lo è
quello non è un sistema resiliente che noi
bisogno di reagire in modo diverso ciò di cui abbiamo bisogno
fare è che dobbiamo passare il
problema il backup non c’è niente
altrimenti possiamo fare o cadere
o possiamo dire che non possiamo fare altro lavoro
al momento quindi abbiamo bisogno di ricambiare
pressione e che la contropressione deve
andare tutto il viaggio di ritorno la linea
in definitiva ciò significa probabilmente per il
utente devi trovare un modo per rallentare
giù l’utente ci sono tutti i tipi di
diversi modi di applicare la contropressione
Mi sono imbattuto in uno adorabile di recente
che inizia a lavorare sul thread
sta arrivando con i messaggi e
allora stai consumando la risorsa di
la cosa che può inviare nuovi messaggi a
fare per fare il lavoro e le persone
morire di fame al fornitore, ma puoi farlo
costruire protocolli che superano il
contropressione e smettere di dare un
eccezione se sai gridare un problema
significa in qualche modo nel punto in cui
stai cercando di inviare comunicazioni
perché questo perché è il sistema
sotto stress una delle idee che è
spesso parlato in questo tipo di
sistemi distribuiti è l’idea di
consistenza finale
e rende le persone nervose ed è così
un po ‘comprensibile e penso di essere io
penso che ci sia un’idea chiave
che è spesso mancato quando si parla di
quindi immaginiamo di avere
un utente e hanno ottenuto che hanno un
vista del sistema e hanno ottenuto a
vista dei componenti a nel componente B
solitamente il componente B sta per
producendo un po ‘diverso
riflessione del mondo e che sta andando
da riflettere da qualche parte nell’utente
interfaccia questi potrebbero essere sullo stesso
stessa interfaccia utente sono solo una specie di
diversi aspetti del sistema va bene e
l’utente apporta una modifica in un unico luogo e
questo è comunicato al componente B ora
a questo punto c’è un c’è
c’è una differenza in the in
la percezione dello stato che
diverse parti del sistema in ora
questo fa un problema solo se il tuo
separazione delle preoccupazioni ti permette di
fanno un problema quindi cerchiamo di immaginare ora che
di cosa stiamo parlando , diciamo
è la libreria amazzonica va bene così questo
è il tuo questo è il tuo cestino il tuo tuo
carrello della spesa e questo è il tuo ordine
la storia importa che siano
leggermente fuori moda in quel contesto
pensa che non importa se noi
devo aspettare fino a qualche tempo dopo per
che cambia per essere preso e
riflessa in un’altra parte del sistema
finché i confini della vostra vostro
il design r-la è piuttosto all’interno
contesto limitato appropriato che
separare le loro preoccupazioni in modo appropriato
quindi la consistenza finale non ha importanza
è una rara occasione quando lo fa
e penso che sia una parte importante di
il design dei sistemi software è a
identificare il contesto limitato e fare
sicuro che gli stati stabili all’interno del
contesto limitato e quello che ha unito
contesto ha un senso in un business
contesto è una parte importante del
progettazione di questo tipo di sistemi noi
parlato per guardare abbiamo parlato un po ‘
sulla trasparenza della posizione ma elastica
sistemi devono essere in grado di reagire alle
cambiamenti nella domanda come abbiamo descritto e
se vogliamo fare quella posizione
la trasparenza è un’idea davvero importante
perché questa è la capacità di essere in grado di
capisci che non ne abbiamo abbastanza
la potenza del computer lancia qualcosa
altro che sarà in grado di fornire
quella potenza del computer e iniziare
inoltro del traffico per quella nuova cosa a
servizio se voi se tutto se tutti
il nodo componente sa dove si trova
componente è a tua conoscenza posizione
indirizzi specifici non hai quello
capacità di scalare perché poi hai
devo distribuire l’indirizzo e
mappa degli indirizzi ovunque intorno così tu
bisogno di queste cose per essere in grado di inviare
messaggi e non importa dove il ricevitore
penso che il pensiero stia andando
oltre a ciò stiamo arrivando al
fase in cui l’infrastruttura che
la gente parla e lui è dentro
alcuni casi è lì non importa
se un servizio è sul
stessa scatola di un altro o di un altro
continente possono comunicare con uno
un altro effettivamente ho già menzionato
che sai che il calcolo distribuito è
diventare competitivo un Civ e essere
onesti come esseri umani non siamo molto
bravo a farlo non siamo molto bravi a
pensandoci così, così abbiamo
per trovare modelli che ci permettono di lavorare in
in questo modo, senza doversi preoccupare di
le preoccupazioni molto difficili di
calcolo simultaneo e quel tipo di
cosa penso che penso se tu sei a meno
sei uno specialista se lo sei se lo sei
lavorare a quel livello di livello che sta per succedere
essere molto, molto difficile e uniforme
gli specialisti non diventerebbero galleggianti
preoccupazioni di lavorare preoccupati
calcolo multi-thread e concorrenza
insieme a lavorare preoccupati per il
problema del dominio che stanno cercando di risolvere
quelle sono preoccupazioni che devono essere
separato anche dai migliori programmatori se
andiamo a costruire sistemi efficienti e
anche questo è uno dei motivi per cui
idee come un messaggio di sincronia che passa
e la trasparenza della posizione sono importanti
quindi parliamo un po ‘ di oggi
quell’idea di scalabilità quindi abbiamo di nuovo ottenuto
componenti a cui inviare messaggi
componente B
okay, questo è un modello che abbiamo
versione del componente B che può
elabora tutti i messaggi e questo è
bene cosa succede quando il componente B non può
mantieni il passo con la domanda
bene possiamo costruire nella capacità di
capire in base al contenuto del
messaggi dove inviarli e avere due
versioni del componente B che sono servizi
forse diverse parti della messaggistica
è su determinati intervalli di account
forse è su diversi tipi di
i messaggi non sanno ma possono essere
in grado di rompere che a parte è un’opzione
questo è disponibile per te quando hai
questa separazione tra i messaggi di
la messaggistica del sistema e la posizione
trasparenza quindi penso che sia moderno
l’hardware dovrebbe cambiare le nostre ipotesi
del modo in cui progettiamo e
sviluppare software uno dei più grandi
i problemi che affrontiamo sono i costi di
spostamento di ram a distanza di dati non casuali
il disco di accesso non è SSD ad accesso casuale
non sono un accesso casuale ciascuno di questi
le cose in termini di prestazioni hanno un
i dischi a profilo variabile sono i più facili da usare
capire sai qualsiasi qualsiasi momento
ci tocchi
per provare e ottenere un morso da un disco che hai
devo aspettare che il disco giri intorno
per ottenere il settore giusto che potrebbe essere necessario
muovi le teste in una certa posizione per
prendi la strada giusta e così via Ram
a causa di tutto il caching
a seconda se si ottiene un colpo di cache
o un miss miss mi manca un drammatico
differenza nella prestazione di quello
migliaia di volte diversi SSD sono
Blocca i dispositivi su cui marciscono se sono
stai scrivendo dati che sono a
penalità di tempo drammaticamente diversa per
leggere i dati e tutte queste cose
non è semplice, è roba del genere
è più complicato di quanto sembri
l’altro grande cambiamento che io certamente se
sei vecchio come me, c’è una specie di
ipotesi integrato che sono cresciuto con
nel mio campo di programmazione
la carriera era che Ram era veloce
la rete era lenta e il disco era da qualche parte
nel mezzo e che è solo sbagliato
Le reti lente di RAM rallentano il disco più lentamente
ci sono alcune reti che possono essere
più veloce in alcune circostanze siamo
arrivare al punto in cui ci sono
alcune topologie di rete che possono essere
più veloce di un accesso Ram ci sono
certamente il disco è notevolmente più lento
di rete Rams cambiando RAM RAM
cambio penso che siamo diventati enormi
Ram non volatile che sta bussando al
porta potrebbe essere un paio di anni in basso
pista, ma lui non è molto molti anni giù
la traccia e questo cambia anche il gioco
quindi dobbiamo pensare a nuovi modi
di architettare i nostri sistemi nei vecchi modi
sono costruiti sui compromessi che erano
imposto su di noi da determinate prestazioni
profili in hardware che eravamo
tutti abituati e quelli che compromettono quelli
le assunzioni non tengono più questo è il
La legge di Conway obbligatoria scivola se tu
non ho sentito parlare della legge di Conway
l’idea è che l’architettura di
il tuo sistema verrà specchiato rispecchierà
la struttura organizzativa del tuo di
l’organizzazione che l’ha creato così se
hai un’organizzazione gerarchica
con squadre a squadre che probabilmente costruirai
un’architettura multi-livello come quella
se hai una squadra distribuita un gruppo
di piccola distribuzione cross-funzionale
squadre che probabilmente costruirai qualcosa
sembra più che sia gentile
di microservice territorio questo è gentile
di questi sono i tipi di sistemi che
stiamo parlando di cui stavamo parlando
su queste queste discrete unità di
elaborazione liberamente accoppiato da uno
un altro utilizzando la messaggistica asincrona
che è micro servizi plus plus a
dacci l’elasticità della resilienza e
scalabilità che noi e reattività
che esigiamo di aver menzionato questa idea
un paio di volte già ed è stato
menzionato nel precedente oratore
così come il contesto complesso il tipo di chiave per
questo in termini di essere in grado di disegnare il
linee attorno ai componenti che noi
costruire in modo appropriato con cui stavo parlando
Jonas all’ora di pranzo e stava dicendo
che è spesso difficile da fare
capire quale sia la migliore programmazione
modello è quello di presentare per alcuni dei
cose perché anche le persone lo prendono
vista semplicistica a volte e sono dispiaciute
Sto mettendo le parole in bocca che lui
non ha parlato ma ma loro lo faranno
rendere tutto una comunicazione remota
chiama devi riflettere attentamente
quali sono i confini di un servizio vendere
cosa cosa cosa racchiude questa cosa
e quelli dovrebbero essere allineati con
contesto aziendale che devi pensare
con attenzione anche se i confini
la squadra e cosa loro
le responsabilità sono e dovrebbero :
dovrebbe essere consentito allineato con delimitato
contesto quei fossati potrebbero essere diversi
componenti all’interno di quel contesto limitato
per rendere la distribuzione ragionevole del lavoro
ma è importante ottenere queste cose
giusto quello che stiamo cercando fino in fondo
in fondo è quello di ridurre al minimo l’accoppiamento
stiamo cercando di minimizzare l’accoppiamento
tra le squadre e ci stiamo provando
minimizzare l’accoppiamento tra i servizi
così quando arriviamo al punto a
di cui abbiamo questi asincroni
conversazioni hanno senso lì
dal momento che sono semplici e diretti
non sono chiacchieroni, non mi danno
questo bit o dammi questo byte o tu
sappi dammi quel numero e quel numero
e li aggiungerò insieme di cui abbiamo bisogno
per progettare i protocolli per assicurarsi
che loro sono sensibili e
accoppiato liberamente il tipo di immagine mentale
che ho di questo è se immagini un
organizzazione senza computer e a
serie di uffici che fanno parti diverse
del lavoro della loro organizzazione all’interno
quegli uffici è giù per le persone
organizzarsi secondo le proprie esigenze
e gli uffici comunicano con uno
un altro dai messaggi ora immagina cosa
sai come progetteresti un sistema
come quello di lavorare è un po ‘come noi
vuole progettare i nostri servizi che vogliamo
questi semplici scambi di informazioni
idealmente se fossimo in grado di visualizzare il
messaggi che fluiscono tra questi
componenti che probabilmente ha senso se
sono una specie di cose di quel genere
qualcuno capisce il problema
dominio che un utente aziendale potrebbe capire
come parte della conversazione che ti vogliamo
conosci posto questo ordine è stata questa cosa
ordinato prenotare questo articolo quelli
tipi di idee di questo tipo relativamente
scambi di informazioni ad alto livello
tra i due sistemi
e dovremmo dovremmo guardare a
una delle idee chiave di banding in
contesto limitato che è davvero importante
è quello nei punti in cui noi
scambiare informazioni tra delimitate
contesto che è un punto di traduzione così
anche se sia quello in due contesto limitato
abbiamo il concetto di account che sono
sono diversi sono diversi
versioni dell’account che potrebbero condividere a
chiave comune a cui potrebbero riferirsi
lo stesso conteggio ma una versione di domini
la vista di un account sta per essere
separati dagli altri, ecco qui
un tipo tipico di alto livello di
diagramma architettonico del sistema che
abbiamo costruito questo è piuttosto un preavviso
piuttosto tenere questo sistema ora è ancora
uno degli scambi più performanti
nel mondo quindi abbiamo avuto i nostri servizi
e i nostri servizi erano abbastanza ragionevoli
grande sulla scala dei micro servizi per
alcune di quelle cose ma erano
contesto limitato sensibile abbiamo avuto corrispondenza
motori per dove vorremmo fare offerte
dove dovremmo fare le operazioni abbiamo avuto un account
servizi di gestione degli account di servizio
dove dovremmo gestire la posizione dal vivo
di persone che commerciavamo
servizio di cronologia degli account dove vorremmo
registra cosa stava succedendo ulteriormente
storicamente ciò che le persone avevano fatto
e così via li abbiamo divisi
in tre gruppi quindi c’è l’idea di
servizi del corso quelli erano i servizi
quelli erano questi erano i più alti
cose di prestazioni queste erano le cose
che stavano facendo la nostra logica aziendale
queste cose erano queste erano una specie di
sistemi di registrazione è il sistema di
registrare era lo stato in memoria di questi
cose e queste cose potrebbero farli volare
stavano servendo centinaia di migliaia di
messaggi al secondo molto facilmente in
microsecondi abbiamo avuto servizi generali
questi erano più lenti di più
il tipo tradizionale di servizi ora più
organizzazioni penso che questi siano i
tipi di servizi che avrebbero costruito
in questo tipo di modello erano queste cose
spesso supportato da un database ma come ho detto
prima della separazione delle preoccupazioni
che abbiamo avuto come risultato del modo in cui
organizzerebbe il loro contesto di raggruppamento
i dati in tempo reale per il trading erano solo esistiti
qui per commerciare non aveva
a voi tipo è passato attraverso gli strati
per arrivare qui, ma questo è dove mestieri
è successo e tu non dovevi andare
altrove nel processo di
eseguire uno scambio che non era necessario
chiedi qualcos’altro per farlo, se tu
volevo cercare la cronologia del tuo account
d’altra parte che era una specie di cosa
commerci che hai fatto prima che sia qui ora
la coerenza finale significa che lo sai
che alla fine sarebbe corretto ma lui
sarebbe al punto che il punto vivo
di trading questo non era esattamente fino a
appuntamento con quello che stava succedendo qui
ma non importa, perché nessuno
curato se la cronologia del loro account non lo era
microsecondo in linea con il commercio
sono live trading al momento
preoccupazioni separate abbiamo anche avuto un sacco di
quelli che chiamiamo servizi gateway erano
servizi di traduzione in modo che così siamo
interagendo con diversi protocolli
diversi sistemi diversi endpoint noi
stavano fornendo pubblico accesso al web
API è possibile scrivere i propri BOT a
arrivare a commerciare contro il sistema che eravamo
fornendo aiuti istituzionali a bi te
userebbe il protocollo fisso che è a
protocollo di scambio di informazioni finanziarie
questo è comune nel settore e molto
di altri posti e quindi di tutti esterni
arrivarono le lattine di comunicazione
attraverso uno di questi servizi gateway
queste cose erano di tipo Border Patrol
quindi tradurrebbero i messaggi in a
forma che sarebbe il resto del sistema
capire il resto del sistema sarebbe
tipo di parlare usando la trasmissione
messaggistica asincrona tra tutti
i servizi e poi lo farebbero
traduci i messaggi in qualsiasi cosa
il protocollo era rilevante per poterlo fare
questo lavoro non era solo molto alto
sistema di prestazioni è stato anche il più
sistema efficiente che abbia mai funzionato
in entrata in termini di potere
fare un nuovo lavoro perché ognuno di questi
i servizi erano single threaded anche il
high-tech seriamente performante
cose perché tutto era single
filettato era era semplice
ragionare perché era un ricco
modello di dominio asso
simulazione del nostro dominio problematico in
memoria era semplice ragionarli
ed è stato semplice testare anche noi
la proprietà veramente adorabile che se noi
ho visto un errore nella produzione che potremmo prendere
i messaggi D che provenivano dalla produzione
riprodurli attraverso il sistema in un test
ambiente e recuperarlo
esattamente lo stesso stato e poi il debug
in un ambiente di test non c’erano
molti sistemi su cui ho lavorato
potresti farlo nella stessa misura
questo è completamente deterministico
sistema in quel caso lo era anche
estremamente scalabile perché potremmo
basta ritagliare la messaggistica
messaggi a qualsiasi livello se fossimo
avevamo bisogno di più motori di corrispondenza che potessimo
aggiungere altri motori di corrispondenza, se lo volessimo
più servizi di account potremmo farlo
tutte queste cose
ovunque guardi il punto di conflitto
era anche da dove cominciare
purtroppo non penso che ci sia
infrastruttura che fa esattamente cosa
Ho appena descritto che penso che questo io
sapere di due o tre persone che sono
lavorando su cose come quelle akka è una cosa sola
una versione di fare le cose che fa di più
di quanto ho descritto e in qualche modo
meno c’è una cosa nuova dalla sfilata di gatti
chiamato tempo Barrow che è stato influenzato
dall’architettura Lmax che sono stato
descrivendoti e loro ne hanno presi un po ‘
delle idee per fare alcune cose
che penso sia sbagliato includere
supporto di messaggistica sincrona che io
pensare è un errore, non ci penso
dovrebbe supportare sincrono
messaggistica in questi tipi di sistemi così
se ci provi prova queste cose penso a
la cura è di gran lunga la più matura e
robusto ma dai un’occhiata a queste cose
se queste idee ti attirano ed esplorano
ma ricordati di ricordare quella chiave
i vincoli riguardano la progettazione del tuo
servizi all’interno di questi contesti limitati
e assicurandoti che tu sia come il
mito i luoghi di scambio sono
accoppiato sciolto a livello di protocollo no
solo a livello tecnico sono io
ma questa è la fine del mio discorso così
Penso di avere qualche minuto per
domande
grazie a tutte le domande hey come puoi
rendere l’interfaccia utente asincrona
è una domanda?
bene così è se sembra che sembra
naturale per essere sincrono ma tu hai
mi hai appena fatto una domanda sei ancora
stai ancora pensando che tu stia ancora facendo
altre cose e ora sto tornando a
tu con una risposta qualche tempo dopo, così noi
possiamo spingere fuori tre asincroni che possiamo fare
possiamo progettare le nostre interazioni da fare
che ora i protocolli su cui sai
comunemente lavoriamo non sono necessariamente
costruito con quelle supposizioni in penso
è qualcosa che dovrebbe cambiare
Sto scrivendo alcuni software in questo momento
che ha una sorta di interfaccia web
e ho spinto in entrambe le direzioni così ho
Inserisco qualcosa per il mio messaggio
canale e quando un servizio vuole
avvisare l’utente di qualcosa che può inviare
un messaggio in questo sarà in modo asincrono
consegnato alla pagina web anche questo
il modo in cui il modello di app Elm ha funzionato
quindi puoi scrivere un modello nel tuo interno
la tua pagina web in qualunque sia la tua preferita
il linguaggio di sviluppo web è o il tuo utente
interfaccia qualunque sia la natura dell’utente
interfacce e rispondere a quegli eventi
ora 99.99999 percento delle volte questo
sarà più veloce o più veloce di a
chiamata sincrona ma quei pochi per cento
dei tempi in cui qualcosa è rotto
non importa che sia ancora
andrà tutto bene, ci riprenderemo prima o poi
successivamente si sta andando per evitare che codifica per
condizioni di errore imbarazzanti ci vuole a
interruttore mentale ci vuole un cambiamento in
avvicino Penso che un po ‘, ma penso
almeno un codice più semplice ma basta
è solo un modo leggermente diverso di
pensandoci più domande
è il ma ripeterò la domanda
ci sono alcuni vantaggi in
usando questo tipo di approccio in un locale
sistema noi non sei distribuito non io
significa distribuirlo penso che penso
che ci sono così penso che tu guadagni
i vantaggi della codifica Inc più semplice
pratiche perché si evita questo errore
condizioni e ottieni anche prestazioni
questo è più alto ma è più alto
architettura delle prestazioni per misura
Voglio dire che so che noi abbiamo misurato esso
misurato l’inferno da questa roba a
ottenere livelli di prestazioni simili
stiamo parlando per lo scambio e
abbiamo provato ogni sorta di cose diverse
prima di arrivare a questo e ci abbiamo provato
provato tutti i tipi di architetture classiche
abbiamo provato a fare cose intelligenti come
allocare lavoro ai thread e abbiamo speso
più tempo a dedicare il lavoro ai thread
di quanto abbiamo effettivamente eseguito il lavoro
discussioni che è il motivo per cui abbiamo finito con un
cosa a singolo thread questo è questo è un
modo molto efficiente di calcolare è
anche il modo che i nostri processi di lavoro è
si allinea perfettamente anche con il modo
quell’hardware sta andando così lo penso anch’io
penso che sia un uso efficiente dell’hardware
quindi penso che ci siano molti pi
credo che ci siano dei benefici se lo sono
Onesto, io non voglio scrivere
codice in un altro modo rispetto a questo perché
questo mi dà la libertà di scrivere il
ricchi per i miei modelli di dominio che mi piace
scrivere come parte del mio sviluppo e
la libertà di essere in grado di ridimensionarlo se
Voglio e distribuirlo se voglio
quindi penso che ci sono benefici che questo
tipo di architettura anche per single
anche se stai cullando app per telefoni cellulari
quindi tendo a pensare a
scrivendo in questo modo dobbiamo arrivare
il livello in cui c’è un migliore
sostenendo dagli strumenti e
infrastrutture intorno a questo e come ho detto
sono ora un paio di progetti che sono
lavorando alla costruzione di quel supporto in
varie aree e spero che stia arrivando
presto perché penso che questo sia ciò che penso
è un interessante passo in avanti
approccio di programmazione
questa è una grande domanda
Mi limiterò a ripetere la domanda se se
abbiamo due squadre che guardano in modo diverso
contesto limitato e sono accoppiati
che stanno scambiando informazioni con
messaggistica che è responsabile per il
lo scambio tra loro è fantastico
domanda e non penso che nessuno abbia
una risposta lì tutti parlano
A proposito di micro-servizi al momento della
organizzazioni che sono probabilmente la maggior parte
maturare microservices al momento è
iniziando a sentire il dolore e
i micro-servizi ti danno qualcosa di meraviglioso
cose come Yui ti danno il
capacità di scala che hanno un sacco di
persone che lavorano su cose indipendenti ma
i protocolli nel tempo ottengono di più e
più importante e penso che Netflix
Amazon e gente così stanno iniziando
per rendersene conto e hanno iniziato a farlo
preoccuparsi di come possono essere più rigidi
nella definizione dei protocolli e
la gestione delle dipendenze il
altro modo quindi per il tipo classico di
micro architettura di servizi molti piccoli
le squadre diventate più grandi
scalabilità grande indipendenza del
squadre e al costo di chi è
responsabile per la croce Pro la croce
comunicazione della squadra l’altro modo di
farlo è costruire un monolite mil
può ancora costruire un micro servizio
architettura sei ancora reattivo
sistema allora il sistema L max era molti
servizi individuali ma in realtà lo era
di proprietà di tutto il team ed è stato
rilasciato insieme come uno così ci siamo abbassati
quel problema perché il protocollo era
sempre la versione era sempre allo stesso
livello abbiamo evitato la dipendenza
problema tra più versioni del
protocollo facendolo uscire da uno
squadra e tu puoi farlo e quello
funziona bene, ma questo arriva al
il costo di te va nella direzione di a
dispiegamento monolitico singolo più grande
infrastruttura di prova , se stai facendo
consegna continua e tutti i tuoi
test è necessario ridimensionarlo meglio
devi investire anche in questo
per farlo funzionare e questo è un po ‘
livello anche se puoi ancora avere abbastanza
c’è molta autonomia in piccoli gruppi
un po ‘di compromesso anche con quello
quindi non penso che ci sia un argento
proiettile risposta a questa domanda penso
è un problema veramente difficile e io no
pensa che qualcuno abbia una risposta perfetta
è un compromesso in entrambi i casi e tu
tipo di prende i soldi che metti il tuo
soldi e prende la tua scelta
questa è una buona tendo a nasconderlo in
il Gateway quindi prova a creare il Gateway
nascondere la sincronia dal resto del
sistema e quello potrebbe essere ingannevole ma
significa che il Gateway sarà brutto e
più complesso di quello che vuoi essere ma
questo è il tipo di spessore della vita
questo è quello che avrebbe dovuto affrontare in
questa circostanza ma avrei voluto
isolarlo il più lontano possibile
banda del sistema il tipo di
la pura semplicità di te è che non puoi nasconderti
quello a che quello è incremento che
lo stile sincrono segreto che vuoi
è per questo che vuoi sapere una volta che vai
lungo il segreto la rotta asincrona
deve essere quasi un corso base tutto
il modo, ma si può tipo di compromesso
è un po ‘lo stesso problema con esso
sai che un database commesso è gentile
di un’azione sincrona e per me
che di solito è troppo lento per me vuole
per prendere il costo ma devi limitare
i dati al database quindi ci sono modi
di isolare utilizzando un l’altro penso
a proposito dell’agente Lee è una specie di a
protocollo di comunicazione fondamentale quindi
puoi creare altre cose su
in alto , quindi non puoi nasconderti
sincrono e ness con una sincronia di
alcuni trucchi intelligenti ma il gateway
il servizio gateway sarà più complesso e
più brutto di quello che vuoi che sia dispiaciuto
ripetermi altre domande no
ok, sarò arrestato
tu
Please follow and like us: