Galera, bom dia. Sou desenvolvedor Java e estou criando uma App Fullstack utilizando Spring Boot e React. Esta aplicação, falando de arquitetura, irá consistir em um sistema de auto serviço, onde o usuario vai conseguir criar uma conta e acessar o sistema.
Minha duvida é referente a arquitetura do sistema e de dados, onde na minha visão eu tenho 3 opções:
-
Posso rodar uma unica instancia da App, com um unico banco de dados onde os registros de cada cliente ficaram na mesma tabela separados por um identificador unico para cada cliente;
-
Rodar uma instancia do sistema e um banco de dados para cada cliente, essa opção eu não gosto dela devido ao consumo de recurso do servidor, terá clientes que usam mto a app, outros q usa pouco, porem ambos consumirão praticamente o mesmo recurso de servidor, que seria o minimo necessario para rodar o sistema;
-
Utilizar uma unica instancia do servidor com multiplos banco de dados ou multiplos schemas iguais no mesmo banco de dados.
Eu consigo enxergar apenas essas 3 opções, sendo que a mais me agrada é a primeira, porem na minha experiencia com desenvolvimento eu tenho notado que utilizando bancos relacionais, como o postgres (Que é o banco que utilizarei), quando eu faço atualizações ou inserções em massa em uma tabela ele tende a dá um lock nela, então imagine eu tendo umas instancia para 100 clientes, sendo que um resolve fazer alguma coisa mais pesada e acaba dando lock na tabela para os outros 99 clientes… É um desastre.
As outras duas opções eu não sei se é uma opção, já utilizei o recurso de multiplos schemas iguais, mas não foi utilizando spring, e a minha experiencia é: fica uma tremenda gambiarra fazer dessa forma utilizando hibernate, porem funciona e resolve o problema da primeira abordagem.
Eu gostaria de opinião de vocês, sugestão de arquitetura para esse tipo de sistema, pq sei que a hora de fazer a escolha certo é agora, dps de pronto será problema. Mto obrigado.