Является ли экземпляр рабочей роли Windows Azure целой виртуальной машиной?

Когда я запускаю экземпляр рабочей роли в Azure, это полная виртуальная машина, работающая на общем хосте (например, EC2)? Или он работает в общей системе (например, Heroku)?

Например, что произойдет, если мое приложение начнет запрашивать 100 ГБ памяти? Будет ли он автоматически убит за нарушение ограничений (как Google App Engine), или он просто исчерпает виртуальную машину, чтобы фабрика Azure перезапустила его?

Две роли когда-либо выполняются в одной системе?

2 ответа

Решение

Это целая виртуальная машина, и выделенные ресурсы основаны непосредственно на размере виртуальной машины, которую вы выбираете, от 1,75 ГБ (маленькая) до 14 ГБ (XL), с 1-8 ядрами. Есть также Extra Small экземпляр с 768MB RAM и общим ядром. Полная информация о размере виртуальной машины находится здесь.

В Windows Azure ваша виртуальная машина размещается на физическом сервере, и ответственность за поиск таких серверов для правильного распределения всех экземпляров веб-сайтов или рабочих ролей лежит на структуре. Если у вас есть несколько экземпляров, это означает распределение этих виртуальных машин по доменам сбоев.

С вашей виртуальной машиной вам не нужно беспокоиться о том, что вас убьют, если вы попытаетесь выделить слишком много ресурсов: это все равно, что иметь машину, и вы не можете выйти за пределы того, что там есть.

Что касается двух ролей, работающих в одной и той же системе: у каждой роли есть экземпляры, а с несколькими экземплярами, как я упоминал выше, ваши экземпляры делятся на области сбоев. Если, скажем, у вас было 4 экземпляра и 2 домена с ошибками, возможно, у вас может быть два экземпляра в одной стойке (или, возможно, на одном сервере).

Я провел быстрый тест, чтобы проверить это. Я использую "маленький" экземпляр, который имеет что-то вроде 1,75 гигабайта памяти. Мой код использует ArrayList хранить ссылки на большие массивы, чтобы эти массивы не собирались мусором. Каждый массив составляет один миллиард bytes и как только он выделен, я запускаю цикл, который устанавливает каждый элемент на ноль, а затем еще один цикл, чтобы проверить, что каждый элемент равен нулю, чтобы гарантировать, что память действительно выделена из операционной системы (не уверен, имеет ли это значение в C#, но это действительно имеет значение в C++). Как только массив создан, записан и прочитан, он добавляется в ArrayList,

Таким образом, мой код успешно выделил пять таких массивов, и попытка выделить шестой из них привела к System.OutOfMemoryException, Поскольку 5 миллиардов байт плюс накладные расходы, безусловно, больше, чем 1,75 гигабайта физической памяти, выделенной для машины, я считаю, что это доказывает, что файл подкачки включен на виртуальной машине и поведение такое же, как на обычном Windows Server 2008 с ограничениями, вызванными машина, на которой он работает.

Другие вопросы по тегам