代码之家  ›  专栏  ›  技术社区  ›  veda

Windows Azure:当应用程序在云上运行时,我可以更改工作角色的实例计数吗

  •  3
  • veda  · 技术社区  · 15 年前

    我可以在应用程序运行时更改工作角色的实例计数吗?

    我创建了一个应用程序,它根据用户的查询并行执行一系列代码。例如,如果用户要求结果非常准确,那么我将不得不在不同的数据集中并行运行1000次或更多次的代码。如果用户不要求结果准确,那么我将并行运行代码5次。 此代码序列由工作者角色执行。我将启动我的应用程序,一个工作者角色的实例计数为5。如果用户请求结果非常准确,那么我可以将工作者角色的实例数增加到20。一旦请求完成,我将把实例计数设置回5。

    我能做这件事吗?我该怎么做呢?如果我这样做,应用程序会重新启动吗?

    3 回复  |  直到 6 年前
        1
  •  3
  •   Rinat Abdullin    15 年前

    是的,你可以这样做。WindowsAzure公开了管理API,以执行设置和取消设置其他工作角色的任务。

    您可以查看lokad.cloud项目的自动缩放界面: http://code.google.com/p/lokad-cloud/wiki/AutoScaling

    在QueueService或ScheduledService中,您可以访问属性cloudService.providers.provision,它将授予您对云结构的编程访问权,以便调整为应用程序运行的工作人员数量。

        2
  •  1
  •   Community CDub    8 年前

    是的,您还可以配置自动缩放应用程序块(Wasabi)来完成这项工作。有关详细信息,请参阅 reponse http://aka.ms/autoscaling :

        3
  •  0
  •   Dragos Durlut    12 年前

    您还可以使用以下信息: 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.");