Press "Enter" to skip to content

GOTO 2018 • Pragmatic Event-Driven Microservices • Allard Buijze


[Musica]
Buon pomeriggio ero quasi volevo
dì buongiorno, ma sai che il tempo vola
quando sei quando ti stai divertendo I
voglio iniziare questo discorso con un po ‘
di un momento imbarazzante per me ne ho bisogno
fare una confessione e ho bisogno di confessare
il fatto che io abbia costruito qualcosa di orribile
software in passato e sull’altro
Sono abbastanza sicuro che lo hai fatto anche tu e …
Ho particolarmente paura di dirlo
perché alcuni di voi potrebbero mantenere
il mio software e, in tal caso, io sono
veramente dispiaciuto e si lo stesso, adesso
L’ho tolto dal mio petto per dargli un’occhiata
a quello che sembra quel software orribile
Mi piace e potrebbe sembrarti familiare
in realtà così ho usato per costruire software
con questo questo bel dominio mobile giusto
abbiamo imparato che abbiamo bisogno di un
modello di dominio nel nostro software e in
meno che era quello che mi è stato insegnato
e quando tu quando costruisci un nuovo sistema
e ho lavorato molto in Greenfield
situazioni e alcuni direbbero che ero
fortunato altri direbbero che sono per te
non sei arrivato al reale vero
roba ma all’inizio del la
servizi che si costruiscono realmente
bene a uno di questi concetti o
entità nel modello e poi come si
inizia a sviluppare ulteriormente, lo noti
sai che c’è un secondo servizio e questo
Realizza realmente le mappe su un’altra entità e
e tutto è bello e pulito
sai quella sensazione di ciò che è pulito
applica tutto ciò che senti di vedere
poco non dura più di uno o
due Sprint ha ragione sono le quattro
settimane e poi inizierà a calciare
e questo servizio è disponibile in questo è
ha solo bisogno di mappare su tutto
che tu abbia questa mappatura pulita
e tutte le promesse architettoniche
che hai fatto all’inizio , semplicemente
tutto cade a pezzi e si finisce con una bella
seguito
e tu sai che Java è un sequel facile no no
e questa è una query sequel vera e propria
qualcuno mi ha dato e spero che tu non possa
leggilo perché ti prometto che non potevi
ma poi ho iniziato a leggere il seguito
e ho iniziato a leggere i personaggi e
anche se puoi leggere i personaggi che tu
non posso leggere il sequel quindi immagino sia così
Va bene Direi che è all’interno della
confini di ciò che mi è stato permesso di fare
con questa affermazione sequel ma solo a
ti do un riassunto ci sono 22 join in
sei domande secondarie qui e questo è
normale sfortunatamente o fortunatamente è
devo dire che non vedi questo tipo di
domande in tutte le applicazioni
e ho costruito su query sequel come
bene e costruirli va bene
mantenerli è una storia diversa
ma abbiamo finito con le scuse così
cosa facciamo per risolvere questi problemi
bene questi quadrati non si esibiscono così noi
risolviamo tutti i nostri problemi e lo siamo
ragazzi della tecnologia quindi aggiungiamo la tecnologia, quindi aggiungiamo
cache in tutto il luogo che usiamo sessione
replica così possiamo essere distribuiti
sessioni in cui dovremmo distribuire
tutto solo perché ben una macchina
non posso più gestire tutto perché
quello a causa della nostra query sequel che usiamo
cache di invocazione del metodo perché in
spring cache hai appena messo un’annotazione
su un metodo e poi è memorizzato nella cache a destra
quindi è facile che possiamo farlo perché no
usiamo pool di lavoratori perché pensano
fai cose più velocemente fai attenzione se fai
questa ipotesi così aggiungiamo tutti i cache
oltre il posto e c’è un quando ero
preparando questa diapositiva mi ha colpito una cosa
e non l’ho fatto apposta io
stava esagerando un po ‘con tutto il
cache e ho notato che ho messo tutto il mio
soluzioni al problema a sinistra ma
il vero problema è in quel dominio
modella a destra la modella è sbagliata
e lo stiamo risolvendo aggiungendo altro
tecnologia ad esso così che cosa volevamo
costruire era qualcosa di veramente veloce e e
ovviamente le opinioni possono essere diverse
se è bello o no ma
è piuttosto veloce rispetto a questo ma
questo è ciò che abbiamo veramente costruito bene
probabilmente è costruito con tutto il meglio
intenzioni nel mondo e ha tutto
le caratteristiche della macchina noi
visto prima ma per qualche motivo e io
non ho provato questo sto facendo
ipotesi che ciò non si esaurirà
l’altra macchina ma sai che non lo è
software correlati sono automobili e automobili
sono mondi diversi, per fortuna c’è
anche un modello per il tipo di
software che stiamo costruendo o io
Diciamo che è un modo per non dirlo
c’è uno schema per il software che ho
costruito e si chiama la grande ciotola di
fango e ecco alcune notizie per voi è
non fango quindi il termine cappotto odore e
tutto ciò che viene insieme e
in questo caso c’è il c’è un
architetto in cima stavo per dirmi
ma e l’architetto è orgoglioso di ciò
creazione giusta questo architetto no
anche notare il codice odora nel suo
creazione di cui non è a conoscenza
quello che ha costruito questo è un male
architetto e spero che non sia così
riconosciti in questo e io no
come fare errori bene, in realtà lo faccio
come commettere errori mi piace farle
una volta ma questo è stato un errore che ho fatto
più di una volta giusta costruzione di un
applicazione ogni volta che dici la prossima volta
Penserò al mio modello di dominio
un po ‘ meglio, eppure ci risiamo
grande palla di fango sulla cima di esso matrice
qui andiamo così ho iniziato a sperimentare a
un po ‘ok, con cosa dobbiamo fare
questo modello di dominio e il modo in cui noi
sperimentato nel tempo in cui ero
il capo di Abramo è noi che abbiamo fatto le cose dentro
pubblico pubblichiamo i nostri esperimenti su github
e poi ovviamente devi dargli un
nome e quel nome non era reale
quadro al tempo in cui aveva un diverso
nome davvero schifoso non lo dirò e
abbiamo iniziato a sperimentarlo e poi io
ottenuto a
una mail un paio di mesi dopo a
la compagnia ha detto che stiamo usando il tuo
quadro di produzione che non era il mio
risposta a questa osservazione ero più simile
oh merda e ma c’erano due pezzi di
notizie in quella sola frase
prima di tutto quadro no era un
sperimentare che non dovrei usare un
sperimentare in produzione va bene e il
l’altro era in produzione da te
so che c’è produzione e c’è
la produzione c’è tutto questo c’è
foglio excel che usiamo normalmente ma ora noi
abbiamo bisogno di due persone per aggiornarlo, così abbiamo fatto
costruito questa piccola applicazione e
lo ha implementato su un Raspberry Pi che è
seduto sotto la scrivania che abbiamo resettato
ogni giorno ma sto collegando il cavo USB
ma no era un sistema medico e questo
è stato utilizzato per tracciare gli strumenti utilizzati in
chirurgia a parte sfortunatamente nessuno è morto
eppure e da allora in poi abbiamo iniziato
chiamandolo un framework e abbiamo deciso di farlo
dargli un nome appropriato e poi quello era
davvero il mio tipo di spunto per dire hey forse io
potrei usarlo io stesso in produzione, quindi
ho iniziato a usarlo da allora e
il modo in cui funziona e non me ne vado anch’io
in profondità in questo, ma questo è il nostro
è il mio genere di storia in micro
servizi o nella mia strada che ho preso
per venire ai servizi di micro e il modo
questo il noi ci avviciniamo al problema
del grande modello di dominio era di
separandolo e in questo caso lo abbiamo
separati creando diversi modelli per
scopi diversi che oggigiorno è
chiamato CQRS ha alcuni nomi diversi
nel passato e in sostanza cosa
tu dici è bene che crei un modello
è focalizzato sulla gestione dei comandi se tu
erano nella sessione precedente con
Alberto poi comando è un grilletto
qualcuno fa qualcosa che qualcuno fa a
decisione di fare fare qualcosa al sistema
e potrebbe essere attivato facendo clic su a
pulsante
non importa e devi farlo
decisioni giuste quali sono gli effetti di
questo comando specifico cosa fa il
il sistema deve fare cosa e qualunque cosa
inizia a emettere eventi basati su
cosa sta succedendo per quello
trigger e quegli eventi sono quindi
inoltrato a ciò che chiamiamo il
proiezioni e sono un modello o loro
sono modelli che si concentrano sulla consegna
informazioni di solito agli utenti perché
hanno uno schermo hanno bisogno di qualche
informazioni che probabilmente volevano ora
perché i caricatori sono così 20:17 quindi vogliamo
avere queste informazioni facilmente
disponibile e facile da navigare
quindi vogliamo modelli che si concentrino su questo
possiamo perdere le domande difficili
le query senza prestazioni e tutto il
cache in cui cerchiamo di farlo
risolvere i problemi e su questa strada quando
abbiamo iniziato e questo è iniziato verso le nove
anni fa e abbiamo iniziato a notarlo
sai che i monoliti non sono proprio così
brutto e potresti averlo sentito prima
Voglio dire che non sono l’inventore del fatto
quei monoliti non sono così male ma per
uno che non odora di solito a meno che
sono in un parco e ce ne sono molti
i cani che passano potrebbero iniziare
puzzolente ma non è lo stesso di un grande
palla di fango, c’è un grande
differenza tra un monolite in un grande
palla di fango è possibile terrorizzare a
monolite a parte va bene è anche possibile
strappare la grande palla di parti della madre, ma
Non penso che tu sia molto carino
lavoro e c’è ovviamente avviso c’è
un sacco di osservazioni dal in
la comunità e Marti Fowler lo hanno detto molto
ha detto bene quasi tutto il
storie di successo di cui ha sentito parlare
i micro-servizi sono iniziati con a
monolite e quasi tutti i casi in cui essi
non è iniziato con il monolite ma solo
ha detto hey ecco un pezzo di carta bianca
andiamo per i micro-servizi fino in fondo
quei progetti sono falliti e io sono stato
coinvolto in alcuni progetti
per fortuna non come non come la fine
responsabile per loro e ho visto alcuni
di quei progetti falliscono pure perché
è incredibilmente difficile
per fare micro-servizi ce ne sono molti
cose di cui devi preoccuparti e
la domanda è davvero sei tu sei tu
davvero pronto per questo sei tu
livello di maturità nella vostra organizzazione e
non stiamo parlando solo solo
La tecnologia si fa a capire la
tecnologia per implementare servizi bancari
ma sai anche dove tagliare il tuo
per posizionare i tuoi confini e questo è
in realtà un concetto che viene da
Alberto oltre birra quindi stai attento e lui
detto che sai quello che dice in pratica
si chiama nome driven design ed è a
tecnica molto semplice ed è
tecnica dimostrata di non funzionare ma è
usato molto ed è facile da prendere
le specifiche del tuo sistema e
ogni nome che incontri è a
servizio facile, purtroppo, questo è
anche quello che succede nella pratica così abbiamo
ordinare il servizio assistenza clienti
servizio di inventario del servizio, ecc. e ora
invece di aver creato questa grande ciotola
di fango una grande scodella di fango monolitico noi
hanno creato una grande palla distribuita di
fango evviva
andato con il codice odore bene in bocca al lupo
se siete in che ambiente e la
problema con questi progetti non sono io
significa che un fallimento del progetto non è grande
problema ma vuoi che falliscano velocemente
e non riescono a buon mercato così all’interno della gestione
portata di quel progetto puoi riprovare
diritto che hai fatto un esperimento che
non ha funzionato davvero proviamo
qualcos’altro che funziona va bene
abbiamo perso una settimana a chi importa così che cosa fa
un viaggio microservizi viaggio sguardo
come e nel nostro, a nostro avviso e
tutto inizia con e questo è un Greenfield
situazione giusta quindi tutto inizia con a
un’idea di alcuni concetti che andranno
rendere qualcuno ricco di solito è questo che cosa
i casi aziendali sono circa forse dovrei
abbiamo messo un piccolo mondo in un globo lì
con due mani come un’idea che fa
il mondo migliore ma per alcuni di noi a
il mondo migliore è pieno di tasche e
cosa sappiamo che migrare si sta spostando verso
micro servizi subito questo è
pericoloso
questo è un viaggio molto pericoloso e
ci sono molte insidie ​​che c’è a
possibilità di finire come qualunque cosa
era quando era vivo ma non c’è
anche una grande possibilità di te che hai appena perso
il modo e finire non proprio dove
volevi essere dove finire così noi
voglio prendere un altro percorso diverso
cosa vorremmo davvero fare e e
questo è ciò che abbiamo visto gli utenti di
quadro d’azione non è qualcosa
che intendevamo ma sembrava proprio che fosse così
succede è creare un monolite strutturato
assicurati che all’interno del tuo monolite
ci sono confini chiari ci sono
componenti chiaramente definiti in quello in
quel monolite che come il tempo si muove
e scopriamo alcuni degli stessi
Zoar non funzionale abbiamo raggiunto un punto
dove i monoliti non possono farlo più
possiamo iniziare a estrarre questi componenti
e inizia a distribuirli separatamente
perché ora abbiamo una ragione reale per
dividere un certo componente fuori dal
monolite abbiamo una ragione per strapparlo
a parte e potrebbe essere perché il let’s
dire il ciclo di vita delle implementazioni di quello
la componente blu è diversa proprio noi
bisogno di distribuire quello più spesso o forse
non è una stalla e sta generando
questi errori di memoria sempre
quindi utilizziamolo separatamente così possiamo
lascialo cadere senza avere l’intero
crash monolitico a causa di esso
potrebbe essere perché anche la squadra è troppo
grande destra, puoi lavorare solo con così
molte persone del team sullo stesso repository
quindi potresti voler dividere per
che ci sono molte ragioni diverse
e sono tutti non funzionali e giusti
col passare del tempo possiamo estrarne di più
componenti e finiamo in un posto
probabilmente non nel posto che intendevamo
finiamo dall’inizio ma noi
finire in un posto in cui ci siamo evoluti
in micro servizi e naturalmente io
allora c’è una domanda, davvero?
bisogno di fermarsi lì per quanto riguarda il server
elenca bene che potrebbe essere un passo successivo
forse a noi non interessa quanti
istanze di quel componente viola noi
forse hai appena detto
qui è eseguito non mi interessa whoops
e i concetti chiave di essere in grado
per fare questo essere in grado di transizione
tra questi dal monolite 2 a
i micro-servizi sono ciò che chiamiamo posizione
trasparenza e il concetto di posizione
trasparenza significa che un componente è
non consapevole della posizione e forse anche
l’esistenza dell’altro componente
che interagisce con esso è circa due
componenti che comunicano e loro no
cura dove sono così sono loro nel
lo stesso nel nostro caso dice che è basato su Java
ma è nella stessa JVM o è attiva
la stessa VM sono sullo stesso host
ma in VM diverse o diverse
data center in tutto il mondo non lo fa
importa la comunicazione che hanno
non fare ipotesi su questo
posizione e preferibilmente un componente
non sa nemmeno che sta parlando a quello
specifici altri componenti e tutto
inizia con una buona progettazione API e e
al giorno d’oggi i micro servizi basati sugli eventi sono
implementato molto per superare questo
gli eventi giusti sono una posizione molto
mezzi di comunicazione trasparenti
perché il mittente di un evento no
davvero a cuore chi ha raccolto quell’evento
giusto così vediamo molti di questi
microservizi event-driven emergenti e
come succede molto nel nostro settore noi
trovare una soluzione a un problema e poi a noi
iniziare a trovare i problemi per abbinare il nostro
soluzione in tal modo micro servizi basati su eventi
tendono ad apparire dove non dovrebbero essere
ma quindi immagina un servizio di ordini e
c’è un altro servizio che deve
conoscere oggetti ordinati e un pennarello
servizi è buono che ogni componente
è isolato dal resto giusto no
utilizzare i database per l’integrazione credo
abbiamo imparato quella lezione nel corso degli anni
quindi c’è una linea di comunicazione
tra quelli e i servizi di ordine
pubblicare eventi senza sapere che loro
finire in altro servizio di ovviamente
ma e potrebbe essere come oh c’è
ordine creato c’è l’elemento aggiunto il
oggetto rimosso in questo ordine confermato e
ovviamente ci sono molti altri eventi
nel processo non è proprio quello
semplice ma nessuno di questi eventi lo farà
Dillo davvero a quel componente a destra
quali oggetti sono stati ordinati perché
l’aggiunta di un articolo a un ordine non viene eseguita
è un oggetto ordinato è solo un ordinato
oggetto se è stato aggiunto a un ordine che era
poi confermato in modo che significa che alcuni
della logica su ciò che significa tutto ciò
questi eventi devono essere copiati su
l’altro lato ora il servizio sul
il diritto deve avere una conoscenza complessa di
la matematica di cosa significa per a
oggetto da ordinare e di nuovo questo è un
pezzo di matematica davvero semplice ed è
bene copiare questo, ma in pratica
diventa molto più complicato ed è il
tipo di accoppiamento che è davvero fastidioso
perché è implicito implicito accoppiamento
è il peggior tipo che puoi avere perché
alla fine si finisce con una piccola palla
ma peggiora non è il peggiore
caso ho visto orchestrazione o
coordinamento usando eventi nel sistema
era impossibile da comprendere e
è come Oh o il servizio dice un
viene creato l’ordine per cui è stato attivato
spedizione ed è veramente inviato come un
intento a scatenare la spedizione in questo in
quel caso poi dice il servizio di spedizione
Io confermare l’inventario confermiamo
che abbiamo le loro cose che possiamo
spedire effettivamente questo e l’ordine
servizi ok Sono pronto per il pagamento ora
beh questo è di nuovo il tipo di
comunicazione dove sei veramente
puntando il dito contro qualcosa di giusto
qui stai usando un evento per dire al
altri componenti sono pronto per te ora
puoi fare le tue cose e dice ok
gli ordini hanno pagato i nostri voti ora sono pronto per
spedizione di nuovo stiamo puntando le dita così
ancora una volta ci sono un sacco di dipendenze
crescendo tra questi questi servizi e
non siamo veramente trasparenti come noi
potremmo essere
e questo perché non c’è davvero
un motivo per inviare un messaggio a un altro
componente abbiamo notato che c’è
tre ragioni per cui un messaggio vorrebbe
inviare il nostro Soria perché un componente lo farebbe
voglio inviare un messaggio a un altro
componente e questo è un evento da notificare
che qualcosa è successo è a
messaggio legittimo non sto dicendo eventi
sono cattivi ma non tutti gli eventi ci sono
anche il comando e questo è un messaggio
che avvisa che ciò notifica il
sistema che ci aspettiamo un effetto collaterale noi
aspetto che il sistema sia diverso
stato dopo l’elaborazione di questo comando di
era prima che volessi qualcosa
fatto periodo e l’altro è il
query ho bisogno di informazioni
qualcuno mi dia questo ho bisogno di fare un
decisione da qualche parte o ho bisogno di mostrare
qualcosa per l’utente e ho bisogno
informazioni per mostrare che mostrano quell’utente
quindi un evento è tipicamente a potrebbe essere un
i dati cambiano a destra quindi sono un ordine
ha confermato qualcosa del genere potrebbe
essere una scadenza come il pagamento
in ritardo o qualcosa di simile
fondamentalmente è qualcosa di rilevante nel
dominio ed eventi che infuriano il
la sessione prima di me è molto
tecnica interessante da scoprire
questi eventi in un’organizzazione e
gli eventi in genere seguono a
pubblicare / sottoscrivere il meccanismo giusto siamo
molto consapevole di questo io presumo così a
componente pubblica solo gli eventi
e qualsiasi componente che vuole sapere
su quell’evento puoi prenderlo a posto
è facile ma ottiene un po ‘di più
complesso cosa se hai due istanze
di un componente e solo uno di essi
ha bisogno di sapere di quell’evento e se
stanno aggiornando alcuni tavoli in a in a
modello di intervista o in una in una banca dati che
non ha importanza e c’è solo due di
due istanze che possono fare ciò che vuoi
un evento da non gestire solo una volta in
In quel caso puoi usare esclusivo
consumatori che fondamentalmente significa il
la prima istanza qui otterrà tutto il
eventi e l’altro aspetterà
per il suo fratello essere ucciso e poi
puoi prendere la parola lavoro e se
che l’ altro ritorna in cui è
modalità di attesa oh questa è una bella
spreco di risorse non tanto di CPU
perché abbiamo una buona tecnologia per dove
per condividerlo, ma probabilmente quella cosa è
cercando di stabilire una connessione per tutto il tempo
sta consumando memoria quindi non lo è
davvero efficiente nella pratica ciò che vediamo
la maggior parte è consumatori in competizione che significa
che entrambi stanno solo leggendo
messaggi fuori dalla stessa coda e ogni
il messaggio verrà consegnato a chiunque
lo toglie prima che è molto facile in
almeno da implementare ma di nuovo c’è
un piccolo problema qui nel senso che
per quanto riguarda l’ordine dei messaggi ora tu
non può garantire che l’articolo aggiunto sia
gestito prima dell’ordine creato così da te
potrebbe essere aggiungere oggetti ad un ordine che
non è stato il processo della creazione
non è stato ancora elaborato ora un messaggio
l’ordine è un argomento completamente diverso
possiamo avere una sessione diversa su
ma non sarebbe bello se lo sapessi
che gli eventi sono emessi in un certo
ordina che tu possa consumarli anche in
quello stesso ordine quindi c’è un diverso
c’è modo di utilizzare i consumatori di equilibrio
utilizzare un algoritmo di hashing per decidere
va bene se il modulo 2 finisce con 0 il suo
tu se è 1, sei tu, naturalmente
del peggiore algoritmo di hashing in circolazione
ma solo per il gusto di spiegazione così
se due eventi sono sono circa lo stesso
ordina che finiranno nello stesso modo
componenti ora che il componente no
devi preoccuparti dell’ordinazione degli eventi
più sa che tutti gli eventi di
un ordine specifico e mi dispiace per
sovraccaricando quel termine tutti gli eventi di
lo stesso ordine viene gestito nell’ordine
sono stati creati quindi passiamo a
comando in modo che i comandi siano una richiesta a parte
effetto tipo di messaggio giusto vogliamo il
mondo dell’applicazione deve essere diverso
dopo il comando che era prima così
potrebbe cambiare questo stato o di solito
sono un po ‘più espliciti del perché vuoi
per cambiare gli stati
o forse manda una mail voglio una email
per essere inviato correttamente e succede qualcosa
che è stata inviata la mail
i comandi hanno in genere un singolo
destinazione c’è un componente
da qualche parte nei nostri micro-servizi
paesaggio o il nostro paesaggio componente così
per dire e c’è una destinazione per
e c’è un componente che lo farà
gestirà questo e in genere a
i comandi non hanno grandi risposte
basta avere un OK
scrivi una risposta a volte c’è un po ‘
un po ‘ di dati se c’è un altare
generatore o un valore generato da qualche parte
potresti voler restituire quel valore
ma di solito non c’è molto
informazioni perché non è la risposta
che ci interessa ora vieni in rotta
potrebbe essere fatto round-robin a destra a
il tipico bilanciamento del carico lo farebbe
ogni richiesta che ottieni andrà semplicemente
qualsiasi meenie miney moe al prossimo ma
che di nuovo potrebbe essere molto inefficiente
l’abbiamo visto durante i keynote
puoi utilizzare un hashing coerente da instradare
comandi per lo stesso concetto al
stessa macchina in modo da poter utilizzare le cache locali
e non cache come abbiamo visto prima
risolvere grandi problemi di prestazioni ma
memorizza il modo in cui erano destinati a essere come
un’ottimizzazione di un sistema che funziona
bene senza di loro giusto così ancora qui noi
potrebbe usare hashing coerente e con
comandi comandi in genere target
qualcosa come un ordine così in quello
comando se si targetizza un ordine probabilmente
hai citato l’ID ordine da qualche parte come
bene che l’ID ordine è un bel input
per questo algoritmo di hashing così diverso
comandi che menzionano gli stessi ID di ordine
dovrebbe essere indirizzato alla stessa macchina di
finchè quella macchina è viva e quando
quella macchina muore, la instradiamo a
tutto ciò che rimane giusto e l’ultimo
è che voglio sapere qualcosa che è
query ho bisogno di avere informazioni e
a differenza degli altri messaggi questo è un
messaggio in cui il valore non è sul
messaggio inviato ma il valore è in
il messaggio che ricevi come risposta e in
pratica vediamo questo uso implementato
usando HTTP di solito ottengo tutto il tempo
ma questo è solo uno dei
schemi che abbiamo visto e
questa è una query point-to-point giusto è
ho appena indicato qualcuno e ti ho detto
dammi la risposta a questo
domanda e che funziona davvero bene quando
hai una domanda che ha un singolo
vera risposta giusta e in questo esempio
qual è il prezzo di un determinato prodotto
beh se il prezzo è 49 allora è fantastico
il prezzo è 49 ma se sei in vendita
probabilmente saprai che non c’è
come il prezzo attuale del prezzo
può dipendere dalle cose se tu se ne vai
l’Albert Heijn che è grande
supermercato qui puoi ottenere un bonus
carta giusta e se hai quel bonus
la carta è possibile ottenere sconti, quindi non c’è
lo stesso prodotto e persone diverse
pagherà un prezzo diverso per quello
prodotto quindi non c’è una risposta vera
questo prodotto costa bene, dipende
sono non avete il diritto carta bonus
in altre parole hai dato via il tuo
privacy per quell’altra società e
ovviamente tu risparmi i soldi per questo
giusto puoi vendere la tua privacy che è
bene quindi in questo caso cosa vogliamo
fare è avere una query giusta
abbiamo una domanda e ne lasciamo qualsiasi
componente che ha una risposta per noi
fornire una risposta e dobbiamo essere a
un po ‘attento qui perché ne abbiamo bisogno
timeout perché non sappiamo nemmeno se
ci sono componenti che ci forniscono un
rispondi a destra in modo che il primo possa rispondere
solo il prezzo di listino predefinito giusto
199 Supponiamo che sia diverso
prodotto rispetto al precedente e se tu
sono un titolare della carta bonus il loro prezzo è
149 è fantastico e se questo componente
va giù potrebbe succedere che lo farà
non rispondere e quindi sfortunatamente bonus
i titolari di carta pagheranno il prezzo normale
che sicuramente li farà incazzare ma
forse non se ne accorgono ma qualcosa
più bello che possiamo fare è che possiamo cambiare
il comportamento del sistema senza
modificare nessuno dei componenti nel
Sistema possiamo mettere un componente qui che
dice bene se qualunque condizione se
sono se c’è il sole fuori dai gelati
sono $ 0,99
Di solito vado in giro a comprare
più costoso ma e poi se non lo facciamo
preoccupiamo che più siamo in grado di prenderlo
via così possiamo cambiare il comportamento di
l’ intero sistema senza toccare
qualsiasi cosa nel sistema e questo è molto
potente e naturalmente con potenza arriva
grande responsabilità
si può anche distruggere un sistema come quello
sai non toccare niente e ancora
si rompe e ce n’è un altro
che abbiamo visto in uso e questo è un
query di iscrizione e questo è il tipo
di query in cui dici tienimi aggiornato
data sul prezzo di per esempio in questo
caso quindi il risultato è in realtà il
prezzo iniziale che ottieni e poi tutto
i delta in qualsiasi forma o forma
che vengono così nel nostro caso nel nostro
esempio il prezzo potrebbe essere 49 ma come esso
scende a 39 si invia il Delta di meno
10 il Delta potrebbe anche essere il nuovo prezzo
questo è davvero a te a te a
decidere in ogni caso specifico e questo
è un modo molto potente per mantenere
componenti aggiornati su qualcosa che
vogliono essere tenuti aggiornati su così
non devi fare sondaggi che non fai
Devo replicare la logica di come va bene
manteniamo questo prezzo aggiornato come si fa
noi di che tipo di eventi abbiamo bisogno
ascolta quello che può aggiornarlo
prezzo o dici ora, dammi un
modella e inviami i delta di a
certo modello come cambia e noi abbiamo
abbiamo implementato scenari come questo
dove il modello era vivo sul sul
lato client di solito in un browser te
basta avere un modello lì e come dati o
come il modello sul server ti cambia
manda quei delta sopra e ora li hai
un’interfaccia utente in tempo reale che fa paura per molto
degli utenti ora ancora oggi sono
usato per premere Aggiorna per ottenere nuovo
informazioni ancora così ora se guardiamo
questi micro servizi guidati dagli eventi e
guarda questi diversi tipi di
i messaggi che abbiamo possiamo togliere
quella duplicazione della logica che possiamo ora
attendere per essere confermato e
dì ok, dammi il
dettagli poi e ora sto ricevendo
informazioni sugli oggetti che erano
ordinato giusto sappiamo che questo ordine
poiché è stato confermato tutto
lì è ordinato e possiamo ottenere il
dettagli di tutti gli articoli e non lo siamo
duplicare la logica più abbiamo ancora
un evento da attivare quindi non dobbiamo
fare sondaggi come Oh cosa sono gli ordini
mi hai dato la lista totale di
ordini effettuati nelle ultime 24 ore
e poi fai un delta con quello che tu
già sapevo di essere abbastanza sicuro di alcuni di voi
hanno costruito integrazioni come quella di noi
includerlo ed è orribile che non lo faccia
come se fosse
e c’è un’altra cosa sugli eventi
eventi a cui conservano valore
i comandi sono belli e attivano un lato
effetto e quindi davvero il valore di
quei comandi sono andati
una query ottieni le tue informazioni e
in realtà il valore di quella query è sparito
ma il fatto che qualcosa sia successo a
un tempo specifico è molto prezioso in qualsiasi momento
momento in futuro destra c’è un sacco
di valore in quegli eventi loro loro
rappresentare qualcosa che è accaduto nel nostro
nel nostro dominio a destra è un evento di sourcing
è uno schema di cui si parla a
in questi giorni è implementato a
molto meno per alcuni ovvi e alcuni
ragioni più o meno ovvie e cosa
hai davvero bisogno di memorizzare eventi è un
negozio di eventi ovviamente giusto cos’altro
lo chiameresti e un negozio di eventi lo è
un meccanismo che ti permette non solo
memorizzare gli eventi ma anche recuperarli
in modi specifici così con l’event sourcing
se c’è un componente che invia questi
eventi a questi eventi hanno valore
componente omettendo anche noi
può alimentare quegli eventi di nuovo all’ordine
servizio e ora l’unica cosa che l’ordine
il servizio ha in termini di stato è il
eventi che hanno emesso in passato
perché questi eventi fondamentalmente dicono
tutto ciò che è successo e
teoricamente purtroppo anche in
pratica puoi usare quegli eventi a
ricostruire lo stato di un ordine invece di
memorizzazione
lo stato attuale di un ordine tu semplicemente
ricostruire lo stato corrente di un ordine
usando tutti gli eventi che sono stati emessi
su quell’ordine nel passato e quello
ci dà una pista di controllo molto potente
giusto perché quegli eventi rappresentano il
fatti che sono accaduti sono fatti e
ora non stiamo solo pubblicando quelli
fatti come effetto collaterale di un’operazione
ma sono anche la fonte del
le decisioni che prendiamo e questo è molto
concetto importante nel sourcing di eventi e
purtroppo in alcuni dei
spiegazioni di sourcing di eventi che è
senza il fatto che tu sai che dicono
è l’ unica fonte di verità e
all’improvviso ti accorgi che nel
descrizione hanno ancora due fonti
e stanno basando la verità su
qualcosa che non è la verità, quindi come
vero è la verità se non basarlo
sulla verità quindi sulle operazioni che tu
bisogno di sapere che un evento o ha bisogno di
essere in grado di fare upend scrivere solo nuovi
le cose possono accadere purtroppo agli umani
viviamo ancora nell’ora non abbiamo un
modo di viaggiare mentre puoi fare il tuo
ora vai più lentamente di quello di altre persone ora
ma questo è tutto ciò che possiamo fare in termini
del tempo di viaggio per quanto ne sono a conoscenza di
e l’ altra cosa è che dobbiamo essere
in grado di convalidare questa sequenza come noi
voglio essere sicuro che non stiamo permettendo
due eventi in conflitto da aggiungere
giusto e questo non significa tutto
è completamente sequenziale che puoi avere solo
c’è un evento di pubblicazione su thread
ci sono altri modi ma non andrà
in troppi dettagli ora un altro
operazione che dobbiamo essere in grado di fare
è una lettura sequenziale completa in modo che
servizio a destra che è interessato
in in in elaborare questi eventi attenzione
può seguire fondamentalmente questo flusso di eventi
giusto può recuperare il primo evento e
poi quando ciò è fatto, recupera il
il prossimo e il prossimo e poi continua
loro possono tenere un puntatore su dove è andato
subito alcuni di voi probabilmente ora
pensa hey Kafka, giusto
sì, Kafka è davvero bravo a farlo
ma ecco la sfida ora che dobbiamo
fallo anche tu
ed è qui che Kafka ci ha abbandonati
sfortunatamente, quindi, leggi gli eventi
sono stati emessi da specifici aggregati
come senza andare fino in fondo
l’ intero flusso giusto in modo che tu voglia
leggi quegli eventi specifici che erano
emesso per rappresentare i cambiamenti in a
ordine specifico o il loro significato
cosa hai comprato proprio in questo ordine
non la sequenza, quindi quelli sono solo alcuni
degli eventi nell’intero stream
anche altre cose stanno succedendo
altri ordini vengono gestiti
e ci sono altre cose oltre gli ordini
che stanno succedendo anche noi e di cui abbiamo bisogno
essere in grado di leggerli in modo efficiente
ricostruire lo stato attuale di un
ordina in modo che possiamo prendere decisioni di nuovo
in base ai fatti che abbiamo emesso
in passato quindi con quelli con quelli
messaggi ciò che io per quello che noto è per
qualunque motivo tendiamo a dimenticare il
fatto che prima dobbiamo vedere cosa
i nostri requisiti e quindi scegliere
la tecnologia e sono caduto in quella trappola a
anche tu dici ok, l’ HCP è qui
tutti usano HP quindi perché non dovrei
notizie HTTP per tutto giusto quindi andiamo
fai una query usando HTTP GET bene chi dice
questo è il modo migliore per farlo bene
abbiamo bisogno di questo routing coerente andiamo
crea un pattern URL che quindi ha a
valore specifico da qualche parte quindi contiamo il
numero di barre e diremo al
bilanciamento del carico alle rotte
qualunque valore tra questi tagli
e se questo è lo stesso piuttosto per il
Probabilmente la stessa macchina si può fare
ma è davvero questo il tipo di lavoro
ciò apporta più valore al tuo
cliente o al business che sei
correre è molto bello
tecnologie per ottenere informazioni da A
a B e tutti hanno diverso hanno
fatto scelte diverse, quindi dovremmo
davvero fare un passo indietro ogni ora e
quindi penso ok, che cos’è il
messaggio che sto cercando di attraversare e
quindi scegli la tecnologia che corrisponde
quel modello di instradamento
ora questo è solo facile e bello e se
sei in un laboratorio controllato
questo ambiente funzionerà perché il
il computer sotto la tua scrivania sarà felicemente
servendoti tutte le domande dei comandi e
e gli eventi ma su scala sono le cose
diverso in modo da potersi chiedere come si fa
tu quando hai questa scala enorme
sistema come ottieni tutti questi eventi
instradato correttamente a tutti questi altri
componenti e come si ottiene questo
comando esattamente a quel componente
in realtà può gestire questo in questo enorme
distribuzione di sistemi come scala
questo fortunatamente la risposta è
davvero semplice non lo fai questo
un concetto come questo non scala
per fortuna c’è un vero e proprio
soluzione per questo ci arriveremo in
apparentemente secondo quello che ottieni è un
pasticcio ingestibile di sistemi
comunicando l’un l’ altro proprio così
c’è questo modulo di spedizione che vuole
di conoscere un ordine giusto, perché
ha bisogno di spedire quella roba che è grande
ma nel silo chiamato gestione degli ordini
loro vanno come oh , non è quello
semplice non è come un ordine
posto giusto, sta succedendo qualcosa
è davvero complesso, non ti preoccupare
non capisco ma così hanno parlato
a proposito di un ordine creato da elementi di crociera
aggiunto Ho appena rimosso gli indirizzi di spedizione
per gli indirizzi di fatturazione aggiunti Lola e
poi forse dopo un po ‘finalmente
confermato l’ordine giusto e c’è un
c’è una discrepanza linguistica qui e
di nuovo proprio come l’esempio precedente
stiamo andando a copiare la conoscenza o la logica
della matematica in questo caso di cosa
significa per al fine di sostituire e
qual è il tipo di informazione che noi
bisogno e hanno bisogno di imparare l’uno dell’altro
linguaggio per essere in grado di farlo
fortunatamente la soluzione è dentro
design basato sul dominio lo definiscono
concetto chiamato contesto limitato e a
contesto limitato è davvero
una barriera linguistica è all’interno di un limite
il contesto parla la stessa lingua
usano parole specifiche
significato e quelle parole potrebbero anche essere
usato in altri contesti ma ha un
significato leggermente diverso giusto e noi
voglio essere molto attento a
passare questo limite così all’interno di a
contesto è sicuro da condividere
l’informazione è sicura per condividere tutto questo
eventi che stai producendo ed è
sicuro di consumare eventi così
stai parlando la lingua che capisci
giusto ma non appena lo attraversi
confine vuoi essere più consapevole
su che tipo di eventi emetti giusto
che tipo di informazioni vuoi
includere e tipicamente gli eventi in tutto
questi confini sono gli eventi che chiamiamo
eventi cardine che rappresentano
qualcosa di leggermente più importante di
qualsiasi altra cosa che avvenga giusto e
soprattutto se si utilizza il sourcing di eventi
tutto è negli eventi ogni piccolo
cambia non importa quanto piccolo sia un evento
e tu non vuoi altri gli altri
componenti da accoppiare strettamente
quei dettagli nitidi e grintosi, quindi vogliamo
sii più consapevole di quelli
eventi e in alcuni casi ciò potrebbe significare
sono molto grossolani non come
evento frequente contenente un sacco di hey
un ordine è stato messo qui è un po ‘
informazioni che ci accingiamo a o
ecco tutte le informazioni dell’ordine
e ottieni questi eventi di moda proprio così
andiamo a vedere quell’esempio e lì
potrebbe essere ci potrebbe essere un componente
lì nel mezzo del confine
dicendo bene se tutto questo è accaduto io sono
andando a usare queste informazioni per pubblicare
pubblicare questo grande evento, ma ovviamente
gli eventi non erano gli unici elementi costitutivi
quindi possiamo anche usare un evento come trigger
e poi fare una query e inviare tale
informazioni su un altro approccio
essere di avere eventi molto piccoli solo dire
hey questo ID questo ID ordine rappresenta un
ordine che è stato appena confermato se tu
voglio sapere qualsiasi cosa lo chieda correttamente
perché forse il mittente non lo sa
che tipo di informazione?
gli ian sono davvero interessati ad entrambi
i loro pro e contro sono fondamentalmente in a
evento su piccola scala è una richiesta per DDoS
proprio tu mandi questo evento ehi questo
ordine cambiato ora ogni componente che
riceve che gli eventi inizieranno le query
i tuoi modelli per informazioni così è
fondamentalmente un DDoS con me era un mucchio
di domande ora a volte ho avuto il
domanda o abbastanza spesso ho avuto il
domanda ok, hai iniziato con questo
assone quadro e ora hai iniziato
parlando di messaggi ed ecc dove
fa in modo che questa struttura per assoni si adatti
questo su larga scala
storia di micro-servizi e fondamentalmente
dal momento che la struttura assonica è più di un
framework di implementazione è Java
licenza apache basata in modo da poter liberamente
prendere una copia e iniziare a giocare con esso si
funziona bene ho detto all’interno di un certo
contesto limitato all’interno delle applicazioni
all’interno dei componenti all’interno e
ti dà una API basata su Java verso un
bus di interrogazione del bus di eventi e bus di comando
che ti dà la posizione
astrazione della trasparenza di cui hai bisogno
essere in grado di scalare questo sistema se fosse
la necessità arriva e lo è
molto importante che la logica aziendale
e la logica dell’infrastruttura sono
separati perché l’infrastruttura
la logica dipende dal tuo nome funzionale
giusto se sei un cambiamento non funzionale
non vuoi cambiare nessuno dei
codice di logica aziendale che hai scritto
giusto così avere questa separazione è molto
importante quindi all’interno del mio interno let’s
dire unità schierabili si avrebbe un
asson framework come framework da gestire
la comunicazione per te e per quello
comunica tra componenti all’interno
quella stessa VM ma, naturalmente, potremmo avere
ha estratto alcuni di questi componenti in
diverse VM e ora abbiamo bisogno di un modo per
ottenere quella comunicazione attraverso e
c’è un sacco di ganci e API attraverso
molte librerie aperte
fonte alcuni di non che è possibile utilizzare
per ottenere messaggi da una VM a
un altro e ovviamente abbiamo
abbiamo costruito alcuni di quelli
noi stessi e il modo in cui funziona
stiamo eseguendo il routing in base a ciò che chiamiamo semplicemente
abbastanza intelligenza e sappiamo che noi
tutti sanno che es B’s sono lì
tutti i membri del fan club ESP qui
oh questo è tutto
sorpresa uno alza la mano come
questo ma queste api sono molto intelligenti
sistemi giusti sanno che capiscono
i messaggi che stai inviando
e in molti casi non lo dirò
tutto apparentemente in molti casi questo
significa che c’è un sacco di logica anche
implementato in questo ESB e poi in ESB
Dipartimento come molti di questi
le installazioni finiscono con quello che hanno
ho il controllo su tutto così ogni
il progetto deve aspettare per questi ragazzi B di
implementare qualcosa che non funziona
bene in certi ambienti e allora
facciamo noi andiamo al contrario che andiamo a
mediatori di messaggi tipici come JMS o
I broker basati su AMQP e sono un po ‘
Più stupido quando si tratta del significato di
i messaggi sono solo pop-up di sistemi
e sono matrici di byte in e byte
matrici e potrebbe esserci un po ‘
un po ‘di routing ma pensiamo che il
il punto debole sta nel capire
se si tratta di un comando la query nostra RA
o un evento perché hanno qualcosa di diverso
schemi di routing e se lo sai oh
Ho una domanda ho solo bisogno di instradarlo
a un componente che ha detto che può
gestisci quella query che possiamo fare molto bene
routing basato solo su quel piccolo
informazioni su quale tipo di messaggio è
esso
e ora il mittente non ha bisogno di sapere
dove è un determinato componente
componente è responsabile per la negoziazione
con questa specifica richiesta non abbiamo bisogno
non abbiamo bisogno di conoscere un nome di servizio o
o peggio di un URL di un servizio specifico
che abbiamo bisogno di invocare fondamentalmente questo è
di cosa stiamo parlando e di questo tutto
parlare è più o meno la nostra esperienza
in quale micro pragmatico evento-driven
i servizi sembrano
Spero che tu abbia qualche take away
da questo discorso grazie
tutte le domande che pensano se dobbiamo parlare
una domanda sulla parte di sourcing dell’evento
come gestisci gdpr e la gente dice io
voglio che i miei dati lo cancellino ed è nel
evento sì quindi è interessante
domanda
gdpr è ancora fresco nella nostra mente giusta
noi abbiamo passato una scadenza ma se noi
non ci siamo liberati del problema
eppure ce ne sono due diversi
le soluzioni che vediamo prima di tutto è fare
non includere alcun PIL sono correlati così
informazioni personali nel tuo negozio di eventi
è più facile a dirsi che a farsi
perché di solito anche quell’informazione è
molto importante avere eventi o un
approccio che prendiamo personalmente è
cripto che ti batte così in pratica
cripta tutte le informazioni che cadono
sotto gdpr e di solito è leggermente
più di quanto tu pensi di criptare
quell’informazione in modo tale che anche
quando due valori sono uguali e sono
crittografato hai diversi criptati
risultati di crittografia giusto questo è
importante altrimenti hai appena
sicuramente musicista e probabilmente tu
ancora ottenere una multa e ma si cripta
quella informazione con una chiave che è
specifico per i soggetti che sei
crittografare le informazioni di così se questo
soggetto dice per favore dimenticati di me tu
Dì solo ok, ecco la tua chiave se n’è andata
e ora quell’informazione è inutile
giusto e lo farà se crittografato correttamente
rimarrà inutilizzabile per così tanto tempo
tutta l’umanità potrebbe saperlo comunque
quindi questo è alcuni dei modi in cui abbiamo gestito
TV PR e lo stavamo facendo da allora
poco più di un paio di settimane ora
qualsiasi altra domanda, allora è così
grazie mille di allerta
tu

Please follow and like us: