Priča asinkronim Spring servletima o
Karlo Novak, SV Group d.o.o. karlo.novak@svgroup.hr
•Servleti
•Asinkroni servleti, non-blocking IO
•DefferedResult
•Mjerenja
•Non blocking API-i i alternative
Sadržaj
•Thread per request
•Blokiranje threadova
•Čekanje na odgovor (baze podataka, vanjskog web servisa, pisanja na disk...) ...
Asinkroni servleti
•Omogućavaju asinkrone obrade
•Čuvaju threadove iz web container poola
–Threadovi se vraćaju u conta...
Non-blocking IO
•Sve “akcije” koje ne blokiraju thread koji ih poziva
•Rezultat obrađuju kroz Future, callback ili Obser...
•Springova apstrakcija asinkronih servleta
•Pojednostavljuje rad s async contextom
•Zaprima objekt tipa “T” koji je kona...
DeferredResult<T> 2/3
DeferredResult<T> 3/3
Mjerenja i usporedbe (1. runda)
•Blocking servleti
•Asinkroni servleti
200 threadova
Mjerenja i usporedbe (1. runda)
•Asinkroni servleti
200 threadova
•Blocking servleti
Mjerenja i usporedbe (2. runda)
•Blocking servleti
X threadova
•Asinkroni servleti
Mjerenja i usporedbe (2. runda)
•Blocking servleti
X threadova
•Asinkroni servleti
•NIO štedi threadove
•Štednja CPU-a?
–1000 threadova = ~10 000 ctxs/s
•Štednja memorije?
–1000 threadova = inicijalno ...
Non-blocking API-i
•SQL
–PostgreSQL (https://github.com/alaisi/postgres.async) ?
•HTTP klijenti
–https://github.com/As...
Non-blocking JVM alternative
Asinkroni servleti su super za određene use caseove, ali ne rješavaju magično sve probleme s performansama i ne poboljšava...
A sad vi...
karlo.novak@svgroup.hr
of 17

Priča asinkronim Spring servletima o

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.
Published on: Mar 4, 2016
Published in: Software      
Source: www.slideshare.net


Transcripts - Priča asinkronim Spring servletima o

  • 1. Priča asinkronim Spring servletima o Karlo Novak, SV Group d.o.o. karlo.novak@svgroup.hr
  • 2. •Servleti •Asinkroni servleti, non-blocking IO •DefferedResult •Mjerenja •Non blocking API-i i alternative Sadržaj
  • 3. •Thread per request •Blokiranje threadova •Čekanje na odgovor (baze podataka, vanjskog web servisa, pisanja na disk...) •Neefikasno, neskalabilno •C10k problem Klasični servleti
  • 4. 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
  • 5. 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
  • 6. •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
  • 7. DeferredResult<T> 2/3
  • 8. DeferredResult<T> 3/3
  • 9. Mjerenja i usporedbe (1. runda) •Blocking servleti •Asinkroni servleti 200 threadova
  • 10. Mjerenja i usporedbe (1. runda) •Asinkroni servleti 200 threadova •Blocking servleti
  • 11. Mjerenja i usporedbe (2. runda) •Blocking servleti X threadova •Asinkroni servleti
  • 12. Mjerenja i usporedbe (2. runda) •Blocking servleti X threadova •Asinkroni servleti
  • 13. •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
  • 14. 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)
  • 15. Non-blocking JVM alternative
  • 16. 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
  • 17. A sad vi... karlo.novak@svgroup.hr

Related Documents