Posts Tagged ‘XML’

Palestra: Arquitetura para aplicações Java de médio porte – Falando em Java 2009

maio 25, 2009

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

  • JSON x XML x WSDL (podem gerar problemas de tamanho de arquivo e compactação).

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 dejava.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:

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).

Anúncios

Palestra: WebServices RESTful – Falando em Java 2009

maio 25, 2009

WebServices RESTful

Palestra apresentada por Jim Webber (ThoughtWorks)

Introdução

Jim, que na minha opinião, foi o melhor palestrante do evento, fechou o evento falando do mesmo assunto que seria destinado a Bill Burke, WebServices RESTful. Após apresentar sua MiniBio ele apresentou os tópicos da apresentação:

  • The Richardson Maturity Model;
  • Web Architecture;
  • Tunneling and POX;
  • URI templates and CRUD Services;
  • Hypermedia Formats;
  • RESTful Services.

The Richardson Maturity Model

O modelo de maturidade Richardson é definido em quatro níveis:

  • Level 0: SOAP, XML, RPC, POX (single URI);
  • Level 1: URI tunneling (muitas URI’s, único verbo);
  • Level 2: Muitas URI’s, muitos verbos (CRUD Services – Modelo Amazon S3);
  • Level 3: Level 2 + Hypermedia (RESTful Services).

Web Architecture

  • Conceito Web: baseada em recursos, acessada por URI’s (nunca diga URL’s: Deus mata crianças e gatos se você fizer isso, de acordo com Jim), arquivada em meios físicos, acessada por meios lógicos (WebServices) e distribuída para aplicações finais (usuários). Tudo é baseado em verbos HTTP;
  • Tudo é acessado via URI’s. URI é um endereço de acesso a recurso(s) de sistema(s);
  • A Web é muito poderosa: é escalável, tolerante a falhas, recuperável, tem baixo acoplamento, interface uniforme, modelo stateless e fail-over fácil;
  • HTTPS é uma tecnologia madura (baseada em SSL) e deve ser aplicada na Web;
  • Web != REST  (não abuse da Web).

Tunneling and POX

  • URI tunneling Pattern: URI’s com assinatura padrão e facilidade de manutenção, acesso e mapeamento;
  • URI tunneling Strengths: muito fácil entendimento e usabilidade em outras linguagens;
  • POX Pattern: como “parsear” padrões de texto, processá-los e disponibilizar as informações de envio;
  • POX Strenghts: simples, apenas usa HTTP POST e XML, facilidade de reuso, sem suporte a metadados;

URI templates and CRUD Services

  • Web já detém a maioria dos recursos. Deve-se usar o CRUD e pensar nele como base (Jim apresentou exemplos de sinalização de mensagens usando GET, POST, PUT, DELETE);
  • CRUD é bom? Sim, mas CRUD não é REST. Modelo CRUD ainda é muito implementado para armazenar dados somente.

Hypermedia Formats & RESTful Services

  • Microformatos na semântica W3C;
  • RESTful services é o level 3 (media type rules!). Logo é preciso implementar formatos hypermedia e XML (e/ou Application XML) não pode conter links. Do contrário não é nível 3;
  • Application /vnd.restbucks + XML: é o formato XML para hypermedia; não é padrão para a IANA;
  • Links descrevem protocolos, fluxo, regra de negócio. Logo podemos pensar em “Link as API” e tudo como framework;
  • Se você não tem hypermidia você não tem o RESTful;
  • Use a Web para escalabilidade massiva, mas com tolerância;
  • HTTP tem estados e header para todas as situações. Queremos ter baixo acoplamento e isso pode ser auxiliado por meio dos links hypermidia.

Para finalizar Jim Webber deixou um link de um artigo seu escrito para o InfoQ, contendo os mesmos exemplos da apresentação. Agradeceu a recepção e o interesse do público brasileiro. Da minha parte fica a impressão de quão incrível são os palestrantes internacionais e a desenvoltura para fazer apresentação e explanação de idéias sem igual.