Par "orchestrateur" tu entends serveur dédié avec un programme central qui gère les différentes instances ? Le problème c’est que ça m’oblige à gérer l’infrastructure (notamment la sécurité) et pour le scaling c’est plus compliqué…
C’est justement le rôle d’un orchestrateur.
Si vraiment ton besoin c’est de créer des instances de serveur à la volée, au besoin. On peut imaginer que ça soit "rentable" d’aller fouiller du côté de Docker / k8s.
Pour essayer de faire simple : avec Docker tu vas créer une image de ton serveur web. Une image, c’est la description d’un process, isolé, avec ce dont il a besoin pour fonctionner. Par exemple dans ton cas, l’image c’est un process node et ce dont il a besoin pour fonctionner c’est un système de fichier linux, avec node installé, et ton code quelque part.
L’image c’est la recette de cuisine en gros.
Une fois que tu as "instancié" ton image, tu obtiens un conteneur. Dans ce conteneur tu retrouves donc ton processus qui tourne, bien isolé, avec son système de fichier.
L’orchestrateur va se charger "d’instancier" ces conteneurs suivant contrat que tu auras défini, et les faire tourner sur un ensemble de machines virtuelles / physiques (instances EC2 si t’as choisi Amazon). C’est par exemple via l’orchestrateur que tu vas limiter les ressources allouées au conteneur (donc au process node), en lui disant qu’il n’a accès qu’à 0.5 CPU, et 128Mo de RAM par exemple.
Tu vas également lui dire comment gérer le réseau : faut-il que les utilisateurs en dehors de ton orchestrateur ait accès à ton conteneur (process) ? A quelle adresse ? Sur quel port ?
Tu vas aussi donner à l’orchestrateur un ensemble d’indices pour s’assurer que le conteneur tourne bien : comment peut-il le savoir ? En exécutant un shell dans le conteneur ? Ou plutôt en faisant une requête HTTP sur le port 80 ?
Bref, tu l’auras compris, ça a l’air de plutôt répondre à ce que tu nous décris de ton besoin, mais c’est (comme généralement tout ce qui touche aux architectures distribuées) très complexe (certains diront même que c’est TROP complexe pour ce que c’est, c’est pas entièrement faux).
Je te conseille d’aller dans cette voie soit si :
- le sujet t’intéresse et tu souhaites te documenter avec un support concret
- tu as besoin d’une qualité de service "industrielle", j’entends par là : c’est un sujet sur lequel tu envisages de travailler à plusieurs, de créer une activité commerciale autour de ça
Si ni l’un ni l’autre, à mon avis gères des instances Node.js en mode "sale" sur une seule instance EC2 par exemple, avec un reverse-proxy devant éventuellement.
Garde à l’esprit la solution envisagée ici pour le jour où ça deviendra vraiment trop galère à maintenir / industrialiser.
EDIT :
Ça me semble overkill une découpe comme tu veux faire (1 client = 1 VM)
Clairement! Surtout ne crée pas une VM par instance node, à moins que tu n’aies un trafic gigantesque à gérer et/ou une appli excessivement gourmande en CPU/RAM (mais à ce moment là, ça m’étonne que tu utilises node.js pour le faire).
Mais pour le coup je ne suis pas trop d’accord avec un routage "logiciel", il va se retrouver à recoder un reverse-proxy, et beaucoup d’autres composants, bref, réinventer la roue.