Поддерживает ли Windows Azure добавление дополнительного экземпляра в размещенную службу без перезапуска других экземпляров?

У меня уже есть развертывание размещенной службы с 2 экземплярами рабочих ролей, я хочу добавить еще 3 экземпляра рабочих ролей к той же размещенной службе, и в то же время я не хочу перезапускать существующие 2 экземпляра рабочих ролей.

Хотя я могу создать еще одну размещенную службу и поместить в нее новые 3 экземпляра, но я слышал, что Azure поддерживает только 6 размещенных служб на одну учетную запись. Это правда?

Поскольку мое приложение будет использовать функцию облачного диска, я буду создавать только 1 экземпляр для каждой роли.


person Xilang    schedule 24.02.2012    source источник


Ответы (4)


Я не уверен, что полностью понимаю ваш вопрос, но вот несколько идей. 1) Как уже отмечалось, если вы хотите добавить экземпляры существующих рабочих ролей, это можно сделать, и вы должны (я считаю, даже в Java) иметь возможность предотвратить перезапуск существующих экземпляров. 2) Если вы действительно хотите создать новые роли (новые определения), это можно сделать, и, как предлагается, можно выйти за «предел» в 6 сервисов. И если вы хотите добавить новые роли без перезапуска всего, это тоже возможно - см. http://blogs.msdn.com/b/windowsazure/archive/2011/10/19/announcing-improved-in-place-updates.aspx для Дополнительная информация. 3) Вы также упомянули о желании запустить по одному экземпляру каждой роли из-за использования «облачного диска». Я не уверен, что понимаю суть проблемы. Если вы монтируете один и тот же диск, не имеет значения, монтируется ли он из одного экземпляра роли или из нескольких, или монтируется разными ролями - в любом случае его можно смонтировать только из одного экземпляра для записи, но вы можете смонтируйте его из нескольких экземпляров для чтения.

Надеюсь, это будет полезно. Пожалуйста, дайте мне знать, если я неправильно понял ваши проблемы / вопросы, и мы посмотрим, сможем ли мы найти правильный ответ!

Спасибо и удачи!

person Mike Erickson    schedule 24.02.2012
comment
Спасибо, Майк, моя цель - добавить новые роли к существующей размещенной службе. Ваш ответ - почти то, что я хочу, однако я обнаружил, что если я хочу добавить роль в размещенную службу, придется обновить всю размещенную службу, во время обновления все существующие роли будут перезапущены. Я помню, что в некоторых документах упоминается, что для обновления на месте потребуется как минимум 2 экземпляра, запущенных на каждую роль. И мое приложение будет записывать данные на облачный диск, поэтому у меня есть только один экземпляр для каждой роли. - person Xilang; 24.02.2012
comment
Вы правы - если бы у вас было хотя бы 2 экземпляра на роль, то домен обновления позволил бы обновлять ваши роли без полного завершения работы. Например, если было два экземпляра каждой роли, один экземпляр перестал бы быть обновленным, а другой оставил бы работающим. После завершения второй экземпляр будет обновлен, а новый экземпляр останется работающим. Но с единичным экземпляром вы не можете этого сделать. Также помните, что при запуске только 1 экземпляра каждой роли у вас нет соглашений об уровне обслуживания. - person Mike Erickson; 24.02.2012
comment
Спасибо, Майк, поэтому ответ - нет, если я использую облачный диск. Однако мое приложение похоже на настольное приложение, оно должно записывать данные в файл. Кажется, Azure не очень хорошо поддерживает такой случай. - person Xilang; 28.02.2012
comment
Поскольку я точно не знаю, какое у вас приложение, я не уверен. Но для записи в файл на диске потребуется использовать облачный диск (если он должен быть долговечным), но вы можете использовать несколько экземпляров ролей, если измените приложение для сохранения данных в хранилище Azure (таблица или хранилище BLOB-объектов) и это безусловно, может поддерживаться несколькими экземплярами. - person Mike Erickson; 01.03.2012

@ Игорь и @ Майк уже дали вам отличные ответы. Позвольте мне добавить немного деталей, чтобы решить вашу проблему с дисками Azure.

Кажется, вы разрабатываете конфигурацию с одним экземпляром для каждой роли, чтобы у вас мог быть один записываемый диск на каждый экземпляр. Если это действительно так, это действительно плохо масштабируется: это требует, чтобы вы изменяли свой проект (и развертывали новый пакет) каждый раз, когда вы хотите масштабировать или увеличивать масштаб. В качестве альтернативы просто создайте уникальный диск для каждого экземпляра та же роль. Придумайте схему именования на основе идентификатора экземпляра (для простого примера: /Drives/Instance0.vhd). После запуска экземпляра попросите экземпляр подобрать свой идентификатор и создать диск (или смонтировать существующий). Идентификатор доступен через RoleEnvironment.CurrentRoleInstance.Id.

person David Makogon    schedule 24.02.2012

Вместо того, чтобы пытаться добавлять новые роли в рабочий слот, рассмотрите возможность развертывания нового набора ролей в промежуточном слоте, протестируйте и выполните замену VIP.

person Alexei Levenkov    schedule 24.02.2012

Windows Azure позволяет добавлять экземпляры на лету, не перезагружая другие экземпляры. Вам нужно будет сообщить об этом Azure во время обработки события RoleEnvironment_Changing.

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

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

public override bool OnStart()
{
    RoleEnvironment.Changing += RoleEnvironmentChanging;
return base.OnStart();
}


private void RoleEnvironmentChanging(object sender, RoleEnvironmentChangingEventArgs e)
{
    // If a configuration setting is changing
    if (e.Changes.Any(change => change is RoleEnvironmentConfigurationSettingChange))
    {
        // Set e.Cancel to true to restart this role instance
        e.Cancel = false;
    }
}

По совпадению, если вы хотите настроить автоматическое масштабирование путем добавления или удаления экземпляров службы по мере увеличения или уменьшения спроса, вы можете изучить стороннюю службу под названием AzureWatch по адресу http://www.paraleap.com

person Igorek    schedule 24.02.2012
comment
спасибо, Игорек. Две проблемы: 1. Что здесь означают экземпляры? рабочая роль или экземпляр под рабочей ролью? В моем случае я хочу добавить новую рабочую роль, потому что новый добавленный экземпляр будет отличаться от существующего экземпляра, они не делятся своими данными. 2. Поскольку мой проект является java-проектом, мы не можем добавить в него код C #. - person Xilang; 24.02.2012