Polêmica: Arquitetura para sistema de grande porte(frameworks consagrados ou não ?)

Colegas,
Participo da equipe de desenvolvimento de um sistema web para uma empresa de Telecom.
Bem, este sistema vem apresentando uma performace degradante… o que levou a equipe de análise levantar a hipótese de rever o uso dos consagrados frameworks que utilizamos atualmente no projeto, cojitando a hipótese de reescrever o sistema utilizando uma arquitura diferente, substituíndo o Hibernate por JDBC puro, por exemplo.

Nosso sistema:

Utiliza os seguintes frameworks/aplicativos:

Struts 1.2
Tiles e Plugin Validator.
Hibernate 3.1
Spring 1.2
Oracle 9i
Weblogic 8.1

Dividido na estrutura:

JSPs(Templates tiles e páginas)
Actions do Struts.(Que chamam classes de negócios)
Classes de Negócios(com injeção de DAOs(Através do Spring)) que chamam métodos DAOs.
DAOs(Interfaces e implementações).

ob: nossa estrutura é bem parecida com o estrutura do projeto Equinox/Appfuse.

Nosso servidor Weblogic trabalha de modo clusterizado e nosso banco de dados Oracle também.
Temos tabelas com 300.000(trezentos mil) registros e tabelas com várias chaves estrangeiras(pedido, por exemplo).

Em momentos de pico, ou seja, muita utilização, temos de 450 à 500 usuários conectados utilizando o sistema simultâneamente.

Bem, eu gostaria de opniões de colegas que trabalham com softwares de grande porte feitos em Java, principalmente quanto a arquitetura e frameworks utilizados(ou não), ou seja, uma troca de experiência sobre este tipo de solução.

Qualquer opinão, sugestão, será bem vinda.

Ob: Não podemos utilizar Java 5 por causa da versão do Weblogic.

Amigo,

também já passei por problema parecido com o seu.
No nosso caso utilizamos algumas ferramentas que monitoram a performance do servidor de aplicação. Essas ferramentas mostram graficamente qtos objetos instanciados na memória, tempo de resposta de chamadas de objetos, jdbc, webservices, …

Tem uma da IBM e outra da Borland, mas não estou certo do nome.
Talvez outro amigo do fórum possa contribuir.

[]'s

como o colega já respondeu, vc precisa tentar identificar onde está o gargalo…

spring e hibernate sao largamente usados em sistemas grandes…

mas em todo caso, como vc falou de reescrever tudo em JDBC… veja se os sql’s não estão fazendo full scan… e se todas as queries usam indices.

Pois bem,

A idéia de identificar os ‘gargalos’ com ferramentas de medição/profile é extremamente válida e com certeza será utilizada. Mas minha dúvida maior é se esta arquitetura apresenteda é a mais correta para o porte do sistema, pois uma solução baseada apenas em JAVA(não estou dizendo que Hibernate não é Java), digo sem a utilização de frameworks, existe em vários projetos por ai no mercado.

Talvez, sendo mais direto, pergunto:

  • Qual tecnologias/frameworks, vocês usariam/utilizam/utilizaram em projetos de grande porte ?

Obrigado a todos pelas respotas.

Já trabalhei em sistema de grande porte usando Spring + Hibernate + Struts + WebServices tudo no Extend e usando Oracle.
Atualmente trabalho usando Spring (outra empresa) e Oracle.

Não tenho nada contra as frameworks. Acredito que não seja esse o motivo do baixo desempenho da sua aplicação.
Acho que todas as grandes aplicações comerciais usam alguma(s) framework(s)

Com as ferramentas de monitoria de performance, vc consegue ver qto de memória a aplicação está consumindo… qdade de objetos… tempo de resposta do BD. Isso vai te dar informações para te ajudar a tomar uma melhor decisão.

[]'s

Essa arquitetura quase que padrão (Struts + Spring + Hibernate + Oracle) é bastante utilizada em varios segmentos e funciona muito bem. O que tem que ser feito é um “tuning” das partes, por exemplo, indices do Oracle “em dia”, second-level cache do hibernate bem estruturado, lazy eficiente, objetos de tabelas “estaticas” eficientes, DAOs inteligentes, etc, pool de conexão gerenciado pelo conteiner, configuração do proprio appServer, etc.

Acho que framework não é sinonimo de má performance não, muito pelo contrário… usando JDBC vc terá um imenso trabalho para conectar uma politica de cache igual a do Hibernate.

Verifique primeiro onde está o gargalo, depois decida se vale abrir mão das facilidades dos FMW!

Acho que Echo2 seria bem válido hoje em dia.

A experiência me faz crer que isso deve ser problema relacionado a sua forma de lidar com o banco de dados, ou é o banco de dados em si. Lógico que um framework faz você perder performance em relação a um sistema muito bem escrito na munheca, mas não acredito que seja esse o problema e não acredito em escrever ‘muito bem escrito’ na munheca em prazos curtos (acaba virando colcha de retalhos).

Verifique principalmente a questão dos índices. Quando usamos joins de tabelas grandes com tabelas grandes (por exemplo cliente com faturamento), a falta de índices nas ligações tendem a degradar a performance pois o banco de dados faz o que se chama de table scan (lê registro a registro) e isso tem um custo operacional alto. O que muitos programadores fazem (na verdade isso deveria ser tarefa dos DBA, mas eles normalmente estão muuuuuiiito atarefados para ajudar) é criar a chave primária na tabela de clientes e esquecer do índice de clientes na tabela de faturamento.

De resto, acho que o pessoal já falou tudo…

abraços e boa sorte