Galera, estou precisando de uma luz… Estou elaborando um projeto, onde estou na fase de decidir qual melhor tecnologia eu usar para meu projeto. Tenho bastante know-how em php, por isso não vejo tanto problema em usá-lo. Porém, minha aplicação é um tanto quanto complexa, acredito que o php iria me deixar na mão. Em anexo fiz o desenho de ± como estou imaginando minha aplicação.
Estou imaginando que minha aplicação será feita em modelo SaaS, Software como serviço, como podem ver, cada cliente teria uma área reservada a ele dentro do sistema e cada usuário do cliente ficaria isolado de outros clientes, pensei em fazer um banco de dados para cada cliente (Acredito que fica mais fácil na parte da manutenção e que se um cliente X tem 1kk de dados e o Y só tem 500, o de 500 vai estar em uma estrutura totalmente isolada.
Quanto a aplicação, uma só vai servir para qualquer cliente, deixando assim, mais fácil na hora de eu dar manutenção nessa jossa! rsrs.
E quem vai redirecionar o servico, pensei em fazer alguma coisa pelo subdominio, por ex. xpto.meuproduto.com -> A aplicação vai entender que esse subdominio está apontando para um determinado banco de dados.
Minha maior dúvida é quanto a estrutura que estou imagindo, é válida? Ou Estou muito ruim e poderia pensar melhor?
Estou prensando em usar JAVA, mas confesso que estou com uma quedinha de braçao internamente com a M$, porém, meu custo de infra com M$ vai ser mais do que de Linux.
Sim, o modelo é em três camadas, mas queria de alguma forma não ter problema quanto ao crescimento do serviço. Por fiz o desenho separando talvez a aplicacao (digo em servidor) do resto, não sei se isso é uma boa prática, ou se viajei demais, mas to levantando as hipoteses.
Fico com muito medo de criar uma aplicação, onde separo dentro dela os clientes por banco de dados, cada empresa vai acessar a mesma aplicação, porém cada empresa tem seu banco de dados isolados, mas na hora de precisar crescer, vou ter que duplicar informacoes (a aplicacao em si), sendo que poderia ter outro modelo de arquitetura onde me facilitasse.
O comentário de SaaS X 3 camadas não faz o mínimo sentido, pois são coisas totalmente diferentes. SaaS = Software as a service. Ou seja, ao invés de você vender um software, você vende um serviço. Seja ele em 1 ou 50 camadas. A quantidade de camadas é apenas uma questão técnica que não vai diferenciar na forma como você comercializa o produto.
Enfim… no Java você pode usar o recurso de Tenant, onde você define se você vai usar um schema para cada cliente, ou uma columa que define o ID do Tenant. Isso você pode ler mais em JPA e Hibernate.
Pelo que entendi sua dúvida é mais sobre este modelo, correto? Atualmente tenho uma app que usavamos um schema por cliente. Mas isso acabou sendo um problema neste caso, então mudamos para usar uma columa chamada TENANT_ID. Assim o Hibernate já traz tudo certinho conforme o tenant.