Avantages et inconvénients d'un cluster Pi?


33

J'ai vu beaucoup de messages demandant comment construire un "superordinateur" ou un cluster avec Raspberry Pis, mais j'ai trouvé très peu de choses sur les avantages et les inconvénients de la création d'un réseau de Pis. Je suis intéressé par la construction de mon propre petit cluster, mais j'ai quelques questions.

Une fois en cluster, les RPI agissent-ils comme un seul ordinateur virtuel ou avez-vous un contrôle individuel sur tous les RPI? Est-ce qu'un noeud a le contrôle des autres?

Y a-t-il quelque chose qu'un RPI peut faire qui soit limité dans un cluster? Par exemple, aurai-je toujours le contrôle sur tous les ports GPIO?

Combien de temps cela fait-il le pi? Disons que je crée un cluster à 2 nœuds, cadencé à 1 GHz chacun, aurai-je essentiellement un processeur "dual core 1 GHz"? Le cluster doit-il être en multiples binaires? (ex. 1,2,4,8,16,32,64)

Est-ce que cela compliquera mon hébergement web via NGINX for pi? La puissance de traitement de certains nœuds peut-elle être affectée à des tâches spécifiques qu’ils gèrent? Tels que le noeud 1 traitera les demandes de service Web, le noeud 2 s'occupera du stockage dans le cloud, etc.

Réponses:


49

Quelques questions intéressantes. Je pense que vous ne comprenez peut-être pas très bien comment fonctionnent les "superordinateurs" construits avec Raspberry Pis. Ils ne fonctionnent pas comme un système de partage de charge automatique. Ils sont conçus pour ce qu'on appelle la programmation parallèle , où une tâche complexe est décomposée en plusieurs éléments pouvant être exécutés simultanément. Le Pi principal du cluster (nœud principal) est chargé de l’organisation de la tâche globale, et chaque Pi du cluster (nœuds clients) exécute le travail qui lui est attribué et rend compte des résultats au nœud principal. Des bibliothèques telles que OpenMPI sont la clé pour cela.

De plus, les clusters Raspberry Pi qui ont été construits ne sont pas conçus pour être des dispositifs informatiques efficaces. Ils ont été construits en tant que plateformes de développement . Il est nettement meilleur marché d’acheter 32 Raspberry Pis que 32 ordinateurs de bureau. Vous pouvez ainsi développer et tester votre logiciel de programmation parallèle beaucoup moins cher. La seule alternative si vous n'avez ni Pis ni PC est de demander du temps CPU sur un super-ordinateur. En fonction de la taille de l'ordinateur en question, cela peut coûter cher ou prendre beaucoup de temps avant que les ressources ne soient disponibles. D'où la raison pour laquelle les gens ont construit leurs propres grappes personnelles. Il est logique d'exécuter votre application sur le vrai ordinateur quand vous saurez que cela fonctionne!

Alors, gardez cela à l’esprit et passez à vos questions spécifiques.

Dans un cluster approprié, les PIS n'agissent pas comme un seul ordinateur virtuel. Vous avez le contrôle sur chaque Pi sous la forme d'une tâche ou d'un système d'allocation de ressources tel que Sun Grid Engine . Les tâches sont attribuées aux nœuds en fonction des besoins et, une fois les tâches terminées, les ressources de ce nœud sont libérées pour de nouvelles tâches.

Dans un cluster, étant donné que chaque Pi utilise sa propre copie de Linux, chaque Pi conservera le contrôle local de ses ports GPIO. Je ne sais pas comment un logiciel utiliserait vraiment cela dans un environnement informatique parallèle, mais voilà.

