Imaginez un scénario comme suit: Disons que vous avez un ordinateur central qui génère beaucoup de données. Ces données doivent passer par un certain traitement, qui prend malheureusement plus de temps que de générer. Pour que le traitement rattrape le temps réel, nous branchons plus d'ordinateurs esclaves.
De plus, nous devons prendre en compte la possibilité que des esclaves abandonnent le réseau en cours de travail ainsi que des esclaves supplémentaires ajoutés. L'ordinateur central doit s'assurer que tous les travaux sont terminés à sa satisfaction et que les travaux abandonnés par un esclave sont reclassés à un autre.
La question principale est: quelle approche dois-je utiliser pour y parvenir?
Mais peut-être que ce qui suit m'aiderait à trouver une réponse: y a-t-il un nom ou un modèle de conception dans ce que j'essaie de faire?
De quel domaine de connaissances ai-je besoin pour atteindre l'objectif de faire communiquer ces ordinateurs entre eux? (par exemple. une base de données, dont j'ai une certaine connaissance, sera-t-elle suffisante ou cela impliquera-t-il des sockets, dont je n'ai pas encore connaissance?)
Existe-t-il des exemples d'un tel système? La question principale est un peu générale donc il serait bon d'avoir un point de départ / point de référence.
Remarque Je suppose que les contraintes de C ++ et de Windows sont donc appréciées.
Réponses:
Oui. Ce modèle est connu sous le nom d'informatique distribuée (ou programmation distribuée ou tout autre mot sympa que vous souhaitez mettre après distribution). Ma suggestion sera de ne pas construire cela en interne avant de chercher d'autres solutions. Vous pouvez regarder cette question de débordement de pile pour diverses options. Et puis prenez une décision calculée.
la source
Comme indiqué par d'autres réponses, ce domaine est connu sous le nom de calcul distribué, de calcul en grille, de calcul en grappe et de calcul haute performance .
Permettez-moi d'ajouter la distinction selon laquelle, lorsqu'un système peut être redimensionné après le démarrage pour correspondre à la charge de travail, il est dit « élastique », ce qui est différent du calcul en grille traditionnel. C'est l'une des raisons (non marketing) du terme " cloud computing ": l'utilisateur n'a pas besoin de planifier la capacité, et le nombre et l'emplacement des machines effectuant le calcul lui restent sans particularité en tant que cloud.
En outre, votre exigence selon laquelle le maître replanifie les tâches ayant échoué est appelée la propriété « tolérance aux pannes » de ce système. (Lien obligatoire vers ce dessin animé )
Quelle approche devez-vous utiliser pour créer votre propre cloud privé? Dans ma commande ou préférence:
Ne construisez pas votre propre cloud , utilisez l'infrastructure fournie par d'autres. Amazon appelle ce Virtual Private Cloud , Rackspace juste Private Cloud ; Je suis sûr que vous pouvez trouver d'autres offres et comparer.
Ne construisez pas votre propre moteur informatique distribué , utilisez le moteur fourni par d'autres. Si vous insistez pour utiliser vos machines, utilisez au moins autant de logiciels que possible fournis et testés par d'autres. Vous pouvez utiliser Hadoop depuis C ++ via l' interface Pipes ou depuis n'importe quel exécutable via l' API Streaming . Il existe une interface de streaming similaire sur Spark .
Ne codez pas tous les composants à partir de zéro , utilisez des composants de la communauté. Si, pour une raison quelconque, vous avez lu jusqu'à présent et que vous souhaitez déployer vos propres composants cloud, ne commencez pas à partir de la bibliothèque standard de C ++. Les principaux composants dont vous aurez besoin sont:
Il existe de nombreuses alternatives pour les deux. Pour la mise en file d'attente, RabbitMQ dispose d'un programme d'installation Windows, tout comme ZeroMQ . Pour les systèmes de fichiers distribués, je n'ai vraiment pas assez d'expérience sur Windows: il semble que vous puissiez organiser les partages SMB en DFS , mais je ne peux pas vous donner d'indice ici. Vous pourriez penser, comme indiqué dans une autre réponse, à utiliser une base de données distribuée telle que MongoDB pour les données; il fonctionne sous Windows .
Vous pouvez également penser à utiliser MPI (généralement l' implémentation OpenMPI , généralement via son enveloppe Boost ), mais notez que les programmes MPI ne sont ni élastiques ni tolérants aux pannes en soi; vous devez vous en occuper vous-même (au moins, ils fournissent certains mécanismes pour y parvenir ). C'est pourquoi je vous recommanderais d'abord d'évaluer un cadre de distribution qui possède de telles propriétés.
la source