Dúvida na arquitetura de sistema com 2 servidores

pessoal, eu tenho um sistema em J2EE, q acessa um banco q esta em uma máquina, essa máquina serve só pra persistencia, e tenho outra máquina q ta rodando o JBoss, o servidor q executa o negocio q o cliente vai acessar, ai… qual a melhor forma de eu utilizar os padrões pra fazer esse servidor de negocios acessar o servidor do banco? eu coloquei a camada de DAO no servidor do banco, pras consultas serem locais, ficando mais rapido, e imaginei fazer um Facade pros métodos do DAO no servidor do banco, e esse facade seria acessado por um business delegate no servidor de negocios…, sem contar q esse servidor de negocios tb vai ter o seu facade… mas, isso não será muito pesado? digo, imaginem uma requisição do usuário, q teria q fazer uma operação no banco, o cara executa um método no business delegate do servidor de negocios, esse delegate acessa o facade do servidor de negocios, q por sua vez usa um ouuutro business delegate q faz uso do service locator pra achar o Facade do servidor do banco, q executa o método no DAO, q retorna esse método pro servidor dee negocios, e processa oq tiver q processar, mas… isso não fica muito lento? qual seria a melhor solução, repetindo, tenho 2 servidores, um dedicado somente a persistência, e outro pro negócio… e o DAO fica no servidor do banco, pra consulta ser mais rapida, certo? sugestões pra arquitetura??? :roll:

Olá matheus, acho que vc quer adicionar complexidade desnessaria a esse sistema, da maneira que vc descreveu fica de entendimento complicado. Para vc ter uma ideia, tive que ler seu post duas vezes para entender melhor. A questão é: vc não precisa colocar o acesso ao banco na maquina em que o ele está. Os motivos mais obvios que vejo são os seguintes:

  1. Vc adiciona complexidade como expliquei acima;
  2. Vc dificulta a manutenção: vai precisar mexer em dois lugares para fazer qualquer manutenção no sistema. Isso não parece interessante no seu caso;
  3. Vc terá um fluxo de dados diferente e mais complicado do que é o normal. O seu fluxo, numa simplificação de tudo que descreveu ficaria assim:
    cliente->aplicação->aplicação que acessa o banco->banco->faz caminho de volta.
    Isso poderia ser mudado para:
    cliente->aplicação->banco->faz caminho de volta.
    Aqui considero que a aplicação está por completo numa unica maquina e, ainda, que o banco está em outra. De qualquer maneira, acessando localmente ou não, suas informações vão precisar trafegar do banco para o cliente. Então, o ideal seria encurtar esse caminho.

valeuz…

Oi

Pelo Amor de Deus alguém tira o livro de Patterns da mão do Matheus… hahahaha…

Bom, como eu ja tinha falado com você, vão existir situações em que adotar os melhores padrões pode ser a pior das alternativas, anti-patterns tb são bons… :slight_smile:

T+

Olá Paulo,

Erhm, anti-patterns não são bons! O que essse topico revela é que nem sempre é melhor usar um conjundo de patterns. Patterns não devem ser usados apenas por que são fancy ou porque vai ser legal conversar sobre como vc montou uma superarquitetura de trocentas camadas para escrever um HelloWord. :grin:

Usar patterns onde eles não se encaixam é, por si só, um anti-pattern.

valeuz…

opa, então… seguinte, eu tenho um banco em uma máquina, e jboss na outra, a opnião seria eu deixar o código do DAO na mesma maquina de negocios e fazer a chamada a esses SQL’s via rede? resumidamente

Olá Paulo,

Erhm, anti-patterns não são bons! O que essse topico revela é que nem sempre é melhor usar um conjundo de patterns. Patterns não devem ser usados apenas por que são fancy ou porque vai ser legal conversar sobre como vc montou uma superarquitetura de trocentas camadas para escrever um HelloWord. :grin:

Usar patterns onde eles não se encaixam é, por si só, um anti-pattern.

valeuz…[/quote]

opa opa… Mas Jack, concordas que patterns em exagero não são bons, certo? Isso tb seria o mesmo que dizer que anti-patterns podem ser bons, certo?

T+

ta, mas eai, e eu? heheheah, é preferivel executar os SQLs do DAO via rede mesmo?

Acho isso mais interessante. Salvo engano, JDBC se comunica, por default, via TCP para garantir maior compatibilidade com os bancos. Seria mais interessante manter os DAOs na mesma maquina da aplicação porque, como disse antes, vc vai ter mais controle sobre a aplicação como um todo alem de facilitar a manutenção e simplificar. Depois, pense num esquema de load balance e cluster se tiver recursos.

Paulo, patterns em exagero realmente não são bons! Veja, patterns devem ser aplicados com consciência e em situações nas quais eles se encaixam. Alem disso, com certo cuidado em relação ao futuro da aplicação. Ora, não dá para usar singleton, por exemplo, em aplicações que precisarão ser altamente escalaveis e como isso está cada vez mais comum, singleton está indo para desuso.

É preciso decidir bem que patterns usar porque eles, apesar de bem documentados, geralmente aumentam a complexidade da aplicação como o matheus descreveu acima. Bom, para não me prolongar demais, anti-patterns devem ser evitados sempre que possivel. Alias, acho que o Franklin poderia falar mais sobre o assunto já que li sobre o assunto no blog dele. :wink:

valeuz…

legal jack, no final das contas, vou fazer os SQLs remotos mesmo, pq fica muito mais complexo se eu ter q deixar o DAO em uma máquina diferente realmente… só q, agora pedi demissão desse meu trabalho, e to mudando pra POA, haeheaheah, mas do mesmo, valeu a resposta pra problemas futuros :slight_smile: