Windows 基于XML文件的Azure可伸缩性
编程的最佳实践解决方案是什么?更改定义了实例数的XML文件?我知道这在某种程度上是可能的,因为这个用于Windows Azure API的csmanage.exe。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
如何衡量虚拟机实际工作的工人角色?我在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);
}