8 votes

Une instance de rôle de travailleur Windows Azure est-elle une VM entière ?

Lorsque j'exécute une instance de rôle de travailleur sur Azure, s'agit-il d'une VM complète exécutée dans un hôte partagé (comme EC2) ? Ou s'exécute-t-elle dans un système partagé (comme Heroku) ?

Par exemple, que se passe-t-il si mon application commence à demander 100 Go de mémoire ? Sera-t-elle éteinte automatiquement pour violation des limites (à la Google App Engine), ou épuisera-t-elle simplement la VM, de sorte que la structure Azure la redémarre ?

Deux rôles peuvent-ils fonctionner dans le même système ?

10voto

David Makogon Points 28933

Il s'agit d'une VM entière, et les ressources allouées sont directement basées sur la taille de la VM que vous choisissez, de 1,75 Go (Small) à 14 Go (XL), avec 1 à 8 cœurs. Il existe également une instance Extra Small avec 768 Mo de RAM et un cœur partagé. Les détails complets sur la taille des VM sont aquí .

Avec Windows Azure, votre VM est allouée sur un serveur physique, et c'est à la fabrique de trouver de tels serveurs pour allouer correctement toutes vos instances de rôle web ou de travailleur. Si vous avez plusieurs instances, cela signifie qu'il faut répartir ces machines virtuelles sur les serveurs suivants domaines de défaillance .

Avec votre VM, vous n'avez pas à craindre d'être tué si vous essayez d'allouer trop de ressources : c'est comme si vous aviez une machine, et vous ne pouvez pas aller au-delà de ce qui est prévu.

En ce qui concerne les deux rôles fonctionnant sur le même système : Chaque rôle a des instances, et avec des instances multiples, comme je l'ai mentionné ci-dessus, vos instances sont divisées en domaines de défaillance. Si, par exemple, vous avez 4 instances et 2 domaines de défaillance, il est possible que vous ayez deux instances sur le même rack (ou peut-être le même serveur).

3voto

sharptooth Points 93379

J'ai fait un test rapide pour vérifier cela. J'utilise une "petite" instance qui dispose de quelque chose comme 1,75 gigaoctet de mémoire. Mon code utilise un ArrayList pour stocker les références à de grands tableaux afin que ces tableaux ne soient pas collectés. Chaque tableau est composé d'un milliard byte et une fois qu'elle est allouée, j'exécute une boucle qui met chaque élément à zéro, puis une autre boucle qui vérifie que chaque élément est à zéro pour s'assurer que la mémoire est bien allouée par le système d'exploitation (je ne sais pas si c'est important en C#, mais c'était important en C++). Une fois que le tableau a été créé, écrit et lu, il est ajouté à la section ArrayList .

Mon code a donc réussi à allouer cinq tableaux de ce type et la tentative d'allocation du sixième a donné lieu à System.OutOfMemoryException . Puisque 5 milliards d'octets plus l'overhead est certainement plus que 1,75 gigaoctets de mémoire physique allouée à la machine, je crois que cela prouve que le fichier de page est activé sur la VM et que le comportement est le même que sur le Windows Server 2008 habituel avec les limitations induites par la machine où il est exécuté.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X