Press "Enter" to skip to content

GOTO 2017 • Rethinking Microservices with Stateful Streams • Ben Stopford


[Musica]
ciao a tutti, grazie per essere venuti
in questa sessione finale al pizzetto spero
voi ragazzi hanno avuto un buon congresso
Mi è sicuramente piaciuto così oggi siamo
parlerò di due soggetti
quale II trovo piuttosto interessante quale
sono concetti di servizi di ricevitori mic
di cui parla tutto questo e poi
questo concetto di elaborazione del flusso e
particolarmente in realtà intorno a questo questo
idea di un log ritentivo, quindi il mio nome è
Ben Stopford puoi farmi avere su Twitter
lì e io lavoro in questa azienda chiamata
confluente qualcuno ha sentito un confluente pochi
chiunque abbia sentito parlare di apache kafka ha molto
di più da quel freddo va bene quindi questo è questo
è stata creata la società che lo gestisce
dagli autori originali di Kafka così noi
sorta di fornire servizi intorno ad esso e
Lavoro come ingegnere perché dovrei farlo
alcune cose hanno un po ‘strano
ruolo, faccio un po ‘di questo tipo
di parlare roba e io lavoro principalmente come
un ingegnere sulla parte del registro distribuito
ci sono alcune parti differenti di Kafka a
l’uomo lavorava alle opere di pensiero e a
poche altre aziende nel Regno Unito quindi sì
sto solo pensando a Mike
le riserve sono state davvero buone
di discorsi finora in cui abbiamo guardato
approcci basati sugli eventi e abbiamo cercato
a richieste guidate approcci e siamo
ci penserò un po ‘su come
queste cose sorta di pan nel tempo
in particolare da una specie di
prospettiva architettonica così
microservizi alle persone piace leggermente
polarizzante in termini di ciò che la gente pensa
di loro e c’è una buona ragione per
questo possono andare molto male che ha
ne parliamo anche per così tanto
di persone che stanno per dividere il
monolite è così diffondendo il monolite
importante come nessuna idea semplicemente perché
sei inizio probabilmente andando con un
monolite, se sei sensibile a te
inizierà con il monolite, se lo sei
cercando di ottenere qualcosa per cui
i tuoi affari
se abbastanza spesso vuoi estenderlo
quindi penso che Randy Shoop abbia fatto abbastanza e abbia avuto
una bella citazione su questo che è se
sei se non rimpiangi la
decisioni architettoniche che hai preso
in precedenza, probabilmente sei finito
ingegneria e penso che sia molto vero
ma questa idea di dividere semplicemente a
il modulo non è in realtà ciò che mike inverte
sono dalla mia prospettiva per me
si tratta davvero di questa idea di autonomia
quindi l’autonomia è leggermente un po ‘
concetto astratto ma che cosa realmente
significa che ogni servizio si evolve
indipendentemente questo è dire che è suo
possedere padrone e avere un senso di
L’indipendenza ci consente fondamentalmente
diffondere un’applicazione in molti
diverse squadre in modo che possano tutti
muoversi autonomamente quindi la sua indipendenza
questo concetto di indipendenza
in particolare per quanto riguarda il rilascio di basi di codice
processo ecc che davvero tipo di dare
servizi il loro valore e li consente
scalare quindi quando diciamo scala non lo faccio
significa davvero dal dal
prospettiva di petabyte di dati o
miliardi di utenti o qualunque cosa io realmente
ridimensionamento medio dal punto di vista di
termini di persone come ridimensionare il tuo
organizzazione come cresce perché è così
in realtà uno dei più impegnativi
parti di cui parliamo
Kafka e K sono un po ‘stanti in questo discorso
e queste sono le tecnologie che realmente
può trattare con scala nel tipo di
senso tradizionale ma in realtà uno dei
i problemi più difficili sono il ridimensionamento delle persone
termini intendo se pensiamo al ridimensionamento a
monolite abbiamo molti esempi tratti dalla
aziende pinup come Facebook fino a
molti altri esempi più piccoli, penso
dove questa è una cosa difficile da fare
cosa succede mentre cresciamo, ma in realtà tutti
le aziende sono in qualche misura raccolte
di applicazioni se ne guardi
compagnia su forse un migliaio di persone
scoprirai che c’è un sacco di
diverse applicazioni che devono
connettersi insieme per progredire
qualche tipo di obiettivo aziendale
e tipicamente lo faremo con
qualcosa come messaggistica aziendale o
Il file FTP trasferisce queste applicazioni
parleranno tra loro ma
è spesso un ripensamento che è spesso
solo qualcosa su cui ci siamo imbullonati
la fine in un tentativo di tipo di fare
questa cosa funziona se pensiamo a micro
servizi o SOA che è un po ‘ simile
certamente storicamente molto simile
i modelli sono davvero su questa idea
di reagire per un multi-team
architetture architetture dove ciascuno
il servizio può effettivamente avere un grado di
indipendenza quindi Pat Helen ha scritto a
carta molto interessante su di esso
dati autorizzati all’interno e / o dati
all’esterno qualcuno lo legge no, c’è
un riferimento ad esso alla fine e lo farei
davvero incoraggiarlo è una grande carta ma
parla di pensare ai servizi
in termini di dati che detengono
dentro di loro all’interno del servizio stesso
e i dati che espongono e davvero
una delle cose che dobbiamo pensare
circa quando passiamo a un servizio basato
approccio è in realtà i dati che noi
condividere con altri servizi sembra gentile
di ovvio, ma in realtà non lo siamo
tipicamente così bravo nel trattare questo
problema
quindi questo mondo esterno il mondo quello
si trova fuori da un servizio e in particolare
il dato che esiste al suo interno è
qualcosa che dovremmo davvero progettare
per così questa idea della nostra indipendenza
questa idea di mantenere il servizio no
l’emendamento ha un costo se pensiamo
su di esso da una prospettiva oo che abbiamo
tutto è stato insegnato sui concetti di
probabilmente l’ incapsulamento l’ hai avuto
probabilmente ha imparato a conoscere il Parnaso
università o apprendimento orientato agli oggetti
modellando come sei cresciuto e noi
sappi che se abbiamo un oggetto lo è
contiene stati e comportamenti così qui noi
avere sempre ordini oggetti sul
a sinistra e un oggetto di istruzione sul
giusto e sappiamo che lo faremo
incapsulare il nostro stato e il nostro comportamento
dietro una bella interfaccia pulita questo dà
noi perdiamo qualcosa che permette
noi per cambiare questo è solo questo è un tipo
di cosa relativamente intuitiva da fare ora
se usiamo se lo facciamo in a
l’applicazione monolitica è abbastanza facile
per ottenere uscite, quindi diciamo, facciamo
dire che abbiamo un requisito dalla
affari e comporta il cambiamento di entrambi
lati
di un’interfaccia possiamo mettere quelle modifiche
in possiamo implementare quelli di JIRA o
tuttavia noi comunque andiamo in giro
implementando i nostri requisiti e possiamo
distribuire il tutto insieme ed è
piuttosto facile se abbiamo lo stesso problema
in un mondo distribuito dove diverso
i team eseguono servizi diversi è a
un po ‘più complicato perché se noi
avere un cambiamento che ha tagliato diversi
impostare attraverso i tagli ai servizi che dobbiamo
penso che Ranae sia la versione di
questi di questi codici cambiano in modo che
tutto funziona armoniosamente insieme così a
il problema di sincronizzazione è un po ‘
doloroso
quindi i servizi funzionano meglio dove i requisiti
il cambiamento è isolato in un singolo delimitato
contesto prendiamo un esempio di questo
immagina qualcosa come Single Sign-On
questo è come un ottimo servizio
esempio ha un’interfaccia molto semplice
autorevoli giuste e il punto chiave qui
è che è davvero improbabile, non importa
che cosa cambia ad esso in termini di
i nostri requisiti di business per una varietà
di diversi servizi mi dispiace diversamente da te
che nessuno di loro stanno per interessare
questa interfaccia single sign-on esiste
in un contesto strettamente limitato un po ‘
mondo a se stesso ma servizi alle imprese
servizi che effettivamente costruiamo e
cambiare giorno per giorno questi sono a
un po ‘diverso per prendere una specie di
esempio dalla vendita online se avessimo un
serie di dati dei clienti che set di dati di
ordina un set di dati del catalogo prodotti
questi si moltiplicheranno leggermente in molti
dei nostri diversi servizi questi sono
effettivamente catturato condiviso chiamato
set di dati di base quindi sono molto di più
c’è molto più intrecciato
l’autorizzazione si trova qui sopra
e contesto strettamente legato, quindi il punto
è che il futuro è il futuro di
i servizi aziendali finiscono per essere molto di più
strettamente intrecciati semplicemente perché loro
avere questi set di dati condivisi che fluiscono
e proliferare attraverso diversi
Servizi
quindi abbiamo bisogno di questa idea di incapsulamento
che tutti capiamo intuitivamente così
che possiamo nascondere il nostro stato interno e
rimangono accoppiato sciolto ma siamo anche gentili
di bisogno di questa capacità di tagliare e tagliare a dadi
i set di dati di condivisione che abbiamo bisogno di ottenere meglio
accesso a loro per scrivere nuovi servizi, ecc
e queste due forze sono in competizione
l’uno contro l’ altro nei servizi che
costruiamo e lo sfregamento è essenzialmente quello
database di sistemi di dati Cluster di Hadoop
qualunque tu voglia scegliere, loro hanno
un po ‘ per farlo con incapsulamento in
fatto piuttosto i database opposti che
sono meravigliosi pezzi di tecnologia e
si chiedono sono pezzi meravigliosi di
tecnologia perché contorcono i dati
che contengono una varietà intera di
diverse forme e dimensioni quindi se noi
pensa a un servizio che abbiamo
interfaccia che nasconde i dati sul
dentro così questo niente ci sono meno dati
all’esterno e ci sono dati sul
all’interno mentre i database hanno questo
enorme interfaccia amplificatrice che consente
per contorcere i dati che conservano
in una varietà di forme diverse
e dimensioni
questo porta questo tipo di idea di questo
dicotomia sulla dieta dei dati, quindi i sistemi di dati sono
davvero su questa idea di esporre i dati
permettendoti di scorrere rapidamente e ottenere
il tuo lavoro svolto i servizi sono davvero
circa l’idea di incapsulamento
l’antitesi di quei dati nascosti da
altre persone da altri servizi così
possiamo proteggerci dal futuro
cambia quindi chi ha sentito dire questo
i microservizi non dovrebbero condividere un database
probabilmente un bel po ‘mi immagino
sami newman parla molto di questo
in realtà ha scritto fondamentalmente a
tutto il libro su questo è un buon consiglio e
è un buon consiglio per quella vera ragione
banche dati costituiscono uno dei uno dei
le forme più ricche di accoppiamento hanno un
interfaccia amplificante e anche loro
rappresentano lo stato mutabile condiviso
lo sappiamo tutti come programmatori che abbiamo
stato cercando di sbarazzarsi di mutabile condivisa
stato dal nostro dai nostri programmi per
molti anni quindi questo è un buon consiglio ma
cosa invece cosa facciamo invece per
importazione indipendente dispiegabile
le applicazioni bene, una cosa che facciamo è noi
temp generalmente avvolgiamo il nostro database in a
interfaccia di servizio di qualche descrizione così
abbiamo quei dati all’esterno che è
bello e combinato e questi dati sul
dentro e lo creiamo intelligentemente
interfaccia che è bella, pulita e
tutto sembra roseo, quindi cosa succede
quando noi quando rilasciamo queste cose
in produzione e li lasciamo evolvere a
un po ‘nel tempo, quindi tipicamente diventi gentile
di una delle due eventualità e
speriamo che queste cose succederanno
risuonare con te un po ‘ così il primo
uno è che non possiamo semplicemente finire
crescere l’interfaccia nel tempo così tu
potrebbe aggiungere una varietà di differenti
parametri alla fine di questo
interfaccia in modo che possiamo ottenere
dati più precisi dai nostri dati
servizio e questo set di dati sul
al di fuori cresce lentamente nel tempo tutto
alternativa forse aggiungiamo di più e
più metodi giusti, quindi inizierò
con ottenere o ma ottenere l’ordine e poi noi
sono stati ordinati per ID utente e poi noi
ottenere ordini non soddisfatti da ID e voi
conosci due anni dopo guardi il tuo
interfaccia di servizio e ha circa 50
i diversi metodi sono tutti davvero strani
come piccole cose kooky e inizi
per chiedermi se dovresti avere solo
implementato un linguaggio dichiarativo così
questo è un tipo di modo in cui le cose sono gentili
di andare male e in realtà come il tuo
i set di dati crescono questi composti problematici
questi servizi dati che devono servire
come molti altri servizi devono
avere a che fare con un volume più grande
volume che significa che devono essere di più
specifico in termini di come loro
taglia e taglia i dati significa che loro
avere più dati a vendere hanno ridimensionamento
problemi quindi è una specie di opzione uno
l’opzione uno è che stiamo semplicemente finendo
crescere questa interfaccia nel tempo
molto specifico sui dati che abbiamo
L’ultima opzione due è che ci arrendiamo
e ci limitiamo a spostare il
intero set di dati quindi, in questo caso, potremmo
avere un metodo per ottenere tutti gli ordini aperti dove
teniamo solo questo servizio all’ordine
servizio estrae tutti gli ordini aperti e
li manteniamo localmente in un database
potremmo anche farlo con un messaggio
sistema e questo ci dà un paio di
vantaggi in primo luogo ci permette di
eseguire join e ci permette di gentilezza
di scorrere rapidamente i set di dati che
abbiamo ma in realtà porta a a
problema diverso se andiamo giù
approccio e questo è in realtà davvero
è stato il problema della messaggistica di Tobias e basta
che finiamo con molti molti mutabili
copie in tutti i diversi servizi
intorno alla nostra organizzazione e queste cose
divergere nel tempo e uno dei motivi
che questo diventa davvero difficile è questo
um ciò che accade è ogni servizio
quindi i dati nelle aziende sono generalmente carini
è schifoso solo i fatti della vita giusta
i set di dati tendono ad essere piuttosto scadenti
dei motivi principali per questo è che il
modo in cui interpretare i dati è un po ‘
organizzazioni soggettive e grandi hanno
interi reparti che cercheranno di provare
e il lavoro tenta e diffonde il debito
la definizione di vari diversi
attributi in modo che tu possa capire
che dati significano cosa significa in realtà
i servizi finiscono effettivamente per scrivere
software che risolve i problemi nel
dati che stanno ottenendo la conversione
alla pulizia del proprio modello di dominio
cose e facendo così loro in realtà
diventare dipendente dagli stessi problemi
che stanno cercando di evitare il molto
idiosincratico in quei set di dati e
questo li rende molto difficili da cambiare
perché se cambi qualcosa in
fonte allora hai una varietà di
servizi diversi sono effettivamente
dipende da quelli di quelli precedenti
versione spezzata dei dati quindi è molto
difficile risolvere questo tipo di problemi in
Retrospect quindi le copie più mutevoli di
dati che abbiamo diffuso intorno al nostro
diversi servizi più saranno i dati
probabilmente divergono nel tempo quindi cosa finiremo
con questo ciclo di inadeguatezza così
iniziamo da qui a sinistra
sai che abbiamo solo un progetto
abbiamo fatto il nostro design sembra davvero
fresco e siamo davvero soddisfatti
Ho design su una lavagna bianca che facciamo
proof-of-concept è ancora alla ricerca
piuttosto sexy e abbiamo un inizio da mettere
in produzione e le cose tipo di
cambiare e non può funzionare se o non
possiamo cambiare bene i nostri servizi
inizialmente possiamo farlo tutto abbastanza bene
quindi continuiamo ad ampliare questo contratto
e forse lo faremo probabilmente
ok a questo punto quindi probabilmente
iterare alcune volte su quello se abbiamo
ha finito per creare un enorme datario condiviso
il servizio di dio potrebbe accorgersene
stanno spendendo un sacco di soldi
nel qual caso finiremo per tornare a
questa luce incapsuliamo e
tornando ai nostri cavalieri e
servizi attraverso un ciclo di
rigenerazione e in alternativa abbiamo solo
andiamo , ci metteremo tutti i dati
quindi tutti finiscono per avere una copia e noi
finire con questa divergenza nel tempo
e quindi la divergenza causa a
riprogettare e si finisce per andare in giro questo
Cerco di nuovo e in realtà ho visto
questo succede alcune volte in pochi
diverse società e il problema
la cosa sul cambiamento è che quando tu
reinventare qualcosa quando fai qualcosa
per la seconda volta la cosa che è
davvero importante è che tu in realtà
cambia il contesto in un modo che implica
avrai successo la seconda volta
quindi si si potrebbe obiettare
la stessa cosa ancora e ancora nel
lo stesso con lo stesso set di strumenti è un po ‘
idiota in quanto sei tu sei sei
costantemente cercando di sbattere la testa
contro lo stesso muro di mattoni quindi le radici
da questo è quello di cercare di cambiare
qualcosa che abbiamo bisogno di cambiare il modo in cui
effettivamente affrontiamo questi problemi di
diffondere dati e controllare i dati
attraverso una varietà di servizi diversi
quindi queste forze sono fondamentali
eccessivo
l’ accoppiamento divergente che producono tutti
dei sistemi che costruiamo non c’è
molto che possiamo fare per loro perché
sono fondamentali tutto ciò che possiamo veramente fare
è riposizionarci sul tradeoff
curva tra loro quindi c’è un migliore
modo c’è un modo che potremmo fare questo
attacca questo problema in un po ‘
in modo diverso quindi questo è um questo è un an
approccio che ha funzionato per alcuni
anni con poche aziende diverse e
in realtà è simile in alcuni modi ad a
sacco di cose che abbiamo parlato
oggi è il primo passo è che noi
costruire su una spina dorsale di eventi così piuttosto
che iniziare con una sorta di missioni e
comandi e query iniziamo con un
protocollo asincrono che abbraccia
una sincronicità sia in termini di a
punto di vista tecnico ma anche dal
prospettiva del mondo reale asincrono
problemi come prendere l’ordine e
portarlo a casa tua e poi noi
strato in richiesta dove siamo necessari
quindi richiede che gli approcci guidati siano alti
accoppiamento perché effettivamente un singolo
chiamare lo spuntino è accoppiato in tutto il
diffusione di tale pila di chiamate
mentre questo approccio di trasmissione di eventi
che è come la messaggistica tradizionale
fornitori con meno accoppiamenti con
disaccoppiandoci aggiungendo un broker
e quindi usando un protocollo di trasmissione così
vogliamo iniziare con qualcosa di simile
Questo
e stratificare l’approccio di risposta alla richiesta
in cima quindi quello con cui finiamo è
qualcosa di un’architettura guidata dagli eventi
essenzialmente così abbiamo un asincrono
flusso di messaggi in questo caso abbiamo un
ordine che passa attraverso una varietà di
stati diversi abbiamo un numero di
diversi servizi che sono
collaborando per far progredire quella cosa
inoltra tutto usando un asincrono
protocollo e questo è un termine
collaborazione con gli eventi e poi faremo strato
domande su dove abbiamo bisogno di così in questo
caso abbiamo un servizio di basket che
risponde a un’interfaccia utente in a
richiedere il meccanismo di risposta e lo siamo
lo stratificheremo al nostro asincrono
l’architettura quindi è il primo passo uno
questo è il bit c’è un po ‘
diverso da una sorta di tradizionale
approccio è quello di rendere questi dati sul
al di fuori dei set di dati condivisi
cittadino di prima classe, quindi questa idea di
ci sono dati a cui abbiamo esposto
altri servizi e dati lat quali noi
interiorizzare quindi ci concentreremo su
progettando per questo e rendendo questi dati
set disponibili per qualsiasi servizio necessario
con loro ci aiutano i flussi di stato
questo quindi è efficace in modo efficace
un sistema di messaggistica siamo ovviamente
parlando di Kafka in questo caso
perché è quello che conosco meglio
ma ce ne sono altri quindi abbiamo stateful
strani flussi al centro e noi
avere una varietà di diversi punti di vista che
stiamo andando a incorporare nel nostro vari
servizi e in realtà quello che stiamo andando
facciamo è che siamo gonna utilizzare questo strumento come un set
modo di produrre viste basate su a
insieme canonico essenziale centrale di
flussi così Kafka è lo strumento che aiuta
per questo sicuramente dal punto di vista
vista di queste categorie di discussione nostre
piattaforma di streaming se non lo sei
familiarità con esso al centro di esso è
un registro distribuito e poi intorno a quello
ci sono modi per ottenere dati dentro e fuori
questi connettori che ti permetteranno di
per estrarre dati da un’intera varietà di
diverse fonti di dati o inserirli in
una varietà di altre fonti di dati o
data sink e un motore di streaming che
puoi spiccare il vertice o incorporare a destra
all’interno del tuo servizio quindi il registro a
il log distribuito è effettivamente un
sistema di messaggistica è un po ‘
diverso da un messaggio tradizionale
sistema perché è progettato per ridimensionare
linearmente entrambi per davvero da tutti
tre strati quindi indipendentemente dal fatto
si sta producendo stai parlando
il log stesso è distribuito
log stesso o servizi occlusivi che
ne stiamo consumando possiamo prendere un
singolo
digita e diffondila tra tutti
le macchine di cui abbiamo bisogno sono linearmente
scalabile pur mantenendo forte
ordinare le garanzie all’interno di un singolo
la partizione fornisce anche transazionale
garanzie nella prossima versione così è
uscendo questo questo estate in a
mese e questo è abbastanza interessante
perché uno dei grandi problemi con
con la costruzione distribuita asincrona
sistemi è davvero non hai molto
di garanzie transazionali e in realtà
devi implementare l’idempotenza in
praticamente qualsiasi voce in nessuno
servizio asincrono quindi avere un
meccanismo scalabile per la gestione
le transazioni sono piuttosto utili, quindi noi
finire con questo è questo tipo di servizio
backbone ci dà alcuni diversi
cose che abbiamo la capacità di naturalmente
basso equilibrio abbiamo entrambi tolleranza di errore
integrato nel broker stesso così come
integrato nei tuoi servizi perché i dati lo sono
efficacemente indirizzati a diversi
istanze se lei è un’istanza di a
fallire il servizio abbiamo questa idea di
transazioni che ci consente di
implementare sia l’idempotenza che
invio transazionale di diversi o
mancano così diversi messaggi a
diversi argomenti e poi portarli
di nuovo insieme in un modo transazionale ma
questi sono queste le due cose che sono
probabilmente più formativo per quello che voglio
di cui parlare oggi è l’idea di
il log stesso è un dato molto semplice
struttura giusta, è fondamentalmente
proprio come un file di sola aggiunta e il
bella cosa su append-only
i file sono sono oh di uno per leggere e
oh di uno per scrivere e questo è molto
diverso da un messaggio tradizionale
sistema così un sistema di messaggistica tradizionale
è fondamentalmente costruito su un b-tree e lo è
un b-albero che significa che tipo di
devi tenere quell’albero in memoria se
Avrai efficienza
prestazioni o se si dispone di un registro è possibile
puoi attraversarlo ha un molto semplice
interfaccia molto semplice c’è come cercare
o scansione ma è possibile implementare
che in un modo molto efficiente dal bene
se sei in memoria o sulla scrivania
e poi hai questa altra caratteristica
che consente di compattare il registro
basato su una chiave e questo è un po ‘
interessante quindi un log è letteralmente giusto
un flusso immutabile di messaggi ma tu
può compattarlo basato su una chiave primaria
e quando compili uno sguardo quello che ottieni
è qualcosa che sembra un tavolo così
questo è un posto interessante per noi
mantenere i dati sui dati esterni che vivono
tra i nostri servizi, da qualche parte, possiamo
lasciarlo e rimandare ad esso più tardi
quindi dovremmo avere i nostri ordini
pagamenti e azioni dei clienti che potremmo
mantenere quelli all’interno del blocco distribuito
e quello che faremo in realtà è che dovremo sdraiarci
nostri punti di vista all’interno dei nostri servizi sia
direttamente all’interno del processo di servizio
stesso o è questo tipo di separato
servizio a cui ci riferiamo all’interno di alcuni
contesto limitato questo tipo di inizia a
cambia il modo in cui pensiamo ai dati
e il problema della gestione dei dati condivisi
nelle architetture di servizio che noi
costruisci in modo che l’ elaborazione del flusso sia una sorta di
strato in cima a questo e questo davvero
ci aiuta a fare un certo numero di cose perché
ci permette di introspettare i flussi
in un certo senso è molto
efficiente e leggero siamo davvero
non prendendo una copia di lunga durata del
dati quindi un piccolo primer in streaming
l’elaborazione presuppone l’elaborazione è davvero
solo questo questo problema di lavorare fuori
come riunire vari diversi
flussi continui di dati quindi è a
macchina per la combinazione e l’elaborazione
flussi di eventi
si tratta di un flusso di elaborazione stateful è
in realtà un ramo secondario del flusso
elaborazione e il motivo per cui è chiamato
stateful è perché ha un sacco di
strumenti che ti consentono di mantenere gli stati
e quello che finisce per essere
il significato è che puoi trattare i flussi come
una cosa infinita in cui ti abbatti
Windows o in alternativa puoi trattare a
flusso come un tavolo così
pensa quale è deduplicato da un primario
chiave così abbiamo sempre avuto questo flusso di
dati che ci vengono incontro ma c’è un
flusso o un tavolo non lo fa davvero
importa e cosa stiamo effettivamente facendo
all’interno del motore di elaborazione stream è
appena accumulando per alcuni dati e il
differenza tra un flusso a finestra e
a e un flusso con chiave un tavolo è giusto
come accumuliamo quei dati così in a
senso di finestra che potremmo farti sapere a
il valore settimanale dei dati accumulati
dentro il nostro servizio o dentro il nostro
motore di streaming o in alternativa noi
potrebbe accumulare quei dati con chiave e
in realtà hanno l’ intero set di dati così per
esempio se volessimo avere una ricerca
tabella delle informazioni sui clienti abbiamo solo
accumulare il flusso del cliente da
ID cliente e quindi possiamo fare riferimento ad esso
all’interno del nostro servizio all’interno del nostro motore
oltre a questo ovviamente hai il
primitive di base di un database che puoi
prendi visione puoi unirti diverso
scorre insieme flussi e tavoli voi
può applicare i filtri dei predicati che puoi
Aggregazione può tradurre qualcosa da
il tuo modello di dominio interno è davvero
fondamentalmente solo un database incorporato
all’interno del tuo servizio che ti permette di
affetta e taglia questi diversi
flussi perché questo è fondamentalmente un modo
che possiamo ottenere l’ accesso e l’elaborazione
dati da molti servizi diversi
senza dover mettere una responsabilità
su di loro per fornire scalabilità
proprietà ecc ma anche la maggior parte
importante che consente a ciascun servizio di
mantenere il controllo delle query che esso
funziona correttamente in modo che i dati siano condivisi ma il
si interroga di essere totalmente di proprietà
da ogni servizio così ogni servizio ha
autonomia in modo da elaborare lo stream in modo statico
ha questa idea di flussi e tabelle
il modo in cui qui abbiamo un esempio di
una query questa è di nuovo una vendita al dettaglio online
esempio dove stiamo calcolando quanto tempo
odia un pagamento che si verifica – per completare
all’interno di un mucchio di diverse regioni così
forse un pagamento richiede che non ne conosca alcuni
secondi da elaborare in India e cinque
secondi da elaborare in Sud Africa o
da qualche parte quindi è quel tipo di query e
che in questo caso lo farò sopra a
finestra di un giorno e in realtà siamo
unendo due flussi che saranno
windowed e ci riferiamo a un singolo
tabella tutto all’interno dell’elaborazione del flusso
motore così abbiamo due flussi in arrivo
nei tavoli prima e poi
allo stesso modo in uscita abbiamo una scelta
possiamo avere un flusso sulla strada
fuori quale è il risultato di quella query
viene costantemente aggiornato o
in alternativa possiamo materializzarlo come
una tabella che possiamo interrogare in modo che possiamo mettere come
un’interfaccia riposo su di esso e solo interrogazione
da un browser, quindi abbiamo questa idea
quindi immagino di sì al punto importante
su questo è che siamo traboccanti
DB dati su rocce che è interno
implementazione all’interno dello streaming
motore che è davvero solo un
ottimizzazione in modo che non dobbiamo
mantenere tutti questi dati in memoria e noi
non può diffonderlo in molti casi
di un servizio per fare un piccolo esempio
immagina di voler attivare una email
ogni volta che si raggiunge una preghiera
confermato quindi inviamo all’utente un’email
quello dice che i vostri pagamenti confermano per questo
ordine particolare che tu hai appena creato
potrebbe voler fare un join tra i pagamenti
quale saremmo probabilmente trattiamo a
ordini in streaming che vorremmo anche trattare
come un flusso perché quelle due cose sono
probabile che venga allo stesso tempo o
all’interno di una finestra definita e poi noi
potrebbe semplicemente usare una ricerca
contro il tavolo azionario e il magazzino
il tavolo è così tutta questa cosa sarebbe
fatto all’interno di questo unico servizio e lo siamo
unendo ho detto due flussi e un tavolo
e quindi inviare una e-mail così potremmo
non voglio farlo con uno streaming
i motori di streaming del motore hanno un’API
che devi imparare o potremmo avere
un database potremmo avere un requisito
per fare
query ad-hoc qualcosa che eravamo
dove vogliamo qualcosa come il film
elasticsearch o forse vogliamo un
modello relazionale qualunque esso sia
quindi possiamo sempre tornare indietro o evolvere
utilizzare un database standalone che usa
un connettore e fai il join lì è
solo un processo di peso leggermente più pesante
perché dovremo quindi curare
che i dati nel tempo ma l’interessante
la cosa su questo è che se prendiamo pari
solo questo approccio del database se noi
ha fatto questo in un modo tradizionale di messaggistica
abbiamo praticamente dobbiamo mantenere tutte le
dati dobbiamo conservare tutti i dati
nel tempo in modo che possiamo lavorare anche
possiamo rispondere alle domande che abbiamo
potrebbe essere necessario rispondere in questo ordine
caso per risolvere questo problema e in realtà
qualsiasi problema futuro mentre il bello
cosa è avere gli stream condivisi
che il connettore può fondamentalmente solo
Riteniamo che abbiamo bisogno in questo momento noi
prendiamo solo i bit il
query molto specifica molto molto specifica
visione materializzata che dobbiamo risolvere
il nostro problema oggi perché possiamo sempre
rigenerarlo, possiamo sempre tornare indietro e
rigenerarlo di nuovo
e in realtà un sacco di molti
i meccanismi per ottenere questo schema
giusto e non ho intenzione di entrare in questo
oggi perché è un discorso molto più grande
ma molti dei meccanismi per ottenere
questo modo particolare riguarda l’avere un
processo iterativo per ricostruire questi
set di dati che è davvero di avere il
macchina il macchinario è più simile a
tipo di continuo da mettere a posto–
approccio di distribuzione continua così noi
avere questa idea di archiviazione condivisa all’interno
un aspetto e abbiamo questo motore di query
che possiamo incorporare nei nostri servizi
quindi l’archiviazione dei dati più il motore di query è il
tipo di database scrivere i dati all’interno di Kafka
motore di query che si trova in cima è una specie di
un database ma dovevamo avere molti
servizi giusti, quindi abbiamo un centro
insieme di flussi canonici e poi noi
avere un sacco di diversi servizi
usano tutti la stessa identica cosa
serie di flussi ritentivi ma sono tutti
implementando le proprie opinioni personali
interpretazione di tale insieme di dati condivisi
questo è come un database condiviso è
fondamentalmente un database dentro e fuori come
chiunque abbia visto Mouse nei placcai parlare
trasformando un database al nostro interno
alcuni sì è un discorso davvero buono e
Ti incoraggerei a vedere anche questo
è un tipo di idea abbastanza potente quindi
abbiamo iniziato con questa idea giusto
i micro-servizi non dovrebbero condividere a
database um questo è un po ‘ condiviso
database ma non è un normale database
possiamo davvero provare non da me con il
modo e le persone hanno fatto un bel po ‘di
ricerca per dimostrare che l’ evento trasmesso
è la forma più bassa di accoppiamento e il
motivo per questo intuitivamente la ragione
la trasmissione di eventi è la forma più bassa di
l’accoppiamento è perché ogni servizio è solo
riceve davvero un flusso di eventi e
possono fondamentalmente fare tutto ciò che vogliono
ma se centralizziamo qualcosa che è
immutabile non influenziamo in realtà
accoppiamento quindi questo non è un tipo di
database condiviso che certamente non possiamo fare
un accoppiamento mette un argomento di accoppiamento per
perché questo sarebbe un approccio problematico
quindi per condividere un database dovremmo pensare
riguardo a capovolgere ciò che finiamo
con è fondamentalmente una macchina che
ci consente di creare questo tipo di
viste materializzate quindi abbiamo gli ordini
i pagamenti i clienti nel magazzino
questi sono i set di dati canonici e noi
abbiamo una varietà di servizi che semplicemente
avere un processo per la produzione del
opinioni che hanno bisogno di fare il loro lavoro in
un modo molto leggero in un molto
modo leggero puoi sempre andare
torna ai flussi condivisi se ne hanno bisogno
quindi diamo un’occhiata a questi diversi così
Ho fondamentalmente quattro diversi
approcci per condividere i dati che abbiamo
evento di interfacce di servizio di database condiviso
trasmetti la piattaforma di dati del flusso e poi
quassù abbiamo facilità di cambiamento che non posso
quanto è facile per noi evolvere
il nostro il nostro sistema esiste un po ‘
accessibilità quanto è facile da ottenere
qualcosa funzionante rapidamente
e poi il problema dell’erosione dei dati
divergenza nel tempo perché sono
efficacemente mutabile quindi condividere database
è piuttosto brutto dalla facilità di cambiamento
è come lo stato mutabile condiviso condiviso
non va bene da un giorno a
punto di vista dell’accessibilità perché
chiunque può semplicemente immergersi da grande
dati del punto di vista dell’erosione perché
c’è solo un servizio di copia canonica
interfacce per un po ‘meglio da
la prospettiva della facilità di cambiamento ma
non molto giusto perché dobbiamo ancora
se abbiamo un nuovo requisito, noi
devono ancora ottenere i nostri centri di assistenza
affinchè le interfacce cambino per
dacci la risposta alla nuova domanda
che abbiamo da un’accessibilità ai dati
punto di vista sì va bene e da un dato
prospettiva dell’erosione è ottenere uno
copia canonica e ringraziamento all’evento
trasmette alla grande dal punto di vista
di facilità di cambiamento perché di tutti
praticamente hanno tutto ciò che possono fare
qualunque cosa vogliano
non così grande dal punto di vista di
accessibilità perché se non lo fossi
ascoltando il messaggio quando era
inviato quindi non ce l’hai più e
dal punto di vista dell’era dell’erosione dei dati
povero perché devi mantenerli
copie di te amano i set di dati condivisi
tempo ma se usiamo questo tipo di registro
approccio alla piattaforma di dati del flusso di backup
è facile apportare modifiche è facile
accedere ai dati ed è noi
non ho questo problema di erosione dei dati in
allo stesso modo perché siamo effettivamente
costruire questi punti di vista molto concentrati che
sono supportati da questo set di dati condiviso così
per me una buona architettura ha davvero
molto poco a che fare con il disegno
qualcosa su una lavagna o in arrivo
con il design e la buona architettura è
davvero per fornire un set di
stack tecnologico che puoi evolvere
col passare del tempo questo è effettivamente il duro
Hobbit sta andando da dove comincio
qualcosa di piccolo e in continua evoluzione
qualcosa che è complicato è difficile
per me gli approcci guidati dalla richiesta non lo sono
abbastanza e penso che sia abbastanza bene
inteso oggi ciao è duro
gestire
fisicamente asincrono scorre le cose
ciò accade in modo sincrono nel
mondo reale ed è difficile muoversi e
unire i set di dati, quindi vogliamo abbracciarlo
i dati che fluiscono tra i servizi questo
dati che si trovano sul design sul
fuori e in effetti lo fanno qualcosa
siamo progettati per poter dare
la nostra indipendenza di servizi va bene così
ogni servizio ha la libertà di cambiare
e gestire i propri dati basati su ma
basato su un canonico insieme di tre edifici
su una singola piattaforma di dati di flusso che
tutti possono accedere e condividere così è
un meccanismo per evolvere e
architettura efficiente nel tempo e
ci sono una specie di un insieme di principi
quel tipo di ritorno a questa idea il suo wimpy
dove iniziamo semplice leggero e
fault tolerant immutabile perché vogliamo
costruire su una narrativa condivisa e ritentiva
reattivo perché vogliamo sfruttare a
sincronicità Voglio concentrarmi sugli eventi
che stanno arrivando ora
evolutivo che è quello che è in realtà
piuttosto importante è questa idea che noi
prendi solo i dati di cui abbiamo bisogno oggi
che mantiene questo leggero e agile
e profondo e decentralizzato quindi riceviamo
un ricevitore guidato puoi davvero parlare
a riguardo oggi ma questo dice che lo è
questo signore
questo è ciò che dà un’impresa di un
architetto come loro proprietà di disaccoppiamento
stiamo evitando la coordinazione e lo siamo
evitando i servizi di Dio e questo è tutto me stesso
dovevo dire che c’è un numero di
riferimenti qui abbiamo lavorato su a
serie di articoli del blog su questo e
c’è la trasformazione del database all’interno
parlare fuori che è eccellente due carte
lì da Pat Holland che sono veramente
bene e un paio di cose da
Jai e Neha che lavorano in confluenti um
grazie mille per aver soggiornato per questo
parlare spero che questo sia stato utile
se hai qualche domanda allora forse
ne hai un po ‘attraverso l’app che puoi
chiedi loro ora sarò in giro per il
bevande e roba così mi piace parlare di
questo quindi per favore vieni e parlami dammi
i tuoi pensieri sostengono qualunque cosa tu voglia
Mi piace parlarne , quindi per favore fallo e
Ho detto che puoi farmi su Twitter grazie
per la guardia
[Applausi]

Please follow and like us: