Distribuzione di un'architettura scalabile di MEAN Stack su Google Compute Engine

Ho distribuito un'applicazione MEAN Stack (che non utilizza alcun framework MEAN) sul motore di calcolo di Google. Attualmente è distribuito su una singola macchina virtuale n1-standard-1 (1 CPU virtuale + 3.75GB di memory) .

All'interno di esso, sto eseguendo 4 contenitori docker . Uno per:

  • proxy inverso – ascolta la port 80 (http) e 443 (https), quindi la richiesta di proxy all'istanza di nodo in esecuzione locale (port 3000)
  • applicazione web (nodejs + expressjs)
  • MongoDB
  • Redis

L'ho usato come mio dev. ambiente e ora dal momento che il sito è in produzione (sta eseguendo abbastanza lento).

Come faccio a rifatturarlo a una migliore architettura scalabile?

Le mie soluzioni:

  • implementare con alless 4 vm con la configuration precedente. (ciascuno gestisce un singolo contenitore docker): proxy inverso (1 vm), mongodb – (1 vm), redis – (1 vm), app – (vm multipli). flessibile ma un po 'costoso?
  • implementare con un vm più grande (più CPU e RAM). alternativa più economica di quanto sopra?

Idealmente, voglio iniziare piccole (con less costi) e scalare verso l'alto, in quanto il requisito cresce, ma l'architettura deve essere flessibile per scalare facilmente.

Posso avere alcune buone soluzioni?

Se il tuo ambiente è già in container e sei disposto a mantenerlo in questo modo, posso suggerire di utilizzare Google Container Engine .

Google Container Engine è un potente gestore cluster e un sistema di orchestrazione per l'esecuzione dei container Docker. Container Engine pianifica i tuoi contenitori nel cluster e li gestisce automaticamente in base ai requisiti definiti (ad esempio CPU e memory). È costruito in cima alla Kubernetes open source.

Spin-up un piccolo cluster di 3 nodes (potrebbero essere nodes singoli) e distribuirà i tuoi contenitori come baccelli. Probabilmente puoi sbarazzarsi del proxy inverso poichè questo è qualcosa che Google può fare per te usando una nozione di " servizio ".

Quando potrebbe essere necessario ulteriori risorse, è ansible ridimensionare il cluster aggiungendo ad esso altri nodes (istanze).

Il bilanciatore di carico di Google HTTP / S può aiutarti a terminare SSL e diffondere il carico su più nodes.