2016-03-22 9 views
5

Ho creato un'applicazione Node.js (Meteor) e sto esaminando le strategie per gestire il ridimensionamento in futuro. Ho progettato la mia applicazione come un insieme di microservizi e ora sto pensando di implementarla in produzione.Ridimensionamento dei microservizi tramite Docker

Quello che mi piacerebbe fare è avere molti microservizi in esecuzione su un'istanza del server per massimizzare l'utilizzo delle risorse mentre utilizzano un numero ridotto di risorse. So che i contenitori sono utili per questo, ma io sono curioso di sapere se c'è un modo per creare un set ridimensionamento dinamico di contenitori dove posso:

  • comandi di scrittura come la "disposizione un altro contenitore app su questo server se i contenitori in esecuzione questa app raggiunge> 80% CPU/altre metriche limite ",
  • Fornire e preparare altri server se necessario per contenitori aggiuntivi,
  • Bilanciamento del carico connessioni tra questi contenitori (e ciò influisce sul bilanciamento del carico del server, ad esempio, invia meno connessioni ai server con meno container?)

Ho esaminato AWS EC2, Docker Compose e nginx, ma sono incerto se vado nella giusta direzione.

+0

La struttura del codice in Meteor 1.3+ è utile per scrivere i micro-servizi in Meteor. Per gestire interdipendenze tra servizi, utilizzare anotherMeteor = DDP.connect (anotherMeteorServer). Il mio 2c. Non l'ho ancora provato. – vijayst

+0

@ Vijay Potrei tornare a rispondere da solo quando ho tempo. Penso di avere un'idea di come farlo, anche se non ho avuto il tempo di provare, quindi guarda questo spazio per la risposta se ne hai bisogno/mi infastidisce se dimentico di rispondere e stai ancora cercando. –

risposta

0

Indagare su Kubernetes e/o Mesos e non guarderai mai indietro. Sono fatti su misura per quello che stai cercando di fare. I due componenti si dovrebbe concentrare su sono:

  1. Service Discovery: In questo modo i servizi inter-dipendenti (micro-servizio di "A" chiama "B") per "trovare" l'un l'altro. In genere viene eseguito tramite DNS, ma con funzioni di registrazione su di esso che gestiscono ciò che accade man mano che le istanze vengono ridimensionate.

  2. Scheduling: In Docker-terreno, la pianificazione non si tratta di cron jobs, vuol dire come contenitori vengono scalati e "confezionato" in server in vari modi per ottimizzare l'utilizzo efficiente delle risorse disponibili.

Qui ci sono dozzine di opzioni: Docker Swarm, Rancher, ecc. Sono anche alternative in competizione. Molti fornitori di cloud come Amazon offrono anche servizi dedicati (come ECS) con queste funzionalità. Ma Kubernetes e Mesos stanno emergendo come scelte standard, quindi saresti in buona compagnia se almeno inizi da lì.

0

Le metriche possono essere raccolte tramite Docker API (e cool blog post) ed è spesso utilizzata per questo. Il bricolage con DAPI e gli strumenti stack docker (compose/swarm/machine) potrebbero fornire molti strumenti per ridimensionare in modo efficiente l'architettura dei microservizi.

Potrei consigliarti a Consul per gestire l'individuazione in tale sistema sensibile alle risorse.