Press "Enter" to skip to content

GOTO 2018 • Event-based Architecture and Implementations with Kafka and Atom • Eberhard Wolff


[Musica]
benvenuto nel mio discorso sull’evento basato
architetture con Kafka e etem my
il nome è David lupo Sono con un nuovo spunto noi
sto facendo progetti software per lo più che faccio
più consulenza e formazione
per favore ricordati di fare domande e
scrivi la sessione attraverso l’app che ho fatto
scrivi alcuni libri quindi c’è un libro
sulla consegna continua che ho scritto
è un libro molto pratico che mostra
tecnologie come fare continuo
consegna anche io ho scritto un libro su micro
architetture di servizio e c’è a
versione gratuita di ciò che è più simile
40 pagine o giù di lì che parla di micro
architetture di servizi e tu sei
benvenuto per scaricarli e dare un’occhiata
e il mio ultimo libro che è anche una specie di
una delle cose di cui parlerò
circa è la guida pratica per micro
servizi che parlano di tecnologie
e di nuovo c’è una versione gratuita a
opuscolo che offre una panoramica generale
il demo che ho fatto il nostro github così
sentiti libero di dare un’occhiata ai libri
e anche al codice demo quando parlo
sui micro servizi il primo problema
è che i micro servizi non sono davvero un?
termine ben definito quindi ho bisogno di rispondere
la domanda che cosa sono in realtà micro
servizi e un modo per pensarci
è l’ architettura dei sistemi indipendenti
c’è un sito web su questo e su quello
fondamentalmente include alcune buone pratiche
che ci siamo inventati in modo che il modo in cui io
pensare a micro servizi è il primo di
tutti sono moduli quindi se abbiamo un
sistema di solito decomponiamo quel sistema
in moduli e noi di solito lo facciamo
utilizzando le funzionalità del linguaggio di programmazione o
potremmo farlo usando i micro servizi se
lo facciamo con i micro servizi dei moduli
saranno i contenitori su cui ci schiereremo
kubernetes o dock o qualsiasi altra cosa così è
solo un modo diverso di fare moduli
che stiamo facendo da secoli
fondamentalmente perché facciamo moduli
diversamente ci sono alcuni diversi
sfide e modi diversi di fare
l’architettura quindi prima di tutto lì
è la macro e la micro architettura
in un monolite diploma per esempio il
decisione riguardante il significato del programma
che è chiaro che il sistema ne ha uno
linguaggio di programmazione è così
in caso di microservizi bene no
importa in quale linguaggio di programmazione
stai per scrivere il tuo software
corre all’interno del contenitore in modo che tu possa
o decidere che a livello globale
che è una decisione testuale macro o su
il livello di microarchitettura e ciascuno
il micro servizio deciderà per conto suo
linguaggio di programmazione quindi questo è il motivo
ci sono due diversi tipi di
architettura o e uno dei più importanti
parti del micro architettura è a
decidere in merito alla comunicazione di integrazione
come fanno quei macro quei micro servizi
in realtà parlano tra loro che è
sarà una decisione molto fondamentale
quello sta andando sarà difficile da
cambiare ed è per questo che la comunicazione
meccanismo come Kafka Adam è così molto
importante è anche necessario pensare
metadati di autenticazione per la traccia o
altri scopi quindi è qualcosa che
è necessario definire il settore mccoys
livello che dovresti avere indipendente
tubazioni di consegna continua perché
davvero ciò che i servizi di micro aggiungere è
connie indipendente dal vivo indipendente
spiegamento ma se non hai
tubo di erogazione continua indipendente
linee che non puoi realmente schierare così se
hai una fase in cui inserisci tutto
i micro servizi e testarli in alcuni
messa in scena e tu aspetti fino a quando tutto il micro
i servizi ci sono e poi li metti tutti
i micro servizi dalla stadiazione in
produzione che non è un vero micro
servizi di architettura Direi
perché la consegna continua
le condotte non sono indipendenti e loro
dovresti essere tu o dovresti standard
come operazioni quindi dovresti averti
conoscere le stesse basi da implementare
micro servizi per monitorarli e così via
e quelli allora dovrebbero essere sul
livello di interfaccia solo per cui dovresti dire
ok questo è come dovresti fornire
monitoraggio delle informazioni ma non dovresti
ci stanno in biblioteca perché poi
la tua quota tecnologica è fissa e tu
non può davvero supportare altre programmazioni
lingue in modo che lo standard dovrebbe essere acceso
livello di interfaccia solo come fornite
monitoraggio delle informazioni come si fa
fornire informazioni di blocco ma esso
non dovrebbe essere di circa una libreria specifica
che stai usando e finalmente c’è
resilienza se costruisci un micro-servizio
sistema e un pozzo ci sono molti
server un sacco di rete quindi se questo
fallisce il tuo sistema dovrebbe ancora sopravvivere
ed è per questo che dovrebbero essere i micro servizi
resilienti dovrebbero affrontare i fallimenti
di alcuni di questi sistemi aerei e in
totale di quello che direi è quel micro
il servizio è in realtà estremamente disaccoppiato
moduli se abbiamo moduli tradizionali
il modo in cui sono disaccoppiati è quello
Cambio un modulo e l’interfaccia
rimane lo stesso e le altre no
mi interessa davvero con i micro servizi che posso
persino dispiegarlo e non si preoccupano del
ad altri non importa, quindi siamo disaccoppiati
riguardo allo spiegamento perché posso solo
portare in produzione una nuova versione se
il mio micro servizio non funziona
davvero importante perché l’altro micro
servizi bene non lo faranno almeno loro
non si arresterà in modo anomalo, quindi continuano a funzionare ancora
bisogno di compensare, ma in un diploma
monolite se scrivo una perdita di memoria nella mia
modulo l’intero monolite diploma sarebbe
fallire con i micro servizi è solo il mio
micro servizio quindi è disaccoppiato
riguardo alla disponibilità la sua perdita su
riguardo allo spiegamento quindi è molto di più
disaccoppiato rispetto ai moduli tradizionali e
la parte più importante per micro
i servizi sono in realtà per ottenere la divisione
giusto per avere la giusta scissione del
logica di dominio in quei moduli e questo
è dove entra in gioco il design principale
e l’idea fondamentale è che tu
dovrebbe avere un modello di dominio specializzato
per ogni caso d’ uso e lo chiamiamo a
contesto limitato e credo che se tu
avere un micro servizio che implementa
contesto limitato che implementa un a
modello di dominio specializzato unico per alcuni
usare i casi è come si ottiene veramente
sistemi indipendenti e disaccoppiati così
supponiamo di avere un sistema
è responsabile per la gestione e tu
sappiamo che abbiamo degli elementi che possono esserci
abbiamo ordinato un cliente e poi noi
avere un sistema che parla di fatture
e l’ informazione della carta di credito è solo
qui perché noi
loro si preoccupano della carta di credito se noi
voglio fare una fattura e lo stesso è
vero per il Texas quindi ci interessa solo il
Tex valuta se facciamo la fattura e il
come e poi abbiamo la consegna e in
ritardo nel contesto del pacchetto di consegna che noi
cura del servizio pacchi e di come
gestire i resi se qualcosa ritorna
dal cliente e quelli sono tre
specializzato due modelli principali che hanno a
molte classi in aria e indipendente
argilla e nelle dipendenze tra
quelle lezioni ma sono molto
informazioni diverse e specifiche come
come la carta di credito sarebbe solo in uno
di questi sistemi ovviamente c’è un
relazione tra questi perché un ordine
dovrebbe idealmente creare una fattura e a
consegna per rendere il cliente felice e
la compagnia è felice ma almeno ci sono
tre diversi due modelli principali e il
la domanda è come si fa il
integrazione che è come ho detto uno dei
le parti più importanti riguardanti il
microarchitettura dovresti definirne una
modo di fare integrazione e
comunicazione e bene siamo qui
perché vogliamo parlare di eventi e
Penso che gli eventi siano davvero grandi perché
fanno anche parte del presepe di
design e sono un modo di fare
comunicazione tra barra senza contesto
c’è una ragione per questo anche perché
nel dominio aziendale ci sono
ovviamente eventi come l’ordine
stato accettato la fattura è stata
stampato questo tipo di cose sono eventi
di solito al passato, quindi qualcosa ha
successo e sono immutabili perché
bene non possiamo cambiare il passato
possiamo così ovviamente qualcosa ha
successo e questo è ciò che è effetto
e dobbiamo occuparcene per quale motivo
perché credo che gli eventi siano così grandi per
micro servizi perché consentono
disaccoppiando di nuovo questa è una specie di
Union Air la proposta di vendita
ed è per questo che eventi e micro
servizi che entrambi si concentrano sul disaccoppiamento
e potresti obiettare che questa è una corrispondenza
fatto in paradiso perché è tutto
disaccoppiamento
quindi cos’è che rende gli eventi disaccoppiati
o che consentono il disaccoppiamento usando eventi
prima di tutto c’è il punto temporale così
se ho un evento non è chiaro quando io
occupatene
quindi c’è disaccoppiamento riguardo ai tempi
quindi se un ordine è stato accettato posso
stampare una fattura ora o posso stamparla
più tardi non mi interessa molto probabilmente
fare attenzione ad un certo punto perché si tratta di
entrate ma si, da una tecnologia
punto di vista sono disaccoppiati e anche
relativa alla resilienza della disponibilità che
Ho detto che è molto importante aiutare gli eventi
noi perché bene se il sistema lo fa
la fatturazione è giù nel momento in cui
posso solo gestire quell’evento più tardi così
non c’è davvero un problema ma cosa
circa il punto principale per disaccoppiare il
cambia quindi faccio un cambiamento per ordinare cosa
su fattura e consegna faccio un cambiamento
nella mia fine nel formato dei dati e il
roba che viene trasferito come sarebbe che
propagare è davvero veramente indipendente
e se hai mai visto come una vendita
passo per un bus di servizio Enterprise o
middleware orientato al messaggio che cosa
ti dirò che c’è un no
evento accettato e c’è una sorta di
una comunicazione sincrona e così via
una comunicazione Chronos inoltrerà
inserire l’evento nel sistema di fatturazione
il sistema di consegna e se hai
un altro sistema che può solo accettare
anche questo evento è facile
estendibile se ne abbiamo una completamente nuova
sistema ha solo bisogno di gestirlo
evento quindi non è un grosso problema che abbiamo avuto
disaccoppiata riguardo a cambiamenti a ed io
vorrei che questo fosse vero ma in effetti penso
questo non è proprio vero perché ciò che è
davvero importante è ciò che è nell’evento
quali dati sono nell’evento, quindi prendiamo
un’occhiata a questo qui è il mio ordine accettato
evento e nel mio ordine evento accettato
ci sono i prezzi degli oggetti che io
ordinato
c’è l’ indirizzo di fatturazione da spedire
la fattura ci sono le dimensioni come
grandi sono quegli articoli stiamo parlando
circa piccolo
o stiamo parlando di un enorme PC o
qualunque cosa pesano e
dove dovrebbero essere inviati a e il
la prima parte riguarda la fatturazione
questo è il dato specifico per
fatturare la seconda parte è circa
consegna e bene c’è il problema
che potrebbero esserci cose che noi non facciamo
sapere ancora e che altri sistemi
sono interessati così appena ne aggiungiamo alcuni
Sistema per l’equazione potremmo aver bisogno di
aggiungi nuovi dati e dobbiamo cambiarlo
evento se lo facciamo in questo modo ci sono un sacco
di dati in questo evento e la domanda
è se tu se abbiamo un grande complesso
sistema che contesto limitato utilizza cosa
in questo esempio è abbastanza ovvio lì
L’ISM era in consegna e sappiamo chi
Sarebbe utilizza ciò che, ma in maniera non banale
esempio questo può facilmente ottenere molto
complicato e se facciamo un cambiamento
potrebbe potenzialmente influenzare tutti i moduli
in particolare se ne rimuovo alcuni
informazioni sull’ordine che non abbiamo mai
sapere chi userebbe quell’informazione e
potremmo essere sfortunati e tu ne conosci qualcuno
il sistema potrebbe bloccarsi perché non lo siamo
fornendo queste informazioni più se noi
non ho un buon modo di rimuovere
informazioni dall’evento, lo faranno
crescere nel tempo quindi non c’è modo di ottenere
roba fuori di esso in modo che possa crescere nel corso
tempo questo è nei domini del design cosa
chiamiamo un linguaggio pubblicato così
la lingua pubblicata è una sorta di dati
struttura su cui siamo tutti d’accordo
il nostro caso sarebbe la consegna dell’ordine
fattura e il sistema che non conosciamo
ma è così per le feste che sono
interessato a questa lingua pubblicata
ed entrambi questi eventi ed è una specie di
strano perché la base dice che c’è
il modello d’ordine su cui tutti sono d’accordo
anche se pensiamo al confine
contesto dovrebbe esserci più modello
più modelli di aria per scopi diversi
quindi è come non lo chiamerei a
contraddizione perché contesto di confine
e pubblicare la lingua sono entrambi parte di
il modo di progettare, quindi ci sono loro
può essere facilmente integrato ma lo è
un po ‘sfortunato o strano che noi
stiamo parlando del modello di dominio
quindi cosa c’è
bene l’alternativa è dire ok qui
è un evento specifico per la fattura e noi
hai già le informazioni per la fattura
in questo evento e abbiamo un altro evento
questo è specifico per la consegna e noi
avere il terzo evento che è specifico
a quel nuovo sistema che non lo facciamo davvero
sapere ancora e quelli sono specializzati
evento in questo caso specifico lo farei
sostengono che questo è probabilmente il modo migliore di
farlo perché l’informazione che
quei due sistemi sono interessati a
consegna e fattura sono molto diverse
e la cosa bella di questo è che noi
ora può evolvere in modo indipendente quindi se
Rimuovo le cose dall’ordine di fatturazione
evento accettato è solo un problema per
fattura così sappiamo esattamente chi parlare
e come evolverlo e anche se in
era bisogno di più dati c’è questo
struttura che dobbiamo prendere per pensare
circa e sarà solo per essere
qualcosa tra l’altra squadra e il
squadra di goffratura quindi è più facile da capire
fuori chi usa cosa se ne ho completamente
nuovo sistema avrei bisogno di creare un nuovo
evento che è una specie di cattivo e uno
modello dal design guidato dal dominio in
un mondo che potrebbe coprire questo è
fornitore del cliente, quindi la fattura lo direbbe
l’ ordine team che informazioni loro
bisogno di fattura sarebbe il cliente di
l’ ordine fornitore raggruppa il cliente
dice al fornitore di cosa hanno bisogno e
questo è il modo in cui lo svilupperemo
sistema e la cosa bella di questo è
Farà solo due parti
parlando di questo o potresti avere un
evento molto semplice che include solo un
ID e ti fornirebbe specifico
ulteriori API specializzate per il
informazioni specifiche per la fattura
o alla consegna questo è di nuovo a
compromesso tra estensibilità e
eventi specializzati quindi c’è almeno
un evento generico ma questo include davvero
l’ID così da solo non è davvero quello
utile così
gli eventi per vedere non sono qualcosa
che ci fornisce disaccoppiamento illimitato in
particolare riguardo ai cambiamenti che fanno
riguardo al tempo che fanno riguardo
disponibilità ma questo è tutto e il
domanda è quali dati dovrebbero essere inclusi
e direi che dovresti
probabilmente pensa a eventi specializzati
o solo ID perché Genet gli eventi
che tutti sono d’accordo su questo è quello che io
vedere in molti progetti, quindi credo
sono abusati e come ho detto prima
l’ evoluzione di questi eventi è
un po ‘più difficile quindi questo è il punto che sono
cercando di renderti ancora loro sono il
migliore opzione per la comunicazione tra
contesto bar sono un DDD ufficiale
modello e sono anche una grande misura
per la lingua ubiquitaria , quindi il
il linguaggio ubiquo è quello che tutti
concorda con gli sviluppatori sul business
analisti i clienti e loro sono
probabilmente parlando di questi eventi ma
il problema che ora abbiamo è questo
c’è una sorta di replica implicita
sta succedendo, quindi ho qualche informazione
circa l’ordine che ho inviato a
consegna e fattura che conserveranno
informazioni su che nella loro
dominio guidato nel proprio Berner
contesto così ovviamente potrebbe esserci
dati diversi in ciascuna risposta
contesti e questo è un problema
le incoerenze sono qualcosa che noi
sono piuttosto spaventati e fondamentalmente
la fine è vicina, quindi abbiamo fatto un maggiore
errore riguardo all’architettura che vorrei
sostenere che questo in realtà non è vero
perché il tipo di incongruenze che
stiamo parlando è abbiamo uno
sistema per voci quando quello che abbiamo uno
sistema per la consegna abbiamo un sistema
per gli ordini quindi abbiamo una fonte di
la verità per ognuno di essi, quindi se voglio
sapere qualcosa su una fattura che c’è
un sistema in cui vado lì non esiste
anche io non sono sicuro se
c’è una fattura o non ce n’è una
sistema a cui vado
sono gli eventi tra quei sistemi
di cui sto parlando e che cosa vogliamo
finire con sia consegna senza
una fattura
o una fattura senza una consegna a causa
quell’evento è stato pubblicato su uno di
quei contesti di confine e dovrebbe
alla fine essere risolto perché l’evento
verrà propagato la maggior parte dello spawn
contesto in un punto o nell’altro lo farei
sostengono questo non è inaudito si conosce un
ordina dove abbiamo già la consegna
ma non la fattura ancora o il contrario
in giro penso che non sia molto strano e
la domanda è qual è l’ alternativa
è un grande complesso centralizzato
database che ha visto così tanti clienti
che non possono davvero cambiare e io
direi che questa è in realtà una cattiva idea
e il miglior tipo di visualizzazione che
Ho trovato su Twitter dove vediamo due
micro servizi e sono condivisi a
il loro database condiviso e il punto qui
è perché condividono il database
sono così ben accoppiati che
che non si può davvero fare nulla da
loro stessi sono fondamentalmente solo
schiavi della gravità della morte di
la stella e questa è la domanda che io
chiederesti in questo scenario, quindi cos’è?
se la fattura cosa succede se il
la fattura è lì dopo un punto 0.1
secondi dopo un’ora dopo un giorno a
capire se posso vivere con questi
incongruenze e se la risposta è
beh, la fattura deve essere lì in meno
di un minuto perché altrimenti è
sta per essere la fine del mondo penso
devi capire davvero il dominio
perché come qualcuno dall’esterno
Sono in realtà piuttosto sorpreso che
affermazione quindi si tratta di riguardo
eventi e incongruenze e questi
tipi di cose l’ altra cosa è l’evento
sourcing così l’event sourcing dice che noi
memorizzare gli eventi che portano a uno specifico
affermare che è fondamentalmente l’ idea e noi
può anche memorizzare lo stato e se lo abbiamo
un tale sistema che fa il sourcing di eventi
c’è un esempio qui c’è a
micro servizio e riceve chiamate e
messaggi che vanno all’interfaccia
e ha un negozio di eventi in cui
memorizza gli eventi come l’ordine è stato
accettato e ha afferma così ora
impara circa l’ordine 42 e l’ ordine è stato
accettato un altro ordine è stato accettato
e poi alcuni ciò che è stato cancellato così
rimuove quell’ordine e finalmente quello
l’ordine è stato consegnato in modo da avvisare
che questo ordine è stato consegnato questo
è un modo per fare il sourcing di eventi e
sistemi come questi che non hanno solo
stato ma anche eventi o forse stato e
eventi e li fissano entrambi questi due
a sinistra quelli sono quelli che
effettivamente fare il sourcing di eventi questo è il
idea quindi vorrei discutere di quell’evento
l’approvvigionamento è in realtà solo un modello per
la persistenza è il modo in cui conserviamo
le informazioni sull’ordine che iniziamo
sia come eventi o stato o come a
combinazione se iniziamo come eventi allora
abbiamo l’ approvvigionamento di eventi e questo è il
idea ed elaborando su quello il
la persistenza è responsabilità del
micro servizi e può essere cambiato se
Ho un micro servizio interno
dovrebbe essere il funzionamento di quel micro servizio
cambiato dovrebbe essere modificabile che è
l’intera idea riguarda il disaccoppiamento
potrebbe essere diverso per ogni micro
servizio in modo che ogni micro servizio possa essere utilizzato
event sourcing o non dipendente da
caso vorrei discutere per questi ordini è
probabilmente non è una cattiva idea per solo
immagazzina gli eventi perché puoi
calcolare l’stato dell’ordine sul
volo giusto perché ce ne sono solo alcuni
eventi come ad eccezione di Cancered consegnati
quindi non dovrebbe essere troppo difficile
calcola lo stato al volo e
dovrebbe essere una decisione locale , naturalmente
rende più facile correggere le incoerenze
quindi se ho un ordine se ho solo il
l’ ordine dell’evento annullato e non l’ho mai avuto
ricevuto l’ ordine l’ordine dell’evento
accettato
Ho un’incoerenza e non lo sono
manico corto
se ho solo l’ event sourcing posso
basta memorizzare l’ordine dell’evento annullato per
il momento ed è incoerente e
una volta che l’ evento accettato dell’ordine appare io
posso solo iniziare e ora ho un
una visione coerente di te che abbia senso
quell’ordine è stato accettato e poi
cancellato mentre prima era solo un
ordine che è stato cancellato e mai
stato accettato che non può realmente accadere
e il punto che sto cercando di fare
qui va bene quindi abbiamo condiviso
database e sarebbe una cattiva idea
argomentare lo stesso vale per l’evento condiviso
sourcing quindi se ho un evento condiviso
storia in cui memorizzo tutti gli eventi
è in realtà parte della mia persistenza
che sto ben esternando ad un altro
sistema e finisco in un modo molto simile
situazione e ho gli stessi problemi e
sai se ho una lingua onnipresente
come negli eventi se io se ho tutto il
i dati lì dentro non sono sicuro di chi usa cosa
e in questo caso è anche peggio perché
è il funzionamento interno del micro
servizi che sono di copertura o che sono
toccando quindi questo è i problemi di base
riguardo agli eventi, perché te l’ho detto
su questo perché penso che se pensi
in particolare su questa diapositiva che è
bello avere tutti i vecchi eventi ma se
vuoi fare eventi che ti riforniscono
probabilmente vuoi memorizzare i tuoi eventi
localmente nel proprio sistema così avendo
l’accesso a tutti i vecchi eventi è probabilmente
non così utile come potresti pensare
okay, quindi come sto andando a implementare un
sistema di eventi
una opzione è Kafka che è uno dei
sistemi che sono stati abbastanza popolari in
negli ultimi pochi mesi qualunque sia e
il modo in cui funziona questo sistema è che ha
i record contengono una chiave che contengono
il valore e il timestamp così qui è
tale record e possono anche contenere
alcune intestazioni e possono essere memorizzate
sempre così a seconda di come tu
configura Kafka in modo che questo sia diverso
dal tuo solito un messaggio orientato
sistema che di solito prende di solito
quella cosa che l’evento lo inoltra a tutti
gli altri servizi e poi è
fatto con quell’evento e si sbarazza di
quell’evento Kafka memorizza quegli eventi
fondamentalmente li posso conservare per sempre così
questo è molto diverso in questo senso
i record stanno organizzando argomenti di argomenti
avere un nome e hanno le partizioni
quindi ne parlerei nel prossimo
Scivola quindi ecco una petizione e lei
petizione gli ordini garantiti se ho
un mittente quindi problema come l’ordine
l’ ordine accettato annullato è un po ‘di più
improbabile che accada perché se l’ordine
accettato un ordine cancellato appare nel
stessa petizione gli ordini sono garantiti così
c’è un problema in meno e questo è di
Naturalmente un consumatore di benefici commette il
pasticciare i record per usando un offset così
non dicono okay, lo processo
registro che elaboro questo disco che dicono di aver
elaborare tutti i record e strappare il tubo
registra 23 e poi possono dire di me
elaborato tutti i record fino al
registrare 42 è una differenza e tu
può avere gruppi di consumatori così consumatori
i gruppi ti consentono di avere un solo consumatore
per petizione che è bello per la stampa
fatture e consegne se ne ho
un sacco di servizi che potrebbero fare fatture
o le consegne se lo faccio un consumatore
gruppo se ho un gruppo di consumatori di
fatturare i microservizi quindi è solo uno
micro servizio che otterrà quell’evento
perché c’è solo loro lo faranno per ciascuno
petizione ci sarà un micro servizio
quindi ho inviato qualche evento a qualche petizione
e quella petizione sarà gestita da uno
micro servizio e così è
in nessun modo lo faranno più micro servizi
prova a fare la stessa consegna o lo stesso
fattura perché sono organizzati in a
gruppo di consumatori anche se ci sono
più istanze del
servizi quindi questo è in realtà abbastanza
utile quindi ecco un’altra visualizzazione
ecco l’argomento qui c’è un record
va a un consumatore e c’è un
offset qui e l’offset è impegnato
per consumatori così se ho un po ‘di più
record posso sostanzialmente dire ok ho
gestito tutti questi diversi record e
qui è un altro questa è una petizione
e potrei avere alcune altre petizioni
con alcuni altri offset e quindi potrei
avere un altro consumatore quindi ecco a
gruppo di consumatori con due consumatori e
ogni petizione ha solo un consumatore così
come fonte di eventi invierò un
evento a una di quelle petizioni e it
sarà gestito da esattamente esattamente uno
consumatore così solo una fattura o uno
la consegna sarà fatta fondamentalmente
l’ idea quindi ecco il produttore e
ecco il materiale di consumo che puoi fare
replica che è anche abbastanza carina così
puoi far replicare ogni petizione
e lì che può essere interrotto così così
puoi configurare quante repliche
dovrebbe essere scritto fino al messaggio
è o il record è considerato di essere
consegnato con successo a Kafka perché lo è
questo interessante perché significa questo
il nostro sistema è scalabile orizzontalmente
tradizionalmente che è stato un problema se
hai un sistema di messaggistica c’è un
limitare la scalabilità orizzontale qui
è più come un database senza sequel
dove puoi fondamentalmente fare molto
ridimensionamento perché ci sono petizioni che
può essere distribuito attraverso il servizio
e puoi avere repliche così anche se una
dei sistemi non ce l’hai ancora
repliche superstiti e puoi continuare
operare e questo è quello che penso
i motivi per cui Kafka è gentile e lo è
molto interessante e non solo perché
puoi memorizzare i record per sempre ma anche
perché può scalare in modo diverso e
comportarsi in modo diverso , ecco di nuovo il nostro
esempio fattura e consegna dell’ordine
e ho creato una versione molto semplice
di questo esempio che puoi trovare su
github e giocare con esso ti porta
circa immagino tre comandi per eseguirlo
quindi avresti bisogno di eseguire una build di esperti
avresti bisogno di creare la finestra mobile
contenitori e dovrai eseguirli
e c’è un molto vasto
documentazione su che intorno a quel modo
questo è qualcosa che puoi giocare
intorno con e i contenitori docker
che vengono creati sono fondamentalmente un
Bilanciamento del carico HTTP che dà
accesso centralizzato a tutti i sistemi
poi c’è la spedizione dell’ordine e
fatturando hanno interfacce web così
puoi vedere tutte le fatture tutte le
spedizioni e tutti gli ordini e puoi
creare un ordine che invierebbe un
messaggio al Kafka in esecuzione in un
contenitore docker diverso ci sia
zookeeper per la configurazione da memorizzare
informazioni e poi Kafka avrebbe inviato
quella informazione alla spedizione e
fatturazione e ciascuno di questi sistemi ha
bene una connessione al database così come
fa che funzionano davvero o perché è che
non è una cattiva idea perché ognuno di
questi sistemi hanno uno schema diverso
all’interno del database quindi va bene lo è
non una morte gigantesca lontana come uno schema
che ognuno scrive e legge da
ma sono tre diversi schemi così
usare un database centralizzato va bene e
Avrei potuto usare tre diversi
database ma sarebbe solo essere
sarebbe solo uno spreco di risorse delle
gli eventi contengono tutte le informazioni così
è un linguaggio di pubblicazione che contiene tutto
le informazioni che fatturano e
la consegna potrebbe essere interessata a me
hanno usato eventi specifici che lo farebbero
mi hanno fornito più indipendenza quindi
più stile cliente-fornitore o potrei
ho appena avuto un ID nell’evento
e servizi per informazioni dettagliate
ma ho attaccato a quella decisione
i dati nell’evento vengono copiati su
fattura e consegna quindi questo è tutto
roba di incoerenza di cui avevo paura
ed è denormalizzato
Prendo le informazioni dalla consegna
c’è l’indirizzo di consegna e il
modo e la dimensione degli oggetti e il
prezzo e così via e ho copiato che oltre
quindi se ho un altro ordine lo prendo
informazioni dal prossimo ordine e copia
anche così se il prezzo cambia
bene che le informazioni vengano copiate su
la fattura e la consegna che è
esattamente quello che vuoi se il prezzo di
alcune modifiche alle voci che non vuoi avere
ogni cambio di fattura in modo che sia uno di
i punti penso che questa sia un’indicazione
è una buona idea avere un legame
contesto qui e non ho bisogno di avere
qualsiasi tipo di complesso zione storia
circa il prezzo perché ho appena copiare
oltre le informazioni e questo è così se
Ho un cambio di prezzo, faccio solo quel prezzo
cambiamento nel sistema degli ordini e il
storicizzare i dati lo farebbe il prezzo storico
essere memorizzati in ogni fattura molto veramente
importa così Kafka fornisce l’accesso a
vecchi eventi che potresti usare per evento
sourcing ma ancora poi si finisce con
quell’evento che porta alla morte, quindi io
non lo farebbe c’è un garantito
è fantastico perché significa questo
possiamo trattare più facilmente con o
incongruenze e meno probabile che ci sia
un modo per inviare alcuni eventi e fare
sicuro che solo una istanza di un micro
il servizio riceve quell’evento per essere sicuro
che è stato stampato solo un modo
o una consegna effettuata tuttavia è
Infrastruttura aggiuntiva tendo ad essere a
fan di middleware orientato ai messaggi così
Penso che sia una grande tecnologia che mi piace
perché è come un corono che consente
io devo fare per costruire sistemi affidabili, ma io
è necessario averlo in produzione nel caso
di Kafka significa che ho bisogno di averne un po ‘
tipo di cluster bene e probabilmente ho bisogno
per avere un qualche tipo di memoria stabile STM
come SSD o dischi rotanti per
salva tutte le informazioni che ho bisogno di avere
una sorta di backup sul posto e tu
conosci e tutti questi tipi di cose
ottenere l’idea quindi questo è in realtà uno dei
i problemi che potresti avere e
perché è un’infrastruttura complessa
potrebbe anche essere difficile regolarlo per farlo
davvero performante e veloce così è lì
qualsiasi alternativa Direi c’è
e l’alternativa sarebbe da usare
riposa e Adam e Adam è il formato
quello che viene utilizzato è fondamentalmente solo i dati
formato è basato su XML questo è ciò che noi
ho usato prima Jason ed è così
originariamente utilizzato per blocchi di alimentazione e
podcast e questo tipo di cose così
è fondamentalmente solo un documento XML
che contiene informazioni su tutto il
problemi separati del mio blocco o di un podcast
o qualunque sia l’accesso tramite HTTP
quindi mi basta andare a questo URL e ottenere
che Adam documenta un XML
documento e ho finito
e l’idea qui è di usare questo
tecnologia che è molto ben consolidata
e usarlo per fornire un feed di eventi
o gli ordini nel mio caso non dovrebbero essere troppo
difficile
un tale documento XML ne fornisce alcuni
informazione che ha davvero senso
se stai parlando di un blog o di un
podcast come un autore un riassunto a
titolo che in realtà non fa molto
senso per un ordine in cui scrive
ordina che davvero non abbia un autore
quindi questo è qualcosa che devi fare
ben gestito perché altrimenti finisci
con documenti di articoli non validi e poi
fondamentalmente non è Adam e quindi nel
Struttura XML c’è un link ai dettagli
quindi puoi sostanzialmente dire ok questo qui
è un ordine il suo ordine 42 qui è il
link a maggiori dettagli e ci sono anche
timestamp in modo da poter sapere quando
quell’ordine è stato accettato per esempio o
quell’evento è accaduto e quindi puoi usare
negoziazione dei contenuti per diventare diversi
formati di dati o dettagli condom
la negoziazione è una parte di HTTP
protocollo è implementato nell’accettare
intestazione quindi di solito se fai qualche età
richiesta di ottenere qualche sito web c’è un
eccezione che dice sì io sono un browser
Accetto HTML PDF e cosa hai
ping e puoi usarlo per definire cosa
tipo di struttura dati che accetti
vuoi avere in un tale sistema così tu
in pratica posso dire di sì, sono un ordine
sistema se sono un sistema di fatturazione di cui ho bisogno
informazioni che si adattano a una fattura sono a
sistema di consegna ho bisogno di informazioni che
si adatta a una consegna o più precisamente
consegna in versione 1.0 quindi questo è abbastanza
bello perché significa la consegna e
nei bar puoi consumare lo stesso oggetto
piedi ma possono ancora usare diversi
formati di dati per i dettagli, ma abbiamo bisogno
per inviare le informazioni, quindi ho bisogno di
iscriviti al feed quindi come sto andando
per farlo bene, lo farò
un HD se si ottiene questo è un po ‘male
perché il sondaggio significa che devo farlo
Paul e io penso che non sia davvero elegante
ma d’ altra parte significa che il
il cliente può decidere quando elaborare nuovi
eventi non è spinto ad esso il client
invece di attivamente Paul è nuovo
eventi quindi se il cliente è molto occupato I
posso solo dire al momento che non lo farò
elaborare qualsiasi nuovo evento in modo che sia abbastanza
bello ma è molto inefficiente
non ha molto senso dire di sì
Voglio avere una lista di tutti gli ordini
oh guarda che nessun nuovo ordine, quindi lasciami
ottenere una nuova lista Oh ancora nessun nuovo ordine
questo non ha molto senso perché
abbiamo molti dati invariati
Per fortuna ancora una volta possiamo contare sulla
caratteristiche del protocollo HTTP perché
c’è un sacco di supporto per
inserendo la cache lì, quindi quello che posso fare è io
posso solo dire di darmi tutti gli ordini e
in cambio ottengo quel documento XML atomico
probabilmente farei una specie di cercapersone
come se mi dessi cento o dieci o
qualunque cosa e posso ricevere un ultimo
intestazione modificata dal server e il
la prossima volta che accedo che mangime mando in
ottenere la richiesta e
se modificato dall’intestazione e poi il
sistema è in grado di rispondere con tre o
quattro che in sostanza dicono non modificati
e non invierà a nessuno alcuna informazione
quindi è molto efficiente o lo sarebbe
non inviare più nuovi dati così il polling può
effettivamente essere molto efficiente grazie
Cache HTTP e il modo in cui funziona HTTP
di nuovo c’è una demo se lo sei
interessato a questo e ce ne sono alcuni
codice che deve fare la manipolazione in giro
il caching HTTP e questi tipi di
le cose e non è del tutto banale ma
bene è almeno qualcosa che tu
può fare riferimento e guardare e se si guarda
a questo dal contenitore docker
prospettiva cosa sta succedendo lì bene
è praticamente lo stesso, c’è un
server httpd che inoltra richieste in tal modo
hai siti web per ognuno di questi micro
servizi e c’è un unico database
con schemi separati e poi c’è
HTTP un atomo tra questi tre sistemi
come invece di Kafka una delle domande
è davvero necessario un atomo per questo
e no non lo fai perché l’alternativa
è avere il tuo formato proprio così
contiene le informazioni di cui hai bisogno
per ordini o eventi e nessuna informazione
non ha informazioni rilevanti per
blocca così non più, anche se cosa hai
e tu continueresti a fornire link e
si sarebbe comunque utilizzare la negoziazione del contenuto
per ottenere i dettagli l’unico problema è
che non puoi impressionare altre persone con
usando quell’URL per il tuo feed atom e
mettilo in un lettore di atomi ma penso
probabilmente va bene e va bene
trade-off quindi il punto che sto cercando
fare qui è che il rischio può essere un
sincrono nel senso che può farlo
trasferire eventi ed è anche resiliente
perché se uno dei sistemi fallisce bene
E ‘solo, non il potere per tutto per
un po ‘di tempo e alla fine gestirà
tutti quegli eventi che si sono accumulati
quindi ancora una volta puoi fornire l’accesso al vecchio
eventi se sono comunque moccio così
è probabile che tutti i tuoi ordini siano in
il sistema di ordine comunque così tu potessi
fornire o fornire l’accesso a
gli ordini dall’orizzonte dei tempi
se vuoi s a Kafka
se hai se vuoi mandarne qualcuno
informazioni a un solo sistema non v’è
in realtà non è troppo facile, perché
ci sarebbe un sistema che Paltz e
allora l’altro sistema sarebbe Paul e te
sai che finisci con uno di questi sistemi
sondare quei piedi e ottenere il
informazioni sul nuovo il nuovo ordine
e poi quel sistema farebbe il
fattura e come funziona l’altro sistema
sappi che non dovrebbe fare
un’altra fattura per lo stesso ordine
un modo per risolvere ciò fornendo
idempotenza che significa anche se un sistema
ottiene le stesse informazioni due volte alla fine
il risultato è lo stesso, quindi anche se ottengo il
stessa informazione due volte dovrei solo
hanno stampato una fattura come fa che
funziona bene, prendo una nuova informazione da
dai piedi guardo che guardo
il mio database e capire se io
già creato una fattura per questo
ordine specifico e se è successo
quindi ignoro quel messaggio e quello
significa che uno dei sistemi è il primo
uno del vincitore prenderebbe quell’articolo da
i piedi e capire che nessuna fattura
è stato stampato e avrebbe stampato un
fattura e la seconda prenderebbe
quell’oggetto dai piedi lo guarda e
capito che qualcuno ha già creato un
fattura e sono stati semplicemente ignorarlo di cui hai bisogno
farlo probabilmente comunque perché anche
a Kafka potrebbero esserci duplicati e
in quasi tutti i messaggi orientati
middleware ci potrebbero essere duplicati ma
in questo caso lo stiamo usando anche per
assicurati che sia stato solo un messaggio
o che solo un sistema ha creato un
fattura e non è solo inelegante ma
è anche inefficiente perché tu
nel
la sincronizzazione sul database è così
la sfida ma tu non ne hai
infrastruttura aggiuntiva così è
abbastanza bello e alcune persone in realtà
sostengono che questo è ciò che i servizi di micro
sono veramente su questo non dovresti anche
avere qualsiasi tipo di infrastruttura, ma io
non so che intendo alla fine della giornata
deve esserci una sorta di integrazione
e comunicazione, quindi credo
dovrebbe andare bene quindi la conclusione lo farei
sostengo che è più importante se tu
guarda un sistema di micro servizi da ottenere
questo è giusto e questo è tutto
contesto di legame e contesto di bonham
Probabilmente comunicherò perché un’azienda
eventi e penso che sia perfetto
le incoerenze che ottieni in questo
il caso non è così difficile e problematico come
sono in sistemi distribuiti generici
Direi che un ordine che non lo fa
ha davvero una fattura ancora e non ha
davvero una consegna ancora è
qualcosa che succede e basta
accettabile perché abbiamo fatto una buona fuoriuscita
questo in micro servizi è molto
importante quali sono i dati nel caso in cui
ti dà un’idea del disaccoppiamento
da una prospettiva architettonica
non condividere gli eventi che sei
usando per l’ event sourcing perché è
parte della tua persistenza ed è per me
simile a condividere un database così io
non lo farei
Non lo userei troppo e direi
che Kafka è davvero molto carino
soluzione per la messaggistica non solo perché
della cronologia dei messaggi ma anche perché
di scalabilità orizzontale è molto
affidabile è un sistema molto molto semplice
non c’è molto se si guarda aggiungere
più complessi i miei sistemi orientati ai messaggi
hanno transazioni e in due fasi
commette e tutti questi tipi di cose
che sono davvero complessi e come ottenere
avere ragione e fare
eseguire e rendere affidabile e qualsiasi
condizioni e Kafka è molto diversa
è fondamentalmente solo un file dove tu
attaccarti
nuovi record e leggi i record e io
così perché si tratta di un così semplice
la tecnologia, ma il riposo potrebbe essere sufficiente
e come ho detto prima ci sono persone
chi sostiene di base bene questo è il modo di
andare perché voglio avere una S minima
infrastruttura possibile, se ti è piaciuto
la presentazione precedente un’e-mail
indirizzo e se si invia una e-mail a questo
indirizzo email ottieni le diapositive plus
tutti i libri gratis porta campioni da
i miei altri libri questo è in realtà alimentato
da un piccolo script Lamda emerson in modo da
potrebbe sostenere che stai parlando con a
micro servizio in fatto di dati
privacy quindi c’è un file di registro e il tuo
l’ indirizzo email è bloccato perché credo
un po ‘come 14 giorni e poi è
cancellato se non si è in grado di inviare un
immagine dell’indirizzo corretto in realtà
arriva alla mia casella di posta, quindi in quel caso io
renderebbe uno sforzo manuale per inviarvi
l’informazione grazie mille grazie a
molto per l’ascolto sono felice di rispondere
domande o
tu

Please follow and like us: