(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

Cerca de 800 usuarios simultaneos acessando. É uma plataforma omnichannel de atendimentos, então a empresa que contrata vai estar usando o sistema possivelmente o dia todo (cada empresa possui em média 5 usuarios)
nos seus testes de carga como o sistema se comportou no geral? talvez faça sentido (provavel que nao por agora) começar a separar as coisas, front em vue vai para uma cdn, postgres para um servidor proprio, rabbit idem, por fim o backend.

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?

Legal. Tenho interesse em conhecer seu app, pois uso um na minha empresa (que não tem nada a ver com a área de TI), não estou muito satisfeito e não tenho tempo pra desenvolver. Poderia até te ajudar com sugestões. Quanto a infra, eu acho muito legal o [Caprover](https://caprover.com/). Ele usa o Docker Swarm para fazer a orquestração dos containers. É muito estável e fácil de implantar. Acho que vale a pena você dar uma olhada. Daí conforme aumenta a demanda você vai escalando os recursos do seu VPS.