Opinião sobre Arquitetura / Performace

Olá pessoal!
Estou desenvolvendo um projeto aqui na empresa onde a camada de visão será desenvolvida em Flex e as regras de negócio e persistencia em Java com JPA/Hibernate usando banco Postgre.
O pessoal aqui da empresa cogitou a idéia de colocarmos essa aplicação em nossa hospedagem e utilizarmos bases diferentes para cada cliente, ou seja, todos os nossos clientes usariam a mesma aplicação mas que acessaria a base de cada cliente. Os usuários por cliente podem variar, 10, 50…(espero que tenha sido claro rsrs)
Bom, atualmente nossa hospedagem tem a seguinte infraestrutura:
Sistema Operacional Linux RedHat Enterprise
Webserver Apache
Placa de rede PCI Intel 100 Mbits
Servidores 2 x Xeon Quad Core
256 mb de ram para JVM

Conforme for a demanda, passaremos para uma hospedagem dedicada, collocation etc…
Não tenho muita esperiência ainda, então gostaria da opinião de vocês sobre trabalhar dessa maneira.!
É uma boa opção fazer isso? ou seria melhor eu contratar uma hospedagem para cada cliente e trabalar individualmente? Nessa segunda opção eu teria que estar sempre controlando as atualização para cada cliente, teria que fazer um maior controle…

O que vocês acham!?

Desde já agradeço!

Abraços a todos!

Leonardo.

Perguntinha legal essa… com certeza dá uma boa discussão …

A questão é Todos irão compartilhar a mesma a aplicação, na mesma VM?

Não seria interessante cada cliente ter sua Instancia de aplicação? Todos compartilham as bibliotecas core da sua aplicação mas, se vc tiver 3 clientes, deverá ter 3 aplicações rodando…
Dessa forma acredito que possa até ser mais fácil vc ter estatisticas de consumo de memória (Afinal vc pode ter um cliente Glutão e como vc saberá quem é quem?) e até migrar clientes de máquina quando for o caso.

Outra grande questão… em relação a “divisão dos bancos de dados”, vc terá de pré autenticar um usuario para a seguir saber qual o DB que ele irá utilizar, e não bastando outra questão que me surge na cabeça são os Pools de conexão vc deverá possuir vários pools, e sua aplicação deverá escolhelos em tempo de execução…

Aliás qual o servidor J2EE?

[]s

Para tudo temos o bom e velho ‘depende’… rsrrs

Pq vcs não fazem testes de carga. Criem uma POC… um cadastro basico, por exemplo.

Tudo pode ser muito relativo.

Mas de cara 256 mb para JVM na minha opinião é muito pouco. Mas isso não é regra, vai depender muito da sua aplicação.

Olá

Assim de olhômetro parece pouco. O planejamento de capacidade não dá para ser feito assim no chute sem saber dados mais precisos da aplicação.

[]s
Luca

[quote=cristian_clever]Perguntinha legal essa… com certeza dá uma boa discussão …

A questão é Todos irão compartilhar a mesma a aplicação, na mesma VM?

Não seria interessante cada cliente ter sua Instancia de aplicação? Todos compartilham as bibliotecas core da sua aplicação mas, se vc tiver 3 clientes, deverá ter 3 aplicações rodando…
Dessa forma acredito que possa até ser mais fácil vc ter estatisticas de consumo de memória (Afinal vc pode ter um cliente Glutão e como vc saberá quem é quem?) e até migrar clientes de máquina quando for o caso.

Outra grande questão… em relação a “divisão dos bancos de dados”, vc terá de pré autenticar um usuario para a seguir saber qual o DB que ele irá utilizar, e não bastando outra questão que me surge na cabeça são os Pools de conexão vc deverá possuir vários pools, e sua aplicação deverá escolhelos em tempo de execução…

Aliás qual o servidor J2EE?

[]s[/quote]

