priča asinkronim spring servletima o

17
Priča asinkronim Spring servletima o Karlo Novak, SV Group d.o.o. [email protected]

Upload: karlo-novak

Post on 12-Jul-2015

102 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Priča asinkronim Spring servletima o

Priča asinkronim Spring servletima o

Karlo Novak, SV Group d.o.o. [email protected]

Page 2: Priča asinkronim Spring servletima o

• Servleti

• Asinkroni servleti, non-blocking IO

• DefferedResult

• Mjerenja

• Non blocking API-i i alternative

Sadržaj

Page 3: Priča asinkronim Spring servletima o

• Thread per request

• Blokiranje threadova

• Čekanje na odgovor (baze podataka, vanjskog web servisa, pisanja na disk...)

• Neefikasno, neskalabilno

• C10k problem

Klasični servleti

Page 4: Priča asinkronim Spring servletima o

Asinkroni servleti

• Omogućavaju asinkrone obrade

• Čuvaju threadove iz web container poola

– Threadovi se vraćaju u container kod IO-a, IO odrađuju threadovi iz drugih poolova

• Preduvjet za korištenje non-blocking API-a

Page 5: Priča asinkronim Spring servletima o

Non-blocking IO

• Sve “akcije” koje ne blokiraju thread koji ih poziva

• Rezultat obrađuju kroz Future, callback ili Observable (RxJava)

• Štednja threadova = štednja memorije i procesora (smanjuje context switching)

• Asinkrono + Non-blocking = Skalabilno

Page 6: Priča asinkronim Spring servletima o

• Springova apstrakcija asinkronih servleta

• Pojednostavljuje rad s async contextom

• Zaprima objekt tipa “T” koji je konačni povratni rezultat Spring kontrolera

• Rezultat se vraća korisniku tek kada se u DeferredResult pohrani povratni objekt

DeferredResult<T> 1/3

Page 7: Priča asinkronim Spring servletima o

DeferredResult<T> 2/3

Page 8: Priča asinkronim Spring servletima o

DeferredResult<T> 3/3

Page 9: Priča asinkronim Spring servletima o

Mjerenja i usporedbe (1. runda)

•Blocking servleti

•Asinkroni servleti

200 threadova

Page 10: Priča asinkronim Spring servletima o

Mjerenja i usporedbe (1. runda)

•Asinkroni servleti

200 threadova

•Blocking servleti

Page 11: Priča asinkronim Spring servletima o

Mjerenja i usporedbe (2. runda)

•Blocking servleti

X threadova

•Asinkroni servleti

Page 12: Priča asinkronim Spring servletima o

Mjerenja i usporedbe (2. runda)

•Blocking servleti

X threadova

•Asinkroni servleti

Page 13: Priča asinkronim Spring servletima o

• NIO štedi threadove

• Štednja CPU-a?

– 1000 threadova = ~10 000 ctxs/s

• Štednja memorije?

– 1000 threadova = inicijalno ~30MB

• NIO koristiti ako:

– su threadovi usko grlo

– broj threadova je iznimno velik i stvara značajnu razliku u potrošnji procesora i memorija (tisuće req/s)

Zaključak mjerenja

Page 14: Priča asinkronim Spring servletima o

Non-blocking API-i

• SQL

– PostgreSQL (https://github.com/alaisi/postgres.async) ?

• HTTP klijenti

– https://github.com/AsyncHttpClient/async-http-client

• File IO

– Netty, Java NIO

• NOSQL

– MongoDB (http://www.allanbank.com/mongodb-async-driver/index.html)

– Infinispan (http://infinispan.org/docs/7.0.x/user_guide/user_guide.html#_asynchronous_api)

– Cassandra(http://www.datastax.com/documentation/developer/java-

driver/1.0/java-driver/asynchronous_t.html)

Page 15: Priča asinkronim Spring servletima o

Non-blocking JVM alternative

Page 16: Priča asinkronim Spring servletima o

Asinkroni servleti su super za određene use caseove, ali ne rješavaju magično sve probleme s performansama i ne poboljšavaju performanse sustava “sami od sebe”

Zaključak zaključka

Page 17: Priča asinkronim Spring servletima o

A sad vi...

[email protected]