Un cluster ne rend pas vraiment un Pi plus rapide, car ce n'est pas un seul ordinateur. Ce que vous gagnez est simplement la capacité de faire plus à la fois. Vous n'êtes pas limité à des multiples de deux. Il existe toutefois une limite supérieure pratique pour les ordinateurs en cluster en fonction des tâches que vous exécutez. Imaginez si vous exécutez un calcul parallèle sur de nombreux Pis qui nécessite 200 étapes. Cependant, chaque étape suivante nécessite les informations que chaque Pi a calculées lors de l'étape précédente. Ainsi, chaque Pi doit recevoir des données de chaque autre Pi à chaque itération. En fonction du temps que chaque itération prend pour calculer, vous pouvez passer plus de temps à envoyer des données qu'à calculer. C’est pourquoi la plupart des super-ordinateurs utilisent InfiniBandréseau. C'est très rapide, vous pouvez donc faire plus de calculs. La solution à ce problème consiste à utiliser moins de Pis tout en leur demandant de travailler davantage à chaque itération, mais cela peut ne pas être possible en fonction de votre algorithme. D'où la limite supérieure pratique. (Sur Pis, cela serait particulièrement grave, car l’Ethernet USB est assez lent.)

Alors, passons à une application pratique, l'hébergement Web distribué! Vous pouvez profiter de plusieurs PIS ici, ce n'est tout simplement pas un cluster. Disons que vous avez 5 Pis. Nous les appellerons GatewayPi, WebPi1, WebPi2, WebPi3 et DataPi. GatewayPi est confronté à Internet et exécute Nginix pour traiter les demandes Web, mais n’effectue aucun traitement. Au lieu de cela ce qu'il fait est l'équilibrage de charge. Il utilise la transmission par proxy et transmet de manière aléatoire la demande entrante à WebPi1, WebPi2 ou WebPi3. Nous venons de tripler la puissance de notre infrastructure Web, car nous pouvons désormais traiter plus de demandes simultanément. Qu'en est-il de DataPi? DataPi a connecté un disque dur stockant toutes nos données Web et exécute un serveur NFS. WebPiX monte ce partage NFS afin qu'il ait accès aux données pour le traitement. De cette façon, nous ne devons exécuter que des sauvegardes à un seul emplacement et économiser de l’espace disque.

Ce que je viens de décrire est essentiellement le modèle utilisé par de grandes entreprises comme Google et Facebook, mais réduit à la taille de Raspberry Pi. Le seul inconvénient est, en raison des coûts de l’utilisation de PIS, que cela crée essentiellement la même plate-forme de développement (mais pour le webserving) qu’un cluster de Pis pour la programmation parallèle. L'utilisation de plusieurs PIS, en raison de leur capacité de calcul relativement faible, perd rapidement de la performance au profit de la consommation d'énergie, alors que vous vous dirigez vers de grandes quantités de données. Mais juste pour apprendre? Ils sont parfaits.


Donc, si je travaille sur un projet domestique, pour un hébergement Web bon marché de 2 sites Web, le contrôle des ventilateurs de refroidissement via GPIO, SSH, FTP, stockage en nuage, une domotique, cela vaudrait-il la peine de créer un petit cluster pour répartir les tâches correctement?
SuperAdmin

4
+1 je suis venu à cette question curieux, et est parti avec un peu d'éducation. Très bonne réponse.
jrhorn424

@ iOSNoob, si vous êtes la seule personne à l'utiliser et que vous ne faites jamais que l'une de ces choses à la fois, cela ne vaudra peut-être pas la peine de créer un cluster, car les ressources sont allouées en fonction des besoins. S'il n'y a tout simplement pas assez de RAM ou si vous avez plus de charge qu'une seule personne, cela en vaut probablement la peine. Je mettrais des choses comme les ventilateurs et la domotique sur des Pis séparés simplement pour des raisons de sécurité. Vous voulez vraiment 0 chance que quelqu'un bousille avec des choses chez vous ... Si vous devez passer par un Pi supplémentaire pour accéder à ces systèmes, tant mieux. C'est une couche de sécurité supplémentaire.
Fred

@ jrhorn424 Je suis content que vous l'ayez aimé! J'ai récemment assisté à un événement (super) informatique de haute performance, alors tout cela était dans mon esprit. Moment parfait pour l'écrire.
Fred

1
Pour décrire un exemple concret de l’architecture d’hébergement Web presque exacte décrite par Fred: pidramble.com (liens vers du code / des instructions sur GitHub où vous pouvez créer votre propre version avec n’importe quelle saveur de Pi).
geerlingguy
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.