Sistema Distribuído

Bom Dia Pessoal…

Estou distribuindo meu sistema, porém estou tendo alguns problemas.
Atualmente distribui da seguinte forma, cada item em um pc (diferentes vm):

  • WebServer + actions
  • Controls
  • DAO + model

Estou usando Spring em praticamente todas as partes do sistema (Hibernate, Controle Transação, RMI, etc…).

O sistema tem como requisito que o controle de transação seja feito nas controls, portanto, como estou usando o spring, na maquina onde estao as controls, eu preciso ter acesso ao bean sessionFactory para fazer o controle de transação, certo?

Aí veio o problema: Como os DAO’s estão em outra maquina, é nela que deve estar a configuração do spring com hibernate(DataSource, SessionFactory, etc…), certo? Porém, segundo o spring, preciso da mesma sessionFactory usada nos DAO para fazer o controle de transação nas controls. Como um sistema distribuído tudo é passado por cópia, acho q isso é complicado, naum?

Desde já agradeço…

Antes de qualquer coisa, por que você distribuiu o seu sistema assim? Porque tudo não executa em uma máquina só?

é um sistema muito grande… pode receber cerca de 2000 requisições simultâneas… portanto é essencial esta distribuição…

vc acha q tem alguma solução?

Isso ainda não justifica essa distribuição tosca. Se você quer usar um sistema distribuido, coloque toda uma parte do sistema e não só um pedaço em um tier.

Então crie business delegates/facades que implementem interfaces coarse-grained, coloque elas no AS e as chame dos controlers. Um controler não tem que se meter na lógica de negocio da tua aplicação gerenciando transações.

O que você quer é possivel usando transações distribuidas, mas vai ficar absudamente mais lento que se fosse um servidor apenas.

Vocês estão usando particionamento horizontal do comportamento, ou apenas vertical? Particionamento vertical, que é instroduzir um tier de processamento novo, quase nunca aumenta a performance se não existir partcionamento horizontal.

Me recomentação, contratem uma consultoria que saiba fazer isso, escalar sistemas, pois não é uma tarefas simples ou óbvia ou facil.

É essencial aumentar absurdamente a quantiade de tráfego desnecessário na rede?

O melhor a se fazer é colocar várias máquinas rodando o sistema, acessando o banco de dados e usar balanceamento de carga pra direcionar as requisições.

Do jeito que você está tentando distribuir, vai é matar a aplicação, que vai ter que ficar lá na espera da rede pra executar qualquer coisa.

Aproveitando, 2000 requisições simultâneas? De onde você tirou esse número, como calcularam?

Um site web que tenha boa usabilidade responde uma requisição em até 200milisegundos, então 2000 simultâneas significa na verdade 2000 * (1000/200) = 10mil requisições por segundo. Isso dá mais de 200 milhões de requisições por dia.

Atender tudo isso exige pelo menos uma centena de servidores. Vocês estimaram direito esse volume? Esse vai ser um dos 10 maiores portais do Brasil? Você tem certeza?