Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 基于XML文件的Azure可伸缩性_Windows_Azure_Cloud - Fatal编程技术网

Windows 基于XML文件的Azure可伸缩性

Windows 基于XML文件的Azure可伸缩性,windows,azure,cloud,Windows,Azure,Cloud,编程的最佳实践解决方案是什么?更改定义了实例数的XML文件?我知道这在某种程度上是可能的,因为这个用于Windows Azure API的csmanage.exe。 如何衡量虚拟机实际工作的工人角色?我在MSDN社区论坛上也问了这个问题:要修改配置,您可能需要查看。这确实简化了任务。例如,下面是一个PowerShell代码段,用于将生产环境中“WebRole1”的实例数增加1: $cert = Get-Item cert:\CurrentUser\My\<YourCertThumbprin

编程的最佳实践解决方案是什么?更改定义了实例数的XML文件?我知道这在某种程度上是可能的,因为这个用于Windows Azure API的csmanage.exe。
如何衡量虚拟机实际工作的工人角色?我在MSDN社区论坛上也问了这个问题:

要修改配置,您可能需要查看。这确实简化了任务。例如,下面是一个PowerShell代码段,用于将生产环境中“WebRole1”的实例数增加1:

$cert = Get-Item cert:\CurrentUser\My\<YourCertThumbprint>
$sub = "<YourAzureSubscriptionId>"
$servicename = '<YourAzureServiceName>'
Get-HostedService $servicename -Certificate $cert -SubscriptionId $sub |
Get-Deployment -Slot Production |
Set-DeploymentConfiguration {$_.RolesConfiguration["WebRole1"].InstanceCount += 1}
您还可以设置角色以捕获特定的性能计数器。例如:

 public override bool OnStart()
 {
    var diagObj= DiagnosticMonitor.GetDefaultInitialConfiguration();
    AddPerfCounter(diagObj,@"\Processor(*)\% Processor Time",60.0);
    AddPerfCounter(diagObj, @"\ASP.NET Applications(*)\Request Execution Time", 60.0);
    AddPerfCounter(diagObj,@"\ASP.NET Applications(*)\Requests Executing", 60.0);
    AddPerfCounter(diagObj, @"\ASP.NET Applications(*)\Requests/Sec", 60.0);

    //Set the service to transfer logs every minute to the storage account
    diagObj.PerformanceCounters.ScheduledTransferPeriod = TimeSpan.FromMinutes(1.0);

    //Start Diagnostics Monitor with the new storage account configuration
    DiagnosticMonitor.Start("DiagnosticsConnectionString",diagObj);
}
因此,这段代码将几个性能计数器捕获到每个角色实例的本地存储中,然后每分钟将这些值传输到表存储中

现在的诀窍是检索这些值,解析它们,计算它们,然后相应地调整角色实例。Azure API将允许您轻松地从表存储中提取性能计数器。然而,解析和评估将需要一些时间来构建

因此,我建议您查看MSDN代码站点上的。这是一个很好的示例,提供了:

  • 托管wcf服务的演示业务线应用程序
  • 一种负载生成工具,可按指定的速率将消息推送到服务
  • 负载监控web用户界面
  • 可在本地或Azure角色中运行的缩放引擎
这是最后一件你想仔细看的东西。基于阈值,它将性能计数器数据以及队列长度数据与这些阈值进行比较。根据比较结果,它会相应地向上或向下扩展实例


即使您最终没有使用此引擎,您也可以看到数据是如何从表存储中抓取、处理和用于驱动实例更改的。

量化负载实际上是非常特定于应用程序的,特别是在考虑工作人员角色时。例如,如果您正在执行一个大型并行处理应用程序,那么预期/期望的行为将是100%的CPU利用率,并且“规模决策”可能基于工作队列是在增长还是在收缩

使决策更加复杂的是各个步骤的延迟时间——增加角色实例计数、加入负载平衡器和/或从负载平衡器中删除。你很容易陷入“追逐”曲线、不断上下翻滚的境地

至于您关于特定虚拟机的特定问题,由于角色定义中的所有虚拟机都是相同的,因此测量单个虚拟机(除非部署从虚拟机计数1开始)不会真正告诉您太多-所有虚拟机都位于负载平衡器后面和/或从同一队列中拉出。任何差异都应该是暂时的


我的建议是选择本质上不是高度可变的东西进行监控(例如CPU)。通常,您希望找到一个趋势点-对于web应用程序,它可能是响应队列,对于并行应用程序,它可能是azure队列深度,等等。但对于其中任何一个应用程序,它们都是趋势,而不是绝对数。我还建议以相当大的间隔测量它们——分钟,而不是秒。如果您有一个负载需要在几秒钟内做出响应,那么实际上您需要提前增加您的运行实例数

关于第一个问题,您还可以使用根据一组预定义规则动态更改实例计数。

谢谢。这使得增加实例数量的任务更快。但是:如何在实例上“量化负载”,这样就可以通过编程更改实例的数量-这样我们就不需要任何“手动干预”。希望我刚才添加的信息将有助于您的任务。我现在意识到,仅powershell cmdlet示例本身并不能真正满足您的需要。
 public override bool OnStart()
 {
    var diagObj= DiagnosticMonitor.GetDefaultInitialConfiguration();
    AddPerfCounter(diagObj,@"\Processor(*)\% Processor Time",60.0);
    AddPerfCounter(diagObj, @"\ASP.NET Applications(*)\Request Execution Time", 60.0);
    AddPerfCounter(diagObj,@"\ASP.NET Applications(*)\Requests Executing", 60.0);
    AddPerfCounter(diagObj, @"\ASP.NET Applications(*)\Requests/Sec", 60.0);

    //Set the service to transfer logs every minute to the storage account
    diagObj.PerformanceCounters.ScheduledTransferPeriod = TimeSpan.FromMinutes(1.0);

    //Start Diagnostics Monitor with the new storage account configuration
    DiagnosticMonitor.Start("DiagnosticsConnectionString",diagObj);
}