Evitando Armadilhas no Projeto de Aplicações Java EE para uso eficaz na nuvem
1. Evitando Armadilhas no
Projeto de Aplicações Java EE
para uso eficaz na nuvem
Alberto Lemos (Dr. Spock) Danival Taffarel Calegari
Senior Software Architect Arquiteto na MATERA Systems
SpockNET Instrutor da Globalcode
2. Agenda
• Motivação
• Desafios ao implantar
aplicações Java EE na nuvem
• Dicas e truques
• Plataformas PaaS Java avaliadas
• Adaptador Java EE para
serviços na nuvem
3. Objetivo
“Prover algumas ideias para desenvolvedores e
arquitetos Java para ajudá-los a projetar
aplicações Java EE que funcionem bem em um
ambiente de nuvem”
4. Agenda
• Motivação
• Desafios ao implantar
aplicações Java EE na nuvem
• Dicas e truques
• Plataformas PaaS Java avaliadas
• Adaptador Java EE para
serviços na nuvem
5. Motivação
• Como computação em nuvem
pode afetar a arquitetura ou o
código de uma aplicação Java EE?
• As novas funcionalidades do Java
EE para nuvem tem como foco
apoiar um modelo PaaS para os
servidores de aplicações
• Não foram definidas novas
funcionalidades no modelo de
programação para utilização de
serviços da nuvem
6. Agenda
• Motivação
• Desafios ao implantar
aplicações Java EE na nuvem
• Dicas e truques
• Plataformas PaaS Java avaliadas
• Adaptador Java EE para
serviços na nuvem
12. Java EE Services
Persistence
Java EE Application
Messaging
Transaction
Java EE App Server
Security
Resource JVM
Cache Paas
Component
Operational System
Iaas
13. Java EE Services
Cloud Services
Persistence Persistence
Java EE Application
Messaging Messaging
Transaction Monitoring
Java EE App Server
Security Security
Resource JVM NoSQL
Cache Paas
Storage
Component ...
Operational System
Iaas
14. Java EE Services
Cloud Services
Persistence Persistence
JPA Java EE Application
Messaging Messaging
JMS
Transaction Monitoring
JTA Java EE App Server
Security Security
JAAS
Resource JVM NoSQL
JNDI
Cache Paas
Storage
Component ...
EJB Operational System non-std API
Iaas
23. 100 usuários
Balanceador de Carga
Máquina Virtual 10 usuários por VM
24. 100 usuários
Balanceador de Carga
Máquina Virtual 100 usuários em uma VM
25. 100 usuários
Balanceador de Carga
Máquina Virtual 100 usuários em uma VM
26. Agenda
• Motivação
• Desafios ao implantar
aplicações Java EE na nuvem
• Dicas e truques
• Plataformas PaaS Java avaliadas
• Adaptador Java EE para
serviços na nuvem
29. Database A
Java EE Application
Database Server 1
Java EE Server
Database B
App 1 App 2 Database C
Application Server X Application Server Y Database Server 2
32. Database A
Java EE Application
Database Server 1
Java EE Server
Database B
App 1 App 2 Database C
Application Server X Application Server Y Database Server 2
33. Load Balancer
Load Balancer Server
Java EE Application Java EE Application Java EE Application Java EE Application
Java EE Server Java EE Server Java EE Server Java EE Server
App 1 App 2 Database A Database B Database C
Application Server X Application Server Y Database Server 1 Database Server 2
34. Load Balancer
Load Balancer Server
Java EE Application Java EE Application Java EE Application Java EE Application
Java EE Server Java EE Server Java EE Server Java EE Server
App 1 App 2 Database A Database B Database C
Application Server X Application Server Y Database Server 1 Database Server 2
35. Desafios para Elasticidade
• Gerenciamento de estato
• Tempo de inicialização da aplicação
• Complexidade de comunicação
• Descoberta de recursos
36. Gerenciamento de Estado
• Procure criar serviços sem estado (stateless)
• Use EJB stateless
• REST.
• JAX-RS.
• Funcionalidades de JSF
• Armazenamento de estado no cliente.
• Navegação preemptiva (bookmarkable URLs).
37. Gerenciamento de Estado
• Armazene o estado em uma solução de
cache distribuído
• Memcached, Infinispan, Oracle Coherence, etc.
• JSR 107 (JCache) planejado para Java EE 7.
• Cuidado com o alto custo de transferência de
dados pela rede.
38. Tempo de inicialização da aplicação
• Reduza o tamanho do pacote da aplicação.
• Coloque recursos estáticos em pacotes
separados.
• Recursos estáticos podem ser colocados em
serviços de conteúdo.
• Prefira carregar os recursos de forma lazy.
39. Complexidade de comunicação
• Desacople as aplicações usando mensagens
assíncronas.
• Crie serviços atômicos e idempotentes.
• Mantenha os dados dinâmicos próximos da
aplicação e dados estáticos próximos do
usuário final.
• Considere fazer particionamento de banco de
dados (shards).
40. Load Balancer
Load Balancer Server
Java EE Application Java EE Application Java EE Application Java EE Application
Java EE Server Java EE Server Java EE Server Java EE Server
App 1 App 2 Database A Database B Database C
Application Server X Application Server Y Database Server 1 Database Server 2
41. Load Balancer
Load Balancer Server
Java EE Application Java EE Application Java EE Application Java EE Application
Java EE Server Java EE Server Java EE Server Java EE Server
Serviço de Mensagem
App 1 App 2
Application Server X Application Server Y
42. Load Balancer
Load Balancer Server
Java EE Application Java EE Application Java EE Application Java EE Application
Java EE Server Java EE Server Java EE Server Java EE Server
Database A Database B Database C
Database Server 1 Database Server 2
43. Load Balancer
Load Balancer Server
Java EE Application Java EE Application Java EE Application Java EE Application
Java EE Server Java EE Server Java EE Server Java EE Server
Zone 01 Zone 02
Database A Database B Database C
Database Server 1 Database Server 2
44. Load Balancer
Load Balancer Server
Java EE Application Java EE Application Java EE Application Java EE Application
Java EE Server Java EE Server Java EE Server Java EE Server
DB A - S01 DB B - S01 DB C - S01 DB A - S02 DB B - S02 DB C - S02
Database Server 1 S01 Database Server 2 S01 Database Server 1 S02 Database Server 2 S02
Zone 01 Zone 02
45. Descoberta de recursos
• Deixe o gerenciamento de recursos para o
container
• Localização de recursos se torna
transparente para a aplicação com o uso
de CDI.
• Use balanceadores de carga para acessar
recursos internos.
46. Load Balancer
Load Balancer Server
Java EE Application Java EE Application Java EE Application Java EE Application
Java EE Server Java EE Server Java EE Server Java EE Server
DB A DB B DB C DB A DB B DB C
Database Server I Database Server 2 Database Server 3 Database Server 4
47. Load Balancer
Load Balancer Server
Java EE Application Java EE Application Java EE Application Java EE Application
Java EE Server Java EE Server Java EE Server Java EE Server
Load Balancer
DB A DB B DB C DB A DB B DB C
Database Server I Database Server 2 Database Server 3 Database Server 4
48. Load Balancer
Load Balancer Server
Java EE Application Java EE Application Java EE Application Java EE Application
Java EE Server Java EE Server Java EE Server Java EE Server
Load Balancer
DB A DB B DB C DB A DB B DB C
Database Server I Database Server 2 Database Server 3 Database Server 4
49. Agenda
• Motivação
• Desafios ao implantar
aplicações Java EE na nuvem
• Dicas e truques
• Plataformas PaaS Java avaliadas
• Adaptador Java EE para
serviços na nuvem
51. Últimas dicas!
• Prefira um provedor de nuvem que
ofereça a pilha completa de Java EE.
• Use CDI para ter suporte a um
modelo de componentes de
negócio injetáveis em um provedor
de nuvem que ofereça PaaS com
apenas container Web.
• Evite serviços de nuvem
proprietários para não fica preso
ao provedor de nuvem.
52. Agenda
• Motivação
• Desafios ao implantar
aplicações Java EE na nuvem
• Dicas e truques
• Plataformas PaaS Java avaliadas
• Adaptador Java EE para
serviços na nuvem
53. Uma visão do futuro!
Java EE Application • Glassfish para Amazon
Web Services
Java EE App Server • Glassfish para Oracle
Java EE Services Cloud
Cloud Adapter
• Application Servers para
ambiente IaaS
Cloud Services
Cloud Provider
54. Obrigado!
• Alberto Lemos (Dr. Spock)
@drspockbr
javaone@spock.com.br
• Danival T. Calegari
@danivaltc
danivaltc@gmail.com