Чтобы изменить конфигурацию, вам может понадобиться Командлеты PowerShell Azure . Это действительно упрощает задачу. Например, вот фрагмент PowerShell для увеличения числа экземпляров «WebRole1» в Production на 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}
Теперь, что касается фактического мониторинга загрузки и пропускной способности системы: вам понадобится комбинация вызовов API Azure и данных счетчика производительности. Например: вы можете запросить количество сообщений, находящихся в данный момент в очереди Azure:
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);
}
Таким образом, этот код фиксирует несколько счетчиков производительности в локальном хранилище для каждого экземпляра роли, а затем каждую минуту эти значения передаются в хранилище таблиц.
Теперь хитрость заключается в том, чтобы получить эти значения, проанализировать их, оценить их, а затем соответствующим образом настроить экземпляры ролей. API Azure позволит вам легко извлекать счетчики производительности из хранилища таблиц. Однако для анализа и анализа потребуется некоторое время.
В связи с этим я предлагаю вам взглянуть на Пример динамического масштабирования Azure на сайте кода MSDN. Это отличный пример, который обеспечивает:
- Демонстрационное бизнес-приложение с сервисом wcf
- Средство генерирования нагрузки, которое отправляет сообщения в службу со скоростью, указанной вами
- Веб-интерфейс мониторинга нагрузки
- Механизм масштабирования, который можно запускать локально или в роли Azure.
Это последний пункт, на который вы хотите внимательно посмотреть. На основе пороговых значений сравниваются данные счетчика производительности, а также данные о длине очереди с этими пороговыми значениями. Основываясь на сравнениях, он соответственно масштабирует ваши экземпляры вверх или вниз.
Даже если вы в конечном итоге не используете этот движок, вы можете увидеть, как данные извлекаются из хранилища таблиц, массируются и используются для изменения экземпляров.