javantura v2 - story asynchronous spring servlets about - karlo novak

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

Category:

Technology


2 download

DESCRIPTION

With an increasing number of connected devices on the Internet, handling of large number of concurrent requests in the applications becomes a priority. Traditional way of handling requests on a thread per request basis became an often encountered problem and a bottleneck for many high throughput services. Technology has therefore advanced to solve the problem by introducing asynchronous and non-blocking way of dealing with requests and processing. This session deals with Spring’s implementation based on asynchronous servlets for dealing with the mentioned issues.

TRANSCRIPT

Page 1: Javantura v2 - Story asynchronous Spring servlets about - Karlo Novak

Priča asinkronim Spring servletima o

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

Page 2: Javantura v2 - Story asynchronous Spring servlets about - Karlo Novak

• Servleti

• Asinkroni servleti, non-blocking IO

• DefferedResult

• Mjerenja

• Non blocking API-i i alternative

Sadržaj

Page 3: Javantura v2 - Story asynchronous Spring servlets about - Karlo Novak

• 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: Javantura v2 - Story asynchronous Spring servlets about - Karlo Novak

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: Javantura v2 - Story asynchronous Spring servlets about - Karlo Novak

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: Javantura v2 - Story asynchronous Spring servlets about - Karlo Novak

• 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: Javantura v2 - Story asynchronous Spring servlets about - Karlo Novak

DeferredResult<T> 2/3

Page 8: Javantura v2 - Story asynchronous Spring servlets about - Karlo Novak

DeferredResult<T> 3/3

Page 9: Javantura v2 - Story asynchronous Spring servlets about - Karlo Novak

Mjerenja i usporedbe (1. runda)

•Blocking servleti

•Asinkroni servleti

200 threadova

Page 10: Javantura v2 - Story asynchronous Spring servlets about - Karlo Novak

Mjerenja i usporedbe (1. runda)

•Asinkroni servleti

200 threadova

•Blocking servleti

Page 11: Javantura v2 - Story asynchronous Spring servlets about - Karlo Novak

Mjerenja i usporedbe (2. runda)

•Blocking servleti

X threadova

•Asinkroni servleti

Page 12: Javantura v2 - Story asynchronous Spring servlets about - Karlo Novak

Mjerenja i usporedbe (2. runda)

•Blocking servleti

X threadova

•Asinkroni servleti

Page 13: Javantura v2 - Story asynchronous Spring servlets about - Karlo Novak

• 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: Javantura v2 - Story asynchronous Spring servlets about - Karlo Novak

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: Javantura v2 - Story asynchronous Spring servlets about - Karlo Novak

Non-blocking JVM alternative

Page 16: Javantura v2 - Story asynchronous Spring servlets about - Karlo Novak

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: Javantura v2 - Story asynchronous Spring servlets about - Karlo Novak

A sad vi...

[email protected]