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?
muitas aplicações distribuídas, na verdade, nunca precisaram ser assim.
“Probably the commonest cause of unnecessary complexity in J2EE applications is unnecessary use of distributed objects. In J2EE applications, distributed objects are usually implemented as EJBs with remote interfaces, so distribution goes hand in hand with EJB. Such distribution is especially questionable in web applications, but distribution also tends to be overused in other application types. Question any code that isn’t specific to the problem domain. One of the key lessons of XP is to do “the simplest thing that can possibly work”. This is particularly relevant to J2EE. Every J2EE developer should repeat this daily, whether or not he or she is comfortable with XP as a methodology. There are great benefits in finding the simplest architecture that can meet business requirements. Distributed applications are tremendously complex, even if J2EE and EJB can conceal much of the underlying infrastructure required. " (Rod Johnson, pai do Spring em “Expert One-on-One J2EE Development without EJB”)
Será que distribuir significa escalar!? Lembre-se: quando vc distribui vc tem custos de serialização/deserialização/transporte de rede envolvidos. Quando a aplicação é local, não…
Pois é, mas pra um sistema muito grande fica praticamente impossível deixar tudo em uma máquina só. Surge a necessidade de distribuir o processamento. Lógico que terá estes custos, mas será necessário…
Exato! Pense na sua infra-estrutura de hardware. Se vc tiver um server bom, acredito q nao irá precisar distribuir sua aplicação. Mas pense tbm em Tolerância a falha e alta disponibilidade…
Ah, segundo MArtin Fowler, a 1ª lei de objetos distribuídos é: “Vc nao precisa distribuir seus objetos” hahaha, não é bem assim, mas a idéia eh essa.
Bom, de qq forma, use o JMeter para fazer teste de carga na sua aplicação e veja se ela aguenta. Eu acredito q sim (caso nao tenha muita coisa na sessao)
acontece que algumas transações envolvem métodos de IA que usam muito recurso de processamento, muito mesmo… tornando quase impossível ficar tudo em uma máquina só…
Resumindo, o sistema tem que ser distribuído mesmo… o q acham?
Como eu não conheço sua arquitetura e o que, exatamente vc está distribuindo, fica difícil dar uma opinião. Mas, se eu estivesse no seu lugar, seguiria a cartilha: “fugir de distribuição como o diabo foge da cruz”. Afinal, Martin Fowler e Rod Johnson têm muito a ensinar sobre projetos.
Se precisar de uma consultoria em arquitetura, estamos aí…
[quote=“marcelo_mococa”]o teste de carga já foi feito… e pembou…rs
acontece que algumas transações envolvem métodos de IA que usam muito recurso de processamento, muito mesmo… tornando quase impossível ficar tudo em uma máquina só…
Resumindo, o sistema tem que ser distribuído mesmo… o q acham?[/quote]
É… se nao tem jeito mesmo, vai ter q distribuir, mas só mais uma coisa, ja tentou fazer profiling do seu projeto ? com ele da pra identificar gargalos do sistema, as vezes ainda da pra nao precisar distribuir hehehe…
Bom, como disse no primeiro tópico, acredito q o spring nao foi concebido para aplicações distribuídas… acho q vc vai ter q fazer uma integração com alguns EJBs :arrg: