2010-04-23 4 views
1

인스턴스 수가 정의 된 XML 파일을 프로그래밍 방식으로 변경하는 가장 좋은 방법은 무엇입니까? 나는 이것이 Windows Azure API를위한 csmanage.exe로 어떻게 든 가능하다는 것을 안다. 실제로 어떤 Worker Role VM이 실제로 작동하는지 측정 할 수 있습니까? 나는 MSDN 커뮤니티 포럼에서도이 질문을 던졌습니다 : http://social.msdn.microsoft.com/Forums/en-US/windowsazure/thread/02ae7321-11df-45a7-95d1-bfea402c5db1XML 파일을 통한 Azure 확장 성

답변

1

구성을 수정하려면 PowerShell Azure Cmdlets을 참조하십시오. 이것은 정말로 작업을 단순화합니다. 까지로 실제로 시스템 부하 및 처리량을 모니터링, 지금

$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} 

: 예를 들어, 여기에 1 생산에 'WebRole1'의 인스턴스의 수를 증가시키기위한 PowerShell을 조각의 당신은 푸른 API 호출의 조합이 필요합니다 성능 카운터 데이터. 예를 들어 현재 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); 
} 

그래서이 코드가 각각의 역할 인스턴스에 로컬 스토리지에 몇 가지 성능 카운터를 캡처하는 경우, 그 값이 테이블 스토리지에 전송되는 모든 분.

트릭은 이제 이러한 값을 검색하고 구문 분석하고 평가 한 다음 이에 따라 역할 인스턴스를 조정하는 것이 트릭입니다. Azure API를 사용하면 테이블 저장소에서 성능 카운터를 쉽게 가져올 수 있습니다. 그러나 구문 분석 및 평가에 시간을 할애해야합니다.

MSDN 코드 사이트에서 Azure Dynamic Scaling Example을 볼 것을 제안합니다. 당신이

  • 부하를 지정

    • 데모 라인의 비즈니스 응용 프로그램은 WCF 서비스
    • 속도로 서비스에 메시지를 밀어 부하 생성 도구를 호스팅 :이 제공하는 좋은 예입니다 - 모니터링 웹 UI
    • 로컬 또는 Azure 역할에서 실행할 수있는 확장 엔진.

    주의 깊게 살펴보고 싶은 마지막 항목입니다. 임계 값을 기반으로 성능 카운터 데이터와 대기열 길이 데이터를 임계 값과 비교합니다. 그런 다음 비교를 기반으로 인스턴스를 위아래로 조정합니다.

    이 엔진을 사용하지 않아도 테이블 저장소에서 데이터를 가져 와서 마사지하고 인스턴스 변경을 유도하는 방법을 확인할 수 있습니다.

  • +0

    감사합니다. 따라서 인스턴스 수를 빠르게 늘릴 수 있습니다. 그러나 : 인스턴스의로드를 "계량화"하여 인스턴스의 수를 프로그램 적으로 변경할 수 있으므로 "수동 간섭"이 필요하지 않습니다. – dayscott

    +0

    방금 ​​추가 한 정보가 당신의 탐구에 도움이되기를 바랍니다. Powershell cmdlet 샘플 자체만으로도 필요한 위치에 실제로 도달하지 못한다는 것을 알게되었습니다. –

    1

    부하를 정량화하는 것은 실제로 매우 특정한 애플리케이션입니다. 특히 작업자 역할을 통해 생각할 때 더욱 그렇습니다. 예를 들어 대규모 병렬 처리 응용 프로그램을 수행하는 경우 기대되는/기대되는 동작은 전반적으로 100 % CPU 사용률이되며 '규모 결정'은 작업 대기열의 증가 또는 감소 여부에 따라 달라질 수 있습니다.

    결정을 더욱 복잡하게 만드는 것은 Role Instance Count 증가, Load Balancer 조인 및/또는로드 밸런서에서의 삭제와 같은 다양한 단계의 지연 시간입니다. 커브를 "쫓고"끊임없이 위아래에 휘젓는 상황에 들어가는 것은 매우 쉽습니다.

    특정 VM에 대한 특정 질문에 대해서는 역할 정의의 모든 VM이 동일하기 때문에 단일 VM을 측정해야합니다 (VM 개수가 1 인 배포가 시작되지 않는 한). 실제로 모든 VM이 로드 밸런서 및/또는 동일한 대기열에서 가져 오는 중입니다. 모든 변동은 일시적이어야합니다.

    내 권장 사항은 본질적으로 모니터링 할 수없는 변수 (예 : CPU)를 선택하는 것입니다. 일반적으로 트렌드 포인트를 찾고 싶습니다. 웹 응용 프로그램의 경우 응답 대기열 일 수도 있고 병렬 응용 프로그램의 경우 대기열 깊이 등일 수도 있습니다.하지만 절대 수는 아니고 경향 일 것입니다. 나는 또한 상당히 넓은 간격으로 측정을 제안 할 것이다. 로드가 발생하면 몇 초 만에 응답해야하며, 실제로 실행중인 인스턴스 수를 미리 늘려야합니다.

    0

    첫 번째 질문과 관련하여 Autoscaling Application Block을 사용하면 미리 정의 된 규칙 집합을 기반으로 인스턴스 수를 동적으로 변경할 수 있습니다.