qwertyz
Goto Top

Parallelisierten Workload sinnvoll in Cloud auslagern

Hallo zusammen,

ich lese hier schon lange immer wieder gespannt mit und habe widme mich gerade einer Problemlösung, vor der eventuell noch mehrere Personen stehen. Da man ja oft den Wald vor lauter Bäumen nicht mehr sieht, würde ich gern einfach mal hier mit euch diskutieren, wie ihr dies lösen würdet.

Also folgendes: Es gibt ein Programm (Eigenentwicklung, Windows-Anwendung), welches Plausibilitätsprüfungen auf eine Datei durchführt. Diese Datei wird immer wieder in abgewandelter Form hergestellt. Nach Herstellung muss die Datei auf durch diese Prüfung. Allerdings ist die Prüfung sehr umfangreich und Laufzeitintensiv. Deswegen kann man die Datei aufteilen und auf beispielsweise 10 Rechner verteilen. Die Frequenz des Herstellens einer neuen Datei ist unterschiedlich.

Heute wird das gelöst, indem auf einem Virtualisierungshost diese 10 Rechner eingerichtet werden und dann nach herstellen der Datei benutzt werden. Im Laufe der Zeit wurde eine hergestellte Datei immer umfangreicher, was bedeutet, dass auch die Laufzeit immer größer wurde. Deswegen wird der Wunsch immer Größer, dass man hier entgegensteuert. Gleichzeitig ist es nun so, dass diese Rechner aber nur ca. 25% der Zeit im Jahr benutzt werden.
Das einfachste wäre es jetzt einen weitere Virtualisierungshost mit weiteren 10 Rechnern (oder mehr) anzuschaffen. Im Umkehrschluss würden dann die Dateien in kürzerer Zeit geprüft werden können aber die Rechner auch nur noch 12,5% der Zeit genutzt werden.

Daher hatte ich angedacht diesen Workload in die Cloud auszulagern. Dies hätte den Vorteil, dass Rechenzeit nur bezahlt werden müssten wenn sie auch genutzt wird. Dadurch, dass die Eigenentwicklung nur auf Windows lauffähig ist und einige Abhängigkeiten installiert werden müssen, ist auf jeden Fall erforderlich, dass die Rechner entweder gespeichert werden oder aus einem vordefinierten Image gestartet werden.

Mein Ansatz wäre gewesen, einfach 30 Rechner in Azure o.Ä. einzurichten und diese bei Bedarf zu starten. Dem Endbenutzer hätte ich dann einen Zugang zum Azure-Portal eingerichtet, wo er diese selbstständig starten und beenden kann und per RDP benutzen kann. Da allerdings wohl dann eine Volumenlizenz für Windows fällig wird (oder kann man die versteckt auch irgendwo mitmieten?) habe ich erstmal auf die bremse gedrückt und möchte über alternativen nachdenken.

Wenn ich eine Lösung zaubern könnte dann würde die so aussehen: Der Endanwender loggt sich in ein Portal ein. Hier hat er die Möglichkeit Rechner zu erstellen/starten. Er gibt seine gewünschte Anzahl ein und nachdem er sich einen Kaffee geholt hat kann er diese benutzen. Die Rechner sind bereits mit der Eigenentwicklung sowie allen Abhängigkeiten ausgestattet und über eine Tabwahl wechselt er zwischen den Sitzungen. Idealerweise hat er nun die Möglichkeit die zu testende Datei auf alle Rechner zu übertragen. Dann startet er seine Tests. Nach der Auswertung fährt er die Rechner runter und diese werden gelöscht. Monatlich wird dann eine Rechnung erstellt über die Rechenzeit sowie Windowslizenz. Ein Rechner sollte übrigens über zwei performante vCPUS verfügen sowie mindestens 4GB Ram. Also eigentlich überschaubar.

Ich hoffe das war einigermaßen verständlich und freue mich auf Fragen oder Diskussionen dazu.
Bin gespannt ob ich am Ende dann doch einfach die 30 Rechner in Azure einrichten werde...

Gruß

Content-Key: 2044581071

Url: https://administrator.de/contentid/2044581071

Printed on: May 9, 2024 at 12:05 o'clock

Member: MirkoKR
MirkoKR Mar 02, 2022 updated at 19:26:49 (UTC)
Goto Top
Welchen Festspeicher nutzt dein VHost?

HDD / SSD?
SATA / SAS?
NVMe/PCIe SSD?

Meine Erfahrungen bei solch intensiven Aufgaben iat, das dort das Nadelöhr zu finden ist - daher nutzt ein Host mit solch einer Aifgabe bei uns 2x NVMe/PCIe SSD im Raid0 - das ergibt einen Durchsatz von knapp 6GByte schreiben/lesen.

Den Host zu Virtualisieren macht dafür m. E. keinen Sinn

Bei uns steht auch die Leistung im Vordergrund, ein Ausfall wäre erstmal 2t-rangig

Nachtrag: Wir haben das übrigens auch mal mit einer RAM-Disk auf dem Host getestet - hier lag der Durchsatz sogar bei knapp 12.GByte/s schreiben/lesen.

Das ganze läuft jetzt schon 2 Jahre Störungsfrei - heute gibt es natürlich schon noch deutlich schnellere Hardware für diese Lösungen ...
Member: Th0mKa
Th0mKa Mar 02, 2022 at 20:11:24 (UTC)
Goto Top
Moin,

Eventuell ist ja Azure Batch etwas für dich.

VG,
Thomas
Member: GrueneSosseMitSpeck
GrueneSosseMitSpeck Mar 02, 2022 updated at 20:40:54 (UTC)
Goto Top
Einfach nur VMs in der Cloud nehmen... ist 5-10x so teuer wie on premise. Glaubs mir. Ich hab sowas schon dutzendfach durchkalkuliert.
Blades oder ganze Server für 10 VMs kostet vielleicht 2000-3000 Euro in der Anschaffung, aber 10 EC2 Instanzen kommen auf AWS längerfristig betrachtet immer teurer weg. Macht man nur wenn man keine eigene Hardware mehr hat.

Und einen Workflow auf 10 VMs aufzuteilen ist immer noch ineffektiver wie 10 Threads in einer VM laufen zu lassen... falls das der Workflow zuläßt. Und wenn nicht weil ein "Task", also eine VM mit 100% auf 4 CPU kernen ausgelastet ist, dann ist das auch zu rechenintensiv für Docker oder richtige "serverless" Techniken. Die machen nur dann Sinn, wenn die Berechnung an sich einfach und singlethreaded ist, und auch Fleetfähig ist. Sprich wenn man das Prüfen der DAtei auf 10000 Lamdas aufteilen könnte dann wäre AWS Lambda wohl die günstigste Variante... oder 1000 Docker.

Edit je nach Workflow gibts natürlich CPUs mit vielen Cores und wenig Takt, oder mit wenigen Cores und viel Takt... davon aber eventuell zwei oder vier in einem Board. Und noch was... sollte es hier um Chia Mining gehen, wer sowas in azure oder AWs macht dem canceln das Konto ganz schnell.
Member: MirkoKR
MirkoKR Mar 02, 2022 updated at 21:10:18 (UTC)
Goto Top
Zitat von @GrueneSosseMitSpeck:
sollte es hier um Chia Mining gehen, wer sowas in azure oder AWs macht dem canceln das Konto ganz schnell.

Stimmt - soweit hatte ich noch gar nicht gedacht ;-P
... wenn man den ganzen Text des TO betrachtet - " nur 4GB RAM" - könnte man sowas schlussfolgern ... :-$

.
.
Member: SeaStorm
SeaStorm Mar 03, 2022 at 07:05:24 (UTC)
Goto Top
Ohne details zu kennen was genau du da treibst würde ich sagen das Kubernetes hier dein Freund ist. Jeden Worker in einen Docker Container schmeissen, starten, nach erledigen der Aufgabe den Container wieder wegschmeissen
Member: wiesi200
wiesi200 Mar 03, 2022 at 08:09:31 (UTC)
Goto Top
Hallo,
mal ne blöde Frage. Ist die eigene Prüfanwendung auf Multitasking optimiert?
Menn man betrachtet wie hoch bei einem AMD Desktop Prozessor aktuell die Anzahl an Kernen ist braucht man da nicht zwangsläufig so viele Virtuelle PC's
Member: qwertyz
qwertyz Mar 03, 2022 at 12:23:33 (UTC)
Goto Top
Viele Dank erstmal für die zahlreichen Antworten!

Zitat von @MirkoKR:

Welchen Festspeicher nutzt dein VHost?

HDD / SSD?
SATA / SAS?
NVMe/PCIe SSD?

Der Speicher für VMs liegt auf einem Raid 10 SAN mit SAS Festplatten. Bei diesem Workload ist es tatsächlich nicht der Flaschenhals.

Zitat von @Th0mKa:
> Eventuell ist ja Azure Batch etwas für dich.
Vielen Dank, das schaue ich mir auf jeden Fall an face-smile

Zitat von @GrueneSosseMitSpeck:

Einfach nur VMs in der Cloud nehmen... ist 5-10x so teuer wie on premise. Glaubs mir. Ich hab sowas schon dutzendfach durchkalkuliert.
Auch wenn man wie in meinem Beispiel beachtet, dass die Hardware nur so wenig genutzt würde?
Und einen Workflow auf 10 VMs aufzuteilen ist immer noch ineffektiver wie 10 Threads in einer VM laufen zu lassen... falls das der Workflow zuläßt. Und wenn nicht weil ein "Task", also eine VM mit 100% auf 4 CPU kernen ausgelastet ist, dann ist das auch zu rechenintensiv für Docker oder richtige "serverless" Techniken. Die machen nur dann Sinn, wenn die Berechnung an sich einfach und singlethreaded ist, und auch Fleetfähig ist. Sprich wenn man das Prüfen der DAtei auf 10000 Lamdas aufteilen könnte dann wäre AWS Lambda wohl die günstigste Variante... oder 1000 Docker.
Ich habe mein Beispiel nur sehr rudimentär geschrieben. Durch Die Anwendung werden auch andere Anwendungen angesprochen und um parametergesteuert 3D Körper aufzubauen und die Resultate gegen die Datei abzugleichen. Dafür wird eine handelsübliche 3D-CAD Anwendung benutzt. Dadurch sind aber auf einer Maschine nicht mehrere Threads möglich und Docker fällt meines Wissens leider auch raus?!

Edit je nach Workflow gibts natürlich CPUs mit vielen Cores und wenig Takt, oder mit wenigen Cores und viel Takt... davon aber eventuell zwei oder vier in einem Board. Und noch was... sollte es hier um Chia Mining gehen, wer sowas in azure oder AWs macht dem canceln das Konto ganz schnell.
Um Mining geht es nicht face-big-smile