我可以在应用程序运行时更改辅助角色的实例数。
我创建了一个应用程序,它根据用户的查询并行执行一系列代码。说,如果用户请求结果非常准确,那么我将不得不在不同的数据集上并行运行代码1000次或更多次。如果用户没有要求结果准确,那么我将平行运行代码5次。 这段代码由worker角色执行。我将启动我的应用程序,其中一个辅助角色的实例数为5.如果用户请求结果非常准确,那么我可以将辅助角色的实例数增加到20个。一旦请求完成,我将实例计数设置为5。
我可以这样做吗?我怎样才能做到这一点。如果我这样做,应用程序是否会重新启动。
答案 0 :(得分:3)
是的,你可以这样做。 Windows Azure公开了管理API,以执行配置和取消配置其他工作者角色的任务。
您可以查看Lokad.Cloud项目的自动缩放界面:http://code.google.com/p/lokad-cloud/wiki/AutoScaling
在QueueService或ScheduledService中,您可以访问属性CloudService.Providers.Provisioning,该属性将授予您对云结构的编程访问权限,以便调整为您的应用程序运行的工作人员数量。
答案 1 :(得分:1)
是的,您还可以配置自动缩放应用程序块(Wasabi)来为您执行此操作。有关详细信息,请参阅此reponse和http://aka.ms/autoscaling:
答案 2 :(得分: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.");