Duvida sobre arquitetura de uma aplicação robusta e escalável com grails
27/09/2013 14:22
0
Pessoal,

Estou começando a me aventurar com grails (já programo em java a longos anos). E tenho algumas dúvidas..

Vou iniciar um projeto pessoal (sem muita pressa), e vou aproveitá-lo para aprender uma tecnologia nova.

pretendo utilizar a plataforma Amazon AWS como infra pra essa aplicação, por motivos como preço, autoscaling, conhecimento, etc..

meu objetivo com essa aplicação é fazê-la suportar pelo menos 60.000 acessos diários. Desses 60K, 15K devem ser simultâneos, com um tempo de resposta não muito superior a 1 segundo.

Mesmo que não tenha toda essa carga, gostaria de desenvolve-la preparada para isso.

alguma dica de arquitetura, clusterização, otimização que possam me passar?

Abraço.
Tags: arquitetura cluster otimização escalável


0
Olá, Rafael.

Há uma máxima que diz que "a otimização prematura é a raiz de todo o mal". Não que não deva se preocupar com isso, mas não invista muito tempo nisso sem nem mesmo ter certeza absoluta da audiência do sistema. Muitos amigos meus começaram startups achando que teriam dezenas de milhares de acessos por dia mas após anos não chegam a poucos milhares por semana.

Em todos caso, com Grails há alguns plugins que ajudam muito nessa tarefa:
- Resources Plugin (já vem no Grails por padrão e pode ser otimizado)
- Cached resources plugin (muito simples de usar e muito útil)
- GZip resources plugin (não usei ainda, mas se fizer que promete é muitíssimo útil)
- Cache plugin (muito bom e muito fácil de usar. Bota o cache do browser pra funcionar mesmo)

Além de plugins, técnicas que são fáceis de implementar e ajudam muito:
- Cache de consultas GORM
- Tentar usar substituir "closures" por "for" comuns

Espero ter ajudado.

Abraços.


0
Yoshi,

Muito Obrigado... agora já tenho um norte.

Na verdade a preocupação com a performance é mais um objetivo pessoal de estudo/aprendizado que uma necessidade real (pelo menos nesse momento).

Uma dúvida que tenho, é em que versão do grails começar. Sei que acabaram de lançar a 2.3.0, mas li alguns relatos que não está "funcionando bem" em algumas IDE's, e minha experiência com JAVA me diz que não é uma boa "sufar na crista da onda", utilizando as versões mais novas (muito bug). Qual a versão mais estável até o momento?

Uma outra dúvida, é em relação ao hibernate. é possível não utilizá-lo? tenho uma experiência de performance ruim com ele (pode ser mau uso).

Obrigado.

27/09/2013 19:08


0
Olá, Rafael.

Amigo, se quiser usufruir de toda comodidade e produtividade que uma IDE proporciona não use a versão 2.3.x ainda. Mas se é daqueles "sou Chuck Norris e IDE é para os fracos mesmo para projetos grandes" então vá de 2.3.x heheheh.

Sim, pode usar Grails sem Hibernate, basta não usar o GORM. É possível usar JDBC com Groovy de maneira incrivelmente fácil. Dá uma procurada em "SQL Groovy" e afins no Google e veja os exemplos que há por ai.
Pode ainda usar o Spring Data, mas aí rola muito "Glue Code" na minha opinião.

Espero ter ajudado.


0
Olá Rafael.

Assim, eu estou usando o Grails Tool Suite com a versão 2.3.x por que as novas funcionalidades de rest ajudam muito e minha aplicação depende muito disso.

Pra mim está me agradando bastante não tive nenhum problema relacionado a esta IDE


0
Em relação a servidores de aplicação. Qual vocês recomendam? (pretendo rodar em cluster)
28/09/2013 16:26


0
só eu achei a IDE (Groovy & grails toosl suite) fornecida pela spring source muito lenta?
28/09/2013 16:37


0
Existe um trade-off nesta história que são os requisitos não-funcionais:
[list]
Performance
Segurança
Escalabilidade
Confiabilidade
Disponibilidade
Extensiabilidade
Gerenciabilidade
Manutenabilidade
[/list]

Para ter uma boa performance, no seu caso não sei qual a sua aplicação, mas uma aplicação que tenha um tempo de resposta em torno de 1seg. para 15 mil usuários simultâneamente poderá ser custoso, já que existem questões que fogem ao seu controle como latência da rede, por exemplo.

Vou lhe dar um outro exemplo:
Para ter muita segurança, você poderá ter níveis de camada a mais na sua aplicação, isso lhe faz perder na performance do sistema, porém um sistema muito rápido poderá exigir um nível baixo de confiabilidade ja que não terá muito controle de segurança, e por aí vai.

O conceito de performance é algo bastante amplo, pois você pode ganhar e perder por vários lados do mesmo problema, sem contar que existe o lado "humano" nisto, pois lhe garanto que somente um loading... pode causar uma impressão de velocidade ao seu usuário.

Outra análise da performance é a real necessidade dela, pois isto é custoso, ter o coconhecimento não significa que vai conseguir implementa-lo, para isso vou lhe dar outro exemplo. Em um artigo não muito antigo, 2006 para ser mais exato, foi concluído que para cada 100ms a mais no tempo de resposta a Amazon perde 1% de vendas. Ou seja, cada 100ms no tempo de resposta custa 1% de vendas _MUITA GRANA_ para a Amazon. Para atingir estes índices eles utilizam de Big Data, e por aí vai... A conclusão é que performance custa caro!

Antes de responder a sua pergunta quero apenas lhe mostrar os caminhos que você deve ter em mente antes de projetar a sua aplicação e defina-os muito bem, pois você sempre acaba perdendo em algum deles, a não ser que possua recursos ilimitados -financeiramente falando-.

O Grails comporta estas necessidades, uma vez que como você já deve estar concluíndo, a obtenção da performance não está somente no framework, mas em outras camadas, também, da sua aplicação. Acredito que para um projeto que deve ser desenvolvido de forma rápida e consistente o Grails atende muito bem a demanda, afinal temos todo o ganho da JVM com o Groovy além do Spring, Hibernate, GORM, DDD, DSL, e por aí vai.

Veja Rafael, a performance da sua aplicação vai estar atrelada em conhecer muito bem desde a JVM até esses frameworks e suas estruturas, afinal posso afirmar com ctz que a sua conclusão do Hibernate foi, não por mal uso, mas pela falta de conhecimento sobre ele, e mais uma vez voltamos a analisar a performance... Não estou lhe dando a conclusão final, mas mostrando uma forma diferente de pensar sobre o problema. Espero que tenha lhe ajudado de alguma forma.



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto