Vor- und Nachteile eines Pi-Clusters?

33

Ich habe viele Posts gesehen, in denen gefragt wurde, wie man einen "Supercomputer" oder Cluster mit Raspberry Pis erstellt, aber ich habe sehr wenig über die Vor- und Nachteile eines Netzwerks von Pis herausgefunden. Ich bin daran interessiert, einen eigenen kleinen Cluster aufzubauen, habe aber ein paar Fragen.

Dienen die RPIs nach dem Clustering als ein einziger virtueller Computer oder haben Sie die individuelle Kontrolle über alle RPIs? Hat ein Knoten die Kontrolle über die anderen?

Gibt es irgendetwas, was ein RPI tun kann, das in einem Cluster begrenzt ist? Habe ich zum Beispiel immer noch die Kontrolle über alle einzelnen GPIO-Ports?

Wie viel schneller macht es das pi? Nehmen wir an, ich mache einen 2-Knoten-Cluster, der auf jeweils 1 GHz übertaktet ist. Verfüge ich im Wesentlichen über einen "Dual Core 1 GHz" -Prozessor? Muss der Cluster in binären Vielfachen vorliegen? (z. B. 1,2,4,8,16,32,64)

Wird dies mein Webhosting über NGINX for pi erschweren? Kann der Rechenleistung bestimmter Knoten bestimmte Aufgaben zugewiesen werden, die sie ausführen? Knoten 1 verarbeitet beispielsweise Webdienstanforderungen, Knoten 2 den Cloud-Speicher usw.

Höchster Vorgesetzter
quelle

Antworten:

49

Einige interessante Fragen. Ich denke, Sie können leicht missverstehen, wie die mit Raspberry Pis gebauten "Supercomputer" funktionieren. Sie funktionieren nicht als automatisches Lastverteilungssystem. Sie sind für die sogenannte parallele Programmierung konzipiert , bei der eine komplexe Aufgabe in Teile zerlegt wird, die gleichzeitig ausgeführt werden können. Der Haupt-Pi im Cluster (Hauptknoten) ist für die Organisation der Gesamtaufgabe verantwortlich, und jeder Pi im Cluster (Clientknoten) führt seine zugewiesene Arbeit aus und meldet die Ergebnisse an den Hauptknoten zurück. Bibliotheken wie OpenMPI sind hierfür der Schlüssel.

Darüber hinaus wurden die Raspberry Pi-Cluster, die erstellt wurden, nicht als effiziente Computergeräte erstellt. Sie wurden als Entwicklungsplattformen gebaut . 32 Raspberry Pis sind deutlich günstiger als 32 Desktop-PCs. Auf diese Weise können Sie Ihre parallele Programmiersoftware viel günstiger entwickeln und testen. Die einzige Alternative, wenn Sie kein Pis oder keine PCs haben, besteht darin, die CPU-Zeit auf einem tatsächlichen Supercomputer anzufordern. Je nach Größe des betreffenden Computers kann dies Geld kosten oder lange Wartezeiten verursachen, bis die Ressourcen verfügbar sind. Daher haben die Menschen ihre eigenen persönlichen Cluster aufgebaut. Es ist nur dann sinnvoll, Ihre Anwendung auf dem realen Computer auszuführen, wenn Sie wissen, dass sie funktioniert!

Denken Sie also daran und fahren Sie mit Ihren spezifischen Fragen fort.

In einem richtigen Cluster fungieren Pis nicht als ein einzelner virtueller Computer. Sie haben die Kontrolle über jeden Pi in Form eines Task- oder Ressourcenzuweisungssystems wie der Sun Grid Engine . Aufgaben werden den Knoten nach Bedarf zugewiesen, und wenn die Aufgaben abgeschlossen sind, werden die Ressourcen dieses Knotens für neue Aufgaben freigegeben.

Da in einem Cluster auf jedem Pi eine eigene Linux-Kopie ausgeführt wird, behält jeder Pi die lokale Kontrolle über seine GPIO-Ports. Ich bin mir nicht sicher, wie Software das in einer Parallel-Computing-Umgebung wirklich nutzen würde, aber da sind Sie.

Ein Cluster macht einen Pi nicht wirklich schneller, da es sich nicht um einen einzelnen Computer handelt. Was Sie gewinnen, ist einfach die Fähigkeit, mehr auf einmal zu tun. Sie sind nicht auf ein Vielfaches von zwei beschränkt. Es gibt jedoch eine echte praktische Obergrenze für Clustercomputer, abhängig von den Aufgaben, die Sie ausführen. Stellen Sie sich vor, Sie führen für viele Pis eine parallele Berechnung durch, für die 200 Schritte erforderlich sind. Für jeden nächsten Schritt sind jedoch die Informationen erforderlich, die jeder Pi in seinem vorherigen Schritt berechnet hat. Daher muss jeder Pi bei jeder Iteration Daten von jedem anderen Pi empfangen. Abhängig von der Zeit, die die einzelnen Iterationen für die Berechnung benötigen, verbringen Sie möglicherweise mehr Zeit mit dem Senden von Daten als mit dem Berechnen. Aus diesem Grund verwenden die meisten Supercomputer InfiniBandNetzwerk. Es ist sehr schnell, so dass Sie mehr rechnen können. Die Lösung hierfür besteht darin, weniger Pis zu verwenden, diese jedoch bei jeder Iteration mehr Arbeit leisten zu lassen. Dies ist jedoch je nach Algorithmus möglicherweise nicht möglich. Daher die praktische Obergrenze. (Auf Pis wäre dies besonders schlimm, da das USB-Ethernet ziemlich langsam ist.)

Also weiter zu einer praktischen Anwendung, verteiltem Webhosting! Sie können hier mehrere Pis nutzen, es ist einfach kein regulärer Cluster. Angenommen, Sie haben 5 Pis. Wir nennen sie GatewayPi, WebPi1, WebPi2, WebPi3 und DataPi. GatewayPi ist mit dem Internet verbunden und führt Nginix aus, um Webanforderungen zu verarbeiten, führt jedoch keine Verarbeitung durch. Stattdessen wird der Lastenausgleich durchgeführt. Es verwendet Proxys und leitet die eingehende Anforderung zufällig an WebPi1, WebPi2 oder WebPi3 weiter. Wir haben gerade die Leistung unserer Webinfrastruktur verdreifacht, weil wir jetzt mehr Anfragen gleichzeitig bearbeiten können. Was ist mit DataPi? DataPi hat eine Festplatte angeschlossen, auf der alle unsere Webdaten gespeichert sind, und betreibt einen NFS-Server. WebPiX stellt diese NFS-Freigabe bereit, damit sie zur Verarbeitung auf die Daten zugreifen kann. Auf diese Weise müssen wir nur Backups an einem Ort ausführen und können Speicherplatz sparen.

Was ich soeben beschrieben habe, ist im Wesentlichen das Modell, das große Unternehmen wie Google und Facebook verwenden, jedoch auf die Raspberry Pi-Größe verkleinert. Der einzige Haken ist, dass aufgrund der Kosten von Pis im Wesentlichen die gleiche Entwicklungsplattform (aber für Webserving) wie ein Cluster von Pis für die parallele Programmierung geschaffen wird. Wenn Sie mehrere Pis verwenden, verliert die Leistung aufgrund ihrer relativ geringen Rechenleistung schnell an Energie, wenn Sie große Datenmengen verarbeiten. Aber nur zum Lernen? Sie sind perfekt.

Fred
quelle
Also, wenn ich an einem Heimprojekt arbeite, für billiges Webhosting von 2 Websites, das Lüfter über GPIO, SSH, FTP, Cloud-Speicher und eine Heimautomatisierung steuert, lohnt es sich, einen kleinen Cluster zu erstellen, um die Aufgaben richtig zu verteilen?
SuperAdmin
4
+1 Ich bin neugierig auf diese Frage gekommen und mit ein bisschen Bildung gegangen. Gute Antwort.
jrhorn424
@iOSNoob, wenn Sie die einzige Person sind, die es verwendet, und Sie immer nur eines dieser Dinge gleichzeitig ausführen, ist es möglicherweise auch dann keinen Cluster wert, da die Ressourcen nach Bedarf zugewiesen werden. Wenn es einfach nicht genug RAM gibt oder Sie mehr Last als eine einzelne Person haben, lohnt es sich wahrscheinlich. Ich würde Dinge wie Lüfter und Heimautomation einfach aus Sicherheitsgründen auf separate Pis setzen. Sie wollen wirklich keine Chance, dass jemand in Ihrem Haus mit Dingen herumspielt ... Wenn Sie durch einen zusätzlichen Pi springen müssen, um zu diesen Systemen zu gelangen, umso besser. Das ist eine zusätzliche Sicherheitsebene.
Fred
@ jrhorn424 Ich bin froh, dass es dir gefallen hat! Ich habe kürzlich an einem (Super-) Computing-Event teilgenommen, also war dieses Zeug frisch in meinem Kopf. Perfektes Timing, um es aufzuschreiben.
Fred
1
Ein konkretes Beispiel für die genaue Webhosting-Architektur, die Fred beschrieben hat: pidramble.com (Links zu Code / Anleitungen auf GitHub, wo Sie eigene mit jeder Pi- Variante erstellen können).
Geerlingguy