Arquitetura em sistema com vários módulos

13 respostas
j0nny

Gostaria de uma opinião de vocês.
Estou modelando um sistema que terá vários módulos (cada módulo uma app), um módulo principal terá as informações do meu cliente, usuário, permissões de acesso, etc.

Terá outro módulo A que usará as infomações do módulo principal, como dados de cliente, usuário e etc. O módulo B a mesma coisa.

Como faria pra persistir e manter esses dados atualizados?
Por exemplo, a tabela ‘venda’ do módulo A vai precisar do id do meu cliente, para poder fazer o multi tenancy, e quando alterado o usuário no módulo principal, essas informações precisarão ser atualizadas em todos os módulos.

Qual a melhor abordagem para isso?

13 Respostas

leonhard32

j0nny:
Gostaria de uma opinião de vocês.
Estou modelando um sistema que terá vários módulos (cada módulo uma app), um módulo principal terá as informações do meu cliente, usuário, permissões de acesso, etc.

Terá outro módulo A que usará as infomações do módulo principal, como dados de cliente, usuário e etc. O módulo B a mesma coisa.

Como faria pra persistir e manter esses dados atualizados?
Por exemplo, a tabela ‘venda’ do módulo A vai precisar do id do meu cliente, para poder fazer o multi tenancy, e quando alterado o usuário no módulo principal, essas informações precisarão ser atualizadas em todos os módulos.

Qual a melhor abordagem para isso?

Você diz, 3 apps, 3 threads executando? 3 App distintas ou um app modularizada com uma thread inicial?

[]'s

j0nny

leonhard32:
j0nny:
Gostaria de uma opinião de vocês.
Estou modelando um sistema que terá vários módulos (cada módulo uma app), um módulo principal terá as informações do meu cliente, usuário, permissões de acesso, etc.

Terá outro módulo A que usará as infomações do módulo principal, como dados de cliente, usuário e etc. O módulo B a mesma coisa.

Como faria pra persistir e manter esses dados atualizados?
Por exemplo, a tabela ‘venda’ do módulo A vai precisar do id do meu cliente, para poder fazer o multi tenancy, e quando alterado o usuário no módulo principal, essas informações precisarão ser atualizadas em todos os módulos.

Qual a melhor abordagem para isso?

Você diz, 3 apps, 3 threads executando? 3 App distintas ou um app modularizada com uma thread inicial?

[]'s

3 apps distintas.

leonhard32

j0nny:
leonhard32:
j0nny:
Gostaria de uma opinião de vocês.
Estou modelando um sistema que terá vários módulos (cada módulo uma app), um módulo principal terá as informações do meu cliente, usuário, permissões de acesso, etc.

Terá outro módulo A que usará as infomações do módulo principal, como dados de cliente, usuário e etc. O módulo B a mesma coisa.

Como faria pra persistir e manter esses dados atualizados?
Por exemplo, a tabela ‘venda’ do módulo A vai precisar do id do meu cliente, para poder fazer o multi tenancy, e quando alterado o usuário no módulo principal, essas informações precisarão ser atualizadas em todos os módulos.

Qual a melhor abordagem para isso?

Você diz, 3 apps, 3 threads executando? 3 App distintas ou um app modularizada com uma thread inicial?

[]'s

3 apps distintas.

Então, acho que o esquema seria implementar as regras de forma distribuida, através de EJB ou Webservice mesmo.
Caso ja tenha visto algo sobre EJB e JMS, vale dar uma procurada sobre MOM.

[]'s

j0nny

leonhard32:
j0nny:
leonhard32:
j0nny:
Gostaria de uma opinião de vocês.
Estou modelando um sistema que terá vários módulos (cada módulo uma app), um módulo principal terá as informações do meu cliente, usuário, permissões de acesso, etc.

Terá outro módulo A que usará as infomações do módulo principal, como dados de cliente, usuário e etc. O módulo B a mesma coisa.

Como faria pra persistir e manter esses dados atualizados?
Por exemplo, a tabela ‘venda’ do módulo A vai precisar do id do meu cliente, para poder fazer o multi tenancy, e quando alterado o usuário no módulo principal, essas informações precisarão ser atualizadas em todos os módulos.

