Windows Azure: можно ли изменить количество экземпляров рабочей роли, когда приложение работает в облаке - PullRequest
3 голосов
/ 04 июля 2010

Можно ли изменить количество экземпляров рабочей роли во время работы приложения.

Я создал приложение, которое выполняет последовательность кода параллельно несколько раз в зависимости от запроса пользователя. Скажем, если пользователь запросит, чтобы результат был очень точным, то мне придется выполнять код 1000 или более раз параллельно для разных наборов данных. Если пользователь не запрашивает точный результат, я буду запускать код 5 раз параллельно. Эта последовательность кода выполняется рабочей ролью. Я начну свое приложение с числом экземпляров рабочей роли, равным 5. Если пользователь запрашивает, чтобы результат был очень точным, то могу ли я увеличить число экземпляров рабочей роли до 20. Как только запрос будет завершен, Я установлю количество экземпляров обратно на 5.

Могу ли я сделать это. Как я могу это сделать. Будет ли приложение перезапущено, если я сделаю это.

Ответы [ 3 ]

3 голосов
/ 04 июля 2010

Да, вы можете сделать это. Windows Azure предоставляет API управления для выполнения задач, таких как подготовка и удаление дополнительных рабочих ролей.

Вы можете проверить интерфейс автоматического масштабирования проекта Lokad.Cloud: http://code.google.com/p/lokad-cloud/wiki/AutoScaling

В QueueService или ScheduledService вы можете получить доступ к свойству CloudService.Providers.Provisioning, которое предоставит вам программный доступ к облачной фабрике, чтобы отрегулировать количество работников, работающих для вашего приложения.

1 голос
/ 02 мая 2012

Да, вы также можете настроить Autoscaling Application Block (Wasabi), чтобы сделать это для вас. Для получения дополнительной информации см. ответ и http://aka.ms/autoscaling:

0 голосов
/ 10 июня 2013

Вы также можете использовать информацию из этого: http://blog.maartenballiauw.be/post/2011/03/21/Windows-Azure-and-scaling-how-(NET).aspx

Главным образом:

var deployment = GetWindowsAzureDeployment();

            string configurationXml = ServiceManagementHelper.DecodeFromBase64String(deployment.Configuration);

            Log.Info("Updating configuration value...");

            var serviceConfiguration = XDocument.Parse(configurationXml);

            serviceConfiguration
                    .Descendants()
                    .Single(d => d.Name.LocalName == "Role" && d.Attributes().Single(a => a.Name.LocalName == "name").Value == RoleName)
                    .Elements()
                    .Single(e => e.Name.LocalName == "Instances")
                    .Attributes()
                    .Single(a => a.Name.LocalName == "count").Value = newInstanceCount.ToString();

            var changeConfigurationInput = new ChangeConfigurationInput();
            changeConfigurationInput.Configuration = ServiceManagementHelper.EncodeToBase64String(serviceConfiguration.ToString(SaveOptions.DisableFormatting));

            Log.Info("Uploading new configuration...");

            ManagementClient.ChangeConfigurationBySlot(SubscriptionId, ServiceName, Slot, changeConfigurationInput);

            Log.Info("Finished uploading new configuration.");
...