2013-07-15 10 views
8

Ich bin durch eine Software begrenzt, die einen einzelnen Kern pro Instanz des Programmlaufs verwendet. Es wird eine SQL Server-Arbeitswarteschlange ablaufen und Ergebnisse auf dem Server ablegen. Je mehr Instanzen ich ausführe, desto schneller ist das Gesamtprojekt. Ich habe ein wenig mit Azure-VMs gespielt und kann den Vorgang auf zwei Arten beschleunigen.Azure VM-Preisgestaltung - Ist es besser, 80 Single-Core-Maschinen oder 10 8-Core-Maschinen zu haben?

1) Ich kann die App auf einer einzigen Kern-VM ausführen, diese VM klonen und sie so oft ausführen, wie ich es für notwendig erachte, um den Job ausreichend zu beschleunigen.

OR

2) Ich kann die App 8-mal auf einem 8-Core-VM laufen ... klonen erneut, dass VM und es laufen auf so viele wie ich für notwendig halten ausreichend um die Arbeit zu beschleunigen.

Ich habe in Tests festgestellt, dass die Beschleunigung für das Hinzufügen von 8 Single-Core-VMs und 1 8-Core-VM in etwa gleich ist. Unter der Annahme, dass dies wahr ist, wäre es besser, preislich Single-Core-Maschinen zu haben?

Die Preisgestaltung ist ein bisschen ein Geheimnis, ob es echte CPU-Nutzungszeit ist, oder was. Es ist ein bisschen einfacher, den 1 8-Kern-Ansatz zu verwenden, da das Hochdrehen von Maschinen und deren Abbau Zeit kostet, aber ich denke, das könnte automatisiert werden.

Es scheint von einigen Preisseiten, dass die Multiple-Single-Core-VM Ansatz würde weniger kosten?

Nebenfrage: also könnte ich einige Power Shell-Skripte tun, um einfach VMs eines bestimmten Bildes hinzuzufügen und die App zu starten, und dann herunterzufahren, sobald ich kurz vor dem Abschluss bin? Nach dem Generieren der VMs würde es einen Weg geben, die App zu starten, ohne dass man sich in jedem einzelnen einloggen und es ausführen muss?

Antwort

5

Billing

Nach Windows Azure Virtual Machines Pricing Details werden virtuelle Maschinen pro Minute abgerechnet (von wall clock time). Die Preise sind als Stundensätze (60 Minuten) aufgeführt und werden basierend auf der Gesamtzahl der Minuten berechnet, zu denen die VMs für eine Teilstunde laufen.

Im Juli 2013 kostet 1 Small VM (1 virtueller Kern) 0,09 $/Std .; 8 kleine VMs (8 virtuelle Kerne) kosten $ 0,72/Std .; 1 Extra Large VM (8 virtuelle Kerne) kostet 0,72 $/Std. (Entspricht 8 Small VMs).

VM Größen und Leistungs

Die VMs Größen unterscheiden sich nicht nur in der Anzahl der Kerne und RAM, aber also on network I/O performance von 100 Mbps für kleine bis 800 Mbps für Extra Large reichen.

Extra Kleine VMs sind in Bezug auf CPU- und I/O-Leistung eher eingeschränkt und für Workloads wie die beschriebene nicht geeignet.

Für Singlethread-E/A-gebundene Anwendungen, wie in der Frage beschrieben, könnte eine Extra Large VM aufgrund schnellerer Antwortzeiten für jede Anforderung einen Vorteil haben.

Es ist auch ratsam, Workloads mit 2, 4 oder mehr Prozessen pro Core zu benchmarken. Zum Beispiel 2 oder 4 Prozesse in einer Small VM und 16, 32 oder mehr Prozesse in einer Extra Large VM, um das angemessene Gleichgewicht zwischen CPU- und I/O-Lasten zu finden (vorausgesetzt, Sie verwenden nicht mehr RAM als verfügbar).

Auto-Skalierung

Auto-Skalierung von virtuellen Maschinen ist built-into Windows Azure directly. Es kann entweder auf CPU-Auslastung oder Windows Azure Queues-Länge basieren.

