Mise à l’échelle de Node.JS sur plusieurs cœurs / serveurs

Ok, alors j’ai une idée que je veux parcourir, mais avant cela, j’ai besoin de bien comprendre certaines choses.

Premièrement, je pense que pour aller de l’avant avec ce système, il faut disposer de 3 Server, décrits ci-dessous:

Le premier serveur sera mon serveur Web frontal , c’est le serveur qui écoutera la connexion et répondra aux clients, ce serveur aura 8 cœurs et 16 Go de RAM.

Le second serveur sera le serveur de firebase database. En fait , vous vous expliquerez assez facilement, connectez-vous à l’hôte et définissez / obtenez des données.

Le troisième serveur sera mon serveur de stockage, ce sera l’endroit où les fichiers téléchargeables sont stockés.

Mes premières questions sont:

  • Sur mon serveur frontal, j’ai 8 cœurs, quel est le meilleur moyen de redimensionner un nœud afin que la charge soit répartie sur les cœurs?

Ma deuxième question est:

  • Existe-t-il un système que je peux intégrer à mon framework d’application qui me permettra de parler aux autres cœurs et de faire passer des messages pour sauvegarder les E / S.

et dernière question:

  • Existe-t-il un système que je peux utiliser pour déplacer le contenu de mon serveur de stockage vers la requête sur le serveur frontal avec le moins de temps système possible, la vitesse est un problème ici, car nous aurions plus de 500 clients téléchargés et chargés simultanément pendant les heures de pointe. fois.

J’ai finalement convaincu mon employeur que node.js est extrêmement rapide et constitue la technologie de programmation la plus récente. Nous devrions donc investir dans une plate-forme pour notre système Intranet, mais il a demandé une documentation détaillée sur la manière dont cela pourrait être mis à l’échelle du matériel actuel. avoir à disposition.

Sur mon serveur frontal, j’ai 8 cœurs, quel est le meilleur moyen de redimensionner un nœud afin que la charge soit répartie sur les cœurs?

Essayez de regarder le module de cluster node.js, qui est un gestionnaire de serveur multi-core.

Premièrement, je ne décrirais pas la configuration que vous proposez comme étant une “mise à l’échelle”, mais plutôt une “propagation”. Vous n’avez qu’un seul serveur d’applications servant les demandes. Si vous ajoutez plus de serveurs d’applications à l’avenir, vous aurez alors un problème de dimensionnement.

Je comprends que node.js est à thread unique, ce qui implique qu’il ne peut utiliser qu’un seul kernel. Ce n’est pas mon domaine d’expertise sur comment / si vous pouvez l’échelonner, laissera cette partie à quelqu’un d’autre.

Je suggérerais que NFS monte un répertoire sur le serveur de stockage sur le serveur d’applications. NFS a des frais généraux relativement faibles. Ensuite, vous pouvez accéder aux fichiers comme s’ils étaient locaux.

Concernant votre première question: utilisez le cluster (nous l’utilisons déjà dans un système de production, fonctionne à merveille).

En ce qui concerne la messagerie des travailleurs, je ne peux pas vraiment vous aider. Mais votre meilleur pari est aussi le cluster. Peut-être y aura-t-il une fonctionnalité qui fournira une messagerie “inter-cœur” à tous les travailleurs du cluster à l’avenir (je ne connais pas la feuille de route du cluster, mais cela semble être une idée).

Pour votre troisième exigence, j’utiliserais un protocole à faible surcharge comme NFS ou (si vous pouvez devenir vraiment fou en matière d’infrastructure) un backend SAN à grande vitesse.

Autre conseil: utilisez MongoDB comme firebase database. Vous pouvez commencer avec du matériel bas de gamme et mettre facilement à niveau votre instance de firebase database à l’aide des fonctionnalités de partage et de réplication de MongoDB (si cela est nécessaire).