2017-08-19 6 views
0

J'ai une API NodeJS qui fait des choses basiques (comme la manipulation de la base de données), mais aussi, beaucoup moins fréquemment, en taxant des choses comme le codage vidéo.Quelle est la méthode recommandée pour séparer les tâches lourdes de calcul de l'API basée sur nodejs?

Il semble qu'une meilleure solution, du point de vue de l'évolutivité, consisterait à le diviser en un serveur API principal et à séparer les travailleurs qui effectuent la lourde tâche. De cette façon, j'ai deux pools, "low cost" pour l'API primaire et "cher" pour les travailleurs, permettant une meilleure gestion des ressources.

Existe-t-il une approche standard de ce modèle? La seule façon de gérer les requêtes lourdes peu fréquentes semble être d'écrire les serveurs de travail à partir de zéro ou de créer un processus fils. Ces options nécessitent beaucoup de code supplémentaire (y compris la mise en pool, la mise en file d'attente, etc.) et le problème semble assez commun, donc le manque de paquet node-worker indique que mon approche est à la fois connue et incorrecte.

+0

Votre déploiement sera sur-promis ou dans le Cloud .. Si c'est Cloud, quelle plate-forme (AWS, Azure, ...)? –

+0

Mon déploiement est sur un VPS. – monday

+0

Un équilibreur de charge semble être la solution ici! Quelle que soit l'intensité de votre opération, l'équilibreur de charge dirige la requête vers le serveur le moins occupé – Victor

Répondre

2

Vous ne savez pas si c'est une question pour serverfault, mais voici: Node est tristement célèbre pour le travail coûteux en calcul, car il fonctionne sur un seul modèle de thread. Je vous suggère d'utiliser une de ces alternatives:

  1. travailleurs nodejs Séparer les comme vous l'avez mentionné, mais vous devez avoir une couche au-dessus de déléguer des tâches
  2. avons du travail cher fait dans les « services en aval » qui acceptent les requêtes HTTP. Votre serveur de noeud peut maintenant se connecter à ceux-ci et recevoir des réponses asynchrones une fois le travail terminé. Maintenant, les services en aval peuvent être écrits en (a) Un langage lourd comme Java qui permet de soulever de lourdes tâches de calcul, (b) beaucoup de processus de nœuds spun up ou spin-on-demand, (c) Exclusive Computational Infra comme Amazon Lambda