Eine weitere Alternative besteht darin, spezielle Tools oder Dienste zu verwenden, um die Last auf den Servern zu überwachen und PowerShell-Skripts auszuführen, um virtuelle Maschinen je nach Bedarf hinzuzufügen oder zu entfernen.

Auto-run

Sie können den Windows Scheduler verwenden, um automatisch Aufgaben ausführen, wenn Windows gestartet wird.

+0

Hmm .. das automatische Skalieren sieht so aus, als würde es fast für mich funktionieren, aber in diesem speziellen Fall würde ich 100% CPU bei jeder Instanz laufen lassen, während meine Arbeitswarteschlange noch übrig war, und 0% wenn es keine Arbeit gab Artikel. Ich würde es lieben zu sehen, dass die VM nichts mehr tut und sie loswird. Ich denke, dass diese automatische Skalierung eher für eine Web-App als für mein Bio Analayis-Tool entwickelt wurde. Habe ich recht, oder würde es wirklich funktionieren? Ich würde auf jeden Fall das Auto-Run-Ding machen müssen, oder? –

+1

Es würde funktionieren, wenn Sie die Windows Azure-Warteschlange verwenden würden. Dann könnten Sie VMs entsprechend der Warteschlangenlänge mit minimaler und maximaler Anzahl von VMs und einer Verzögerung zwischen Überprüfungen konfigurieren oder entfernen. Aber das wäre eine andere Frage ... –

2

Die Preise sind „Uptime der Maschine in Stunden * Rate der VM Größe/Stunde * Anzahl der Instanzen“

z.B. Sie haben einen 8-Core VM (Extra Large) für einen Monat Lauf (30 Tage) (30 * 24) * 0,72 $ * 1 = 518,4 $

für 8 Einzeladern wird es (30 * 24) sein * 0.09 * 8 = 518.4 $

Also bezweifle ich, ob es irgendeinen Preisunterschied geben wird. Ein Vorteil kleinerer Maschinen und "Skalierung" ist, wenn Sie die Skalierbarkeit genauer steuern können. Eine Extra-große Maschine wird mehr Leerlauf als 2-3 kleine Maschinen essen.

Ja, Sie können dies definitiv skripten. Angenommen, sie sind IaaS-Rechner, können Sie das Skript zum Windows-Start hinzufügen, wenn Sie auf PaaS die "Startup Task" verwenden können. Reference

+0

Zu Ihrem "Skalierung" -Kommentar: Hmm, nehme an, ich habe eine VM eingerichtet - so gemacht, dass sie meine App beim Start automatisch startet und dann Logik hinzufügt, um die VM herunterzufahren konnte nichts mehr von der SQL Server-Arbeitswarteschlange abrufen. Würde mich das vor zu vielen untätigen Dollars schützen? Oder ich müsste die VM so schnell wie möglich löschen ... weil das etwas schwieriger wäre. Ich versuche nur, den einfachsten Weg zu skalieren, wenn es das gleiche kostet, würde ich LIEBEN, alles so schnell wie möglich zu verarbeiten - ich denke, min wäre wie 90sec, da jedes workitem ungefähr so ​​lange dauert :) –

+0

Ich habe noch etwas getan graben, und es sieht so aus, als ob die VMs aufgeladen werden, egal ob sie eingeschaltet sind oder nicht, also muss ich die VM wirklich so schnell wie möglich löschen, nachdem sie nicht mehr verarbeitet wurde. Gibt es eine Möglichkeit, die VM nach Abschluss einer Aufgabe automatisch aus der VM zu löschen? –

+0

Für eine ähnliche Situation haben wir erfolgreich versucht, die Warteschlangenlänge zu überwachen. Wenn Sie wissen, dass die durchschnittliche Bearbeitungszeit für eine Nachricht x Minuten beträgt, können Sie in den nächsten 30 Minuten ganz einfach die Anzahl der benötigten Maschinen ermitteln. Eine Maschine benötigt zwischen 3-7 Minuten um "Erstellen-> Bereitstellung-> Start". Sie können eine extra kleine Maschine in Vollzeit laufen lassen, um die Warteschlange zu überwachen und die Skalierungsregeln auszuführen. – IUnknown

