2010-07-03 3 views
3

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

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

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

ответ

3

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

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

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

1

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

0

Вы также можете использовать информацию из этого: 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."); 
Смежные вопросы