Press "Enter" to skip to content

GOTO 2017 • The Big Friendly Monolith • Frans van Buul


[Musica]
fammi presentarmi molto rapidamente
Esodo solo pochi minuti quindi il mio nome è
Thomas dal conto sono ufficialmente conosciuto a
la nostra azienda non come il venditore
dice sul mio nella mia tazza che tipo di mezzi
che sono responsabile per le vendite in alcuni
sentire e raccontare al mondo il nostro
prodotti ma sono anche uno sviluppatore
spendere circa la metà del mio tempo e fare
Codifica Java e il resto del tempo
raccontando al mondo cosa facciamo
così esotica è stata avviata una nuova società
Luglio di quest’anno quindi solo pochi mesi
fa e il nucleo di Exonic è eccellente
quadro così quadro eccellente è un
quadro open source che è di per sé
non nuovo è stato intorno per circa cinque
anni e la ragione per iniziare questo
la nuova compagnia intorno è così
adozione sta aumentando rapidamente il
scarica la tabella che riceviamo da Maven
Il mese scorso esponenziale di Central 50k
download e il motivo principale per cui è
diventare così popolare ora è quella gente
avere una sorta di riscoperta di alcuni dei
principi dietro la struttura degli assoni nel
contesto dei micro servizi ma eravamo noi
parlando molto di più su che più tardi così
il modello di business di Exonic è
per fornire servizi in giro eccellente
formazione consulenza quadro che tipo
di cose e forniamo un numero di
prodotti software commerciali in aggiunta
per l’ open source è tutto ciò che volevo
per dire della tua compagnia
questo discorso sarà semplicemente aperto
fonte di cose che facciamo così
fondamentalmente come non tanto a che fare con
la compagnia jeanna per oggi prima cosa
Voglio fare è andare oltre tipico
un’architettura a strati fenomeni la
problemi associati a quelli alcuni
roba su DDD e in che modo si riferisce a
micro servizi e dopo voglio farlo
saltare in CQRS
un evento di sourcing e come questi concetti
sono implementa la struttura Nexon e
poi finalmente ti mostrerò del codice
esempi solo per darti un sapore
quello che sembra lavorare con
eccellente quadro Iniziamo
considerando l’architettura a strati
Immagine molto familiare, immagino tutti
ha implementato questo un sacco di volte così
hai un numero di livelli principali
ordinare i principi che dipendono
solo andare in un modo e poi devono
condividi il linguaggio che chiamiamo dominio
il modello a volte potrebbe effettivamente essere
logica aziendale nel modello di dominio ma
il più delle volte questi sono solo molto
odori di dati liberi da logica anemica che sono
veramente elaborato dal livello di servizio
ora ingrandiamo lo zoom in quel dominio
modella un piccolo modello di dominio per iniziare
semplice all’inizio del progetto
e poi si evolvono man mano che ne aggiungi di più
classi per loro e per farlo
concreto diamo un’occhiata al tuo
tipico esempio di negozio web che tutti conoscono
che il tuo può effettuare ordini ha ordini a
numero di righe di ordine o le linee
si riferiscono a prodotti particolari e si riferiscono
ad una quantità di quei prodotti che
stai ordinando prodotti hanno un prezzo
righe di ordine una quantità quantità di volte
la modifica del prezzo dà complessivamente le linee d’ordine
tu il valore dell’ordine totale semplice
funzionerà ora se hai un negozio web
quindi non si tratta solo di ordini
anche sul mantenimento dell’elenco di
prodotti che le persone possono comprare, giusto
detto come un set di prodotti
categorie quindi è un catalogo di prodotti
prospettiva ora cosa interessante
succede se i prezzi cambiano, nessun prezzo lo farà
cambiare andare nel negozio web ora in questo
modello una volta che si aggiorna il prezzo
quello che accadrà è che lo farai anche tu
modificare gli ordini già esistenti che è
non quello che vuoi perché lo sono stati
ordinato quel particolare prezzo così
questo modello ti porta molto velocemente
problemi quindi è necessario risolvere questo e
un modo per farlo non sono io
consigliare, ma un modo di farlo
sarebbe dire in realtà i prodotti
avere più prezzi perché c’è un
evoluzione storica del prezzo di
a quei prodotti si riferisce ogni riga di ordine
un prodotto e una versione storica di
quel prezzo e poi i miei prodotti di
Naturalmente anche il prezzo attuale è il
prezzo che sto attualmente visualizzando
il mio negozio che potrebbe funzionare ma non
spettacolarmente complesso per qualcosa che
sembra così facile , è molto semplice
utilizzare il caso, quindi se questo caso di utilizzo semplice
ti porta già logicamente in questo
tipo di pasticcio cosa succede se il tuo
il programma inizia davvero ad evolversi è quello
si finisce in qualcosa di simile
noto anche come la grande palla di fango e il mio
un collega dice sempre che è il
architetto seduto in cima ora
interessante se torniamo a questo
immagine in cui abbiamo visto la complessità
questo modello di dominio è la cosa principale
stiamo facendo qui in questo modello per
gestire la complessità è usare quei livelli
ma questi strati hanno fondamentalmente
niente a che fare con la complessità così tu
puoi aggiungere i livelli tutto ciò che vuoi ma aggiungere
più strati non risolverà il
problema perché il problema non è in
gli strati è così facile
ora questo è penso che sia dove
i micro-servizi sono molto interessanti
ruolo da giocare perché sono a
approccio fondamentalmente diverso a
gestire la complessità anziché
gestire la complessità avendo strati voi
dire che gestirò la complessità di
rompere il mio sistema in molto piccolo
unità che da sole non portano
Quanta complessità quindi è un
idea interessante e se ci sei tu
può anche scalarli separatamente e
distribuirli in tutti i tipi di diverso
modi aggiornarli separatamente così è
è una buona proposta ma ci sono
alcune cose interessanti in corso
progetti di micro servizi questi sono alcuni
citazioni da Martin Fowler e lui dice
bene molti microservizi di successo
progetti hanno iniziato come un monolite che
era stato suddiviso in microservizi
più tardi con d’altra parte se tu
iniziare con un microservizio
architettura perché è così grande
le probabilità di pattern sono che il tuo progetto
riempirà quindi cosa dovresti fare tu
dovrebbe in realtà iniziare con quel monolite
e poi spezzarlo ma allo stesso tempo
tempo questo è più come una citazione da
io avendo male per molte persone è
che è davvero difficile farlo se
hai questo monolito legacy che c’è
nessun modo semplice per dividerlo in
microservizi quindi cosa vorresti
idealmente è iniziare semplice e poi
evolvilo ma evita la grande palla di
scenario di fango e invece andare a questo
monolite strutturato che poi più tardi
su può dividere in micro servizi o anche
più servizi micro se necessario
quindi questa cosa è ciò che chiamiamo il
grande monolite amichevole è un monolite
ma qualcuno sulla terra è un uomo
e questo può essere facilmente suddiviso in
microservizi se necessario quindi questo è il
tipo di cosa che vogliamo sostenere
con struttura assonale e che molti di
i nostri utenti hanno effettivamente avuto successo
fatto e abbiamo alcuni casi di studio su
quello scenario anche nel nostro stand
ciò che è eccellente quadro open source
quadro iniziato come open source
framework per CQRS in Java e il
principio Seacrest qualcosa che faremo
discutere in modo più dettagliato ed è in realtà
la cosa che renderà questo
servizio di mercato evolutivo possibile
le parti essenziali del quadro è
che la sua messaggistica è orientata in modo da avere
componenti che si scambiano messaggi
e riconosciamo tre diversi tipi
di messaggi di eventi, comandi e query
e non solo difesa, è molto
una parte importante di esso consente la posizione
trasparenza così i componenti non lo sono davvero
cura dove altri componenti sono e
questa è la cosa che lo rende facile
dividere un’applicazione esistente e
è altamente personalizzabile, quindi puoi
iniziare usando molto semplice
tecnologia se hai questo monolito tu
non hanno bisogno di bus di messaggi con messaggi di fantasia
o niente ma poi più avanti se tu
voglio integrarlo con Kafka o
coniglio o qualunque altra cosa sia anche possibile
senza modificare il codice commerciale
il modello principale dietro è sicuro s
comando query segregazione delle responsabilità
e come suggerisce il nome, significa che
hai separato la tua domanda in
due lati uno che gestisce i comandi uno
gestire i comandi delle query sono cose
questo è lo stato del cambiamento quindi è a
richiesta di fare qualcosa ma non loro
fornire eventuali informazioni indietro forse a
conferma che sono stati
giustiziato ma non è più così
le richieste di informazioni sono esattamente le
di fronte ci sono le domande che ottieni
risposte da loro ma non cambiano
gli stati lasciano questo stato
invariato questo lato di esso è chiamato
Il modello Akimov di quei lati è chiamato letto
modello o proiezioni è un termine che vorresti
spesso trovi nella letteratura su questo
ora ovviamente questo può funzionare solo se il
le proiezioni sono aggiornate con il
stato del modello di comando che significa
che c’è un terzo componente qui e
quelli sono gli eventi così ogni volta
i comandi portano a un cambiamento
il modello di bocca di corvo che loro cresceranno
evento l’evento sarà raccolto dal
proiezioni e poi si ottiene bene
risposte dalle tue prossime domande così questo
è una cosa piuttosto complessa da fare se
tu se lo paragoni ad averne uno solo
modello ed elaborazione per
transazioni e per le query questo
introduce una grande quantità di complessità
quindi una bella domanda che potresti chiedere è
il motivo per cui si dovrebbe fare questo bene ci sono
molte ragioni tecniche è una di queste
per esempio che il throughput
le caratteristiche possono essere totalmente differenti
da quelle due parti se consideriamo di nuovo
l’ esempio del negozio online cambia in
il tuo catalogo di prodotti capita abbastanza
infrequentemente rispetto al numero di
volte che questo catalogo prodotti è
in realtà vi si accede da voi
consumatori quindi potresti voler ottimizzare
per quelle due cose in modo molto diverso
modo e se ottimizzi il tuo diritto
lato per l’elaborazione delle transazioni
probabilmente li normalizzerei e quello
potrebbe portare a query molto complesse su
il tuo lato di lettura per produrre effettivamente il
i dati ancora una volta che sarà un male per
prestazioni ma così ce ne sono molte
motivi tecnici diversi ma fanno
motivo generale per cui vorresti
fare questo è semplificazione nel lungo
corri così se guardi un modo molto semplice
applicazione all’inizio
introduce qualche ulteriore complessità
perché hai quei comandi quelli
eventi e tutto tranne che nel lungo
corri scoprirai che questi individui
comandi e gestori di versi e eventi o
oggetti semplici che sono facili da mantenere
ed espandere lo zoom in un po ‘sul
quelle due parti questo sarebbe il
modello di comando aspetti molto importanti di
i modelli di comando che inizi
pensando negli aggregati così sono gli aggregati
come unità di consistenza e
persistenza e dividi il comando
o il numero di diversi aggregati
dove smetti di avere connessioni
tra tutto se fai un tipico
cosa di modellazione dei dati in un database di te
potrebbe avere relazioni chiave estranee tra
tutti gli oggetti ne fanno una grande cosa
dove pensi negli aggregati che usi
piccole unità e per renderlo concreto
qui se torniamo a questo ordine e
esempio di catalogo potremmo avere un ordine
aggregato che ha un numero di orale
che può riprendere e tutto e
quindi separatamente da quello che potresti avere
un aggregato di prodotti che ha il
categoria e il prezzo attuale, quindi cosa
succede ora è questo quando si inserisce un nuovo
ordina questo aggregato viene creato
registra il prezzo a quel punto e questo
aggregato del prodotto viene aggiornato quando
il prezzo cambia nel negozio online ma
questo non influenzerebbe direttamente un
ordine esistente quindi devi risolvere il tuo
problema di modellazione in molto di più
modo elegante guardando la chiave laterale Reed
la cosa qui è che ne hai molti
diversi modelli reed segregati
in genere potrebbe essere uno per caso d’uso
o uno per schermata nella tua applicazione
solo ottimizzato per molto molto efficientemente
semplicemente fornire i dati necessari per questo
caso d’uso particolare che puoi usare anche
tecnologie molto diverse lì in a
negozi online
esempio di nuovo si potrebbe desiderare di avere un
ricerca full-text nel tuo prodotto per
le persone a trovare ciò di cui hanno bisogno così puoi
utilizzare un motore di ricerca elastico per
istanza dietro che tutto il materiale potrebbe
meglio adattarsi a un database relazionale
modellare tutte le cose può adattarsi meglio in a
negozio di documenti con questo concetto di CTR
e i modelli reed lo rendono molto facile
implementare quelle varie tecnologie
fianco a fianco senza il tuo
l’architettura delle applicazioni diventa una
gran casino quindi se metti quelle cose
insieme questo è un po ‘come l’asse
architettura tu saresti venuto e
gestire i componenti che hanno i propri
modello di dominio del modello di archiviazione se qualcosa
cambiamenti lì avrebbero pubblicato eventi
hanno appena ottenere raccolti da un uso ritrovamento
componenti che aggiornano separatamente
archiviazione e questo è dove si dovrebbe fare
legge ovviamente l’ utente dell’applicazione
interfaccia si collega con entrambe le parti di
che quindi è ancora solo uno applicazioni
dal punto di vista dell’utente finale
guardandolo di nuovo come una sequenza
diagramma che il product manager avrebbe creato
prodotti che potrebbero generare un evento come
un evento valutato dal prodotto che sarebbe finito
nella proiezione del prodotto quindi è quando
diventa disponibile per gli acquirenti che
presentarsi perché l’umorismo farebbe un vuoto
richiesta informazioni prodotto ottenere informazioni incluso
il prezzo e poi il prodotto sarebbe
aggiunto ad un ordine che finirebbe in
le tue proiezioni sono il tipo di
logica che avresti in questo modello
ora una cosa in cui hai un
la scelta in questo modello è come persistere
aggrega così questi aggregati sono
persistito nel modello commode e
stanno venendo riletti, naturalmente,
ogni volta che un nuovo comando deve essere
elaborato ora il modo tradizionale di
farlo sarebbe solo a persistere della
stato attuale in un database e in
Java molte persone scelgono JP un altro
sono possibili anche approcci
Certo, è sempre lo stato attuale ora
c’è un’alternativa interessante
si potrebbe usare lì e in cui viene utilizzato
fatto dai più eccellenti utenti del framework
anche se non è obbligatorio ma lo è
molto popolare e questo è il sourcing di eventi
quindi con l’event sourcing non si memorizza
lo stato attuale ma quello che fai
invece è memorizzare tutti gli eventi che
succede che cambierebbe lo stato
e poi ogni volta che hai bisogno di rileggere
questo aggregato ti basta riprodurre tutti quelli
eventi che sembrano ancora alcuni
complessità e ce ne sono alcuni
ovviamente anche il successo delle prestazioni
ma ci sono alcuni grandi vantaggi in
facendo questo e i benefici cadono in
due categorie per alcuni affari
benefici e quelli sono i più
quelli importanti che motivano le organizzazioni
per fare questo e quelli ci sono c’è
molto valore nel catturare tutto ciò
storia che può essere un valore per la conformità
scopi se hai mai bisogno di mostrare
esattamente cosa succede in un particolare
caso per esempio ne abbiamo alcuni online
casinò che utilizzano strutture eccellenti e
per loro è molto importante che se a
sorge una disputa che può mostrare esattamente
cosa è successo e stanno usando l’evento
sourcing per quella ragione e la tua ragione
è più nell’apprendimento automatico e
analisi e scienza dei dati si tratta
sfruttando il semplice fatto che i dati lo sono
prezioso è molto prezioso sapere cosa
succede e ottimizzare la tua attività
per questo solo per mostrarti un esempio
supponiamo di nuovo che abbiamo questo
webshop e vende i frutti di te
potrebbe ordinare due banane
una pesca e quello sarebbe solo il
ordine aggregato ma in un evento di provenienza
mondo in realtà potresti vederlo
qualcos’altro è successo così il
mele per attitudine e ordine e io sono
le banane e poi le mele furono rimosse e
una pesca è stata aggiunta prima che l’ordine fosse
in realtà impegnato ora questo è per ordine
l’adempimento delle mele è totalmente
irrilevante perché non sono stati ordinati
ma da un’ottimizzazione del business
prospettiva è molto interessante
scopri che ero sull’orlo dell’acquisto
mele e poi ha deciso di non farlo
quindi cosa potrebbe fare l’acquisto in modo diverso
fammi comprare questa Apple la prossima volta
è una cosa interessante quindi non lo fai
voglio dimenticarlo e questo è
quale sourcing di eventi ti procura un altro
la ragione per fare l’event sourcing è che è così
interessante da catturare in decima così
supponiamo di avere un database clienti e
Sto aggiornando l’indirizzo con semplicità
le dichiarazioni di aggiornamento funzioneranno ma lo faranno
non mostrare alcuna informazione sul perché
l’indirizzo è stato aggiornato in un sistema di eventi
quello che fai è creare eventi che
specificare cosa succede e loro avrebbero
di conseguenza che em leggono i modelli
indirizzo aggiornato ma è possibile
distinguere tra una semplice correzione di
un indirizzo contro un cliente reale
trasferirsi in un nuovo indirizzo che sono
da una prospettiva di business diversa
cose a cui potresti reagire
in modo diverso se ottieni il secondo evento
potresti inviare una bella cartolina al tuo
il cliente dice congratulazioni per il tuo
la nuova casa non ha senso se lo è
il primo evento quindi è bene fare un
distinzione è questo l’evento
sourcing può fare così la roba Sakura e
in realtà l’ approvvigionamento di eventi è davvero
ingrediente interessante per questo grande
monolite friendly, perché già nel
concetto che stai dividendo le cose
questi aggregati hanno piccoli
confini così diversi possono fare gli aggregati
davvero facilmente vivere in diversi
servizi di mercato sono i modelli di canna
separati hai letto i modelli per schermo
o per ogni caso di uso i modelli letti non hanno
coincidere con modelli comuni sul
lo stesso server devono essere in grado di
scambiare eventi quindi c’è molto
mappatura naturale tra questo concetto e
micro-servizi c’è solo un altro
cosa che ti serve anche e basta
trasferimento della posizione
e vedere se quei componenti del servizio
supponiamo che siano tutti sullo stesso
server quindi non puoi entrare in micro
servizi se hanno sempre a
comunicare tramite un autobus o qualcosa del genere
sei un po ‘in questo posto dove tu
devi dove stai iniziando con micro
servizi fin dall’inizio, quindi tu vuoi
per astrarlo e permettere
evoluzione in quella dimensione così la via
lo facciamo in Axum è tutto
comunicazioni tra questi componenti
si svolgono attraverso un bus API così
solo un insieme di componenti di classi Java
non fare ipotesi dove altro
i componenti sono e poi nell’eccellente
configurazione puoi scegliere a
implementazione molto semplice di quelli
autobus che vivono solo all’interno di una JVM e
passa tutti i messaggi direttamente o è possibile
scegli un’implementazione che in realtà
va oltre la rete e va a
diversi sistemi e, soprattutto, nel nostro
concetto di messaggistica e i nostri concetti di bus
non si tratta solo di eventi che vediamo
a volte queste sono le architetture
viene proposto dove ci sono i cosiddetti
guidato dagli eventi e solo da tutti i componenti
parlarsi l’un l’ altro nella lingua di
eventi che ritengono che questo non è un
una buona idea è che gli eventi
portare a una particolare dipendenza tra
componenti così in questo esempio che abbiamo
componenti a in un componente B componente
gare ed eventi che sono
elaborato dal componente B e potenzialmente
anche da altri componenti, naturalmente e
questo crea una dipendenza dal componente
B al componente a perché componente a
determina come si presenta questo evento
ci sono eventi in aumento e B deve farlo
adotta se stesso per il modello che ha
creato ora se gli eventi fluiscono anche nel
altra direzione da B a a e uguale
meccanismo assicura che ci sia un
dipendenza da A a B quindi le due cose
sono ora interdipendenti hai il
dipendenza ciclica e le probabilità sono
che se hai bisogno di cambiare qualcosa tu
bisogno di cambiare entrambi i componenti che è
esattamente ciò che non vuoi fare in
l’ architettura dei microservizi di
i benefici dovrebbero essere che puoi
aggiornali separatamente ora considera cosa
succede se usi i comandi
se un manda un comando a B allora un deve
adottare se stesso per il linguaggio di comando
che B ha definito che è un client così è
dipendenza da A a B e poi se
gli eventi vengono rimandati da B a a
è ancora una dipendenza da A a B
perché deve adottare se stesso per il
eventi prodotti da B quindi la dipendenza
ora è solo in una direzione e tu
non può cambiare a senza apportare alcuna modifica
in B è un posto fondamentalmente migliore
per essere così questo è molto importante
motivo per cui crediamo che non sia solo
sugli eventi l’altra cosa è che se
guardi questi tre concetti
comanda gli eventi e le query che hanno
così diversi schemi di routing
il comando deve essere sempre elaborato una volta
e hai bisogno di una conferma che questo
succede idealmente vuoi un po ‘coerente
routing se ne hai molte
i processori di comando è una buona cosa
inviare comandi che hanno come target il
stessi aggregati alla stessa istanza
perché allora i loro depositi saranno caldi
e funzionerà molto più velocemente
cosa routing completamente diverso così
gli eventi si stanno diffondendo a tutti voi
non ottenere alcuna conferma su di loro ma
è molto importante con gli eventi
che stanno in fase di elaborazione in alto a destra
supponiamo che tu stia scrivendo questo
leggi il modello e ottieni un ordine creato
evento e quindi un articolo aggiunto all’ordine
eventi ma hai più istanze
del modello letto e dell’ordine creato
l’evento viene gestito da uno di loro
e l’elemento aggiunto all’ordine verrà terminato da
un’altra istanza non funziona se il
l’ordine degli eventi non corrisponde più
perché prima si ottiene l’elemento aggiunto
ordine prima che l’ordine è stato creato un po ‘
le cose non funzioneranno correttamente neanche così
hanno alcuni specifici eventi di routing
i requisiti e le loro domande sono di nuovo
diverso quindi di solito hai una query
gestore dando una risposta a una domanda ma
ci sono alcuni casi in cui hai
dispersi dio o tipo di modelli o
le domande concorrenti pensano ad esempio
su un servizio di prezzi in cui metti un
secondo servizio di valutazione accanto per
promozioni speciali o azioni natalizie
e attraverso sconti e tutto
allora la tua logica potrebbe essere con le query
vuoi il meglio che è il più basso
rispondere alla tua domanda di prezzo ci sono
alcuni percorsi specifici possibili con ciascuno
di quelle cose è di nuovo una ragione
perché crediamo in questo tipo di
l’architettura non deve essere solo di
la messaggistica degli eventi è più ricca di quella
diamo un’occhiata ad alcuni esempi e
diamo uno sguardo al tempo così così
se usi questo stile di architettura di
Naturalmente è necessario definire un sacco di
comandi ed eventi come classi e loro
tutti tendono ad essere immutabile molto noioso
scrivi così anche se puoi scriverli
in Java direttamente tutto ma quasi
nessuno lo fa che è molto popolare a
usa un progetto Lombok per questo ma tu
può annotare le tue lezioni e poi
generare un sacco di cose che tu
bisogno di creare queste classi immutabili
automaticamente ma è ancora più popolare
al giorno d’oggi usare Coughlin per questo
anche se non usi Coughlin per il tuo
tutto il progetto eccellente potrebbe essere molto
utile usarlo solo per definirli
classi di dati è possibile definire molti di loro
solo in un singolo file puoi semplicemente
dichiara tutte le variabili che ti servono
e quindi si otterrà un sacco di
classi immutabili con uguali e
getter e tutto e costruttori
quindi questa è la cosa più popolare da fare
un’altra cosa che forse è rilevante
da notare su questo esempio è che qui
in questo aggiungiamo i comandi della linea d’ordine che siamo
utilizzando questo aggregato di destinazione dell’annotazione
identificatore quindi è la cosa che
aiuta l’ accento per sapere quale aggregato
stai mirando con il tuo comando è
non necessario quando si sta creando un nuovo
aggregato perché poi non ha
un’idea ancora, naturalmente, se è necessario aggiungere
una linea per un ordine esistente si
è necessario specificare quale ordine dovrebbe essere
elaborato in modo che il flusso sarebbe quello
se questo comando viene elaborato da
assone comincerebbe a leggere tutto il
eventi relativi a quell’ordine esistente
ripetili allora hai lo stato di
un ordine in memoria e poi puoi
effettivamente eseguire il comando in modo che sia
come funzionerebbe
inviare comandi nel client che ha usato
per assomigliare a questo così tu hai questo
oggetto gateway di comando che è il tuo
punto di ingresso nell’asson basato sull’input dell’utente
ottenere dall’utente che si dovrebbe impostare uno
di quelli uno di quei comandi qui
creare nuovi comandi di ordine scegliamo un
ID per la maggior parte delle volte le persone usano
i tuoi ID perché possono essere
generato senza preoccupazioni circa
unicità ecc. e quindi viene inviata
attraverso il gateway di comando così è
dove x1 lo raccoglierà e dipenderà
sulla configurazione che può significare questo
in realtà viene gestito nello stesso modo
runtime la stessa JVM o potrebbe andare oltre
la rete ma questo codice non lo saprebbe
a questo proposito
[Musica]
all’interno degli aggregati citati potrebbe apparire
come questo
quindi hai ovviamente un aggregato
identificatore che è necessario annotare così
Ho agisce su quelli che vuoi dire con quel
e poi ci saranno gli handler di comando
e gestori di eventi gestori di comandi fanno a
mazzo di assegni così loro determineranno
se il comando è autorizzato o meno
essere elaborati ma non lo faremo mai
cambia stato direttamente perché cambia
passerà sempre attraverso eventi così che cosa
lo farà se decidono che tutto
è ok chiameranno il metodo apply
che è un metodo statico in esterno
quadro e includere tutto il
informazioni nel metodo apply che è
necessario per aggiornare la media effettiva
gli aggiornamenti saranno fatti all’interno di un evento
gestore in modo che la riga di ordine modifichi gli eventi
può essere usato qui per cambiare lo stato di
l’aggregato ora è interessante e
un po ‘controintuitivo è quello
non è necessario memorizzare tutti gli stati in
aggregare l’unica ragione per cui si vorrebbe
store state e in aggregato è se tu
in qualche modo hanno bisogno di quegli stati per dare il comando
decisioni in seguito se si vuole solo
ricordalo per averlo interrogato per dimostrarlo
dati agli utenti non è necessario averlo
in aggregato perché ciò sarà fatto
dai modelli letti e letti i modelli lo faranno
avere la possibilità di elaborare questi eventi come
bene così in questo caso l’unico business
la logica implementata qui è che noi
convalidare una quantità su un comando non può
essere inferiore a 1 ma nient’altro è in corso
convalidato e se questo è veramente il mio
logica di business quindi non avrei bisogno di
negozio
qualsiasi cosa nei miei aggregati potremmo anche
rilasciare questo gestore di eventi completamente ora
supponiamo che io abbia un po ‘di più
logica aziendale complessa e lo faremmo
controlla qui che il valore totale dell’ordine
non può mai essere più grande di 10k di
Naturalmente è necessario avviare il mantenimento
qualche stato e mantenere tale stato a
fai controllare l’unica cosa che tu
avrebbe bisogno di ricordare è il totale
valore dell’ordine e che sarebbe poi
essere aggiornato qui nel gestore ma
non è necessario archiviare tutto l’ordine
linee per esempio ovviamente questo è
solo per illustrare il principio se tu
lo risolverebbe un po ‘di più
dettaglio probabilmente sarebbe un bene
motivo per mantenere queste righe d’ordine qui
ma è importante sapere che tu
non è necessario memorizzare tutte le informazioni in
l’aggregato che i modelli di lettura guarderebbero
in questo modo avresti un evento
gestore anche lì
e fondamentalmente come fai il resto è finito
a te così X solo nella sua forma attuale
non fa molto per quello, quindi questo è un
esempio con JPA ma potrebbe essere qualsiasi
tipo di tecnologia la cosa principale qui
è che stai catturando quegli eventi
e quindi aggiorna il tuo modello di letture
di conseguenza qualcosa che sarà
incluso nella nuova versione di axon
uscirà tra un paio di settimane
che le domande saranno gestite su un autobus
anche
le query attualmente sarebbero dirette
invocazioni di in questo caso il finale
metodo di ordini non abbiamo un modo per
facilmente mettere quelli sul bus o creare
la trasparenza della posizione per le query come
tale ma sarò incluso in un nuovo
versione ora finora abbiamo visto come
programma con axon che blocca il tuo dominio
siti modello e è possibile montare la gestione
lato, naturalmente, è anche necessario impostare
quell’infrastruttura ora presume che tu sia
usando una cabina di primavera e vuoi solo
avere un bus di comando locale e il
bus evento locale e utilizzare l’event sourcing
e utilizzare tutti i valori predefiniti e questo è
in sostanza niente da configurare è possibile
iniziare a saltare stivali
ottimo antipasto e funzionerà
e tutti questi esempi verranno eseguiti ora
una volta che inizi ad evolvere se tu
o quel viaggio in microservizi
stanno andando a cambiare quelle cose
i più semplici cambiamenti che potresti fare è andare
a un bus di comando asincrono in modo che il
cosa di default di cui saresti senza
configurare qualsiasi cosa è un semplice
comando bus ora se vuoi se lo sei
usando la molla quindi potresti definire un
Comando alternativo che sarebbe quello
essere il bus di comando asincrono e
questo è un modo efficiente per ottenere tutto
i tuoi comandi vengono elaborati
in modo asincrono se si vuole effettivamente
distribuirlo ci sono varie opzioni
una possibilità è usare J gruppi come te
bisogno di fare per abilitare che è quello di mettere il
giuste dipendenze nel tuo ordinamento del progetto
del sul percorso di classe e quindi attivare una
proprietà di configurazione e quindi è a
comandanti distribuiti così è molto
facile da fare senza apportare modifiche
alla tua logica applicativa puoi evolvere
da un monolite a Marc ti aiuta
può anche usare le nuvole primaverili che sono a
un po ‘più complesso da configurare e
Non entrerò in tutti i dettagli è il
lo stesso concetto crea un raggio aggiuntivo
metodi di produzione e nella propria attività
gli esempi che uso sono tutti in primavera
uso degli utenti di framework più eccellenti
la primavera ma non è legata alla primavera
può usarlo anche senza
riassumiamo crediamo che questo concetto
di sicurezza e potenziale approvvigionamento di eventi
e DDD sono ingredienti veramente importanti
per avere questi evolutivo
microservizi e ti aiuta a ottenere
iniziato rapidamente ma non finire nel
scenario di grande palla di fango
a parte questo aspetto evolutivo
l’event sourcing ne ha davvero
vantaggi interessanti a causa del mantenimento
la storia che esplora il valore dei dati e
conformità quindi questo è un valore
concetto di per sé un quadro eccellente
è un modo davvero semplice per implementare questo
in Java non devi usare tutto
per lo più non c’è magia lì che puoi
fare tutto ciò che eccellente quadro
fa a te stesso è solo a questo spreco
del tuo tempo perché è già lì
ed è ed è gratuito se lo sei
interessati e vogliono saperne di più
questo avremo qualche QA ovviamente noi
volere
Lane e io siamo anche allo stand Medina
ha un’esperienza molto più eccellente
in realtà di me quindi per favore chiedeteci
qualsiasi cosa, se vuoi, puoi anche
registrati per la nostra mailing list e lo farò
ti mando qualche aggiornamento occasionalmente è
molto ci piacerebbe molto per voi
facciamo che abbiamo circa 50.000 download a
mese e sappiamo solo personalmente a
un paio di centinaia di eccellenti strutture
gli utenti quindi è molto importante per noi
ottenere molte più connessioni negli atti
delle comunità framer è per questo che è così
prezioso per noi grazie mille
[Applausi]
grazie mille, ne ho preso un mucchio
domande ci resta un po ‘di tempo, quindi lo farò
prova a chiedere a molti di loro e al contrario
lo stivale è appena fuori da questa stanza così
questo ti aiuta a capire come
garantire la coerenza, si esegue una query
Modello Reid nel mezzo giusto , tu
usa la conversazione nelle statistiche di fluidità come
iniziare semplice ma molto spazio per
miglioramenti va bene così in questo
requisiti di coerenza architettonica
di solito sono rilassati quindi hai l’eventuale
coerenza non hai coerenza
in ogni momento non si può ottenere
che se vuoi puoi usare
bus di eventi sincroni e bus di comando
e quindi puoi effettivamente elaborare
tutto in un unico database
transazione e poi lo avremmo fatto
hanno una consistenza garantita ma a
problema con coerenza su un intero
sistema come questo è che non è così
scala bene a cui non puoi realmente andare
vari micro-servizi e poi fare grandi
transazioni di database su tutti loro così
la strategia chiave è l’uso finale
coerenza e semplicemente accettare il fatto
che il tuo modello di business non sarà
costante su ogni millisecondo che è
come viene solitamente affrontato ciò che fai
pensa di avere comandi di chatty in
Il contesto di costruzione dell’API REST è
restituendo nuova risorsa appena creata per
esempio quindi la cosa che è
direttamente supportato dal nostro comando
la gestione è che restituisce l’ID di a
oggetto appena creato ma solo l’ID adesso
questo può o non può essere abbastanza per il tuo
utenti se non è abbastanza il modo in cui noi
consiglio che lo farei è creare un
strato di sincronizzazione in cima alla vostra
comandi effettivi e leggi i modelli così tu
prima creasse qualcosa e poi
rileggilo dal lato di lettura di esso
e poi restituisci quel risultato al tuo
utenti ma mantengono lo stesso
modello di architettura nel back – end questo
la domanda potrebbe riguardare un po ‘il precedente
come si garantisce la consegna degli eventi
c’è un modo per raggiungere sincronizzare il
modello sì, quindi ci sono più modi di
gestire gli eventi uno sarebbe giusto
ascolta i nuovi eventi che arrivano e poi
agendo direttamente su di loro un’altra cosa
è ciò che chiamiamo un evento di tracciamento
processore che significa che gli eventi lo farebbero
essere memorizzati in un negozio di eventi che può
essere un database o qualcos’altro e poi
questi processori di eventi di tracciamento lo farebbero
letto dal database e tenere traccia di
dove sono
da qui il nome così se lo sono se loro
non sono online per un po ‘ che potrebbero
basta leggere ricominciare a leggere quando loro
vieni online e continua per ultimo
luogo sono stati e anche se tu
creare nuovi modelli di lettura necessari
rileggi tutti gli eventi a
inizializza quel modello letto e questo può
anche fatto con quegli eventi di tracciamento
processori quindi il modo di base di
garantendo che gli eventi non si perdano
li sta immagazzinando essenzialmente come fai tu
affrontare eventuali ritardi temporali tra
un comando No sì sì, mi dispiace come si fa
affrontare eventuali ritardi temporali tra
un comando in esecuzione e in grado di
leggere i dati dal modello di query così
prima di tutto dovresti valutare se
questo è un vero problema a volte lo è
a volte non è in molti casi lo è
totalmente accettabile che ne prenderà alcuni
millisecondi prima del tuo modello di lettura
viene aggiornato se non ce ne sono alcuni
soluzioni che potresti fare uno di loro
il più semplice non molto elegante è semplicemente
aspetta e l’altra cosa che è necessaria
sai dove hai più severe
il requisito qui è che includi
una specie di data / ora con il tuo
comandi e questo timbro orario sarebbe quindi
essere replicato dalla legge regionale come
bene
in modo da poter ottenere una query per il modello di lettura
dicendo che voglio leggere non appena tu
ho elaborato questo timestamp che è
un modo per farlo è un po ‘evoluto
quindi quella non è la cosa predefinita
dovrebbe sempre fare ma è a
meccanismo che funzionerà ed è
a volte utilizzavano meraviglie piuttosto rilevanti
con GTR in arrivo per l’approvvigionamento di eventi
come gestisci il fatto che tu possa
bisogno di eliminare alcuni dati per esempio per
motivi di privacy che possono portare a
incoerenza in modo che paghiamo un po ‘per
qualcuno per quella domanda o che paghiamo
qualcuno per quella domanda
la cosa divertente è che ciò che ci viene detto
in principio che abbiamo un numero
di prodotti software commerciali in cima
dell’open source e uno di quelli
i prodotti sono esattamente progettati per essere gestiti
con questo problema quindi il problema è che se
su un gdpr devi cancellare i dati
a volte se le persone lo chiedono e gli eventi
sono immutabili, quindi è difficile cancellare i dati
dagli eventi
ora un modo di affrontare questo è
sfruttando il fatto che gli eventi lo sono
concettualmente immutabile ma fisicamente
solo dati in modo che tu possa effettivamente cambiare
loro che vanno contro il modello cosa
funzionerà ci sono alcuni grandi
svantaggi là è un po ‘difficile da
diminuisce il valore del tuo evento
scorrere come un registro di controllo per la conformità
ragioni per cui un’altra cosa che puoi fare è
usa la cancellazione crittografica
in modo da poter crittografare i dati personali
campi e quindi memorizzare la chiave da qualche parte
altrimenti non un flusso di eventi fatto separatamente
database delle chiavi e quindi potresti lanciare
via quella chiave se si ottiene una richiesta a
cancellazione e che renderà il personale
campi dati effettivamente cancellati perché
li hai solo in forma crittografata
non puoi più decrittografarlo
quindi è quello che potremmo
implementare te stesso quello che abbiamo
implementato il nostro PIL il nostro modulo in cima
assone per consentire lo scenario specifico possibile
elabora il potenziale lato negativo
esperienza usando l’ evento in aumento è a
bella domanda cosa ne pensi
Penso che sia applicabile per un sacco di
applicazioni ma devo dire sì
lato negativo potrebbe essere che il tuo database è
diventando davvero grande e questo è quello che
i clienti potrebbero ovviamente sperimentare
non c’è un prodotto commerciale
negozio di eventi ma sì, è davvero grande
set di dati ma potrebbe essere ma per
il resto dei suoi penso che sia carino
utile che in realtà è piuttosto buono
puntare quindi se un negozi di fan DC tendono a
crescita e database relazionali no
davvero come penso a tavoli con miliardi
di record finché sei
produzione
mille eventi al giorno o 10.000 per
giorno che è un non-problema totale ma alcuni
dei nostri utenti ne producono diecimila
eventi al secondo e poi queste tabelle
erano molto veloci e ce ne sono alcuni
gestire i problemi lì sì e naturalmente
se hai applicazioni che sono così
semplice che non hai bisogno di tutto il
eventi o non not gonna eventi usati
sì, non dovrebbe applicare l’ordinamento degli eventi
non è perfetto per tutti
applicazione ma la maggior parte delle applicazioni lo farebbe
in forma è possibile migrare esistente
la storia è data non eventi tour a un
eventi o a una fonte di eventi in
Retrospect se sì come sì sì l’unico
cosa che non puoi fare è improvvisamente
scopri la storia che non hai
persistito nel passato ovviamente non lo è
magia ma puoi migrare ciò che vorresti
probabilmente è creare un set speciale di
eventi che rappresentano la migrazione e
quindi ripeti il ​​tuo vecchio negozio in
questi nuovi eventi e quindi assicurati che
i tuoi gestori di eventi possono gestire il normale
eventi aziendali così come questi
eventi di migrazione che funzionano proprio puoi
confronta l’ accento con altri cercatori basati
quadri per la creazione di micro servizi
come Largo onestamente non posso esserne a conoscenza
log Sono ovviamente cosa ma non lo so
molto sui dettagli, cosa succede se parlo
a persone che non usano Exxon o non metà
assone usato ma è andato a qualcos’altro
di solito si verifica in modo che le persone si trasferiscano
Scala akka Penso che sia da vicino
in relazione al materiale di accesso e quello
questo è onestamente solo un altro
astrazione quindi c’è un attore
astrazione usiamo query di comandi
eventi e se vuoi fare il ricercatore come
per di più questo è molto di più
coinvolto è tutto ciò che posso davvero dire
ne
Sig. strumento di monitoraggio integrato per
messaggio bus un asse un odoroso non ma
ci sarà di nuovo uno di quelli
prodotti commerciali che siamo
lo sviluppo di sì è un se si guarda a
l’intera tabella di marcia di ciò che stiamo facendo
allora, naturalmente, continueremo a farlo
evolvere la struttura stessa e uno di
le cose lì dentro sono migliori
supporto per le query di grande delocalizzazione
ostruzione qualsiasi altra cosa che siamo
lo sviluppo è un negozio di eventi per
elaborazione di un numero elevato di eventi
e una nuova piattaforma di routing che puoi fare
tutto il percorso necessario
comandi ed eventi e messaggi con
tecnologia tradizionale come coniglio o
Kafka o quello di tutti e quello funziona
ma per implementare quelli più avanzati
casi di utilizzo di routing di messaggistica in genere
si fa coinvolgere il male non è così facile
facciamo così stiamo sviluppando questo nuovo
piattaforma di messaggistica che ti consentirà
per farlo molto facilmente e anche per darti
capacità di monitoraggio migliori , penso
questo è le domande da App do
chiunque altro ha una domanda come noi ancora
ha tempo grazie mille grazie
[Applausi]

Please follow and like us: