Upload
others
View
10
Download
0
Embed Size (px)
Citation preview
Globalcode – Open4education
Java Enterprise
De monolito para microserviços
- e algumas descobertas de performance
Renan Zenkner Roggia
SAP Cloud Platform Tax Service - Software Engineer
Globalcode – Open4education
O que vocês fariam se tivessem que
aumentar o throughput do seu web
service em 2400%?
Globalcode – Open4education
De 1.000 para 25.000
* Esses números são meramente ilustrativos
* Proporcionais
1.000 r/m 25.000 r/m
Globalcode – Open4education
1 25
Escalando o monolito
Globalcode – Open4education
Nosso arquitetura de monolito é eficaz?
Globalcode – Open4education
Um monolito
Roteamento:
1. Motor de calculo interno
Processamento alto
2. Motor de calculo externos
Alto uso de I/O
* Foto oficial do monólito
Globalcode – Open4education
1 25
Desperdiçando de recurso
Roteamento
Motor de
calculo
Roteamento
Motor de
calculo
Globalcode – Open4education
Duas metades de um monolito
Roteamento Motor de calculo
HTTP
RoteamentoRoteamento
Globalcode – Open4education
Separando o monolito.
Otimizamos o consumo de recursos,
tornamos os ciclos de entrega
independentes.
Globalcode – Open4education
Duas metades de um monolito
Roteamento Motor de calculo
HTTP
RoteamentoRoteamento
Globalcode – Open4education
Atualizando a stack de desenvolvimento.
Aumentamos de 1.000 r/m para 13.000
r/m
Globalcode – Open4education
Nossa aplicação é eficaz?
Globalcode – Open4education
Globalcode – Open4education
Síncrono e bloqueante
Globalcode – Open4education
Síncrono e bloqueante
Globalcode – Open4education
One thread per request model
Motor de calculo
HTTP
Thread
Thread
ThreadRequest
Request
Request
HTTP
HTTP
HTTP
HTTP
HTTP
Globalcode – Open4education
“Waiting within the servlet is an inefficient
operation as it is a blocking operation that
consumes a thread and other limited
resources.”
Java Servlet Specification 3.1
Globalcode – Open4education
Globalcode – Open4education
Globalcode – Open4education
Assíncrono e não bloqueante
Globalcode – Open4education
Source: https://www.infoq.com/articles/Servlet-and-Reactive-Stacks-Spring-Framework-5/
https://www.infoq.com/articles/Servlet-and-Reactive-Stacks-Spring-Framework-5/
Globalcode – Open4education
Alternativas ao Servlet API?
Globalcode – Open4education
Spring WebFlux
“For a non-blocking web stack to handle
concurrency with a small number of
threads and scale with fewer hardware
resources.”
Source: https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html
https://docs.spring.io/spring/docs/current/spring-framework-reference/web-reactive.html
Globalcode – Open4education
Spring WebFlux
Motor de calculoSelector Worker Thread
HTTP
HTTP
HTTP
HTTP
HTTP
HTTP
WEBFLUX
Globalcode – Open4education
Globalcode – Open4education
Globalcode – Open4education
Event Loop
Globalcode – Open4education
Mudando pra Spring Webflux e o
paradigma para reactive programming.
Aumentamos de 13.000 r/m para
19.000 r/m
Globalcode – Open4education
Nossa arquitetura é eficaz.
Nossa aplicação é eficaz.
Globalcode – Open4education
A integração dos microserviços é eficaz?
Globalcode – Open4education
Roteamento
HTTP
Motor de calculo
HTTP
HTTP
HTTP
HTTP
HTTP
HTTP
WEBFLUX
Globalcode – Open4education
Roteamento
AMQP
AMQP
AMQP
AMQP
HTTP
HTTP
HTTP
WEBFLUX
Globalcode – Open4education
Adicionando um serviço de mensageria
para a comunicação dos microserviços.
Aumentamos de 19.000 r/m para
81.000 r/m
Globalcode – Open4education
Concluindo
13879
30370
19429
81537
0
10000
20000
30000
40000
50000
60000
70000
80000
90000
HTTP AMQP
MVC vs Webflux && HTTP vs AMQP
MVC WebFlux
Globalcode – Open4education
Concluindo
Realmente precisamos de Spring
WebFlux?
Globalcode – Open4education
/RRoggia
Códigos e baselines
de mvc e webflux