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.
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
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
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