ARQUITETURAJAVA
escalandosuaaplicaçãoalémdohype
ahh o hype…
podemos escalar
SEM o hype…
Rafael Ponte
@rponte
ARQUITETURAJAVA
escalandosuaaplicaçãoalémdohype
Como escalar minha
app para MILHARES de
usuários?
Loja Virtual
Revisitando a Web…
servidor
servidor
navegador
servidor
navegador
servidor
requisição
navegador
servidor db
requisição
navegador
servidor db
requisição
resposta
navegador
servidor db
requisição
resposta
Performance 

X 

Escalabilidade
2conceitos
importantes
tempoderesposta
(responsetime)
navegador
servidor db
requisição
resposta
navegador
servidor db
requisição
resposta
tempo resposta
navegador
servidor db
requisição
resposta
tempo resposta: 100ms
operações/unidade_tempo
(throughput)
usuários/minuto
(throughput)
usuários/segundo
(throughput)
usuários/segundo
(throughput)
requisições/segundo
(throughput)
navegador
servidor db
requisição
resposta
navegador
servidor db
requisição
resposta
tempo resposta: 100ms
servidor db
requisição
resposta
tempo resposta: 100ms
servidor db
requisição
resposta
tempo resposta: 100ms
servidor db
requisição
resposta
tempo resposta: 1s
servidor db
requisição
resposta
tempo resposta: 7s
servidor db
requisição
resposta
tempo resposta: 24s
servidor db
requisição
resposta
tempo resposta: 0
nossaaplicaçãonãoescalamais
doque:80req/s
navegador
servidor db
requisição
resposta
throughput:80req/s
navegador
servidor db
requisição
resposta
throughput:250req/s
navegador
servidor db
requisição
resposta
throughput:1000req/s
PASSOS5
RESUMINDO EM
Passo 1

(TUNANDO A APLICAÇÃO)
navegador
servidor db
requisição
resposta
navegador
servidor db
requisição
resposta
JVM
2Gb
2Gb
???
2Gb
256Mb
2Gb
??Mb
2Gb
2Gb
2Gb
2Gb
=
2Gb
2Gb
=
X
2Gb
1Gb
2Gb
1Gb
-Xms256m	-Xmx1024m	

-XX:MaxPermSize=192m
2Gb
1Gb
-Xms256m	-Xmx1024m	

-XX:MaxPermSize=192m
2Gb
1Gb
-Xms256m	-Xmx1024m	

-XX:MaxPermSize=192m
minimo != maximo
2Gb
1Gb
-Xms1024m	-Xmx1024m	

-XX:MaxPermSize=192m
minimo = maximo
2Gb
1Gb
-Xms1024m	-Xmx1024m	

-XX:MaxPermSize=192m
HeapSize
2Gb
1Gb
-Xms1024m	-Xmx1024m	

-XX:MaxPermSize=192m
2Gb
1Gb
-Xms1024m	-Xmx1024m	

-XX:MaxPermSize=192m
PermGenSize
2Gb
1Gb
2Gb
1Gb
-Xms1024m	-Xmx1024m	

-XX:MaxPermSize=192m
memoria
2Gb
1Gb
-Xms1024m	-Xmx1024m	

-XX:MaxPermSize=192m
-server
modo servidor
memoria
2Gb
1Gb
-Xms1024m	-Xmx1024m	

-XX:MaxPermSize=192m
-XX:+UseConcMarkSweepGC

-XX:+CMSParallelRemarkEnabled
-server
modo servidor
memoria
coletor de lixo (GC)
Sistema

nãoaguenta?
Passo 2

(MELHORANDO A MÁQUINA)
navegador
servidor db
requisição
resposta
navegador
servidor db
requisição
resposta
cpu
memoria
X
x 6
x 6
Mais
requisições?
Escalabilidade Vertical
(scale up)
X
Sistema

nãoaguenta?
Passo 3

(ADICIONANDO MAIS MÁQUINAS)
navegador
servidor db
requisição
resposta
navegador
servidor db
requisição
resposta
ip?
200reqs
200reqs
100reqs100reqs
Balanceador
deCarga
Balanceador
deCarga
Balanceador
deCarga
Mais
requisições?
Cluster
Escalabilidade Horizontal
(scale out)
Apesardemais
barata…
(1a requisição)
(1a requisição)
Sessão
(2a requisição)
qual?
(2a requisição)
(2a requisição)
StickySession
♥
Masese…
?
?
Falta
Redundância
Passo 4

(REPLICANDO ESTADO)
(1arequisição)
(1arequisição)
(2arequisição)
(2arequisição)
Session
Replication
ReplicaEstado
Alta Disponibilidade
(high availability)
Mais
requisições?
Setenhomais
máquinas…
Replicarsessãoé
CARO
Passo 5

(REMOVENDO ESTADO)
ONDE?
CacheDistribuído
CacheDistribuído
CacheDistribuído
STATELESS
(shared nothing architecture)
Mais
requisições?
256GB
Todas
plataformas
Nãoescala
ainda…
Nuvens
esóentão…
@rponte
http://triadworks.com.br/
@triadworks

Arquitetura Java - Escalando além do Hype