要修改配置,您可能需要查看PowerShell Azure Cmdlets。这确实简化了任务。例如,这是一个 PowerShell sn-p,用于将生产环境中“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}
现在,就实际监控系统负载和吞吐量而言:您需要结合使用 Azure API 调用和性能计数器数据。例如:您可以请求当前 Azure Queue 中的消息数:
http://yourstorageaccount.queue.core.windows.net/myqueue?comp=metadata
您还可以设置自己的角色来捕获特定的性能计数器。例如:
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 代码站点上的 Azure Dynamic Scaling Example。这是一个很好的示例,它提供:
- 托管 wcf 服务的演示业务线应用程序
- 一种负载生成工具,以您指定的速率将消息推送到服务
- 负载监控网络用户界面
- 可在本地或以 Azure 角色运行的扩展引擎。
这是您要仔细查看的最后一项。根据阈值,它会将您的性能计数器数据以及队列长度数据与这些阈值进行比较。根据比较结果,它会相应地扩大或缩小您的实例。
即使您最终没有使用此引擎,您也可以看到数据是如何从表存储中抓取、处理并用于驱动实例更改的。