Масштабируемость Azure через XML-файл - PullRequest
1 голос
/ 23 апреля 2010

Какое наилучшее практическое решение для программного изменения файла XML, в котором определено количество экземпляров? Я знаю, что это как-то возможно с этим csmanage.exe для Windows Azure API. Как определить, какие виртуальные машины рабочих ролей действительно работают? Я также задавал этот вопрос на форумах сообщества MSDN: http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/02ae7321-11df-45a7-95d1-bfea402c5db1

Ответы [ 3 ]

1 голос
/ 10 мая 2010

Количественная оценка нагрузки на самом деле очень специфична для конкретного приложения - особенно, если продумать рабочие роли. Например, если вы работаете с большим приложением параллельной обработки, ожидаемое / ожидаемое поведение будет 100% -ной загрузкой ЦП по всем направлениям, и «решение о масштабировании» может быть основано на том, увеличивается или уменьшается рабочая очередь.

Еще одним усложнением решения является время задержки для различных этапов - увеличение числа экземпляров ролей, присоединение к балансировщику нагрузки и / или падение с балансировщика нагрузки. Очень легко попасть в ситуацию, когда вы «гоняетесь» по кривой, постоянно перемешивая вверх и вниз.

Что касается вашего конкретного вопроса о конкретных виртуальных машинах, поскольку все виртуальные машины в определении роли идентичны, измерение одной виртуальной машины (если развертывание не начинается с количества виртуальных машин 1) не должно вам много говорить - все виртуальные машины находятся за нагрузкой. Балансир и / или вытягивают из одной очереди. Любая разница должна быть временной.

Я бы порекомендовал выбрать что-то, что по своей природе не является сильно изменяемым (например, процессор). Как правило, вы хотите найти трендовую точку - для веб-приложений это может быть очередь ответов, для параллельных приложений это может быть лазурная глубина очереди и т. Д., Но для любого из них это будет тренд, а не абсолютное число. Я бы также предложил измерять их с довольно широкими интервалами - минуты, а не секунды. Если у вас есть нагрузка, на которую нужно реагировать в считанные секунды, то реально вам нужно будет заранее увеличить количество запущенных экземпляров.

1 голос
/ 26 апреля 2010

Чтобы изменить конфигурацию, вам может понадобиться Командлеты 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.

Это последний пункт, на который вы хотите внимательно посмотреть. На основе пороговых значений сравниваются данные счетчика производительности, а также данные о длине очереди с этими пороговыми значениями. Основываясь на сравнениях, он соответственно масштабирует ваши экземпляры вверх или вниз.

Даже если вы в конечном итоге не используете этот движок, вы можете увидеть, как данные извлекаются из хранилища таблиц, массируются и используются для изменения экземпляров.

0 голосов
/ 03 декабря 2011

Что касается вашего первого вопроса, вы также можете использовать Блок приложения для автоматического масштабирования для динамического изменения количества экземпляров на основе набора предопределенных правил.

...