Ist eine Windows Azure-Arbeitsrolleninstanz eine ganze VM?

8

Wenn ich in Azure eine Worker-Rolleninstanz ausführe, ist dies eine vollständige VM, die auf einem gemeinsam genutzten Host (wie EC2) ausgeführt wird? Oder läuft es in einem gemeinsamen System (wie Heroku)?

Was passiert zum Beispiel, wenn meine Anwendung 100 GB Speicher anfordert? Wird es automatisch wegen Überschreitung von Limits (á la Google App Engine) gekillt, oder wird es nur die VM ausschöpfen, so dass der Azure Fabric es neu startet?

Laufen zwei Rollen jemals im selben System?

    
Andres Riofrio 07.06.2012, 03:17
quelle

2 Antworten

10

Es ist eine vollständige VM und die zugewiesenen Ressourcen basieren direkt auf der Größe der von Ihnen gewählten VM, von 1,75 GB (Small) bis 14 GB (XL) mit 1-8 Kernen. Es gibt auch eine Extra Small-Instanz mit 768 MB RAM und gemeinsam genutztem Kern. Details zur vollständigen VM-Größe sind hier .

Mit Windows Azure wird Ihre virtuelle Maschine auf einem physischen Server zugewiesen, und es liegt in der Verantwortung des Fabric, solche Server zu finden, um alle Ihre Web- oder Worker-Rolleninstanzen richtig zuzuordnen. Wenn Sie mehrere Instanzen haben, müssen Sie diese VMs über Fehlerdomänen zuordnen.

Mit Ihrer VM müssen Sie sich nicht darum sorgen, getötet zu werden, wenn Sie versuchen, zu viel in der Ressource zu verteilen: es ist wie eine Maschine, und Sie können nicht über das hinausgehen, was da ist.

Soweit zwei Rollen auf demselben System ausgeführt werden: Jede Rolle hat Instanzen und bei mehreren Instanzen, wie oben erwähnt, sind Ihre Instanzen in Fehlerdomänen unterteilt. Wenn Sie beispielsweise 4 Instanzen und 2 Fehlerdomänen haben, ist es möglich, dass Sie zwei Instanzen auf demselben Rack (oder vielleicht demselben Server) haben.

    
David Makogon 07.06.2012, 03:31
quelle
3

Ich habe einen Schnelltest gemacht, um das zu überprüfen. Ich verwende eine "kleine" Instanz, die etwa 1,75 Gigabyte Speicher hat. Mein Code verwendet ArrayList , um Verweise auf große Arrays zu speichern, sodass diese Arrays nicht als Garbage Collected erfasst werden. Jedes Array ist eine Milliarde byte s und sobald es zugewiesen ist, führe ich eine Schleife, die jedes Element auf Null setzt und dann eine weitere Schleife, um zu überprüfen, dass jedes Element Null ist, um sicherzustellen, dass Speicher tatsächlich vom Betriebssystem zugewiesen wird (nicht sicher, ob es ist wichtig in C #, aber es war in C ++ wichtig). Sobald das Array erstellt, geschrieben und gelesen wurde, wird es zu ArrayList hinzugefügt.

Also hat mein Code fünf solche Arrays erfolgreich zugeordnet, und der Versuch, den sechsten zuzuordnen, ergab sich in System.OutOfMemoryException . Da 5 Milliarden Bytes plus Overhead definitiv mehr als 1,75 Gigabyte an physikalischem Speicher sind, der dem Rechner zugewiesen ist, ist dies der Beweis dafür, dass die Auslagerungsdatei auf der VM aktiviert ist und das Verhalten den üblichen Einschränkungen von Windows Server 2008 entspricht die Maschine, auf der es läuft.

    
sharptooth 08.06.2012 10:16
quelle

Tags und Links