SlideShare a Scribd company logo
1 of 17
Download to read offline
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...) 
•Neefikasno, neskalabilno 
•C10k problem 
Klasični servleti
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
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
•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
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 ~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
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)
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šavaju performanse sustava “sami od sebe” 
Zaključak zaključka
A sad vi... 
karlo.novak@svgroup.hr

More Related Content

Viewers also liked

新規事業への挑戦2011ミスト編 英語
新規事業への挑戦2011ミスト編 英語新規事業への挑戦2011ミスト編 英語
新規事業への挑戦2011ミスト編 英語Shinichi Fukuyama
 
Roylichtenstein
RoylichtensteinRoylichtenstein
Roylichtensteincisenberg2
 
Викоолистання ІКТ
Викоолистання ІКТВикоолистання ІКТ
Викоолистання ІКТmarinakill
 
Proposal of “Large Space Cooling” by MOISTURE MIST
Proposal of “Large Space Cooling” by MOISTURE MISTProposal of “Large Space Cooling” by MOISTURE MIST
Proposal of “Large Space Cooling” by MOISTURE MISTShinichi Fukuyama
 
De uitdagingen van de Vlaamse en de internationale landbouw
De uitdagingen van de Vlaamse en de internationale landbouwDe uitdagingen van de Vlaamse en de internationale landbouw
De uitdagingen van de Vlaamse en de internationale landbouwAgribusinessclub
 
BOOTylicious Spring
BOOTylicious SpringBOOTylicious Spring
BOOTylicious SpringKarlo Novak
 
Menjelaskan sistem eksresi
Menjelaskan sistem eksresiMenjelaskan sistem eksresi
Menjelaskan sistem eksresiIqbal R
 
Sistem Informmasi Kesehata - Rekam Medis
Sistem Informmasi Kesehata - Rekam MedisSistem Informmasi Kesehata - Rekam Medis
Sistem Informmasi Kesehata - Rekam MedisYahya_Vy_01
 
12komunikasisinkron
12komunikasisinkron 12komunikasisinkron
12komunikasisinkron agus mulyadin
 

Viewers also liked (16)

新規事業への挑戦2011ミスト編 英語
新規事業への挑戦2011ミスト編 英語新規事業への挑戦2011ミスト編 英語
新規事業への挑戦2011ミスト編 英語
 
Untitled Presentation
Untitled PresentationUntitled Presentation
Untitled Presentation
 
Roylichtenstein
RoylichtensteinRoylichtenstein
Roylichtenstein
 
Викоолистання ІКТ
Викоолистання ІКТВикоолистання ІКТ
Викоолистання ІКТ
 
Proposal of “Large Space Cooling” by MOISTURE MIST
Proposal of “Large Space Cooling” by MOISTURE MISTProposal of “Large Space Cooling” by MOISTURE MIST
Proposal of “Large Space Cooling” by MOISTURE MIST
 
De uitdagingen van de Vlaamse en de internationale landbouw
De uitdagingen van de Vlaamse en de internationale landbouwDe uitdagingen van de Vlaamse en de internationale landbouw
De uitdagingen van de Vlaamse en de internationale landbouw
 
Polynomials
PolynomialsPolynomials
Polynomials
 
BOOTylicious Spring
BOOTylicious SpringBOOTylicious Spring
BOOTylicious Spring
 
Menjelaskan sistem eksresi
Menjelaskan sistem eksresiMenjelaskan sistem eksresi
Menjelaskan sistem eksresi
 
Efusi Pleura
Efusi PleuraEfusi Pleura
Efusi Pleura
 
Sistem Informmasi Kesehata - Rekam Medis
Sistem Informmasi Kesehata - Rekam MedisSistem Informmasi Kesehata - Rekam Medis
Sistem Informmasi Kesehata - Rekam Medis
 
Africanmasks
Africanmasks Africanmasks
Africanmasks
 
12komunikasisinkron
12komunikasisinkron 12komunikasisinkron
12komunikasisinkron
 
Camp nou
Camp nouCamp nou
Camp nou
 
Matt W moore
Matt W  mooreMatt W  moore
Matt W moore
 
Web Word
Web WordWeb Word
Web Word
 

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
  • 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)
  • 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