Arquitetura em aplicativo web multicliente

[quote=asaudate]Nunca precisei desenvolver usando multi-tenancy, mas já ouvi vários relatos de prós e contras (nesse mesmo tópico, inclusive).
Acho que tudo é questão de desenvolver orientado a evolução. O pessoal do twitter desenvolveu a coisa toda usando MySQL. Quando precisou, eles mudaram, escalaram, enfim… tudo é questão de como você desenvolve. Se você souber que existe uma chance de ter que modificar sua infra-estrutura, não seja dependente dela![/quote]

É verdade, separando as camadas e usando um ORM, na hora de uma migração muita coisa é aproveitado.

Concordo com o asaudate
Se necessário mais para frente, mude !!!

E é o que eu falei antes… não tem certo ou errado… melhor ou pior…
Tem o que melhor se adequa às suas nececidades no momento.

Por exemplo a minha:
:arrow: Não quero que um cliente concorra com as transações dos demais clientes;
:arrow: Minha aplicação, depois de estabilizada, não tende a ter muitas atualizações;
:arrow: Alguns clientes poderão solicitar que o banco de dados fique em seu servidor e não no da aplicação;
:arrow: Entre outros.

Por esses motivos vou planejar o meu sistema tendo um banco de dados intermediário que fará a autenticação do usuário (relação de cliente x usuário) e depois de autenticado vou direcionar cada cliente para o seu bando de dados.

Futuramente, se o sistema der certo no mercado, posso pensar em um banco só se esta for a necessidade.

Mudar sempre vai, o problema é prestar uma qualidade minima no serviço, e que essa mudança seja a longo prazo.

Também creio que não tem certo ou errado, só não posso aceitar métodos/soluções sem argumentos realmente válidos.

Minha dúvida sobre performance, por exemplo, quando o banco é centralizado não foi respondida!
Simplesmente pq é um problema, e fica dependendo do servidor para disponibilizar um bom serviço.

Mas o tópico foi muito bom, agradeço a todos pelas respostas e contribuições.

Vou estudar mais antes de propor algo para a empresa.

A performance, obviamente, fica abaixo do que em bancos separados. O ponto central continua sendo sua necessidade. Se fosse ótimo ficar no mesmo banco, essa discussão não teria motivo para existir.

[]'s

Essa questão sobre compartilhamento de transações num banco único me alertou, vou pesquisar mais sobre isso.
Pq estou prestes a iniciar uma app SAAS, e essas discussões são muito valiosas.

É sim… foi um tópico muito bom !!!

Também agradeço a participação de todos !!!

Mas a discussão não pode parar.
Por exemplo, quais seriam as soluções para evitar esse problema de performanace com um banco compartilhado?

[quote=j0nny]Mas a discussão não pode parar.
Por exemplo, quais seriam as soluções para evitar esse problema de performanace com um banco compartilhado?[/quote]

Solução mega-ultra-master-power-final não existe. O que sempre dá pra fazer é tunar o banco (aumentar número de transações disponíveis, máquina dedicada, etc.). Mas isso, dá pra fazer em qualquer tipo de aplicação =)

[quote=asaudate][quote=negovei]
Minha dúvida sobre performance, por exemplo, quando o banco é centralizado não foi respondida!
[/quote]
A performance, obviamente, fica abaixo do que em bancos separados. O ponto central continua sendo sua necessidade. Se fosse ótimo ficar no mesmo banco, essa discussão não teria motivo para existir.
[]'s[/quote]

Estou em busca de informação, por isso a discussão existe! Podia ser ótimo ficar no mesmo banco, e eu estar querendo saber disso!

O interessante é que em nenhum outro post ninguém falou sobre. E se estamos comparando temos que ver os dois lados da moeda.

Mas vou resolver essas dúvidas com testes. :wink:

[quote=asaudate][quote=negovei]
Minha dúvida sobre performance, por exemplo, quando o banco é centralizado não foi respondida!
[/quote]

A performance, obviamente, fica abaixo do que em bancos separados. O ponto central continua sendo sua necessidade. Se fosse ótimo ficar no mesmo banco, essa discussão não teria motivo para existir.

[]'s[/quote]

Aí discordo.

Facebook, Twitter (como vc mesmo disse), Salesforce, Gmail, etc trabalham num único banco e a performance é semelhante (ou até melhor!!!) à de uma aplicação equivalente rodando em um servidor dedicado.