Qual a melhor abordagem para isso?

Você diz, 3 apps, 3 threads executando? 3 App distintas ou um app modularizada com uma thread inicial?

[]'s

3 apps distintas.

Então, acho que o esquema seria implementar as regras de forma distribuida, através de EJB ou Webservice mesmo.
Caso ja tenha visto algo sobre EJB e JMS, vale dar uma procurada sobre MOM.

[]'s

Não usarei nada de EJB e afins, a princípio nem usarei Java.
Queria mais a abordagem, arquitetura, e não tecnologia.

leonhard32

j0nny:
leonhard32:
j0nny:
leonhard32:
j0nny:
Gostaria de uma opinião de vocês.
Estou modelando um sistema que terá vários módulos (cada módulo uma app), um módulo principal terá as informações do meu cliente, usuário, permissões de acesso, etc.

Terá outro módulo A que usará as infomações do módulo principal, como dados de cliente, usuário e etc. O módulo B a mesma coisa.

Como faria pra persistir e manter esses dados atualizados?
Por exemplo, a tabela ‘venda’ do módulo A vai precisar do id do meu cliente, para poder fazer o multi tenancy, e quando alterado o usuário no módulo principal, essas informações precisarão ser atualizadas em todos os módulos.

Qual a melhor abordagem para isso?

Você diz, 3 apps, 3 threads executando? 3 App distintas ou um app modularizada com uma thread inicial?

[]'s

3 apps distintas.

Então, acho que o esquema seria implementar as regras de forma distribuida, através de EJB ou Webservice mesmo.
Caso ja tenha visto algo sobre EJB e JMS, vale dar uma procurada sobre MOM.

[]'s

Não usarei nada de EJB e afins, a princípio nem usarei Java.
Queria mais a abordagem, arquitetura, e não tecnologia.

Certo, então, abordagens eu vejo duas:

  • SOA
  • MOM

[]'s

clunsde

Você vai duplicar os dados em todos os módulos?

j0nny

Alguns dados, como usuário, empresa, etc, estarão em todos os módulos.

clunsde

Esses módulos vão ficar em servidores separados? Seria estranho um pouco ficar duplicando dados, no geral eu utilizaria REST para comunicação entre os módulos. Para autenticação utilizaria um SSO.

j0nny

Não é uma regra estarem em servidores separados, mas pode ocorrer.
Sobre REST, a cada item que, por exemplo, eu precisar verificar se aquele usuário tem permissão para X ação, ter que fazer uma conexão a outro servidor, ficaria inviável, na minha opinião.

Autenticação SSO é uma boa alternativa, apesar da autenticação não ser o maior dos problemas nesse caso.

clunsde

Você irá fazer o usuário se logar em cada módulo?

j0nny

Para ter acesso a qualquer módulo, vai ser necessário estar logado, mas uma vez logado em qualquer módulo, estará logado nos outros, como o Google faz. Pra isso o SSO.

clunsde

Então jovem, SSO pode trazer todas as informações de autorização … são muitas possibilidades, problema é que eu não sei como será o seu sistema realmente, não sei se vai colocar no mesmo servidor ou não vai, o porque de querer separar em módulos, que pode ser usado outras abordagens, mas isso depende do seu problema especifico.

javaflex

clunsde:
… são muitas possibilidades, problema é que eu não sei como será o seu sistema realmente, não sei se vai colocar no mesmo servidor ou não vai, o porque de querer separar em módulos, que pode ser usado outras abordagens, mas isso depende do seu problema especifico.


Exatamente. Fica complicado mesmo sem um cenário real. Se “pode ocorrer de estar em servidores separados ou não” isso realmente é uma necessidade real j0nny? Qual seria o problema para não centralizar o banco de dados? Isso não ficou claro na prática. Senão no final pode acabar matando formiga com canhão. O bom é parar e procurar saber o que os clientes envolvidos querem para atender o problema real e ver se realmente é necessário ir além de uma solução mais comum.

Criado 2 de outubro de 2013
Ultima resposta 12 de out. de 2013
Respostas 13
Participantes 4