Press "Enter" to skip to content

GOTO 2018 • Event-Driven Microservices – not (just) about Events! • Allard Buijze


[Musica]
va bene buon pomeriggio
Immagino sia quasi quasi
pomeriggio adesso così pochi mesi fa
il comitato del programma mi ha inviato un
e-mail e mi ha chiesto hey allard puoi
puoi parlare di eventi come
beh questo è un argomento molto particolare ma
sì, so qualcosa sugli eventi
e potrei parlare di loro ma
in realtà preferisco parlare del fatto
che non si tratta di eventi e va bene
va bene si può fare
ecc. e ovviamente ora sono qui e quando
Stavo preparando queste diapositive che pensavo
beh, in realtà non si tratta nemmeno di micro
servizi sia così che cosa lascia
noi se prendiamo micro-evento
servizi per portare fuori gli eventi e prendere
fuori i micro servizi è ben guidato
matematicamente corretto ma così vedremo
dove finiamo andiamo a vedere dove siamo
iniziato prima quindi questo è un an
diagramma architettonico che probabilmente
corrisponde a gran parte di ciò che hai costruito
speriamo che il lontano passato
sfortunatamente mi imbatto ancora in questo
stile architettonico molto al giorno d’oggi e a
molto è stato detto già in questo in
questa conferenza così come altri e
il grande problema con un an
stile architettonico in cui tu definisci
livelli e quindi un modello di dominio che è
fondamentalmente utilizzato da ciascuno di questi livelli
è che ti ritroverai con un dominio
modello che in alcuni casi è anemico e
in alcuni casi non lo è e quindi la mappa
questi servizi che costruisci
entità in quel modello di dominio giusto e
Ho lavorato molto sui progetti greenfield
e sono davvero adorabili perché tu
avere questa idea greenfield ogni errore
fai è il tuo che è il rovescio della medaglia
programmazione greenfield ma nel
cominciando almeno il software è è
molto elegante ed è facile ed è
pulito e tutti lo capiscono
perché fondamentalmente tutti sono te e
Tok
ma tutti lo capiscono così tu hai
questi servizi e la loro mappa davvero
graziosamente – di solito una di queste entità
nel tuo nel tuo modello e poi un secondo
il servizio è stato creato e ancora Maps
davvero bene a quell’entità e poi
c’è quella richiesta di una funzione e
quel servizio mappa più o meno su
tutto ciò che hai nel tuo modello
perché la modella non è veramente adatta
fare tutto ciò che il servizio deve fare
Lì dentro e sono abbastanza sicuro che tu
riconoscere questa situazione o altrimenti
lo riconosci questo è perfettamente
normale sequel query che per fortuna io
non ha dovuto scrivere qualcun altro ha dato
per me da usare nelle diapositive e ho dovuto
rendere quella persona una promessa e quella
la promessa era che i partecipanti non possono
leggi cosa c’è nella query quindi di solito il
i proiettori sono relativamente a cui erano
il tempo relativamente bassa risoluzione così
avevi circa due pixel per carattere
erano definitivamente illeggibili e quindi
Ho dato che ho usato questa diapositiva in a
presentazione ad alta risoluzione
proiettore e io non ne ero a conoscenza
e improvvisamente ho capito che la gente può oops
ora leggi i personaggi così ho pensato
okay proviamo a leggere i personaggi
e ancora non ho potuto leggere la query così
Immagino di essere ancora d’accordo con la mia promessa
non puoi leggere cosa c’è qui, penso
nessuno può anche se lo hai pieno
schermo quindi ti darò un piccolo riassunto
ci sono i 22 join e sei sottocommissioni
in questa bella piccola dichiarazione di sequel ora
alza le mani se pensi questo
funziona molto bene metti le mani su se
ti piace lavorare per quella compagnia
perché hanno una posizione aperta per
qualcuno a mantenere questo va bene così
cosa facciamo se qualcosa non funziona
eseguiamo noi e non possiamo aggiustarlo proprio noi
aggiungere cache o altri aspetti tecnici a
nostro alla nostra applicazione e in questo caso
Ho esagerato un po ‘ ho messo cache
dappertutto e ce ne sono alcuni
pool di worker perché async crea qualcosa
più veloce giusto sbagliato
i cassia sono molto poveri risolutori di problemi
sono molto bravi a fare qualcosa
che funziona molto bene farlo funzionare più velocemente
ma non sono molto bravi a fare
qualcosa che funziona in modo problematico no
anche sicuro di così facile da un inglese
parola ma se ci sono problemi nel tuo
applicazione il denaro non sta andando a
risolvere il problema a destra sta andando a
nascondilo e fallo esplodere ancora più forte
quando le cose si sono veramente sbagliate, ma il
cosa che mi ha colpito durante la creazione di questo
diagramma e ho usato il
diagramma per un po ‘è che tutto il
le soluzioni che facciamo sono nell’utente
dati del livello di servizio del livello dell’interfaccia
livello di accesso ma il problema è reale
problema è nel dominio MO il dominio
il modello che stavamo usando non lo era
adatto per l’attività che vogliamo
per attuare in questo in questo
applicazione quindi ciò che fondamentalmente abbiamo costruito
è qualcosa di simile è perfettamente
macchina aerodinamica che probabilmente richiede
angoli veramente veloci, quindi questo ha tutto il
caratteristiche di qualcosa che si muove
davvero veloce ha gli spoiler
ha le minigonne laterali ma il nucleo del
tutta la cosa non funziona sì, sì, potrebbe
lavoro ma non veloce come vogliamo e
questo è un tipico caching della cache
problema nel software che chiamiamo questo a
grande palla di fango e questo potrebbe essere un
rivelazione per te ma una grande palla di fango
non è veramente fatto di fango, quindi questo è il
Immagino che una grande palla di odori di codice
e tutto ciò che abbiamo messo insieme
e c’è sempre un piccolo architetto
seduto su di esso con orgoglio di protezione
la sua creazione è qualcosa che noi
non voglio bene e ho messo micro
servizi nel titolo della mia diapositiva così io
potrebbe anche parlarne un po ‘così
l’idea dei micro servizi è dividere
applicazioni in pezzi più piccoli
è così che diventano più facili da
mantenere e che la nostra organizzazione
diventa più agile nel senso che se
noi se qualcuno in un vestito ha una buona idea
i ragazzi sordi possono implementarlo molto
più velocemente siamo in grado di muoverci molto più velocemente
giustamente, aiuta anche la scalabilità
la quantità di persone che puoi avere
è lavorare su un singolo repository git
limitato quindi se li dividi in
unità schierabili separatamente quindi ok
puoi scalare la tua organizzazione molto
meglio questo è il problema che prometto
scusate il problema sono i servizi di micro
non è facile in realtà sono piuttosto difficile io
significa che riempiamo le conferenze di discorsi
su come fare i micro servizi e come
non a e molti di questi colloqui si concentrano su
aspetti tecnici fortunatamente anche molto
di colloqui si concentrano sul non tecnico
aspetti e penso anche se il
la tecnologia di cui abbiamo bisogno possiamo coprire
che possiamo arrivarci, possiamo trovare
gli strumenti di cui abbiamo bisogno per fare tutto
questo, ma c’è qualcos’altro ed è
c’entra con una osservazione
di Martin Fowler già abbastanza a
mentre fa è che tutto il successo
progetti di micro servizi iniziati con
un monolite che è stato smontato e tutto
le situazioni non sono tutte, ma molte di
le situazioni in cui i micro servizi erano
costruito da zero quei progetti sono finiti
in difficoltà, in altre parole, spendono
tutti soldi e forse nemmeno mai fatti
alla produzione e di solito non lo è
a causa della tecnologia intendo il
kubernetes è qualcosa che puoi imparare
giusto puoi trovare persone per aiutarti
va tutto bene
il problema qui è se ci piace
o no il concetto di design guidato dal nome
Non sono sicuro se Albert I fosse qui ma io
devo attribuirlo a lui è venuto
con questo termine mentre eravamo
fare una birra perché è strano
i termini arrivano e lui dice che conosci micro
i servizi sono in realtà abbastanza semplici
devi solo fare un design basato sul nome e poi
stai tutto bene quello che fai è che tu prenda
questo è il documento che descrive cosa
hai bisogno di costruire
trovare tutti i nomi li sottolinei
sono i tuoi servizi tutti i verbi lì
la tua API chiama e ci sei di
certo, ha detto scherzando, così è
fondamentalmente la formula matematica per
design guidato dal nome e naturalmente questo è
non nel modo in cui vuoi costruirli ma
se si guarda in pratica quando quando micro
i servizi sono costruiti da zero che facciamo
vedi che finiscono così
spesso così finisci con un ordine
servizio e un servizio clienti e a
servizio del prodotto un servizio di inventario il
nome formale per questo è servizi di entità
e in fondo cosa cosa cosa hai
costruito a quel punto è un relazionale
schema del database usando le astrazioni HTTP
immagina quella domanda prima ma poi con
L’HTTP chiama a cosa servono 20 join sei
aggiornare qualcosa del genere piuttosto uno
vista da parte mia essere onesto ma credo
ti senti allo stesso modo
quindi con servizi di entità anziché
finire con questa grande palla di fango e
allora ho paura che questo sia un diagramma
hai visto più volte già te
finire con una grande palla distribuita di
il fango bene è quello che sta per farti qualsiasi
più felice della prima situazione
Onesto, preferisco la situazione a sinistra e
quello giusto ora ero coinvolto in alcuni
di questi progetti che sono finiti in
grandi palle di fango e non mi dispiace fare
mente facendo errori
Adoro fare errori perché loro
fornirti un’opportunità di apprendimento
e mi piace imparare così cosa non va
fare un errore ma quello che veramente
davvero l’odio sta facendo lo stesso errore
due volte perché significa che hai avuto un
opportunità di apprendimento e non riesci a utilizzare
e ho fatto degli errori due volte
e poi ho pensato che tu lo sapessi davvero
ho bisogno di trovare un modo per risolvere questo e io
si è imbattuto in questo concetto che è ora
chiamato CQRS e al momento era
chiamato design basato su dominio distribuito
era un concetto molto vago
che Greg Young ha presentato ad alcuni
conferenza nel 2008 o nove e l’idea
era piuttosto semplice invece di fare un
modello unico per la vostra applicazione voi
creare un sacco di diversi modelli per
diversi modelli per scopi diversi
e questi scopi li puoi dividere
nei comandi e le domande così il
componenti che sono responsabili per
elaborare le modifiche nella tua applicazione
puoi dividere quelli dai componenti
che sono responsabili della fornitura
informazioni sullo stato attuale del tuo
domanda e se lo fai finisci
con due cose
qualunque cosa sia davvero una parte è
responsabile per i comandi e uno per
domande e cosa puoi fare allora
creare diversi modelli focalizzati su
qualunque sia il comportamento è di che
parte specifica che si desidera utilizzare
e questo ci permette anche di prendere
Naturalmente, saltando un passo qui, naturalmente
se esegui un comando, in qualche modo
vuoi qualsiasi query per riflettere il
modifica che il comando sia ha reso
proprio così oggi useremmo gli eventi
per quello se tu fossi ancora negli anni ’80
puoi usare stored procedure o tabelle
trigger o qualsiasi altra cosa ti piaccia
ma gli eventi sono davvero buoni, sono abbastanza
mainstream al momento o hype o
non così puoi chiamarlo qualunque cosa tu
piace ma c’è qualcosa per gli eventi
questo è veramente molto utile e ciò che noi
può ora fare è tener conto di questi
diversi requisiti non funzionali
che abbiamo in diverse parti del nostro
applicazione perché ora abbiamo
modularizzato se sarai il nostro dominio
modello e se la parte del nostro comando
il modello ha requisiti specifici per
esempio essere in grado di gestire 1 milione
transazioni al secondo con una latenza
meno di 10 millisecondi che tratterai
tale modello diverso rispetto a un modello che
gestisce 20 comandi al secondo e ha
l’ultimo
di è una latenza più forte di circa 100
millisecondi che vuoi mettere a fuoco
quelli gli sforzi sulle parti che
sono più difficili se vuoi e anche noi possiamo
ora fai una netta differenza tra il
modello di comando e quanto velocemente dovrebbe
essere nelle proiezioni quanto aggiornato
loro le tue proiezioni devono essere davvero
hanno bisogno di essere coerenti o tu?
consentire una certa coerenza finale
questa è una scelta che hai ragione per cui cercatore
s non è uguale consistenza eventuale essa
ti dà la possibilità di affrontarlo se
vuoi così cos’è quello che fa
che hanno a che fare con i servizi di micro voi
potrebbe chiedersi così quando ero
esplorare questo concetto di sicurezza s
in tutto quasi 10 anni fa
il tempo vola con i loro più micro servizi
non erano tutti là fuori eppure così ho
sicuramente non aveva micro servizi
in mente quando lavoriamo su s non sicuri
ma in pratica abbiamo visto che molti
utenti del nostro framework lo usano
in un ambiente di micro servizi così noi
ho iniziato a scoprire ok, perché lo fai
che qual è il vantaggio?
e in fondo devi rendertene conto a
il monolite non è la stessa cosa di un grande
ciotola di fango non c’è niente di male di per sé
in un monolite giusto per uno non lo fa
l’odore puoi toccarlo senza lavarlo
le tue mani ecc. ma soprattutto
c’è che puoi probabilmente strapparlo
a parte destra c’è il modo di strappare un modello
di ci sono modi per strappare una grande ciotola di
fango a parte ma non andiamo lì
quindi quando hai un modo ho un’idea
e questa è un’icona sempre usata per a
per il modello di business giusto per te
avere un’idea di qualcosa di un processo
che ti dà soldi è semplice
forma di qualsiasi business in realtà e tu
voglio implementarlo usando il mio
servizi ora quello che puoi fare è andare
dritto in quel modo giusto ma noi già
ha detto che è pericoloso e c’è un modo
probabilmente non si vuole andare perché
non finisci dove pensi di essere
ma in una grande ciotola di fango distribuita
situazione quindi quello che puoi fare invece è
perché non costruire un monolite ma poi a
quello strutturato si assicura che ci sia
struttura interna molto chiara che
ti consente di iniziare nel tempo
estraendo alcuni di questi componenti e
inizia a distribuirli separatamente e quello
è solitamente guidato da non funzionale
quindi potrebbe essere guidato dalla dimensione della squadra giusta
la squadra sta diventando troppo grande di cui abbiamo bisogno
organizzo potrei essere leggermente diverso
in modo che una squadra possa lavorare su una parte
potrebbe essere potrebbe avere a che fare con la
stabilità di uno di questi componenti può
sii che quel componente blu ha eccezionalmente
utilizzo di memoria alta e si desidera isolare
dal resto in modo che se si blocca
non prende il resto con esso esso
potrebbe essere tutto bene, ma
funzionalità come il tempo cade ulteriormente
puoi estrarre più componenti quelli
chi è stato al mio collega Frances
presentazione che non hai visto
questo in pratica ha dato una demo
dove lui ha mostrato questo se tu
non sono sicuro che la registrazione sarà
pubblicato presto e forse puoi anche
evolvi i tuoi ambienti di servizio micro
di un ambiente di servizio proprio così
potrebbe essere un prossimo passo in questo in questo
viaggio e notiamo in pratica che
persone che intraprendono questo viaggio loro
rimanere bloccati sui diritti superiori non perché
si sono bloccati non potendo avanzare
ma hanno ottenuto bloccati non sono
dover avanzare da là così finiscono
in una situazione molto più semplice da gestire
di quello che avrebbero avuto se loro
andato dritto per i micro servizi e
questo è quello che intendevo con questo non lo è
davvero sui micro servizi è così
su come imbarcarsi nel viaggio verso
micro servizi per non dover fare micro
servizi a meno che non sia necessario
ora l’ingrediente che ti permette o
che è necessario per poter andare avanti
questo viaggio è ciò che chiamiamo posizione
trasparenza e trasparenza delle occasioni
sta per venire è l’ idea che due
componenti non dovrebbero essere consapevoli scusa due
componenti che interagiscono tra loro
non dovrebbe essere consapevole dei loro rispettivi
luoghi e che sembra facile bene
è in realtà piuttosto facile e inizia
con un buon design API per ottenere la tua API
è giusto è il primo passo
purtroppo non è l’ ultimo e
una cosa che aiuta davvero è esplicita
messaggi che inviano solo messaggi espliciti
oggetti da un posto all’altro o
eventi quindi questo è qualcosa che
tutti i microservizi basati sugli eventi
anche scoperto o alcune persone hanno
scoperto e stanno usando
micro-servizi basati su eventi e
in fondo quello che fanno è tutto l’evento
le cose quindi tutto ciò che facciamo
tutto ciò che comunichiamo diventa un
evento perché gli eventi sono davvero potenti
giusto perché il mittente può semplicemente inviare
un evento il destinatario non è vero
importa dove il destinatario ha ragione e
in questo caso sono davvero disaccoppiati
sia nello spazio che nel tempo
non importa dove siano o no
non importa se sono lì
in questo momento o ad un certo punto nel futuro
che riceveranno quel messaggio po ‘di tempo
il problema con questo è tutto
diventa un evento e siamo molto bene in
il nostro settore per andare da laggiù
a bene che non funziona andiamo via
qui, oh, non funziona neanche
poi c’è una nuova generazione di
gli sviluppatori e loro pensano oh questi vecchi
ragazzi che non capiscono che dovremmo fare
questo e poi arriva la prossima generazione
e qui andiamo di nuovo ora questo questo
il problema potrebbe esserti familiare come a
Il martello di Maslow, se tutto quello che hai è
un martello tutto sembra un chiodo I
stava ricercando un po ‘delle origini e
Mi sono imbattuto in quello che è chiamato
un cacciavite Birmingham così apparentemente
a Birmingham amano riparare case
con un martello ma a volte hai bisogno di a
cacciavite ma fondamentalmente qual è il
differenza
fallo e se non funziona
colpirà più difficile ora il problema con questo
è che suona come un cocktail giusto esso
sembra qualcosa a cui puoi unirti
il martello di Maslow della sera non lo è
davvero una cosa positiva, quindi non lo faccio
davvero mi piaceva quello che volevo
suona come una malattia e allora perché non lo chiamano
La sindrome di Maslow da ora ed è a
è che è una brutta malattia perché
di solito non ti accorgi di averlo
le persone giuste intorno a te potrebbero anche non farlo
notare che sono le persone leggermente più lontane
tu che potresti sapere che tu fai e
si manifesta da persone che hanno
questa malattia costruiscono cose come questa
c’è un servizio di ordini e c’è
un altro servizio che deve sapere
oggetti ordinati questo è probabilmente abbastanza
scenario comune ora immagino, naturalmente
i servizi hanno il proprio database giusto
sono isolati che è buono finora e
c’è un modo per questi servizi per
comunicare che ora va tutto bene
il servizio ordini omette gli eventi da notificare
altri componenti che qualcosa ha
successo a destra fino ad ora non è un problema questo è
tutto bene tranne che il o il servizio
a destra ora ha bisogno di sapere quale
gli articoli sono ordinati e ce ne sono alcuni
regole aziendali che devono essere applicate a tutti
quegli eventi per scoprire quali erano
ordinato perché un articolo non è ordinato
quando è aggiunto alla fine è
ordinato quando si aggiunge l’ordine
non rimosso e quindi quell’ordine è
ha confermato matematica non estremamente difficile
ma sono abbastanza sicuro che tu possa immaginare
situazioni in cui diventa carina
complicato quindi abbiamo bisogno di copiare alcuni di
la logica che sta probabilmente vivendo nella
servizio di ordine e alcuni dei significati
della matematica dietro a quelli
eventi e le regole tra quelli
eventi al servizio a destra e
peggiora quindi è così
scenario che qualcuno ha presentato in a
presentazione, naturalmente, non qui a andare a
qualche piccolo Meetup
e tu sai che questo è il massimo
disaccoppiamento nei nostri sistemi e questo è
quello che facciamo abbiamo un servizio di ordine e
emette semplicemente un ordine creato non lo è
accoppiato a tutto ciò che è bello e
il servizio di spedizione lo ritira okay
quindi c’è l’accoppiamento giusto così
il servizio di spedizione deve conoscere il fatto
che il servizio ordini sta emettendo quelli
eventi altrimenti così c’è l’accoppiamento
e invierà un inventario confermato
evento per dire che ok abbiamo il
roba che hai venduto oh è fantastico dice
il servizio ordini e emette un pronto
per l’evento di pagamento del servizio di pagamento
grande setup quindi il servizio di pagamento è
consapevole del servizio di ordine che emette
quegli eventi quindi ci sono alcuni accoppiamenti
lì e quando il pagamento è completamente
dice che è pagato e il servizio di ordine è
consapevole del fatto che il servizio di pagamento omette
quell’evento quindi c’è un accoppiamento da
il servizio di ordine al servizio di pagamento
come bene e poi il processo va avanti ora
il problema con questa situazione è questo
c’è accoppiamento ma gli eventi
in pratica cambiano la dipendenza
intorno così invece di avere un dis
pendenza dal mittente del messaggio
al destinatario non è solo l’altro
andare in giro ma la dipendenza è ancora
lì se comunichi tutto
attraverso eventi si avrà ancora a
attendere appendici e dipendenze bidirezionali
non sono tuo amico e ne abbiamo bisogno
rendersi conto che c’è più che giusto
eventi ma è bene nel nostro caso noi
credo che ci siano tre ragioni per cui
componenti vogliono comunicare uno di
le ragioni sono ancora eventi è il
si desidera notificare un altro componente
di fatto qualcosa è successo e io
dirà il mondo e qualunque cosa essi
voglio fare a meno di fatti che sono loro
destra
è una tipica situazione da pub / sub
basta pubblicarlo e andare avanti con il tuo
la vita e chiunque la raccoglie ogni volta
vogliono riprenderlo va bene
e in alcuni casi si desidera
comunicare a un componente perché tu
vuoi innescare un effetto collaterale che vuoi
lo stato dell’applicazione deve essere
diverso
dopo il comando ed era prima in modo
In quel caso invieste i comandi
e i comandi ne hanno in genere uno
destinazione e potrebbero tornare indietro
con un va bene o non va bene o forse a
piccolo pezzo di dati, se ce ne sono anche alcuni
valori generati in là ma non lo è
di tornare i dati si tratta del
effetto collaterale che il comando crea e
l’altro tipo di messaggio è una query
a volte hai solo bisogno di informazioni
a volte vuoi solo sapere cosa
stato attuale dell’applicazione
qualche forma giusta e la query che possono
hanno diversi modelli di routing per
quelle domande molto tipiche sono le
punta a punti in cui tu che è molto
utile se hai una singola autorità
rispondi alla tua domanda, se tu
avere un semplice webshop che dici cosa è
il prezzo di quel prodotto e arriva
indietro con un prezzo e basta tu
può anche fare un routing più complesso
strategie in cui dici bene non lo facciamo
avere un semplice webshop il nostro motore dei prezzi
è in realtà piuttosto complesso e non c’è
diverse regole che applichiamo per venire a
prezzi diversi come se tu sei un
membro del club esclusivo qualunque
ottieni uno sconto del 10% o se è il
la temperatura è superiore a 30 gradi all’esterno
ridurrà anche il prezzo o
aumentare a seconda di cosa sei tu
vendere così quel caso puoi fare uno scout
insieme interrogare è possibile inviare un messaggio a
tutti i componenti che potenzialmente hanno
una risposta per te puoi raccogliere il
risposte e fare una funzione di riduzione su
per tornare a un singolo risultato e
questo è un principio molto potente perché
puoi cambiare il comportamento del tuo
sistema non cambiando alcun esistente
componente nel tuo sistema basta aggiungere un nuovo
componente per fornire una risposta diversa
e il sistema si comporterà in modo diverso
è sia potente che pauroso se tu se
mi chiedi se lo facciamo possiamo ridisegnare
che lo scenario problematico da
prima e possiamo ridurre il disaccoppiamento
in logica o la copia di logica sul
scrive dicendo bene se c’è un
ordine confermato che è ancora un
notifica che è utile per la
– Non ci sono articoli ordinati si può fare una query che
puoi andare a chiedere ok, quali sono i
dettagli di quell’ordine perché poi io
So da quell’oggetto che mi Torna indietro I
grado di scorrere tutti gli elementi che ho
non importa cosa l’ordine abbia guardato
come prima è stato confermato ma non appena
come lo è in quanto è voglio sapere che cosa
sembra che diamo un’occhiata al
altro scenario quindi il servizio ordini
invece di emettere un evento potrebbe farlo
potrei semplicemente accettare che c’è un
la dipendenza del processo di ordine on
spedizione giusta non credo che nessuno possa
spiegare al processo di ordinazione esatto
senza menzionare la spedizione quindi va bene
avere questa dipendenza, quindi perché non farlo
il servizio ordini ha detto bene che mi aspetto
questo inventario da prenotare per fare
Assicurarsi che posso effettivamente vendere bene
poi c’è un evento che ritorna ora
la dipendenza è ora completamente dall’ordine
servizio di spedizione del servizio di spedizione
non ha bisogno di sapere sull’ordine
servizio e il servizio di ordine può inviare
beh, ho bisogno che io abbia bisogno che tu esegua un
pagamento ora perché è davvero quello che
Mi aspetto e puoi dire bene l’ordine
è stato pagato l’ordine della nave ecc così ora il
le dipendenze non sono più bidirezionali
sono solo dal servizio di ordine al
altri due e in questa situazione che
potrebbe essere buono potrebbe essere cattivo io no
lo so, ma almeno sono in un modo e se
si vuole modellare loro in altra
direzione puoi ancora farlo ma poi
scegliendo altri tipi di messaggi c’è
una cosa sugli eventi comunque
loro in qualche modo speciali in confronto a
i comandi e le query in questo
eventi mantengono valore il fatto che
qualcosa è successo un giorno è prezioso
più a lungo di quando viene emesso
proprio quando un comando ha trigger è a
effetti collaterali mentre gli effetti collaterali
potrebbe essere importante perché ci sono
eventi in genere se si esegue una query
fondamentalmente se hai la tua risposta
non vi preoccupate circa la domanda che
molto più giusto il tipico 42
problema
quindi c’è un concetto di sourcing di eventi
e l’approvvigionamento di eventi è molto spesso
correlati a CQRS sono due
concetti indipendenti che puoi fare CQRS
senza l’event sourcing puoi fare un evento
sourcing senza s sicuro e poi tu
può fare ciascuno di essi a prescindere
se fai micro servizi o no
immagina questo servizio di ordini e
c’è un altro servizio che ci sono
alcune analisi davvero intelligenti, quindi ha bisogno
per sapere tutto ciò che accade così
può essere davvero intelligente su ciò che è stato
accadendo ora ognuno di questi servizi
avrebbe un proprio database e lo farebbe
entrambi hanno il proprio modello di scrivere il loro
possiedono il modo in cui aggiornano il loro al loro
dati interni e questo servizio di ordine
emetterà eventi come le cose accadono per
quell’ordine finora non è un evento
sourcing nulla che sta accadendo qui
è il sourcing di eventi questo non è solo
è già abbastanza interessante ma lo è
è solo l’elaborazione degli eventi che è
diverso diventa event sourcing se
il servizio ordini stesso utilizza l’evento
sta generando come propria fonte di
verità che è l’unico modo è possibile
garantire che tutto il comportamento che il
il servizio di ordine viene visualizzato si basa su tutti
quegli eventi e tutto ciò che accade
si traduce in un evento e se qualcosa è
non mostrato come un evento non è successo
è un po ‘come giuro di dire la verità
tutta la verità nient’altro che la verità
giusto sono i tre elementi che tu
bisogno di essere completo così invece di avere
un modello che il servizio di ordine sarebbe solo
memorizza la sua storia che avrebbe appena archiviato
tutti i passaggi che ci sono voluti per arrivare al
stato attuale e in quel modo puoi
garantisce che tutto ciò che emetti è
vero e quell’ultimo ingrediente che è
essenziale è l’essenziale
differenza tra l’ elaborazione dell’evento e
sourcing di eventi e sourcing di eventi
hai bisogno di un modo per archiviare quegli eventi
che viene in genere fatto nell’archivio eventi
e il negozio di eventi ne ha molto
caratteristiche tipiche e ho
un sacco di blog su hey stiamo usando
tecnologia XYZ e o facciamo eventi o
vedere l’utilizzo della tecnologia XYZ e questo è grandioso
e a volte conosco la tecnologia XYZ e lo so
sourcing di eventi e mi chiedo che non lo sia
possibile che la tecnologia non possa farlo
e abbastanza spesso fanno l’elaborazione degli eventi
un altro evento che si basa sull’evento
memorizzare ciò di cui ha bisogno per farlo deve essere
essere in grado di aggiungere in modo efficiente eventi
e così facendo deve essere in grado di farlo
convalidare una sorta di sequenza in quelli
eventi e quella non è una sequenza globale
per definizione ma c’è all’interno di a
all’interno di qualsiasi servizio e nel mio esempio
Ho usato un ordine abbastanza all’interno di a
ordine singolo avrai coerenza
requisiti non è possibile confermare un ordine
questo è stato cancellato per esempio se tu
avere tali requisiti è necessario essere in grado
per garantire che non ci sia nessun ordine
evento cancellato o scusa o il
evento confermato dopo un ordine annullato
evento perché c’è una regola che dice
questo non può accadere, quindi non vuoi
eseguire comandi contemporaneamente sul
stesso ordine in questo caso in questo caso
sarebbe un aggregato in termini di dominio
design guidato un’altra cosa che un
eventi o necessità di essere in grado di fare è a
piena lettura sequenziale quindi alcuni di questi
proiezioni che vorranno leggere ogni
evento che arriva e aggiorna i loro
proiezioni indipendentemente da quale ordine
sono venuti bene, ma se leggiamo un singolo
ordine e voglio applicare qualcosa di nuovo noi
voglio essere in grado di leggere molto velocemente il
eventi che quell’ordine emesso nel
passato così possiamo ricalcolare la sua corrente
stato e sì ci sono alcuni caching
opzioni e istantanee che puoi
fai in modo che sia veloce, così non hai
per leggere milioni di eventi solo per
arrivare allo stato attuale in modo che tu voglia
essere in grado di trovare quegli eventi che erano
emessa da un ordine in modo da poter veramente
ricalcolare rapidamente quell’ordine specifico
afferma e questo è il necessario
ingrediente per garantire la correttezza di
tutti gli eventi che si producono
così fondamentalmente e questo è quando leggo
questa diapositiva mi è sembrata il mondo davvero
devo dire questo, ma mi limiterò a dire che
e puoi ignorarlo o dire oh lo sapevo
che già ma il passo è sbagliato se
consideri questi messaggi espliciti
prima di tutto vuoi la finale
cura quali schemi di instradamento voglio
applicare a questi messaggi giusto voglio
usare pop-up o scelgo un singolo
destinazione o più destinazioni ecc
e poi scegli una tecnologia e a
molti di noi scelgono prima la tecnologia
oh questa è la tecnologia cool, sono Maslow
sindrome Mi piace il testo ora vado
per trovare alcune soluzioni o alcuni problemi
che posso batterlo a destra e basta
probabilmente funzionerà nel mio piccolo laboratorio
ambiente e ne parleranno tutti
e diciamo che usiamo l’event sourcing
Kafka stai attento, quindi non ci rilasseremo
così questo approccio evolutivo e
abbiamo accidentalmente costruito questo
quadro se vuoi sentire il pieno
storia puoi venire e trovarmi
Di solito sono al di sotto del nostro stand al piano di sotto
e che funziona in modo eccellente
è un framework open source per java
e aiuta davvero a costruire questo
monolite strutturato e fare in modo che
quella comunicazione accade e permette
per dividere l’applicazione in due
parti ma ora abbiamo un divario tra il
due che abbiamo bisogno di cui abbiamo bisogno per riempire e
come ho detto tu sai guardare il percorso
modelli e quindi scegliere la tecnologia così
potresti ad esempio scegliere il mio sequel
come un negozio di eventi accanto a specifici
tecnologia focalizzata per essere un negozio di eventi
abbiamo trovato che un database relazionale
è il miglior secondo posto che puoi ottenere così
prima di guardare nessun sequel basta guardare
il sequel della vecchia scuola così c’è
componenti che ti permettono di integrarti
quello con con il quadro e poi
puoi ad esempio usare la nuvola di primavera
Netflix quindi con Eureka per fare un po ‘
scoperta tra i servizi e poi
puoi usare HTTP per inviare comandi
di una singola destinazione e una scoperta
servizio ti permette di trovare una destinazione
quindi perché non puoi puoi usarlo se
vuoi a volte vuoi pubblicare
eventi non attraverso un negozio di eventi ma
attraverso qualcos’altro bene seguono
seguire i principi del pub / sub in modo che tu
puoi usare rabbitmq ad esempio RabbitMQ
lavora con gli scambi e fa la coda
pubblicare eventi attraverso uno scambio e
li leggere dalle code e ogni
l’applicazione otterrebbe quindi la propria coda
in modo che leggano ciascuno il proprio
copia del messaggio giusto semplice finora
facciamo il prossimo passo
ora estraiamo un altro servizio così ora
cosa stiamo facendo, cosa dobbiamo fare
bene dobbiamo agganciare che nel
componenti esistenti e quindi creare a
nuova coda per quell’applicazione questo
diventa abbastanza complesso nel tempo e questo
questo è il modo in cui un po ‘di accento ti permette
costruire applicazioni per abbastanza a
mentre ora e abbiamo pensato bene c’è
per essere un modo migliore ci deve essere un po ‘
modo per ridurre tale complessità nel
medio e abbiamo pensato bene che ci sia
in fondo se ti guardi in giro c’è
ci sono diversi tipi di messaggi
sistemi giusti e puoi metterli
loro su una scala da quanto intelligente sono in
termini di comprensione dei messaggi che
trasportano giusto quindi non è un
positivo e negativo è solo
quanta parte del messaggio che fare
capisci così sul lato intelligente di te
avrebbe un ESB queste api capiscono
esattamente quello che portano e come risultato
entri in compagnie che ti capita spesso
il dipartimento ESB che ti dice
esattamente quello che devi pubblicare in modo che
possono fare tutte le trasformazioni e
assicurati che tutto funzioni per loro
Non riusciva a capire il modo in cui abbiamo sperato
nella maggior parte delle imprese o in molti
imprese così andiamo al contrario
come facciamo abbastanza spesso dove vai a
messaggio broker i tubi stupidi giusto te
basta mettere un messaggio lì il messaggio
il broker non ha idea di cosa sia
trasporto e pubblicano solo a
qualunque coda sia connessa
quello
scambio specifico sono molto più semplici
più facile da mantenere spesso eseguire molto
meglio così e siamo così bene che è
non ideale neanche perché comandi e
eventi e domande che hanno differenti
schemi di routing che non ti piacciono
non solo mostra tutti questi messaggi così
cosa succede se c’è una via di mezzo ideale
cosa succede se c’è un sistema che solo
capisce gli stereotipi di questi
i messaggi non il carico utile no
capire cosa significa il messaggio o ma
solo sa ok questo è un evento così questo
è spuntato questo è un comando di a
tipo specifico forse un nome o alcuni
identificatore come sai ok possiamo instradare
quello a quei componenti perché diceva
può gestire quei comandi in questo
caso potremmo sostituirlo con questo in
teoria, a noi piace la semplicità, quindi noi
ha fatto un sogno e abbiamo guardato e noi
non ho trovato nulla e poi noi
realizzato bene questa è questa idea che noi
disporre di micro-servizi evolutivi e
quanto sia importante la difesa dei comandi e
le domande sono così abbiamo iniziato a cercare se
c’è qualche tecnologia che potrebbe aiutare
con noi o non siamo stati bene
abbastanza ma non abbiamo trovato nulla di simile
è per questo che abbiamo iniziato a costruire e
il modo in cui funziona è fondamentalmente a
il componente dice solo che lo sai
cosa posso fare
Posso gestire questi comandi e posso
gestisci queste domande e con queste io
intendi solo un nome come un certo tipo
identificatore e se questo è un componente
lì dice bene voglio avere un po ‘di ordine
dettagli così ho intenzione di mettere una query e
allora quel sistema nel mezzo
citazione magicamente ovviamente
non c’è magia in questione, prometto sfregio
quello al componente che l’ha detto
può fornire quella query e anche l’ asse
server è un prodotto che abbiamo creato
che è open source e liberamente
disponibili pure se si desidera a
giocare con essa
ora se lo scaliamo se estraiamo
che i componenti fondamentalmente è giusto
cambia le capacità di questi specifici
componenti che ogni componente dirà ancora
hey questo è quello che posso fare posso creare
un ordine posso confermare un ordine e il
un altro dice che posso darti un po ‘di ordine
dettagli e quindi il sistema di routing
saprei okay ho bisogno di ottenere quella query
a quel composto
lassù nulla nel nulla
configurazione del componente sul
sinistra deve cambiare o nel mezzo
giusto questo è tutto operativo
dati volatili ora questo è tutto buono e
divertimento e questo funzionerà in laboratorio
nessun problema puoi fare micro servizi
la tua macchina sorda locale è davvero facile
e funzionerà lo capirai
probabilmente e non ci sono problemi lì
ma su scala le cose funzionano in modo diverso e
questa è l’abilità di enormi implementazioni
di micro servizi o grandi squadre o
soprattutto la combinazione dei due così
come indirizzare tutti questi messaggi a
tutte queste componenti e come sarà
scala bene la semplice risposta
il concetto di lotto proprio così non lo è
scala non per ragioni tecniche
per ragioni non tecniche in realtà cosa
si ottiene è un disordine ingestibile e
immagina che tutti questi componenti siano in grado
a parlare tra di loro
ora questo componente è un modulo di spedizione
e una volta sa quando viene effettuato un ordine
questa è la lingua che il Dipartimento
ci usa per esprimere un ordine ed è
posto e poi facciamo il nostro lavoro che è
non il linguaggio che usano nel
ordina il Dipartimento di cui parlano
no, non è così facile
ordina che non venga messo lì
molto di più ad esso viene creato oggetti
sono aggiunti articoli vengono rimossi spedizione
indirizzi o altri indirizzi di fatturazione ecc
ecc e poi conferma giusto e
probabilmente confermato è ciò che chiami
posto di nuovo ora otteniamo questa copia di
logica da un posto all’altro
si deve capire di qualcun altro
linguaggio per avere senso nel tuo
componenti e devi rendertene conto
ovunque ti abbiamo comunicato
avere un contratto e soprattutto con
eventi che sono problematici perché tu
invia un evento che significa che hai un
contratto con i componenti o molti
componenti perché si apre ma tu
non so quali immaginano di essere
sposato
ma non sapendo a chi l’unica cosa
sai che probabilmente è più di un pozzo
l’idea mi spaventa ad essere onesti così
lasciare la casa non sapendo per certo
se si aspettano che tu pulisca il
lavastoviglie o aspirare il pavimento o forse
entrambi non lo so che è orribile
così fortunatamente c’è un concetto di
contesto limitato e io non voglio che tu
leggi l’ intero testo perché è così
davvero noioso quindi il contesto è lo è
un confine attorno a un linguaggio naturale
una sorta di sub una parte dell’onnipresente
lingua che hai in un
organizzazione è il luogo in cui a
la parola specifica ha un significato specifico e
fuori da quel confine che potrebbe essere la parola
avere un significato leggermente diverso, giusto
e va benissimo, no
significa che una parola è sbagliata nell’altra
le cose giuste sono solo diverse
cose a persone diverse
e va bene questo significa solo questo
hai un contesto diverso così dentro
il contesto abbandonato e se questi
i blocchi significano microservizi o significano
componenti in un monolite non lo fa
importa ciò che conta è questo quando tu
condividere un evento è sicuro condividerlo
dentro con quelli che capiscono il tuo
lingua giusta se ascolti eventi
allora va bene ascoltare gli eventi
sono espressi nella tua lingua essere
attento quando si condividono eventi al di fuori di
il tuo contesto potresti voler usare a
linguaggio diverso perché non lo fai
voglio questo matrimonio con sconosciuto
componenti al di fuori del tuo intimo
ambienti diretti in modo che tu voglia condividere
più coscientemente là così immagina noi
avere nuovamente queste due componenti quella
vuole sapere un ordine piazzato e uno
sta emettendo tutti questi altri eventi
e ancora nel design basato sul dominio
c’è questo concetto chiamato
strato anti-corruzione e questo è
fondamentalmente ciò che questo è un
strato anti-corruzione in questo caso
trasforma la lingua interna in a
linguaggio che può essere usato fuori o dentro
alcuni casi il linguaggio che utilizza in
dall’esterno lo trasformi in
qualcosa che è più comodo da
uso
al suo interno quindi in questo caso potrebbe
essere un piccolo componente che così sto andando
per ascoltare ordinare eventi confermati
perché quello non è importante
evento ma ogni evento è importante ma
questo è leggermente più importante di noi
a volte si riferiscono a quelli come una pietra miliare
evento giusto qualcosa di veramente importante
è successo e poi ho ricevuto l’ordine
dettagli e creo questo bel evento
quello che dice è un ordine piazzato e
forse ci sono più grana grossa forse
stanno solo portando gli identificatori che è
tutto bene sono tutti diversi
modi per affrontare questo problema così
stiamo finendo il tempo che faremo a
piccoli eventi di ricapitolazione molto brevi sono utili
molto utile ma non dobbiamo dimenticare
su altri motivi per la comunicazione
e non dovremmo anche dimenticare che questi
gli eventi manterranno il valore che possono portare
valore nel tempo che possiamo usare
in seguito modellando i nostri messaggi
in modo esplicito possiamo stimolare la posizione
trasparenza ma attenzione al tuo
matrimoni e considera contesti limitati
in quei casi e infine non lo sono
l’unico a dire che questo si evolve a modo tuo
nei micro servizi non basta andare lì
subito e con quello penso a noi
sono rimasti circa due minuti per
domande
[Applausi]
[Musica]

Please follow and like us: