(INFRA) Aplicação minimamente escalável para estágio inicial
Então, estou finalizando um micro-saas relativamente grande, com as seguintes tecnologias: Node.JS, RabbitMQ, PostgreSQL e pro cliente Vue.js.
Gostaria de saber, pra deixar essa solução minimamente escalável conforme for crescendo, qual a melhor maneira?
Atualmente está em uma VPS na Digital Ocean com o node rodando no PM2 e o restante instalado "manualmente", sem docker.
Oque vocês recomendam fazer?
Oque vocês recomendam fazer?
Teste de carga
Análise
Qual o comportamento dos seus usuários? quantos requests por segundo em cada rota?
Use alguma ferramenta de teste de carga (recomendo o k6.io) e crie um script que represente o mais fiel possível o comportamento padrão dos seus usuários.
800 usuários no script devem dar uma carga o mais próximo possível de 800 usuários reais. monitorar uso de CPU, RAM, IO de todos os servidores.
Executando os testes
Monte um ambiente identico ao original, rode o teste e vá aumentando os usuários, assim você sabe o quanto sua infra atual consegue chegar.
Escale esse ambiente, coloque mais máquinas, suba o numero de usuários até ficar insustentável, você sabera exatamente qual o lugar que vai gargalar. Geralmente é o DB.
O ponto mais fraco da tua infra é o que você precisa gastar mais esforço e atenção para melhorar.
- Se puder rode o back(NodeJS) em lambda ou cloud function, seu back tem que ser stateless em relação ao servidor onde roda (baixo custo)
- No banco de dados graranta que terá IOPS suficientes no disco, é muito facil ver problemas com uso de CPU e Memoria mas muitas vezes o gargalo é o IO no disco. (custo elevado se for reservar IOPS, mas voce pode conseguir um preço mais baixo apenas aumentando o disco)
- Deixe o front em cache em um CDN (baixo custo)
"relativamente grande" são quantos milhares de usuarios simultaneos?
sem entender o que seu saas faz, como faz, nem sabendo os pontos de gargalo é praticamente impossivel profetizar aqui se esta legal ou nao do jeito que vc montou o sistema hoje
Desculpa não responder relacionado a sua dúvida. Mas fiquei curioso quanto a funcionalidade da plataforma. Seria tipo um "Octadesk" da vida? Para fluxo de atendimento, whatsapp, instagram, etc?