Perfomance de banco depende mais de escolher a ferramenta certa para o problema e de contruir um bom modelo do que uma simples decisão SQL/NoSQL.

Performance mede-se em tempo de resposta (latência) do app e não em tempo de acesso a banco.

Mas o Facebook, Twitter, Salesforce, Gmail usam banco relacional?

Então com um bom modelo tenho a mesma (ou quase) performance do NOSQL?

Se sim, e a sua afirmação quanto o hibernate?

Obs: Não estou criticando, apenas querendo entender/aprender.

Eu acho que a a questão não é nem ser SQL / NOSQL e sim um banco ou “n” bancos de dados.

No meu caso o importante é definir qual a melhor solução, com relação a custos, performance, disponibilidade, tempo de vida do projeto, etc.

Se desenvolver pra Cloud e NOSQL for o melhor, e estou vendo que sim, vou optar por ele! :wink:

Não entendi sua dúvida.

Não há contradição no que eu disse, foram afirmações feitas em contextos diferentes e sobre “coisas” diferentes.

Na primeira eu estava comparando duas soluções que possibilitam Multitenancy (Hibernate e GAE).

Na segunda (mais genérica) eu disse que a performance depende mais da ferramenta e de uma implementação adequada do modelo de dados do que o banco ser NoSQL/SQL. Ou seja, vc pode ter uma implementação “porca” de modelo (e isso é bem comum por aí) no GAE (NOSQL) que apanha de uma boa implementação em MYSQL.

Na maior parte das vezes tb acaba acontecendo do caboclo só arranhar a superfície da ferramenta e, quando a coisa degrada em produção, colocar a culpa nela.

Ficou confuso em alguns momentos, pois foi citado exemplos de aplicativos que usam NOSQL, comparando performance (relacional/multitenancy/hibernate).

Então, o que ficou em dúvida foi isso: é possível duas aplicações bem desenvolvidas, o banco relacional dar o mesma performance do NOSQL?

Não vejo sentido nisso. Como você mesmo citou “Hibernate é passado, meus dados não precisam de colunas…”.

Mas, entendi melhor seu ponto de vista.

Obrigado.

[quote=negovei][quote=andre_salvati]
Não entendi sua dúvida.
[/quote]

Ficou confuso em alguns momentos, pois foi citado exemplos de aplicativos que usam NOSQL, comparando performance (relacional/multitenancy/hibernate).

Então, o que ficou em dúvida foi isso: é possível duas aplicações bem desenvolvidas, o banco relacional dar o mesma performance do NOSQL?

Não vejo sentido nisso. Como você mesmo citou “Hibernate é passado, meus dados não precisam de colunas…”.

Mas, entendi melhor seu ponto de vista.

Obrigado.[/quote]

Cuidado com o modismo.
NoSQL nem sempre vai ser a melhor solução, e sendo uma aplicação comercial, tenho grandes dúvidas se NoSQL é a melhor solução. Nesse caso acho que ainda se aplica melhor o relacional.
Leia mais sobre NoSQL.

[quote=j0nny]
Cuidado com o modismo.
NoSQL nem sempre vai ser a melhor solução, e sendo uma aplicação comercial, tenho grandes dúvidas se NoSQL é a melhor solução. Nesse caso acho que ainda se aplica melhor o relacional.
Leia mais sobre NoSQL.[/quote]

Ainda não define nada, vou estudar mais e fazer muitos testes. Tenho tempo para desenvolver o projeto.

Por isso pergunto tanto! :slight_smile:

Vlw.

:arrow: negovei,

já decidiu sobre a estrutura do seu banco de dados? quais foram suas conclusões :?:

já decidiu sobre o serviço de cloud :?:
este link pode ajudar:

:arrow: andre_salvati
pelo que percebi vc utiliza e recomenda o Google App Engine, certo ?!
Se eu compreendi certo, existem algumas limitações e vai depender muito da aplicação para sua utilização.
Creio que não roda uma aplicação JBoss Seam (por exemplo) no GAE. Correto?
Quais são as características da app, o framework e as bibliotecas que vc utilizou :?:

Na verdade apenas apresentei as opções para desenvolvimento do projeto, e a necessidade de uma consultoria.
Atualmente estamos trabalhando na documentação da regra de negócio e correções no sistema.

Obrigado pelo link, muito interessante.