Polêmica:Sistema 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.

cara…participei faz pouco tempo de um projeto q eu nem achei tão grande, mas era maior q esse q vc descreveu…

acessavamos 5 bases Oracle 1 Sybase, o container WebLogic tb em cluster…

utilizamos Struts, Tiles, EJB, DAO…

a média de usuários simultaneos era de 2000, a tabela de cadastro de pessoas tinha aproximadamente 1.5 milhão de registros…

quando o sistema foi pra produção tivemos problemas de performance,as threads começavam a enfileirar no weblogic…

no final das contas, o problema era de infra, leia weblogic…o banco tb nao era a melhor coisa do mundo, e teve q rolar um tunning…

todo mundo gosta de jogar a culpa na aplicação…mas pelo visto a arquitetura da aplicação de vcs foi feita com cuidado…então acredito q o caso seria tuning do weblogic e do banco…isso antes de re-escrever a aplicação…isso eh insano…

se quer refazer, refaça a analise completa, faz tudo do zero…

flw

E voces sabem qual ponto que esta degradando o desempenho?

o q o fabio falou eh excencial…tem q descobrir onde esta o “gargalo” antes de decidir re-escrever a aplicação…

vc havia falado em remover o hibernate e substituir pelo JDBC, cara, o Hibernate bem configurado, tem uma performance incrivel…tente revisar as configurações…principalmente do pool e do lazy nos relacionamentos 1…N

[quote=“pedrobusko”]o q o fabio falou eh excencial…tem q descobrir onde esta o “gargalo” antes de decidir re-escrever a aplicação…

vc havia falado em remover o hibernate e substituir pelo JDBC, cara, o Hibernate bem configurado, tem uma performance incrivel…tente revisar as configurações…principalmente do pool e do lazy nos relacionamentos 1…N[/quote]

Eu já tive esse tipo de problema. Chegava uma hora que o sistema pipoca, então tive que dar uma olhada em toda a arquitetura. A primeira idéia foi reescrever algumas coisas, mas depois de uma boa lida sobre tunnig do Hibernate, consegui configurar o pool de conexões da melhor forma possível… além de usar lazy loading sempre que possível.

Ao mudar para JDBC você ainda poderá ter o mesmo problema se não utilizar um com pool.

Não creio que o problema seja no POOL de conexões… Já que isso é algo tão simples e tão rotineiro de se usar…
Mas tenho certeza que por melhor que esteja configurado o hibernate, ele deixa muito a desejar para consultas onde há um número enorme de registros que retornam… Mesmo tendo um ótimo controle do Lazy, do cache de nível 2 por exemplo, o hibernate peca com resultados grandes…

Esses resultados grandes que vc fala seriam quanto ?
Estou desenvolvendo um sistema e quando tenho um retorno de uma consulta com mais de 1500 rows está muito lento.

Olhando o console do Tomcat ele quase endoida.

Isso é normal no Hibernate?