Servlet vs Reactive Choosing the Right Stack Rossen Stoyanchev - - PowerPoint PPT Presentation

servlet vs reactive choosing the right stack
SMART_READER_LITE
LIVE PREVIEW

Servlet vs Reactive Choosing the Right Stack Rossen Stoyanchev - - PowerPoint PPT Presentation

Servlet vs Reactive Choosing the Right Stack Rossen Stoyanchev This talk Servlet and Reactive stacks Spring Framework 5 Big shift towards async Learn about the options, make choices About me Spring Framework committer Web development


slide-1
SLIDE 1

Servlet vs Reactive Choosing the Right Stack

Rossen Stoyanchev

slide-2
SLIDE 2

Servlet and Reactive stacks Spring Framework 5

This talk

Big shift towards async Learn about the options, make choices

slide-3
SLIDE 3

Spring Framework committer Web development Spring WebFlux from inception to GA

About me

slide-4
SLIDE 4

(immediately after this session)

Also featuring:

Ask Me Anything

Phil Webb → Spring Boot lead Stephane Maldini → Reactor lead

slide-5
SLIDE 5

Motivation for change

slide-6
SLIDE 6

??

slide-7
SLIDE 7

Asynchronicity Thread pools

slide-8
SLIDE 8

Event loop Coroutines Actors

Asynchronicity Thread pools

Fibers / Project Loom

slide-9
SLIDE 9

Small, fixed # of threads (running) 100s, 1000s threads (blocked)

Servlet Reactive

slide-10
SLIDE 10

Non-blocking concurrency

Even Loop

slide-11
SLIDE 11

Declarative composition of asynchronous logic

CompletableFuture, ReactiveX, Reactor, …

slide-12
SLIDE 12

Java 8 lambdas Functional programming models

slide-13
SLIDE 13

Stack choices

and why choice matters

slide-14
SLIDE 14

Servlet Reactive

@Controller @Controller

slide-15
SLIDE 15

Servlet Reactive

@Controller Reactive client @Controller Reactive client

slide-16
SLIDE 16

Servlet Reactive

Functional endpoint @Controller Reactive client @Controller Reactive client

slide-17
SLIDE 17

Servlet Reactive

Functional endpoint @Controller Reactive client @Controller Reactive client Tomcat Jetty Servlet 3.1 container Tomcat Jetty Servlet container

slide-18
SLIDE 18

Servlet Reactive

Functional endpoint @Controller Reactive client @Controller Reactive client Netty Undertow Tomcat Jetty Servlet 3.1 container Tomcat Jetty Servlet container

slide-19
SLIDE 19

Demo

slide-20
SLIDE 20

Stack architecture

slide-21
SLIDE 21

Tomcat, Jetty, … Servlet API Spring MVC Blocking I/O

slide-22
SLIDE 22

History of Servlet API

1997 1.0 … … 2009 3.0 Async Servlet 2009 3.1 Servlet non-blocking I/O … …

slide-23
SLIDE 23

Tomcat, Jetty, … Servlet API Blocking I/O

Controller + Reactive client

Async Servlet

slide-24
SLIDE 24

History of Servlet API

1997 1.0 … … 2009 3.0 Async Servlet 2009 3.1 Servlet non-blocking I/O … …

slide-25
SLIDE 25

Tomcat, Jetty, … Servlet API Blocking I/O

Controller + Reactive client

Async Servlet

slide-26
SLIDE 26

Tomcat, Jetty, … Netty Tomcat, Jetty, … Servlet API Blocking I/O

Servlet 3.1 Non-blocking I/O Reactor, Reactive Streams Reactor Netty

Spring Web API

Controller + Reactive client

Async Servlet

slide-27
SLIDE 27

Tomcat, Jetty, … Netty Tomcat, Jetty, … Servlet API Blocking I/O Spring WebFlux Spring MVC Non-blocking I/O

Reactor, Reactive Streams

Spring Web API

slide-28
SLIDE 28

Reactive, non-blocking back pressure

slide-29
SLIDE 29

Blocking expected

Filter Servlet Filter

Tomcat, Jetty, …

slide-30
SLIDE 30

Blocking not expected

WebFilter WebHandler

Tomcat, Jetty, … Netty Even Loop

WebFilter

slide-31
SLIDE 31

WebFilter, WebHandler Mono<Void>

slide-32
SLIDE 32

Request Flux<DataBuffer> getBody()

slide-33
SLIDE 33

Response writeWith(Flux<DataBuffer>)

slide-34
SLIDE 34

Codecs Flux<DataBuffer> Flux<T>

slide-35
SLIDE 35

WebFilter WebHandler WebFilter

Mono Mono Mono Mono

  • nNext(T)

request(n)

A B C D E A B C D E

slide-36
SLIDE 36

HTTP Server Reactive Adapter Flux Spring WebFlux Flux Controller Flux Web Client

Non-blocking write

WebFlux Response

request(n) request(n) request(n)

  • nNext(T)
  • nNext(T)
  • nNext(T)
slide-37
SLIDE 37

Server Reactive Adapter Flux Spring WebFlux Flux Controller Flux Data Repo

Non-blocking read

WebFlux Request

request(n) request(n) request(n)

  • nNext(T)
  • nNext(T)
  • nNext(T)
slide-38
SLIDE 38

Server Servlet API Spring MVC Flux Controller Flux Web Client

Blocking write Spring MVC thread request(1) request(1)

  • nNext(T)
  • nNext(T)

Spring MVC Response

slide-39
SLIDE 39

Demo

slide-40
SLIDE 40

Choosing

The right stack for the job at hand

slide-41
SLIDE 41

Spring MVC

If it ain’t broken, don’t fix it Imperative logic is the easiest to write and debug Check application dependencies (JDBC, JPA)

slide-42
SLIDE 42

Spring MVC + Reactive Client

Compose remote service calls Reactive data (Mongo, Cassandra, Redis) Response stream

slide-43
SLIDE 43

Spring WebFlux

Use cases → easy to stream up or down Scale → efficient at I/O Programming model → functional endpoints

slide-44
SLIDE 44

Spring WebFlux Performance

Efficient scale with less hardware resources It’s not about speed Latency is key to exhibit differences

slide-45
SLIDE 45

Thank You

rstoya05

https://github.com/ rstoyanchev/demo-reactive-spring