Olá Cristian!!
Então, eu vou ter um banco para cada cliente!!! No meu persistence.xml vou ter uma PU para cara cliente com o pool C3P0 configurado!! Não sei se seria esse a melhor maneira de fazer!! Ainda não sou um expert no assunto, rsrsr!!!
Em princípio usaremos TomCat, nesse caso como eu teria uma instância para cada aplicação?

Grato pela ajuda!!!

Bom dia Leonardo, desculpe a demora!

Isso com certeza mereceria uma pesquisa… a principio a ideia de “pedreiro” seria rodar um script de deploy para cada cliente mantendo assim uma APLICAÇÂO para cada um dos seus clientes… dessa forma seria acredito que até mais simples futuras customizações/Alterações. Lembrnado que sua biblioteca Core iria conter toda sua aplicação de forma que todos iriao apontar para um mesmo .jar.

A ideia precisa ser melhorada!

Legal Cristian!!!
Obrigado pela ajuda, vou rever isso para chegar numa melhor solução!

Valew!

[quote=cristian_clever]Bom dia Leonardo, desculpe a demora!

Isso com certeza mereceria uma pesquisa… a principio a ideia de “pedreiro” seria rodar um script de deploy para cada cliente mantendo assim uma APLICAÇÂO para cada um dos seus clientes… dessa forma seria acredito que até mais simples futuras customizações/Alterações. Lembrnado que sua biblioteca Core iria conter toda sua aplicação de forma que todos iriao apontar para um mesmo .jar.

A ideia precisa ser melhorada!
[/quote]

[quote=leonardo.carbone]Olá pessoal!
Estou desenvolvendo um projeto aqui na empresa onde a camada de visão será desenvolvida em Flex e as regras de negócio e persistencia em Java com JPA/Hibernate usando banco Postgre.
O pessoal aqui da empresa cogitou a idéia de colocarmos essa aplicação em nossa hospedagem e utilizarmos bases diferentes para cada cliente, ou seja, todos os nossos clientes usariam a mesma aplicação mas que acessaria a base de cada cliente. Os usuários por cliente podem variar, 10, 50…(espero que tenha sido claro rsrs)

O que vocês acham!?

[/quote]

Eu acho má ideia. Quando vc precisam adicionar features ( e acredite que irá fazer isso) terá que as adiconar para todos os clientes já que a aplicação é apenas uma. Do ponto de vista da aquitetura isso viola o conceito de deploy e um pesadelo para segurança.

O unico jeito disso funcionar é se vc tem controlo total sobre as features da aplicação.Ou seja, é um produto que vc vende como serviço e não evolui ondemand (como o Google Docs , por exemplo). Caso contrário não é boa ideia.

Porque um banco de dados para cada cliente? isso parece loucura…

Imagina quando tiver que atualizar o banco… vai rodar o script em cada um deles?

Dá uma olhada nesse artigo:

http://msdn.microsoft.com/en-us/library/aa479069.aspx

Sim, é msdn, mas eles não propoe produtos, apenas discute o problema e propeo solucoes sem citar produtos…

Leia principalmente a 2a parte, Multi-Tenant Data Architecture

Pelo que entendi, eu teria que ter uma aplicação para cada cliente, ou seja, na pior das hipóteses, se eu não contratar um datacenter para colocar as aplicações teria que contratar uma hospedagem Java para cada cliente, estou correto!? OK, mas no meu projeto se eu precisar adicionar uma customização para um cliente eu faria um deploy para o cliente especifico! Se eu precisar fazer um deploy para outro cliente, essas alterações iriam junto,
Na verdade das duas maneiras eu vou ter que controlar isso !!

Eu acho má ideia. Quando vc precisam adicionar features ( e acredite que irá fazer isso) terá que as adiconar para todos os clientes já que a aplicação é apenas uma. Do ponto de vista da aquitetura isso viola o conceito de deploy e um pesadelo para segurança.

O unico jeito disso funcionar é se vc tem controlo total sobre as features da aplicação.Ou seja, é um produto que vc vende como serviço e não evolui ondemand (como o Google Docs , por exemplo). Caso contrário não é boa ideia.[/quote]