2017-04-03 2 views
-1

Donc, j'ai une application Web dont la structure est basée sur cette structure de fichiers: https://scotch.io/tutorials/setting-up-a-mean-stack-single-page-application. Mon application a également une connexion à mongoDB sur Mlab.Comment implémenter l'évolutivité horizontale à l'aide de NodeJs

ce que mon application ne:

  • permet aux utilisateurs de se connecter/inscription;
  • récupère les données de mlab;
  • Les données récupérées peuvent être évaluées par les utilisateurs;
  • Les données récupérées peuvent être supprimées par admin;
  • les utilisateurs peuvent ajouter des données à db (les données sont des plans d'entraînement);

Maintenant, je dois faire mon application horizontale évolutive, mais je suis un peu perdu ici:

• Sine Je suppose que je aucune activité en temps réel, je shoudn't besoin de quelque chose comme socket.io? • Dois-je ajouter une sorte de MQ (RabbitMQ, ZMQ, etc.): Si oui, peut-être des pointeurs sur la façon de le faire, car la plupart des exemples utilisent simplement des messages texte simples.

• Je suis certain que j'aurais besoin d'un équilibreur de charge. Nginx, HaProxy ... Je devrais probablement changer ma configuration de serveur express pour écouter d'abord plusieurs ports, est-ce exact?

Ou ai-je complètement tort à ce sujet?

P.S .: Espérons que ce n'est pas trop large question.

+0

Je déteste le dire, mais la question est incroyablement large. –

Répondre

1

différents besoins nécessitent des approches différentes :)

Ceux-ci peuvent varier en fonction de vos besoins. Si vous voulez que l'application soit asynchrone, vous pouvez prendre toutes les demandes dans une file d'attente et les renvoyer au client instantanément. Vous pouvez alors avoir besoin d'un mécanisme de poussée pour avertir le client que l'opération est terminée. . (Socket.io, RabbitMQ etc)

Bien sûr, vous aurez besoin d'un proxy inverse pour distribuer des demandes à différents serveurs charge équilibrée ou la charge de travail base (HAProxy etc.)

La première chose que vous devez faire attention lorsque vous voulez mettre à l'échelle l'application est d'avoir une structure sans état.Ou les sortir du processus. (Par exemple session, cache, serveur de fichiers) La deuxième chose que vous devez connaître est la phase d'authentification.Un client qui s'est connecté à partir de ServerA peut rencontrer "non autorisé" sur ServerB sur les demandes suivantes.Vous devez également penser aux ressources utilisées par l'application. Alors que ces ressources desservent un seul serveur, ils vont commencer à répondre à des millions de demandes de cinq à dix serveurs simultanément. sont des choses comme la surveillance instan Ces.Et beaucoup de choses comme ça.

Ce sont les choses que vous devriez vraiment penser à :)

+0

Merci beaucoup. Pour l'instant, j'ai simplement ajouté nginx pour écouter localhost i.e port 80 et également ajouté des serveurs en amont, comme 81,82,83 etc ... Il semble que plus le nombre de serveurs que j'ajoute augmente, plus le programme fonctionne. Avec le test ab en cours d'exécution 20k demandes et 1k simultané le résultat lors de l'exécution de 3 serveurs était ~ 35s où en exécutant le même test sur le serveur unique résultat ~ 120s. Puis-je supposer que l'évolutivité horizontale fonctionne ou est-ce autre chose? – orux