
[Musica]
ciao a tutti e benvenuti al mio discorso quindi 5
motivi per cui utilizzare la programmazione reattiva
potresti effettivamente ottenere un falso
impressione che questo discorso sosterrà
in realtà una programmazione molto reattiva
inizia dal lato opposto quindi cosa
sono le sfide chiave del reattivo
programmazione e perché potrebbe non essere il tuo
unico strumento che dovresti applicare
per esempio quando disegni il tuo
microservizi e poi possiamo venire quando
sei una buona scelta venendo al
5 diversi casi d’uso che abbiamo scoperto a
Annunci eBay così ciò che è eBay
Annunci
Sono sicuro che molti di voi conoscono e
utilizzando il marketplace di eBay dove è possibile acquistare
e vendere tutto a livello globale da quasi
qualsiasi parte del mondo, quindi gli annunci
il business riguarda i mercati locali e
annunci locali dove è possibile
esempio vendi il tuo gatto o vendi la tua auto
e operiamo in più paesi
in tutto il mondo e noi abbiamo multipla
i marchi locali , ad esempio, abbiamo la chiave
Gigi in Canada abbiamo un grande leone in
Saigon in Germania così fanno praticamente
roba simile hanno preso annunci e
Sto lavorando personalmente come software
architetto in motori verticali che aiuta
tutte le nostre sovvenzioni orizzontali da costruire
la migliore esperienza di vendita di carabine e auto
quindi in realtà ho avuto la possibilità di lavorare molto
con i nostri marchi orizzontali e ciò che è
bello di questo fatto che hanno
il loro assetto tecnico che fanno
le proprie decisioni e alcuni di quelli
le aziende stanno effettivamente utilizzando reattivo
programmare alcuni di loro lo stanno facendo
parecchio e ognuna delle aziende
aveva i suoi casi d’uso e il suo
ragioni per cui hanno deciso di andare
modo interattivo così l’obiettivo di questo
parlare è esattamente presentare come e perché
quelle società di eBay Classifieds hanno deciso
andare con la programmazione reattiva alcuni
più parole su classificate così tante di
hai usato G McLennan sigan yeah
parecchio è un buon segno quindi
efficacemente puoi vedere qui come tanti
elenchi diversi come puoi vedere il
Immagine CAD anche se la vendita di un cap è
un’idea orribile ma potresti farlo
puoi vendere la tua auto puoi venderla
bicicletta e la gente può chiacchierare circa il
elencando possono ottenerne di più
possono quindi trovare il caricabatterie nel tuo
quartiere locale nella tua città
e poi finalmente comprare e vendere Samson
tornare alla programmazione reattiva
quindi che tipo di programmazione reattiva
Tratterò in questo discorso in modo che possiamo applicare
programmazione reattiva in molti luoghi o
ripopolamento copre principalmente dal back – end
lato quindi se ne hai usato uno di quelli
tecnologie potresti riconoscere cosa
la programmazione reattiva è così è
propagazione dichiarativa dei cambiamenti chi
stavano lavorando con messaggi che erano
lavorando con dichiarazioni e frequentemente
programmazione funzionale così per esempio
le librerie sul lato sinistro come
Eric’s Java e il reattore proiettano loro
applica un sacco di pattern del server e questo
è come la maniglia reattività così in
contrasto si applicano un sacco di attore
concetto e propagano i messaggi
tra attori e ha un bel culmine
correlazione con i sistemi reattivi così
manifesto reattivo definisce nel
concetto di sistema reattivo in modo tale
il concetto dice che vuoi costruire resiliente
applicazioni reattive ed elastiche così
tutti probabilmente vorranno costruirlo
applicazione e il punto forte di questo
il manifesto sarebbe stato guidato dai messaggi
mentre il messaggio è guidato perché secondo
al manifesto questo ti permette di essere
più scalabile questo ti permette di gestire
resilienza e reattività su vasta scala
e questo è in realtà il punto in cui
il sistema di resilienza interagisce molto con chi lo è
programmazione reattiva e la chiave
il punto di intersezione è esattamente questo
concetto dichiarativo di propagazione
messaggeri il piccolo esempio quindi immagina
il listato viene innaffiato da qualche parte
i chicchi di ebay ottengo il semplice non
codice reattivo come si carica a
elencando così prima vogliamo andare al nostro
wrapper vogliamo trovare la lista
entità per ID quindi, ad esempio, vogliamo
per ottenere diversi ridurre e aggiungere a questo
elencando per mostrarli tutti insieme così noi
andare dentro
rivedere il servizio e ottenere le recensioni quindi
li impostiamo e restituiamo l’elenco
quindi questo è come lo fai in un normale
modo programmatico senza applicare nessuno di
i concetti reattivi qui
perché è difficile parlare di codice
senza mostrare codice scelgo il progetto
reattore per i pochi esempi di codice che farò
mostra durante il mio discorso ma in realtà questo
non sarà molto sul progetto del reattore
o non molto del paese
astrazione quindi proverò a concettualizzare
è più di alto livello per stare lontano
dai loro dettagli sul reattore del progetto ma
ancora per i pochi esempi che userò
hai bisogno di capire alcune nozioni di base così
le basi del reattore di progetto sono in giro
mana e fai flux quegli involucri funzionali
che rappresentano asincrono
calcoli e che possono applicare il
pressione e molte altre caratteristiche di
programmazione reattiva sotto il cofano così
mana sarebbe un’alternativa come
alternativa più vicina di completabile
futuro da JDK ma ha molto di più
potere così intenzionalmente rappresenta il
risultato della tua funzione di
trasformazione come zero uno o eccezione
nel flusso di contrasto rappresenta un flusso
di risultati e l’alternativa più vicina
sarebbero semplicemente semplici flussi di Java H ma
con il concetto di contropressione che io
introdurrò più tardi ora diamo un
guarda come possiamo rendere il precedente semplice
esempio reattivo e questo è come
sembrerebbe in modo direttivo così
otteniamo ancora il mono distinto in
parte inferiore della diapositiva ma non otteniamo
ci elencando ma otteniamo questo
isin Cronos mona wrapper e poi noi
applica la trasformazione solo nella query
di modo che significa che descriviamo come a
funzione lambda come sarà la trasformazione
essere gestito in modo che diciamo ogni volta che si lista
sarà disponibile andremo con questo
elencando l’ID di Sauer al servizio di revisione
quindi ogni volta che saranno disponibili recensioni
applichiamo la prossima trasformazione e noi
dì per favore imposta le recensioni alla lista
e finalmente possiamo ottenere e accettare la lista
e pronto per essere visualizzato non molto di
i benefici sono visibili qui ma ancora
ci sono alcuni quindi prima di tutto quello che era
l’intenzione di creare una tale parodia come
programmazione reattiva era la prima
per semplificare concomitante e asincrono
scenari così ad esempio il mana è molto
più concatenabile e potente del giusto
Un futuro semplice e completo puoi fare molto
più con meno di quello che puoi fare con
fusione computabile
la seconda ragione perché funzionale e
la programmazione reattiva è stata semplificata
con la programmazione reattiva puoi fare e
eliminare chiamate di blocco inutili così tu
puoi chiamare i tuoi servizi è il tuo database
un sincrono e asincrono sali
può essere gestito nella chiarezza di
modo reattivo ma mentre portarne un po ‘
benefici ne porta anche alcuni visibili
sfide che puoi individuare già così
il primo è la manutenibilità di Dio e
leggibilità del codice Mi ricordo come quando
Java 8 è stato rilasciato molti di noi erano così
eccitato dalla programmazione funzionale quindi noi
stavamo facendo in precedenza per loops ora noi
può fare la mappa, lo facciamo in una sola riga
è bello salvare tante linee di codice
risparmia tempo che diventiamo più leggibili
codice e questo potrebbe ottenere qualche falso
impressione che con dichiarativa e
programmazione funzionale il tuo codice sarà
in realtà sempre più leggibile e di più
facile da usare ma trovo che non lo è
sempre il caso e da questo esempio
è altamente illustrativo quindi prima di tutto
vedi che otteniamo alcuni livelli annidati
che sono spesso difficili da eliminare
perché ogni volta che si desidera accedere al
risultato del tuo calcolo asincrono
puoi farlo solo attraverso il funzionale
trasformazione in modo che tu possa farne uno
ora livello annidato in modo che tu non possa solo dire
dammi la lista che puoi solo dire
dammi il mana dell’inserzione e il
più networking e una chiamata sincrona
fai il più profondo possibile, ovviamente
puoi applicare la programmazione funzionale a
rendilo migliore in modo da poter applicare il mana
trasformatori per esempio da combinare
o scrivi chi è un’eccezione con mana
afflusso ma ancora avrai questo
Rimanendo ciò che un codice funzionale
programma magnetico in sopraffatto che è a
wrapper di uno dei log e diverso
involucri dichiarativi di lambda
funzioni e livelli nidificati che sono
abbastanza difficile sbarazzarsi di alcuni dei
anche le lingue jvm semplificano
la nostra vita qui come il cotone o la Scala
ma ancora se si confronta l’esempio su
in alto un esempio in basso per me
personalmente quello in cima
è più leggibile perché ogni singolo
il mondo in queste righe di codice ne ha alcuni
dominio significa che stiamo lavorando con
elenco in modo da ottenere l’ elenco di elencare il
lista di recensioni in cui siamo impostati
elenchi mentre nell’esempio reattivo
avrai sempre qualche astrazione
come il mana e il denaro non è una parte del
la tua logica aziendale la seconda sfida
sarebbe il debug perché frequentemente noi
eseguirlo su un thread diverso e io
pensa erroneamente così e penso
era la programmazione errata e concorrente
sempre più difficile di quella sequenziale
single threaded quindi per esempio qui noi
avere una traccia dello stack dal progetto
tracker ogni volta che abbiamo una rete in
Chiamata HTTP quindi, per impostazione predefinita, apparirà
come questo in modo che lo tagli leggermente nel
medio ma sembra letteralmente questo
nella tua aggregazione di log inizia anche
con il thread Java eseguito perché non lo faremo
eseguilo in una nuova discussione e finisce
con la chiamata nel quadro del reattore
e ruotare il framework web quindi non c’è
linea singola in questa traccia di stack che
indicherà la propria linea di codice di
Naturalmente le biblioteche reattive lo sanno
svantaggio e hanno già applicato
un po ‘di attenuazione, quindi se applicherete
alcuni strumenti speciali per lo stack
tracce quindi migliorerai molto
traccia lo stack con il punto nel codice
ma ancora per esempio se lo sei
debug della tua applicazione reattiva
localmente puoi mettere un breakpoint in uno
delle parti della scheda quindi ti fermi qui
ma la parte rimanente della tua a
volontà sincrona e parallela
continua quindi ancora potrebbe essere necessario
propagare l’ID di correlazione tramite il tuo
chiama per avere tutti i log relativi a
una chiamata in un posto quindi per impostazione predefinita
la programmazione reattiva sarebbe più difficile
debug rispetto alla loro normale problematica
avvicinarsi al secondo frequente
malinteso sarebbe che il blocco è
in realtà, in una certa misura , è negativo, quindi cos’è
effettivamente codice di blocco sprechi così uno
dei grandi vantaggi del reattivo
approccio è che ti permette di applicare
un blocco non superiore più facile quindi cos’è
il blocco è basso in effetti non lo è
perché è scritto sotto le ginocchia in
le astrazioni ben definite e
biblioteche che sono state sintonizzate da molto tempo
il passato quindi non rende il tuo
esecuzioni per impostazione predefinita , bevande
diversi svantaggi e diversi
in testa il primo che ogni minaccia farà
consumare un po ‘di memoria di default da
di default questo sarà almeno il tuo stack
dimensione che potrebbe essere 256 kilobyte o
più la quantità del tuo thread locale
le variabili che utilizzi così sarà un po ‘
sovraccarico di memoria, ma potrebbe essere fino a uno
il megabyte dipende da come si progetta il tuo
applicazione il secondo sarebbe
contatti che in testa così che cos’è
interruttore di contesto in testa quindi immagina te
avere come 4 CPU e si inizia a correre
100 thread così ovviamente 4 core non possono
eseguire 100 thread al momento e loro
iniziare a fare il cambio di contesto da tempo a
tempo di lasciare tutti quei fili
occasionalmente esegue così viene chiamato
interruttore di contesto sovraccarico
quindi ad esempio non capisco quale
è stato inizialmente progettato per il dirigente
su thread per modello di richiesta e
elaborare una richiesta in un thread e
fare potrebbe essere bloccare i / o hanno il
limitazione di default 200 thread così ma
questo non significa certo, naturalmente
può aumentarlo ma ti dà un
indica cosa Tomcat è un server
container crede che sia un buon default max
numero di thread e anche ragazzi di Java
loro certamente conoscono questo contesto di dita
quale sovraccarico e hanno fatto un po ‘
benchmark e ricerca indietro nel passato
quindi hanno misurato come supponendo di avere
diverso numero di strats consecutivi
in una sola CPU e abbiamo sempre 1
milioni di unità di lavoro e cerchiamo di
eseguirli così quanto tempo sarà
prendi per ogni combinazione ogni volta che
eseguire l’intero milione in un thread
poi 100.000 in 10 thread e così e così
su e, naturalmente, questi risultati saranno
molto diverso in base al tipo
del calcolo che usi perché la CPU lo farà
eseguire e ottimizzare è diverso esso
dipenderà anche da quanto è potente il tuo
la macchina è così potrebbe non essere la tua
ultimo MacBook Pro in cui questo test è stato
eseguito prima così forse il più
la macchina potente è il numero migliore
si ottiene, ma i loro risultati dimostrano che
inizia a prendere forza in modo significativo e
significando significativamente da
Da 13 a 14 secondi qualche avviso
il modo alla scala di mille così
puoi ancora usare dalla mia esperienza
da 200 thread a forse mille
a seconda della macchina e di come
usali e potresti ancora andare bene
con il ferro da lavoro di Facebook questo porta
io a una piccola conclusione così reattivo
la programmazione ha davvero il suo valore così
semplifica una programmazione sincrona
ti semplifica come puoi ottenere
non bloccare le chiamate di rete ma è
ha anche il suo prezzo e il prezzo sarebbe
codice a volte meno leggibile a volte
più difficile il debug di I e non si tratta di
curva di apprendimento anche quando sei tu
sono molto abili con reattivo
programmare ancora quei due
svantaggi sono confronto dannoso
al tradizionale sequenziale
approccio programmatico e infine indietro
al mio argomento quindi quali sono i buoni usi
caso è di usare la programmazione reattiva se
la programmazione relativa ovviamente non è così
impressionante e non come si erano circa e
perché in particolare se non sei un cattivo
calmo quindi potresti aver sentito che eBay
quest’anno e tutto ciò che costruiscono o
piano per costruire il loro hardware personalizzato
progettato specificamente per le esigenze di eBay
questo significa che sono curiosi di soldi
hanno speso per l’ hardware perché trattano
con sfide su scala mondiale ma non
ogni azienda ha sfide su scala mondiale
e non tutte le aziende devono affrontare
così tante richieste come invasori così per
per esempio i nostri annunci commerciali li hanno
sono locali per il paese, quindi sono
ancora a volte uno dei popolari
siti web nel paese e hanno
facciamo un bel po ‘di traffico
sarebbe meno di ebay.com
e mentre parla con molte persone come
Scopro che non abbiamo un forte
desidero utilizzare la programmazione reattiva solo per
risparmia hardware e denaro quindi ci sono
altri motivi e iniziamo
il primo sarebbe ad alta latenza
networking IR così ogni volta che fai un
chiama ad un altro servizio ogni volta che tu
effettuare una chiamata alla rete del tuo database
è coinvolto e la latenza più alta è
il meno scalabile
sono e più motivi ci sono
applicare la programmazione reattiva semplice pasticcio
quindi supponiamo di andare con Tomcat
con lo stress 200 predefinito e possiamo
gestire l’ unica richiesta assumiamo in a
cento millisecondi che è già
incredibilmente alto per molti casi d’uso ma
questo significa che possiamo gestire mm
richieste al secondo quanti di voi fanno
sul tuo lavoro quotidiano con più di 200
richieste al secondo sul tuo servizio così
meno di 10 mani quindi significa
la maggior parte di voi non sarà possibile ottenere più o meno tutti
il loro risparmio di capacità o hardware
risparmi applicando la programmazione reattiva
e puoi ridimensionare la tua applicazione
può effettivamente avere un cluster di cinque
nodi che gestiscono ciascuna 2.000 rupie per
secondo che vi consente di raggiungere 10k
senza programmazione reattiva ma se tu
vai con l’aumento della latenza più
maggiore latenza hai l’ultima richiesta
è possibile processo che è evidente in modo
ipotizziamo una maggiore latenza dopo a
secondo quanto la tua richiesta richiede o
quanto l’ IO di rete prende e tu
improvvisamente può elaborare 10 volte di meno
richiedere quale sarebbe un caso d’uso
una latenza così alta come la più umida
uno sarà come la tua regione da
database con indice mancante su di te
fare un po ‘di calcolo in lotti più
ragionevole e realistico sarebbe quando
parli con il sistema di terze parti e il terzo
sistema di partito potrebbe essere per esempio in
l’altra regione in modo da potrebbe essere per
qualche motivo per ospitare il tuo sistema
Europa e il partner con cui tu
collaborare come fornitore di servizi di pagamento o
saranno ospitati alcuni punteggi di credito
da qualche parte in Australia, Canada o Stati Uniti
puoi facilmente arrivare fino a un secondo
latenza e può essere una latenza imprevedibile
in generale quindi la soluzione come
superare questo sarebbe forse quello di strofinare questo
comunicazione esterna verso l’ esterno
servizio wrapper e farlo come un
sincrono il più possibile così in questo
esempio di come viene gestito da GDG auto
questa è una piattaforma verticale per noi in Canada
può avere per esempio argomenti kafka e
possiamo dire ok ogni volta che ricevo il
messaggio nel topic di Kafka lo farò
Chiamata esterna quindi pubblicherò anche
i risultati sono sincronicamente nel
argomento e questo piccolo gateway esterno
può essere effettivamente violentato
e non consumerà nessuno erba leggere
per richiesta ciò significa che possiamo scalare molto
molto meglio quindi possiamo ridimensionare senza il rosso
per richiesta abbiamo quasi zero
limitazione su questo servizio o gestiamo
tanto quanto il nostro esterno
il fornitore di servizi può più con auto
ridimensionare questo funziona abbastanza bene
negli esempi di codice molto brevi, quindi
In questo caso entriamo nel prezzo interno
servizio quindi immagina per un elenco che vogliamo
per ottenere una valutazione esterna come
ragionevole i prezzi qui abbiamo
il ricevitore del crafter reattivo , quindi diciamo
al prossimo messaggio entriamo in esterni
servizio di prezzi otteniamo valutazioni di prezzo quindi
ogni volta che abbiamo sottoscritto questo risultato noi
ottenere il voto e pubblicarlo nel
altro argomento di Kafka quindi questo è come questo
caso d’uso semplice sarà come con
astrazione semplificata del direttore di progetto
il secondo caso d’uso è in realtà opposto al
il primo riguardava la rete intensiva
carico di lavoro e il secondo riguarda la CPU
carico di lavoro intensivo che potrebbe essere una CPU
lavoro intenso, ad esempio, lanciato su eBay
e servizio di riconoscimento immagini o tu
potrebbe fare qualcosa con errori di crittografia
come criptovalute nel tuo
applicazioni o intensivo della CPU
computazione ma molto più probabilmente tu
avere una sorta di elaborazione del budget così
perché la programmazione reattiva può
completa il tuo caso d’uso intensivo della CPU
ecco gli esempi come per il giunto
gli esecutori si adattano quindi all’esecutore congiunto
è un’astrazione più leggera di a
pool di thread in Java in modo che tu possa dire
Voglio eseguire i miei compiti non come a
filo separato o eseguibile che voglio
eseguirli come una forma d’onda leggera durante
compiti e fondamentalmente per pool comune
le offerte del lavoro sono ancora un algoritmo
e un po ‘di magia diremo a meno che tu
facciamo una chiamata bloccante possiamo scalare meglio
rispetto al pool di thread tradizionale di
usando un’astrazione più leggera e
funziona ancora in algoritmi ma funziona
solo a meno che non facciamo una chiamata bloccante
ogni volta che facciamo una chiamata di blocco, blocchiamo
il nostro thread così con te straniero
lavora non molto più stressato del tuo
La CPU ha corso e tu elaborerai a
lotto di concorrenti
e questo screenshot è in realtà da a
khadeem torna nel passato ogni volta che loro
cambiato l’implementazione in akka da
questo esecutore della Red Bull al foraggiamento
esecutore e come ti vedi in questo modo
punti blu sul fondo di era il
scalabilità con questa Red Bull e verde
i punti sono la scalabilità della terra con quattro
naturalmente, non tutti i flussi di lavoro lo faranno
ottenere così una ottimizzazione così drammatica
molto dipende da quali istruzioni sono
eseguito e, naturalmente, forse con alcuni
Magia possiamo ridimensionare meglio il pool di thread
ma l’apprendimento chiave qui è di quel tipo
del viaggio può essere in realtà uno strumento per
Ottimizza il tuo flusso di lavoro legato alla CPU
esempio da eBay Classifieds quindi immagina
la semplice elaborazione del flusso o il
semplice esecuzione in batch quindi immagina te
avere due fonti di dati
Kafka Hadoop my sequel elasticsearch
tutto ciò in modo da immaginare è possibile scrivere e
leggi il più possibile perché per
istanza sei regione di Kafka che
è ben scalabile e si sta scrivendo a
Hadoop che è anche piuttosto alto
limiti di capacità di scrittura quindi più veloce
tu vai processare il flusso dipende solo
quanto velocemente il flusso si sta elaborando
prende così questo sarebbe un caso d’uso in cui
puoi ottimizzare la tua CPU limitata o
flusso e puoi dire ad esempio se io
non avere così tanti dati per esempio
in affari di annunci che potresti desiderare
trattare con annunci attivi e attivi
le inserzioni sono sempre limitate nel tempo da
numero di utenti attivi così come sono
potrebbe essere milioni di miliardi ma tu
sai sempre che è un set fisso e puoi farlo
dì ok, voglio coltivarne un po ‘
statistica nel corso della giornata o voglio solo
aggiorna i miei annunci non andrò semplicemente
attraverso loro una volta e tu puoi dire io
non voglio avere qualche applicazione enorme
costa relax parte che richiederà alcuni
clustering e orchestrazione delle applicazioni
Posso farlo con un singolo nodo macchina
e posso farlo con flussi reattivi
e se vai con un po ‘di streaming
soluzione di questo per un esecutore sotto
il cappuccio come per esempio i flussi akka
puoi forse farlo più velocemente di te
fallo normalmente con il normale
soluzione di streaming tradizionale senza
qualsiasi reattività sotto le notizie
quindi questo sarebbe un esempio nel progetto
direttore quindi andiamo per la nostra lista in
repository quindi possiamo anche applicarne alcuni
caratteristiche di reattività come gli operatori
come filtro andiamo processo solo visibile
elenchi quindi diciamo per favore in parallelo
traccia per noi l’attività di risposta e trascina per
ci rivediamo l’attività e questa volontà
praticamente tutto ciò di cui hai bisogno
prospettiva della logica aziendale da eseguire
questo tipo di flusso in logica ma
offerte di streaming nel mondo reattivo
molte più funzioni quindi quelle sono per
istanza di contropressione e molto altro
operatori reattivi quindi cos’è la schiena
concetto di pressione quindi era inizialmente
introdotto nei flussi reattivi e ora
è una parte di JDK 9 così efficacemente
circa 4 interfacce per tutti quelli sono
editore e abbonato e offre
push pull back pressure model significa
cosa può accadere senza contropressione
il tuo editore può produrne altrettanti
i messaggi che possono e noi per
esempio raggiungere alcuni limiti di memoria cosa
potrebbe essere la soluzione diversa
l’abbonato può comunicare la domanda
Va bene che voglio trattare oggi 5.000
i messaggi e poi l’editore spingeranno
i 5.000 messaggi o sottoscrittori possono
comunicare la domanda e possiamo applicare
alcune strategie più intelligenti come gestire
ogni volta che abbiamo travolto di messaggi
quindi possiamo lasciare prima noi possiamo lasciarci per ultimi
può sospendere la condivisione di pubblicazione o possiamo
forse ridimensionare l’abbonato in modo da aggiungere per
esempio questo tema di backpressure al nostro
esempio precedente possiamo usare il buffer
operatore e dire per favore dammi quotazione
nel buffer di 3.000 record così di
questo pro ottimizzare le prestazioni del vostro
elencando l’editore del repository così sarà
prendi una lista in batch di 3000 record
ed è così che comunichiamo il
domanda e qui arriviamo al prossimo uso
caso così nell’esempio precedente che hai
visto già che possiamo fare ciò che possiamo fare
fare è un po ‘di commutazione parallela così noi
può eseguire roba in modo sincrono e
questo è dove, dal mio punto di vista
la programmazione reattiva brilla davvero
è una richiesta sincrona e parallela
usa la conversazione caso così sei
interessato ad alcuni annunci per esempio
vuoi prendere questo puro
arriva a casa tua chi è fuori sul quasi
piattaforma di effetti così prima ogni volta che
creare la conversazione con un venditore noi
potrebbe desiderare di avere i dettagli online per
creare alcuni dettagli di conversazione come
testo loghi e così via quindi potremmo volere
fare alcuni controlli di frode per
esempio non è una frode è un legit
messaggio quindi vogliamo gestire push
notifica nel caso in cui il nostro cliente è
sul dispositivo mobile , quindi vogliamo condividere
dati con analisi centrale per alcuni
caratteristiche incentrate sui dati come
raccomandazioni e finalmente vogliamo
registra il nostro messaggio se tutto fosse
fatto con successo come puoi vedere qui noi
può avere più chiamate in parallelo
diverse chiamate in modo sincrono e
incatenato tutto insieme così come sembra
nell’implementazione reattiva diciamo
il nostro metodo crea prima la conversazione
useremo l’operatore zip dal progetto
regista ed ecco il bel marmo
diagramma che descrive tutto il
operatori librerie interattive quindi per
istanza zip sta prendendo due risultati e
unirli insieme per ottenere i risultati
insieme possiamo dire che quindi si prega di applicarlo
un mod di rotazione un secondo e poi noi
assegnare livello di Chronos non volare il nostro
analisi centrale via sincrona e
notifica push e possiamo effettivamente
quindi registra il messaggio o gestisci il favore
e in questo particolare esempio lo farei
Diciamo che ogni riga di questo codice ne ha
significato commerciale
operazione così zip indica chiaramente se
vuoi due risultati insieme, poi noi
vuoi una notifica sincrona e poi
abbiamo il nostro negozio di dischi così noi
chiaramente descritto come un sincrono e
esecuzione parallela come una singola pipeline
l’altro esempio è dal nostro paese
entità nel Regno Unito, quindi hanno il loro Android
squadra e hanno applicato il modello chiamato BFF
o back-end per front-end quindi cosa è stato
back-end per front-end
Immagino che molti di voi abbiano a che fare
micro servizi e per non parlare
a tutti voi micro servizi che potreste
avere qualcosa di fronte a loro così questo
potrebbe essere un modello di albero chiave API dove
hai solo un servizio di fronte
tu tutto il sistema e poi tutto
gli altri clienti possono parlarci o tu
in grado di progettare il gateway API specifico
che servirà come backend per
il tuo
cliente specifico come ad esempio te
desidera utilizzare le funzionalità della piattaforma Android
separato dal web in modo da poter progettare
endpoint specifico per Android così tu
progetta il backend che gestisce Android
e in Gumtree UK ci sono le maniglie del team
entrambe le parti così gestisce il team di Android
anche la migliore amica per i propri bisogni quindi loro
può apportare modifiche da soli
veloce e come potresti conoscere l’attivo
la parodia è molto popolare nei dispositivi mobili
sviluppo in modo da farlo con reattivo
sul lato mobile e l’utente Excel e
è possibile utilizzare una ricca Java anche sul
lato server in modo che costruiscano effettivamente loro
sono tornati e per front-end con Erics
Java quindi ci sono due vantaggi qui
hanno applicato una tecnologia simile su entrambi
lati in modo che l’ intera squadra sia familiare
con il tuo Java l’intera squadra è
familiarità con Java il secondo BFF o
Gateway API è in realtà un altro esempio
dove potresti volerne avere diversi
chiama in modo sincrono più chiamate in
parallelo e effettivamente reattivo
la programmazione è il concetto che
semplifica asincrono e simultaneo
programmazione
quindi qui ci sono due vantaggi ad uno così
parlando di attività lato cliente così
il mio discorso riguarda principalmente il back-end
ma ancora ho avuto la possibilità di parlare con il nostro
Ho trovato ingegneri mobili e sul lato client
che è abbastanza popolare per essere
reattivo sul lato mobile quindi per
Ad esempio, abbiamo un team SDK centrale in
Portland per costruire un SDK centrale
componenti per il nostro sviluppo mobile
e hanno applicato il reattivo
premio di programmazione e come fa risparmiare
la loro vita nello sviluppo mobile
in precedenza, ad esempio, stavano usando
anche l’architettura basata sugli autobus e loro
ho scoperto che con la programmazione reattiva
è più facile per loro descriverli
catena più chiamate asincrone
insieme una programmazione così reattiva
semplifica per fare fuori del multiplo
l’esecuzione asincrona di un flusso così in molti
in molti casi di utilizzo sul lato client si
potrebbe voler fare le cose
in modo asincrono e questo tipo di
l’architettura è più nativa per noi e
Esecuzione Cronos attorno a JavaScript
sviluppo abbiamo anche alcuni casi d’uso
ma non abbiamo visto così tanto per
esempio l’ ho imparato
renin secondo grafico è stato fatto con
programmazione reattiva ma non ho imparato
molti dettagli per presentare oggi così il
Apprendimento profondo per me da questo piccolo
ricerca su eBay Classifieds
le aziende sono effettivamente così reattive
complementi di programmazione circa
scenari asincroni perché è un
sincrono per natura quindi significa
il più grande guadagno è quando sei
sincrono usi la programmazione reattiva
ottieni alcune funzionalità in alto ogni volta
hai un processo di business sequenziale
questo tavolo scuro e potresti volerlo usare
in alcuni scenari e si consiglia di
attenersi al tradizionale programmatico
approccio in altri scenari così riassunti
nei casi d’uso in modo di cui abbiamo parlato
alta latenza superiore perché uno dei
maggiori guadagni dalla programmazione reattiva
è in realtà risparmiare risorse da
Westphall funziona in modo dispendioso chiamate così
maggiore latenza hai più minacce
disegnerai e loro saranno più difficili da fare
la scala sarà per la tua applicazione
il secondo caso d’uso riguardava l’ uso di
esecuzione del journal e per ottenere altro
Ottimizzazioni basate sulla CPU, quindi come fa
lavoro
programmazione reattiva ti permette di essere
non bloccando ti sbarazzi degli sprechi
causa bloccante è possibile applicare la potenza di
fork / join execution quindi abbiamo il
elaborazione del flusso e elaborazione del budget
questo è esattamente dove possiamo applicare
Streaming backback e anche
Ottimizza la CPU dall’estero
esecuzione e il più grande nel mio
il punto di vista rimane ancora parallelo e
programmazione asincrona, quindi questo è
dove puoi dire che è reattivo
la logica esprime esattamente ciò che accade in
la tua domanda e ovviamente perché
ci sono molti scenari sul lato client
quale reattivo sincrono
complementi di programmazione in loro solo così
abbiamo visto un sacco di casi d’uso di
programmazione reattiva sul lato client
e forse
la programmazione reattiva non è un argento
pulsanti di ballata sicuramente a – così il –
puoi applicare attraverso il tuo sistema così tu
devo dire che il gateway API è un componente
che gestirà un bel po ‘di carico e
otterrà alcune aggregazioni, quindi facciamolo
è reattivo quindi si può dire che il grafico sarà
anche avere qualche aggregazione quindi andiamo anche
renderlo reattivo e forse il servizio
quello
utilizzare la rete esterna perché ciò potrebbe
ha senso, ma per esempio l’elenco
dove abbiamo solo un’esecuzione sequenziale
e semplice logica aziendale e forse no
così tanto che potremmo tenerlo con il
blocco normale in esecuzione per esempio in
il nostro motore è verticale usiamo l’ anello e noi
avere nel nostro set di strumenti sia il flusso Sprintweb
che è reattivo e usiamo ancora il rosa
MVC che sta bloccando, quindi decidiamo per
micro servizio e questa è un’altra bellezza
di micro servizi in uno scenario tu
può andare in modo reattivo in un altro scenario
potresti andare nel tradizionale
approccio programmatico quindi non è necessario selezionare
un unico strumento per dominarli tutti e
ultimo ma non meno importante quando non lo farei
consiglia personalmente di usare reattivo
programmazione quindi è esattamente l’opposto di
i casi d’uso quindi ogni volta che ne hai molti
chiamate a bassa latenza durante la latenza
potrebbe essere la normale lettura dal database
che dovrebbe finire in in uno o pochi
millisecondi e stai usando per
istanza basata sul sequel relazionale
database e se non usi il tuo M
quadro per ottenere un’entità di aggregazione
insieme potresti avere diverse chiamate
e potresti volerli mettere in uno
catena e più processi
chiamate indipendenti con un sincronismo
risultati come mana e flusso e il
più difficile è compilare le cose insieme
l’altro caso d’uso sarebbe il blocco
I / o così di nuovo al database relazionale
quindi hai persino un driver JDBC relazionale
sebbene ci siano librerie per non
bloccando il database sequel accedi a te
potrebbe ancora volere che JDBC ne abbia una simile
GP di primavera o solo JP uno specifico
specifica e il tuo processo aziendale
è sequenziale come nella lista
esempio ottieni l’elenco che ottieni
revisione delle inserzioni si ottiene indietro cosa
sarebbe la ragione per renderlo reattivo
qui personalmente non lo trovo quindi questo è
esattamente quando non userei se ho un
programmazione reattiva di scelta ho il mio
libreria di blocco quindi non riesco a ottenerla in a
modo di lavorare ho il sequenziale
processo aziendale quindi non posso ottenere
utilità della contropressione degli operatori
e l’esecuzione parallela quindi a volte lo è
più economico da scalare con l’hardware, quindi EB
ho deciso di andare con un po ‘di hardware
ottimizzazione perché operano a
tu
scala le loro aziende che non hanno
un carico così enorme che potrebbero volere ancora
scala con un’altra istanza del tuo
contenitore o la tua applicazione sarà
più economico rispetto ad esempio per la tua squadra
per imparare la programmazione reattiva o anche se
la squadra ha familiarità con il reattivo
programmazione per complicare il codice con
noi presentiamo rappers melodici e molti di
potresti conoscere l’approccio alla minaccia verde
come co-routine di cotone o chiudere il nostro
biblioteca qualsiasi se si così il concetto di
i fili verdi sono in realtà ciò che puoi
sospendi quel filo senza farti
può sospendere la tua esecuzione senza
bloccando il tuo thread questo è un modo come
puoi gestire qualsiasi teoria in sblocco
causa senza bloccare questo thread in a
approccio programmatico in modo che tu ancora
stai usando un’implementazione non funzionante
ancora portato la tua esecuzione, ma tu
non bloccare la discussione e il codice
sembra programmatico quindi se non lo avessi
una possibilità che ti incoraggio molto a guardare
sulle co-routine di cotone
o quasi biblioteca o effettivamente c’è un
prossima iniziativa chiamata Project loon
che dovrebbe essere spedito con alcuni JDK
versione speriamo avremo il
approccio filo verde insieme a Java
e naturalmente questa presentazione non lo era
compilato da solo per aiutarmi
capire i casi d’uso che ho chiesto al mio
colleghi di aiuto quindi ecco qui i loro
nomi e per ulteriori approfondimenti su ciò che facciamo
a Berlino in particolare abbiamo il nostro
blog tecnico e abbiamo la nostra spinta
oggi per chiedere più domande del
ragazzi che lavorano in queste aziende così
grazie per un po ‘
tu
ciao a tutti e benvenuti al mio discorso quindi 5
motivi per cui utilizzare la programmazione reattiva
potresti effettivamente ottenere un falso
impressione che questo discorso sosterrà
in realtà una programmazione molto reattiva
inizia dal lato opposto quindi cosa
sono le sfide chiave del reattivo
programmazione e perché potrebbe non essere il tuo
unico strumento che dovresti applicare
per esempio quando disegni il tuo
microservizi e poi possiamo venire quando
sei una buona scelta venendo al
5 diversi casi d’uso che abbiamo scoperto a
Annunci eBay così ciò che è eBay
Annunci
Sono sicuro che molti di voi conoscono e
utilizzando il marketplace di eBay dove è possibile acquistare
e vendere tutto a livello globale da quasi
qualsiasi parte del mondo, quindi gli annunci
il business riguarda i mercati locali e
annunci locali dove è possibile
esempio vendi il tuo gatto o vendi la tua auto
e operiamo in più paesi
in tutto il mondo e noi abbiamo multipla
i marchi locali , ad esempio, abbiamo la chiave
Gigi in Canada abbiamo un grande leone in
Saigon in Germania così fanno praticamente
roba simile hanno preso annunci e
Sto lavorando personalmente come software
architetto in motori verticali che aiuta
tutte le nostre sovvenzioni orizzontali da costruire
la migliore esperienza di vendita di carabine e auto
quindi in realtà ho avuto la possibilità di lavorare molto
con i nostri marchi orizzontali e ciò che è
bello di questo fatto che hanno
il loro assetto tecnico che fanno
le proprie decisioni e alcuni di quelli
le aziende stanno effettivamente utilizzando reattivo
programmare alcuni di loro lo stanno facendo
parecchio e ognuna delle aziende
aveva i suoi casi d’uso e il suo
ragioni per cui hanno deciso di andare
modo interattivo così l’obiettivo di questo
parlare è esattamente presentare come e perché
quelle società di eBay Classifieds hanno deciso
andare con la programmazione reattiva alcuni
più parole su classificate così tante di
hai usato G McLennan sigan yeah
parecchio è un buon segno quindi
efficacemente puoi vedere qui come tanti
elenchi diversi come puoi vedere il
Immagine CAD anche se la vendita di un cap è
un’idea orribile ma potresti farlo
puoi vendere la tua auto puoi venderla
bicicletta e la gente può chiacchierare circa il
elencando possono ottenerne di più
possono quindi trovare il caricabatterie nel tuo
quartiere locale nella tua città
e poi finalmente comprare e vendere Samson
tornare alla programmazione reattiva
quindi che tipo di programmazione reattiva
Tratterò in questo discorso in modo che possiamo applicare
programmazione reattiva in molti luoghi o
ripopolamento copre principalmente dal back – end
lato quindi se ne hai usato uno di quelli
tecnologie potresti riconoscere cosa
la programmazione reattiva è così è
propagazione dichiarativa dei cambiamenti chi
stavano lavorando con messaggi che erano
lavorando con dichiarazioni e frequentemente
programmazione funzionale così per esempio
le librerie sul lato sinistro come
Eric’s Java e il reattore proiettano loro
applica un sacco di pattern del server e questo
è come la maniglia reattività così in
contrasto si applicano un sacco di attore
concetto e propagano i messaggi
tra attori e ha un bel culmine
correlazione con i sistemi reattivi così
manifesto reattivo definisce nel
concetto di sistema reattivo in modo tale
il concetto dice che vuoi costruire resiliente
applicazioni reattive ed elastiche così
tutti probabilmente vorranno costruirlo
applicazione e il punto forte di questo
il manifesto sarebbe stato guidato dai messaggi
mentre il messaggio è guidato perché secondo
al manifesto questo ti permette di essere
più scalabile questo ti permette di gestire
resilienza e reattività su vasta scala
e questo è in realtà il punto in cui
il sistema di resilienza interagisce molto con chi lo è
programmazione reattiva e la chiave
il punto di intersezione è esattamente questo
concetto dichiarativo di propagazione
messaggeri il piccolo esempio quindi immagina
il listato viene innaffiato da qualche parte
i chicchi di ebay ottengo il semplice non
codice reattivo come si carica a
elencando così prima vogliamo andare al nostro
wrapper vogliamo trovare la lista
entità per ID quindi, ad esempio, vogliamo
per ottenere diversi ridurre e aggiungere a questo
elencando per mostrarli tutti insieme così noi
andare dentro
rivedere il servizio e ottenere le recensioni quindi
li impostiamo e restituiamo l’elenco
quindi questo è come lo fai in un normale
modo programmatico senza applicare nessuno di
i concetti reattivi qui
perché è difficile parlare di codice
senza mostrare codice scelgo il progetto
reattore per i pochi esempi di codice che farò
mostra durante il mio discorso ma in realtà questo
non sarà molto sul progetto del reattore
o non molto del paese
astrazione quindi proverò a concettualizzare
è più di alto livello per stare lontano
dai loro dettagli sul reattore del progetto ma
ancora per i pochi esempi che userò
hai bisogno di capire alcune nozioni di base così
le basi del reattore di progetto sono in giro
mana e fai flux quegli involucri funzionali
che rappresentano asincrono
calcoli e che possono applicare il
pressione e molte altre caratteristiche di
programmazione reattiva sotto il cofano così
mana sarebbe un’alternativa come
alternativa più vicina di completabile
futuro da JDK ma ha molto di più
potere così intenzionalmente rappresenta il
risultato della tua funzione di
trasformazione come zero uno o eccezione
nel flusso di contrasto rappresenta un flusso
di risultati e l’alternativa più vicina
sarebbero semplicemente semplici flussi di Java H ma
con il concetto di contropressione che io
introdurrò più tardi ora diamo un
guarda come possiamo rendere il precedente semplice
esempio reattivo e questo è come
sembrerebbe in modo direttivo così
otteniamo ancora il mono distinto in
parte inferiore della diapositiva ma non otteniamo
ci elencando ma otteniamo questo
isin Cronos mona wrapper e poi noi
applica la trasformazione solo nella query
di modo che significa che descriviamo come a
funzione lambda come sarà la trasformazione
essere gestito in modo che diciamo ogni volta che si lista
sarà disponibile andremo con questo
elencando l’ID di Sauer al servizio di revisione
quindi ogni volta che saranno disponibili recensioni
applichiamo la prossima trasformazione e noi
dì per favore imposta le recensioni alla lista
e finalmente possiamo ottenere e accettare la lista
e pronto per essere visualizzato non molto di
i benefici sono visibili qui ma ancora
ci sono alcuni quindi prima di tutto quello che era
l’intenzione di creare una tale parodia come
programmazione reattiva era la prima
per semplificare concomitante e asincrono
scenari così ad esempio il mana è molto
più concatenabile e potente del giusto
Un futuro semplice e completo puoi fare molto
più con meno di quello che puoi fare con
fusione computabile
la seconda ragione perché funzionale e
la programmazione reattiva è stata semplificata
con la programmazione reattiva puoi fare e
eliminare chiamate di blocco inutili così tu
puoi chiamare i tuoi servizi è il tuo database
un sincrono e asincrono sali
può essere gestito nella chiarezza di
modo reattivo ma mentre portarne un po ‘
benefici ne porta anche alcuni visibili
sfide che puoi individuare già così
il primo è la manutenibilità di Dio e
leggibilità del codice Mi ricordo come quando
Java 8 è stato rilasciato molti di noi erano così
eccitato dalla programmazione funzionale quindi noi
stavamo facendo in precedenza per loops ora noi
può fare la mappa, lo facciamo in una sola riga
è bello salvare tante linee di codice
risparmia tempo che diventiamo più leggibili
codice e questo potrebbe ottenere qualche falso
impressione che con dichiarativa e
programmazione funzionale il tuo codice sarà
in realtà sempre più leggibile e di più
facile da usare ma trovo che non lo è
sempre il caso e da questo esempio
è altamente illustrativo quindi prima di tutto
vedi che otteniamo alcuni livelli annidati
che sono spesso difficili da eliminare
perché ogni volta che si desidera accedere al
risultato del tuo calcolo asincrono
puoi farlo solo attraverso il funzionale
trasformazione in modo che tu possa farne uno
ora livello annidato in modo che tu non possa solo dire
dammi la lista che puoi solo dire
dammi il mana dell’inserzione e il
più networking e una chiamata sincrona
fai il più profondo possibile, ovviamente
puoi applicare la programmazione funzionale a
rendilo migliore in modo da poter applicare il mana
trasformatori per esempio da combinare
o scrivi chi è un’eccezione con mana
afflusso ma ancora avrai questo
Rimanendo ciò che un codice funzionale
programma magnetico in sopraffatto che è a
wrapper di uno dei log e diverso
involucri dichiarativi di lambda
funzioni e livelli nidificati che sono
abbastanza difficile sbarazzarsi di alcuni dei
anche le lingue jvm semplificano
la nostra vita qui come il cotone o la Scala
ma ancora se si confronta l’esempio su
in alto un esempio in basso per me
personalmente quello in cima
è più leggibile perché ogni singolo
il mondo in queste righe di codice ne ha alcuni
dominio significa che stiamo lavorando con
elenco in modo da ottenere l’ elenco di elencare il
lista di recensioni in cui siamo impostati
elenchi mentre nell’esempio reattivo
avrai sempre qualche astrazione
come il mana e il denaro non è una parte del
la tua logica aziendale la seconda sfida
sarebbe il debug perché frequentemente noi
eseguirlo su un thread diverso e io
pensa erroneamente così e penso
era la programmazione errata e concorrente
sempre più difficile di quella sequenziale
single threaded quindi per esempio qui noi
avere una traccia dello stack dal progetto
tracker ogni volta che abbiamo una rete in
Chiamata HTTP quindi, per impostazione predefinita, apparirà
come questo in modo che lo tagli leggermente nel
medio ma sembra letteralmente questo
nella tua aggregazione di log inizia anche
con il thread Java eseguito perché non lo faremo
eseguilo in una nuova discussione e finisce
con la chiamata nel quadro del reattore
e ruotare il framework web quindi non c’è
linea singola in questa traccia di stack che
indicherà la propria linea di codice di
Naturalmente le biblioteche reattive lo sanno
svantaggio e hanno già applicato
un po ‘di attenuazione, quindi se applicherete
alcuni strumenti speciali per lo stack
tracce quindi migliorerai molto
traccia lo stack con il punto nel codice
ma ancora per esempio se lo sei
debug della tua applicazione reattiva
localmente puoi mettere un breakpoint in uno
delle parti della scheda quindi ti fermi qui
ma la parte rimanente della tua a
volontà sincrona e parallela
continua quindi ancora potrebbe essere necessario
propagare l’ID di correlazione tramite il tuo
chiama per avere tutti i log relativi a
una chiamata in un posto quindi per impostazione predefinita
la programmazione reattiva sarebbe più difficile
debug rispetto alla loro normale problematica
avvicinarsi al secondo frequente
malinteso sarebbe che il blocco è
in realtà, in una certa misura , è negativo, quindi cos’è
effettivamente codice di blocco sprechi così uno
dei grandi vantaggi del reattivo
approccio è che ti permette di applicare
un blocco non superiore più facile quindi cos’è
il blocco è basso in effetti non lo è
perché è scritto sotto le ginocchia in
le astrazioni ben definite e
biblioteche che sono state sintonizzate da molto tempo
il passato quindi non rende il tuo
esecuzioni per impostazione predefinita , bevande
diversi svantaggi e diversi
in testa il primo che ogni minaccia farà
consumare un po ‘di memoria di default da
di default questo sarà almeno il tuo stack
dimensione che potrebbe essere 256 kilobyte o
più la quantità del tuo thread locale
le variabili che utilizzi così sarà un po ‘
sovraccarico di memoria, ma potrebbe essere fino a uno
il megabyte dipende da come si progetta il tuo
applicazione il secondo sarebbe
contatti che in testa così che cos’è
interruttore di contesto in testa quindi immagina te
avere come 4 CPU e si inizia a correre
100 thread così ovviamente 4 core non possono
eseguire 100 thread al momento e loro
iniziare a fare il cambio di contesto da tempo a
tempo di lasciare tutti quei fili
occasionalmente esegue così viene chiamato
interruttore di contesto sovraccarico
quindi ad esempio non capisco quale
è stato inizialmente progettato per il dirigente
su thread per modello di richiesta e
elaborare una richiesta in un thread e
fare potrebbe essere bloccare i / o hanno il
limitazione di default 200 thread così ma
questo non significa certo, naturalmente
può aumentarlo ma ti dà un
indica cosa Tomcat è un server
container crede che sia un buon default max
numero di thread e anche ragazzi di Java
loro certamente conoscono questo contesto di dita
quale sovraccarico e hanno fatto un po ‘
benchmark e ricerca indietro nel passato
quindi hanno misurato come supponendo di avere
diverso numero di strats consecutivi
in una sola CPU e abbiamo sempre 1
milioni di unità di lavoro e cerchiamo di
eseguirli così quanto tempo sarà
prendi per ogni combinazione ogni volta che
eseguire l’intero milione in un thread
poi 100.000 in 10 thread e così e così
su e, naturalmente, questi risultati saranno
molto diverso in base al tipo
del calcolo che usi perché la CPU lo farà
eseguire e ottimizzare è diverso esso
dipenderà anche da quanto è potente il tuo
la macchina è così potrebbe non essere la tua
ultimo MacBook Pro in cui questo test è stato
eseguito prima così forse il più
la macchina potente è il numero migliore
si ottiene, ma i loro risultati dimostrano che
inizia a prendere forza in modo significativo e
significando significativamente da
Da 13 a 14 secondi qualche avviso
il modo alla scala di mille così
puoi ancora usare dalla mia esperienza
da 200 thread a forse mille
a seconda della macchina e di come
usali e potresti ancora andare bene
con il ferro da lavoro di Facebook questo porta
io a una piccola conclusione così reattivo
la programmazione ha davvero il suo valore così
semplifica una programmazione sincrona
ti semplifica come puoi ottenere
non bloccare le chiamate di rete ma è
ha anche il suo prezzo e il prezzo sarebbe
codice a volte meno leggibile a volte
più difficile il debug di I e non si tratta di
curva di apprendimento anche quando sei tu
sono molto abili con reattivo
programmare ancora quei due
svantaggi sono confronto dannoso
al tradizionale sequenziale
approccio programmatico e infine indietro
al mio argomento quindi quali sono i buoni usi
caso è di usare la programmazione reattiva se
la programmazione relativa ovviamente non è così
impressionante e non come si erano circa e
perché in particolare se non sei un cattivo
calmo quindi potresti aver sentito che eBay
quest’anno e tutto ciò che costruiscono o
piano per costruire il loro hardware personalizzato
progettato specificamente per le esigenze di eBay
questo significa che sono curiosi di soldi
hanno speso per l’ hardware perché trattano
con sfide su scala mondiale ma non
ogni azienda ha sfide su scala mondiale
e non tutte le aziende devono affrontare
così tante richieste come invasori così per
per esempio i nostri annunci commerciali li hanno
sono locali per il paese, quindi sono
ancora a volte uno dei popolari
siti web nel paese e hanno
facciamo un bel po ‘di traffico
sarebbe meno di ebay.com
e mentre parla con molte persone come
Scopro che non abbiamo un forte
desidero utilizzare la programmazione reattiva solo per
risparmia hardware e denaro quindi ci sono
altri motivi e iniziamo
il primo sarebbe ad alta latenza
networking IR così ogni volta che fai un
chiama ad un altro servizio ogni volta che tu
effettuare una chiamata alla rete del tuo database
è coinvolto e la latenza più alta è
il meno scalabile
sono e più motivi ci sono
applicare la programmazione reattiva semplice pasticcio
quindi supponiamo di andare con Tomcat
con lo stress 200 predefinito e possiamo
gestire l’ unica richiesta assumiamo in a
cento millisecondi che è già
incredibilmente alto per molti casi d’uso ma
questo significa che possiamo gestire mm
richieste al secondo quanti di voi fanno
sul tuo lavoro quotidiano con più di 200
richieste al secondo sul tuo servizio così
meno di 10 mani quindi significa
la maggior parte di voi non sarà possibile ottenere più o meno tutti
il loro risparmio di capacità o hardware
risparmi applicando la programmazione reattiva
e puoi ridimensionare la tua applicazione
può effettivamente avere un cluster di cinque
nodi che gestiscono ciascuna 2.000 rupie per
secondo che vi consente di raggiungere 10k
senza programmazione reattiva ma se tu
vai con l’aumento della latenza più
maggiore latenza hai l’ultima richiesta
è possibile processo che è evidente in modo
ipotizziamo una maggiore latenza dopo a
secondo quanto la tua richiesta richiede o
quanto l’ IO di rete prende e tu
improvvisamente può elaborare 10 volte di meno
richiedere quale sarebbe un caso d’uso
una latenza così alta come la più umida
uno sarà come la tua regione da
database con indice mancante su di te
fare un po ‘di calcolo in lotti più
ragionevole e realistico sarebbe quando
parli con il sistema di terze parti e il terzo
sistema di partito potrebbe essere per esempio in
l’altra regione in modo da potrebbe essere per
qualche motivo per ospitare il tuo sistema
Europa e il partner con cui tu
collaborare come fornitore di servizi di pagamento o
saranno ospitati alcuni punteggi di credito
da qualche parte in Australia, Canada o Stati Uniti
puoi facilmente arrivare fino a un secondo
latenza e può essere una latenza imprevedibile
in generale quindi la soluzione come
superare questo sarebbe forse quello di strofinare questo
comunicazione esterna verso l’ esterno
servizio wrapper e farlo come un
sincrono il più possibile così in questo
esempio di come viene gestito da GDG auto
questa è una piattaforma verticale per noi in Canada
può avere per esempio argomenti kafka e
possiamo dire ok ogni volta che ricevo il
messaggio nel topic di Kafka lo farò
Chiamata esterna quindi pubblicherò anche
i risultati sono sincronicamente nel
argomento e questo piccolo gateway esterno
può essere effettivamente violentato
e non consumerà nessuno erba leggere
per richiesta ciò significa che possiamo scalare molto
molto meglio quindi possiamo ridimensionare senza il rosso
per richiesta abbiamo quasi zero
limitazione su questo servizio o gestiamo
tanto quanto il nostro esterno
il fornitore di servizi può più con auto
ridimensionare questo funziona abbastanza bene
negli esempi di codice molto brevi, quindi
In questo caso entriamo nel prezzo interno
servizio quindi immagina per un elenco che vogliamo
per ottenere una valutazione esterna come
ragionevole i prezzi qui abbiamo
il ricevitore del crafter reattivo , quindi diciamo
al prossimo messaggio entriamo in esterni
servizio di prezzi otteniamo valutazioni di prezzo quindi
ogni volta che abbiamo sottoscritto questo risultato noi
ottenere il voto e pubblicarlo nel
altro argomento di Kafka quindi questo è come questo
caso d’uso semplice sarà come con
astrazione semplificata del direttore di progetto
il secondo caso d’uso è in realtà opposto al
il primo riguardava la rete intensiva
carico di lavoro e il secondo riguarda la CPU
carico di lavoro intensivo che potrebbe essere una CPU
lavoro intenso, ad esempio, lanciato su eBay
e servizio di riconoscimento immagini o tu
potrebbe fare qualcosa con errori di crittografia
come criptovalute nel tuo
applicazioni o intensivo della CPU
computazione ma molto più probabilmente tu
avere una sorta di elaborazione del budget così
perché la programmazione reattiva può
completa il tuo caso d’uso intensivo della CPU
ecco gli esempi come per il giunto
gli esecutori si adattano quindi all’esecutore congiunto
è un’astrazione più leggera di a
pool di thread in Java in modo che tu possa dire
Voglio eseguire i miei compiti non come a
filo separato o eseguibile che voglio
eseguirli come una forma d’onda leggera durante
compiti e fondamentalmente per pool comune
le offerte del lavoro sono ancora un algoritmo
e un po ‘di magia diremo a meno che tu
facciamo una chiamata bloccante possiamo scalare meglio
rispetto al pool di thread tradizionale di
usando un’astrazione più leggera e
funziona ancora in algoritmi ma funziona
solo a meno che non facciamo una chiamata bloccante
ogni volta che facciamo una chiamata di blocco, blocchiamo
il nostro thread così con te straniero
lavora non molto più stressato del tuo
La CPU ha corso e tu elaborerai a
lotto di concorrenti
e questo screenshot è in realtà da a
khadeem torna nel passato ogni volta che loro
cambiato l’implementazione in akka da
questo esecutore della Red Bull al foraggiamento
esecutore e come ti vedi in questo modo
punti blu sul fondo di era il
scalabilità con questa Red Bull e verde
i punti sono la scalabilità della terra con quattro
naturalmente, non tutti i flussi di lavoro lo faranno
ottenere così una ottimizzazione così drammatica
molto dipende da quali istruzioni sono
eseguito e, naturalmente, forse con alcuni
Magia possiamo ridimensionare meglio il pool di thread
ma l’apprendimento chiave qui è di quel tipo
del viaggio può essere in realtà uno strumento per
Ottimizza il tuo flusso di lavoro legato alla CPU
esempio da eBay Classifieds quindi immagina
la semplice elaborazione del flusso o il
semplice esecuzione in batch quindi immagina te
avere due fonti di dati
Kafka Hadoop my sequel elasticsearch
tutto ciò in modo da immaginare è possibile scrivere e
leggi il più possibile perché per
istanza sei regione di Kafka che
è ben scalabile e si sta scrivendo a
Hadoop che è anche piuttosto alto
limiti di capacità di scrittura quindi più veloce
tu vai processare il flusso dipende solo
quanto velocemente il flusso si sta elaborando
prende così questo sarebbe un caso d’uso in cui
puoi ottimizzare la tua CPU limitata o
flusso e puoi dire ad esempio se io
non avere così tanti dati per esempio
in affari di annunci che potresti desiderare
trattare con annunci attivi e attivi
le inserzioni sono sempre limitate nel tempo da
numero di utenti attivi così come sono
potrebbe essere milioni di miliardi ma tu
sai sempre che è un set fisso e puoi farlo
dì ok, voglio coltivarne un po ‘
statistica nel corso della giornata o voglio solo
aggiorna i miei annunci non andrò semplicemente
attraverso loro una volta e tu puoi dire io
non voglio avere qualche applicazione enorme
costa relax parte che richiederà alcuni
clustering e orchestrazione delle applicazioni
Posso farlo con un singolo nodo macchina
e posso farlo con flussi reattivi
e se vai con un po ‘di streaming
soluzione di questo per un esecutore sotto
il cappuccio come per esempio i flussi akka
puoi forse farlo più velocemente di te
fallo normalmente con il normale
soluzione di streaming tradizionale senza
qualsiasi reattività sotto le notizie
quindi questo sarebbe un esempio nel progetto
direttore quindi andiamo per la nostra lista in
repository quindi possiamo anche applicarne alcuni
caratteristiche di reattività come gli operatori
come filtro andiamo processo solo visibile
elenchi quindi diciamo per favore in parallelo
traccia per noi l’attività di risposta e trascina per
ci rivediamo l’attività e questa volontà
praticamente tutto ciò di cui hai bisogno
prospettiva della logica aziendale da eseguire
questo tipo di flusso in logica ma
offerte di streaming nel mondo reattivo
molte più funzioni quindi quelle sono per
istanza di contropressione e molto altro
operatori reattivi quindi cos’è la schiena
concetto di pressione quindi era inizialmente
introdotto nei flussi reattivi e ora
è una parte di JDK 9 così efficacemente
circa 4 interfacce per tutti quelli sono
editore e abbonato e offre
push pull back pressure model significa
cosa può accadere senza contropressione
il tuo editore può produrne altrettanti
i messaggi che possono e noi per
esempio raggiungere alcuni limiti di memoria cosa
potrebbe essere la soluzione diversa
l’abbonato può comunicare la domanda
Va bene che voglio trattare oggi 5.000
i messaggi e poi l’editore spingeranno
i 5.000 messaggi o sottoscrittori possono
comunicare la domanda e possiamo applicare
alcune strategie più intelligenti come gestire
ogni volta che abbiamo travolto di messaggi
quindi possiamo lasciare prima noi possiamo lasciarci per ultimi
può sospendere la condivisione di pubblicazione o possiamo
forse ridimensionare l’abbonato in modo da aggiungere per
esempio questo tema di backpressure al nostro
esempio precedente possiamo usare il buffer
operatore e dire per favore dammi quotazione
nel buffer di 3.000 record così di
questo pro ottimizzare le prestazioni del vostro
elencando l’editore del repository così sarà
prendi una lista in batch di 3000 record
ed è così che comunichiamo il
domanda e qui arriviamo al prossimo uso
caso così nell’esempio precedente che hai
visto già che possiamo fare ciò che possiamo fare
fare è un po ‘di commutazione parallela così noi
può eseguire roba in modo sincrono e
questo è dove, dal mio punto di vista
la programmazione reattiva brilla davvero
è una richiesta sincrona e parallela
usa la conversazione caso così sei
interessato ad alcuni annunci per esempio
vuoi prendere questo puro
arriva a casa tua chi è fuori sul quasi
piattaforma di effetti così prima ogni volta che
creare la conversazione con un venditore noi
potrebbe desiderare di avere i dettagli online per
creare alcuni dettagli di conversazione come
testo loghi e così via quindi potremmo volere
fare alcuni controlli di frode per
esempio non è una frode è un legit
messaggio quindi vogliamo gestire push
notifica nel caso in cui il nostro cliente è
sul dispositivo mobile , quindi vogliamo condividere
dati con analisi centrale per alcuni
caratteristiche incentrate sui dati come
raccomandazioni e finalmente vogliamo
registra il nostro messaggio se tutto fosse
fatto con successo come puoi vedere qui noi
può avere più chiamate in parallelo
diverse chiamate in modo sincrono e
incatenato tutto insieme così come sembra
nell’implementazione reattiva diciamo
il nostro metodo crea prima la conversazione
useremo l’operatore zip dal progetto
regista ed ecco il bel marmo
diagramma che descrive tutto il
operatori librerie interattive quindi per
istanza zip sta prendendo due risultati e
unirli insieme per ottenere i risultati
insieme possiamo dire che quindi si prega di applicarlo
un mod di rotazione un secondo e poi noi
assegnare livello di Chronos non volare il nostro
analisi centrale via sincrona e
notifica push e possiamo effettivamente
quindi registra il messaggio o gestisci il favore
e in questo particolare esempio lo farei
Diciamo che ogni riga di questo codice ne ha
significato commerciale
operazione così zip indica chiaramente se
vuoi due risultati insieme, poi noi
vuoi una notifica sincrona e poi
abbiamo il nostro negozio di dischi così noi
chiaramente descritto come un sincrono e
esecuzione parallela come una singola pipeline
l’altro esempio è dal nostro paese
entità nel Regno Unito, quindi hanno il loro Android
squadra e hanno applicato il modello chiamato BFF
o back-end per front-end quindi cosa è stato
back-end per front-end
Immagino che molti di voi abbiano a che fare
micro servizi e per non parlare
a tutti voi micro servizi che potreste
avere qualcosa di fronte a loro così questo
potrebbe essere un modello di albero chiave API dove
hai solo un servizio di fronte
tu tutto il sistema e poi tutto
gli altri clienti possono parlarci o tu
in grado di progettare il gateway API specifico
che servirà come backend per
il tuo
cliente specifico come ad esempio te
desidera utilizzare le funzionalità della piattaforma Android
separato dal web in modo da poter progettare
endpoint specifico per Android così tu
progetta il backend che gestisce Android
e in Gumtree UK ci sono le maniglie del team
entrambe le parti così gestisce il team di Android
anche la migliore amica per i propri bisogni quindi loro
può apportare modifiche da soli
veloce e come potresti conoscere l’attivo
la parodia è molto popolare nei dispositivi mobili
sviluppo in modo da farlo con reattivo
sul lato mobile e l’utente Excel e
è possibile utilizzare una ricca Java anche sul
lato server in modo che costruiscano effettivamente loro
sono tornati e per front-end con Erics
Java quindi ci sono due vantaggi qui
hanno applicato una tecnologia simile su entrambi
lati in modo che l’ intera squadra sia familiare
con il tuo Java l’intera squadra è
familiarità con Java il secondo BFF o
Gateway API è in realtà un altro esempio
dove potresti volerne avere diversi
chiama in modo sincrono più chiamate in
parallelo e effettivamente reattivo
la programmazione è il concetto che
semplifica asincrono e simultaneo
programmazione
quindi qui ci sono due vantaggi ad uno così
parlando di attività lato cliente così
il mio discorso riguarda principalmente il back-end
ma ancora ho avuto la possibilità di parlare con il nostro
Ho trovato ingegneri mobili e sul lato client
che è abbastanza popolare per essere
reattivo sul lato mobile quindi per
Ad esempio, abbiamo un team SDK centrale in
Portland per costruire un SDK centrale
componenti per il nostro sviluppo mobile
e hanno applicato il reattivo
premio di programmazione e come fa risparmiare
la loro vita nello sviluppo mobile
in precedenza, ad esempio, stavano usando
anche l’architettura basata sugli autobus e loro
ho scoperto che con la programmazione reattiva
è più facile per loro descriverli
catena più chiamate asincrone
insieme una programmazione così reattiva
semplifica per fare fuori del multiplo
l’esecuzione asincrona di un flusso così in molti
in molti casi di utilizzo sul lato client si
potrebbe voler fare le cose
in modo asincrono e questo tipo di
l’architettura è più nativa per noi e
Esecuzione Cronos attorno a JavaScript
sviluppo abbiamo anche alcuni casi d’uso
ma non abbiamo visto così tanto per
esempio l’ ho imparato
renin secondo grafico è stato fatto con
programmazione reattiva ma non ho imparato
molti dettagli per presentare oggi così il
Apprendimento profondo per me da questo piccolo
ricerca su eBay Classifieds
le aziende sono effettivamente così reattive
complementi di programmazione circa
scenari asincroni perché è un
sincrono per natura quindi significa
il più grande guadagno è quando sei
sincrono usi la programmazione reattiva
ottieni alcune funzionalità in alto ogni volta
hai un processo di business sequenziale
questo tavolo scuro e potresti volerlo usare
in alcuni scenari e si consiglia di
attenersi al tradizionale programmatico
approccio in altri scenari così riassunti
nei casi d’uso in modo di cui abbiamo parlato
alta latenza superiore perché uno dei
maggiori guadagni dalla programmazione reattiva
è in realtà risparmiare risorse da
Westphall funziona in modo dispendioso chiamate così
maggiore latenza hai più minacce
disegnerai e loro saranno più difficili da fare
la scala sarà per la tua applicazione
il secondo caso d’uso riguardava l’ uso di
esecuzione del journal e per ottenere altro
Ottimizzazioni basate sulla CPU, quindi come fa
lavoro
programmazione reattiva ti permette di essere
non bloccando ti sbarazzi degli sprechi
causa bloccante è possibile applicare la potenza di
fork / join execution quindi abbiamo il
elaborazione del flusso e elaborazione del budget
questo è esattamente dove possiamo applicare
Streaming backback e anche
Ottimizza la CPU dall’estero
esecuzione e il più grande nel mio
il punto di vista rimane ancora parallelo e
programmazione asincrona, quindi questo è
dove puoi dire che è reattivo
la logica esprime esattamente ciò che accade in
la tua domanda e ovviamente perché
ci sono molti scenari sul lato client
quale reattivo sincrono
complementi di programmazione in loro solo così
abbiamo visto un sacco di casi d’uso di
programmazione reattiva sul lato client
e forse
la programmazione reattiva non è un argento
pulsanti di ballata sicuramente a – così il –
puoi applicare attraverso il tuo sistema così tu
devo dire che il gateway API è un componente
che gestirà un bel po ‘di carico e
otterrà alcune aggregazioni, quindi facciamolo
è reattivo quindi si può dire che il grafico sarà
anche avere qualche aggregazione quindi andiamo anche
renderlo reattivo e forse il servizio
quello
utilizzare la rete esterna perché ciò potrebbe
ha senso, ma per esempio l’elenco
dove abbiamo solo un’esecuzione sequenziale
e semplice logica aziendale e forse no
così tanto che potremmo tenerlo con il
blocco normale in esecuzione per esempio in
il nostro motore è verticale usiamo l’ anello e noi
avere nel nostro set di strumenti sia il flusso Sprintweb
che è reattivo e usiamo ancora il rosa
MVC che sta bloccando, quindi decidiamo per
micro servizio e questa è un’altra bellezza
di micro servizi in uno scenario tu
può andare in modo reattivo in un altro scenario
potresti andare nel tradizionale
approccio programmatico quindi non è necessario selezionare
un unico strumento per dominarli tutti e
ultimo ma non meno importante quando non lo farei
consiglia personalmente di usare reattivo
programmazione quindi è esattamente l’opposto di
i casi d’uso quindi ogni volta che ne hai molti
chiamate a bassa latenza durante la latenza
potrebbe essere la normale lettura dal database
che dovrebbe finire in in uno o pochi
millisecondi e stai usando per
istanza basata sul sequel relazionale
database e se non usi il tuo M
quadro per ottenere un’entità di aggregazione
insieme potresti avere diverse chiamate
e potresti volerli mettere in uno
catena e più processi
chiamate indipendenti con un sincronismo
risultati come mana e flusso e il
più difficile è compilare le cose insieme
l’altro caso d’uso sarebbe il blocco
I / o così di nuovo al database relazionale
quindi hai persino un driver JDBC relazionale
sebbene ci siano librerie per non
bloccando il database sequel accedi a te
potrebbe ancora volere che JDBC ne abbia una simile
GP di primavera o solo JP uno specifico
specifica e il tuo processo aziendale
è sequenziale come nella lista
esempio ottieni l’elenco che ottieni
revisione delle inserzioni si ottiene indietro cosa
sarebbe la ragione per renderlo reattivo
qui personalmente non lo trovo quindi questo è
esattamente quando non userei se ho un
programmazione reattiva di scelta ho il mio
libreria di blocco quindi non riesco a ottenerla in a
modo di lavorare ho il sequenziale
processo aziendale quindi non posso ottenere
utilità della contropressione degli operatori
e l’esecuzione parallela quindi a volte lo è
più economico da scalare con l’hardware, quindi EB
ho deciso di andare con un po ‘di hardware
ottimizzazione perché operano a
tu
scala le loro aziende che non hanno
un carico così enorme che potrebbero volere ancora
scala con un’altra istanza del tuo
contenitore o la tua applicazione sarà
più economico rispetto ad esempio per la tua squadra
per imparare la programmazione reattiva o anche se
la squadra ha familiarità con il reattivo
programmazione per complicare il codice con
noi presentiamo rappers melodici e molti di
potresti conoscere l’approccio alla minaccia verde
come co-routine di cotone o chiudere il nostro
biblioteca qualsiasi se si così il concetto di
i fili verdi sono in realtà ciò che puoi
sospendi quel filo senza farti
può sospendere la tua esecuzione senza
bloccando il tuo thread questo è un modo come
puoi gestire qualsiasi teoria in sblocco
causa senza bloccare questo thread in a
approccio programmatico in modo che tu ancora
stai usando un’implementazione non funzionante
ancora portato la tua esecuzione, ma tu
non bloccare la discussione e il codice
sembra programmatico quindi se non lo avessi
una possibilità che ti incoraggio molto a guardare
sulle co-routine di cotone
o quasi biblioteca o effettivamente c’è un
prossima iniziativa chiamata Project loon
che dovrebbe essere spedito con alcuni JDK
versione speriamo avremo il
approccio filo verde insieme a Java
e naturalmente questa presentazione non lo era
compilato da solo per aiutarmi
capire i casi d’uso che ho chiesto al mio
colleghi di aiuto quindi ecco qui i loro
nomi e per ulteriori approfondimenti su ciò che facciamo
a Berlino in particolare abbiamo il nostro
blog tecnico e abbiamo la nostra spinta
oggi per chiedere più domande del
ragazzi che lavorano in queste aziende così
grazie per un po ‘
tu
Please follow and like us: