Arquitetura para aplicações Java de médio porte
Palestra apresentada por Guilherme Moreira e Sergio Lopes (Caelum)
A palestra teve como foco o crescimento de sites ou aplicações Web, que ocorrendo de forma desordenada e sem planejamento tendem a gerar downtime, timeouts de resposta, inconsistência de dados, etc. Com isso perde-se dinheiro; as vezes muito dinheiro. Tendo como base esses tipos de aplicações os palestrantes abordaram problemas passíves de ocorrer, análise e as possíveis soluções a serem tomadas.
Problema 1: SOAP e gargalo de Rede
Solução: Uso do Fast Infoset (FI), que compacta XML (em até 30%) e tem performance.
Problema 2: Hibernate não otimizado
- Banco de Dados é o gargalo (famosa primeira conclusão).
Solução:
- Conhecer o cache de primeiro nível e evitar de carregar muitos objetos na memória (risco de “java.lang.OutOfMemoryError: Java heap space”);
- Aprender a usar “stateless session“.
- Cuidado com o “n+1 selects“;
- Aprenda a usar as configurações certas do Hibernate (“@BatchSize“, por exemplo).
Problema 3: BD sobrecarregado
Solução:
- Abrir conexões somente quando for necessário;
- Use pool para reaproveitar conexões entre requests;
- Só inicie transações quando for necessário;
- Evite o uso do BD o tempo todo;
- Use cache!
Problema 4: indisponibilidade
Solução:
- Uso de cluster. Vantagens: escalabilidade e disponibilidade. Desvantagens: performance e não-simplicidade;
- Uso de load balance. Vantagens e Desvantagens idênticas ao caso do cluster;
- Gerenciar estados do cluster: Sticky Sessions (caiu a sessão, acabou), replicação (manda os dados para outra máquina) ou stateless (s/ estado nenhum. “Pra que estado?…rs”).
Após as apresentações dos “problemas-análise-solução” ambos palestrantes colocaram a prova e ao vivo uma demo de máquinas em cluster e load balance usando JBoss. Resultado : FAIL! Isso provou que mesmo tendo experiência no assunto, preparando anteriormente a demo, usando bons micros e outros poréns, é certo que algo pode ocorrer e que outros fatores podem influenciar.
Outras idéias para análise de arquiteturas:
- Hibernate (extra lazy, statistcs, basic + updates);
- Uso de bancos não relacionais;
- Processamento assíncrono;
- Profiling;
- Lucene.
Para finalizar eles deixaram uma frase de Martin Fowler para pensar: “Primeira Lei do Design de distribuição de objetos: Não distribua seus objetos” (Nem sempre o gargalo é a rede…).
É importante ressaltar novamente que na palestra houve a apresentação de códigos conforme os exemplos foram passados. Isso facilitou e muito o entendimento do público (tirando a falha na apresentação do cluster).


