Priča asinkronim Spring servletima o
-
Upload
karlo-novak -
Category
Software
-
view
111 -
download
1
Transcript of Priča asinkronim Spring servletima o
![Page 2: Priča asinkronim Spring servletima o](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a2686a1a28ab84308b4580/html5/thumbnails/2.jpg)
• Servleti
• Asinkroni servleti, non-blocking IO
• DefferedResult
• Mjerenja
• Non blocking API-i i alternative
Sadržaj
![Page 3: Priča asinkronim Spring servletima o](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a2686a1a28ab84308b4580/html5/thumbnails/3.jpg)
• 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](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a2686a1a28ab84308b4580/html5/thumbnails/4.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a2686a1a28ab84308b4580/html5/thumbnails/5.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a2686a1a28ab84308b4580/html5/thumbnails/6.jpg)
• 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](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a2686a1a28ab84308b4580/html5/thumbnails/7.jpg)
DeferredResult<T> 2/3
![Page 8: Priča asinkronim Spring servletima o](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a2686a1a28ab84308b4580/html5/thumbnails/8.jpg)
DeferredResult<T> 3/3
![Page 9: Priča asinkronim Spring servletima o](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a2686a1a28ab84308b4580/html5/thumbnails/9.jpg)
Mjerenja i usporedbe (1. runda)
•Blocking servleti
•Asinkroni servleti
200 threadova
![Page 10: Priča asinkronim Spring servletima o](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a2686a1a28ab84308b4580/html5/thumbnails/10.jpg)
Mjerenja i usporedbe (1. runda)
•Asinkroni servleti
200 threadova
•Blocking servleti
![Page 11: Priča asinkronim Spring servletima o](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a2686a1a28ab84308b4580/html5/thumbnails/11.jpg)
Mjerenja i usporedbe (2. runda)
•Blocking servleti
X threadova
•Asinkroni servleti
![Page 12: Priča asinkronim Spring servletima o](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a2686a1a28ab84308b4580/html5/thumbnails/12.jpg)
Mjerenja i usporedbe (2. runda)
•Blocking servleti
X threadova
•Asinkroni servleti
![Page 13: Priča asinkronim Spring servletima o](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a2686a1a28ab84308b4580/html5/thumbnails/13.jpg)
• 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](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a2686a1a28ab84308b4580/html5/thumbnails/14.jpg)
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](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a2686a1a28ab84308b4580/html5/thumbnails/15.jpg)
Non-blocking JVM alternative
![Page 16: Priča asinkronim Spring servletima o](https://reader034.fdocuments.net/reader034/viewer/2022042701/55a2686a1a28ab84308b4580/html5/thumbnails/16.jpg)
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