12

Ich würde behaupten, dass alle anderen Faktoren gleich sind, und dieser Code wirklich sein CPU-gebunden und nicht von einem Speicher profitieren teilen, dass auf der gleichen Maschine mehrere Prozesse laufen würde, sollten Sie entscheiden sich für die Single-Core-Maschinen anstatt Multi-Core-Maschinen.

Gründe:

Isolat Fehlerdomänen

statt, wenn möglich zu tun up ist besser skalieren, weil es natürlich Fehler isoliert. Wenn einer Ihrer kleinen Knoten abstürzt, betrifft dies nur einen Prozess. Wenn ein großer Knoten abstürzt, gehen mehrere Prozesse verloren.

Load Balancing

Windows Azure, wie jedes Multi-Tenant-System ist eine gemeinsame Ressource. Dies bedeutet, dass Sie wahrscheinlich mit anderen Workloads um CPU-Zyklen konkurrieren werden. Wenn Sie kleine VMs verwenden, haben Sie eine bessere Chance, sie auf physische Server im Rechenzentrum zu verteilen, die zum Zeitpunkt der Bereitstellung der Maschinen die beste Ressourcensituation aufweisen (Sie sollten die VMs vor dem erneuten Start stoppen und die Zuordnung wieder aufheben die Azure-Fabric-Platzierungsalgorithmen zur Auswahl der besten Hosts). Wenn Sie große VMs verwenden, ist es weniger wahrscheinlich, einen geeigneten Host mit optimalen Konflikten zu finden, um viele virtuelle Kerne unterzubringen.

virtuellen Prozessorleistung

Es ist nicht weit verstanden, wie eine virtuelle CPU Scheduling anders ist, als eine physische Planung, aber es ist etwas im Wert von bis zu lesen. Die Hauptsache ist, dass Hypervisoren wie VMware ESXi und Hyper-V (auf denen Azure ausgeführt wird) mehrere virtuelle Kerne zusammen planen und nicht separat. Wenn Sie also eine 8-Kern-VM besitzen, muss der physische Host über 8 physische Kerne verfügen, die gleichzeitig sind, bevor die virtuelle CPU ausgeführt werden kann. Je mehr virtuelle Kerne vorhanden sind, desto unwahrscheinlicher ist es, dass der Host zu irgendeinem Zeitpunkt über genügend physische Kerne verfügt (selbst wenn 7 physische Kerne frei sind, kann die VM nicht ausgeführt werden). Dies kann zu einem paradoxen Effekt führen, dass die VM schlechter arbeitet, wenn mehr virtuelle CPU-Kerne hinzugefügt werden.

Kurz gesagt, eine einzelne vCPU-Maschine ist wahrscheinlicher, einen Teil des physischen Prozessors zu erhalten als eine 8 vCPU-Maschine, alles andere gleich.

Und ich stimme zu, dass die Preise im Grunde die gleichen sind, abgesehen von ein wenig mehr Speicherkosten, um viele kleine VMs gegen weniger große zu speichern. Die Speicherung in Azure ist jedoch weit weniger kostspielig als die Berechnung, was wahrscheinlich keinen wirtschaftlichen Nutzen bringt.

Hoffe, dass hilft.

+3

In unseren Belastungstests beobachteten wir diesen "paradoxen Effekt" – zebra

+0

Beziehen Sie sich auf eine Bandenplanung?Oder Zeitplanung? Ich denke, dass Hyper-V nie von diesem Problem betroffen war und VMWare scheint sich für eine lange Zeit entspannt zu haben. Siehe hierzu: http://www.virtuallycloud9.com/index.php/2013/08/virtual-processor-scheduling-how-vmware-and-microsoft-hypervisors-work-at-the-cpu-level/ Mit anderen Worten Dieser "paradoxe Effekt" wird eher durch Kontextwechsel oder einen anderen Overhead als durch den VM-Scheduler verursacht. – jhexp