Share via


자동 스케일링의 플래핑

이 문서에서는 자동 크기 조정에서 플래핑과 이를 방지하는 방법에 대해 설명합니다.

플래핑은 일련의 반대 크기 조정 이벤트를 유발하는 루프 조건을 나타냅니다. 플래핑은 크기 조정 이벤트가 반대 크기 조정 이벤트를 트리거할 때 발생합니다.

자동 크기 조정은 보류 중인 스케일 인 작업을 평가하여 플래핑이 발생하는지 확인합니다. 플래핑이 발생할 수 있는 경우 자동 크기 조정은 크기 조정 작업을 건너뛰고 다음 실행에서 다시 평가하거나 자동 크기 조정이 지정된 리소스 인스턴스 수보다 적게 크기를 조정할 수 있습니다. 자동 크기 조정 평가 프로세스는 자동 크기 조정 엔진이 실행될 때마다(리소스 종류에 따라 30~60초마다) 발생합니다.

적절한 리소스를 보장하기 위해 스케일 아웃 이벤트에 대해 잠재적인 플래핑을 확인하지 않습니다. 자동 크기 조정은 플래핑을 방지하기 위해 스케일 인 이벤트만 연기합니다.

예를 들어 다음 규칙을 가정해 보겠습니다.

  • 평균 CPU 사용량이 50% 이상일 때 인스턴스를 1씩 늘리면서 스케일 아웃합니다.
  • 평균 CPU 사용량이 30% 미만인 경우 인스턴스 수를 1인스턴스로 스케일 인합니다.

T0의 아래 표에서 사용량이 56%일 때 스케일 아웃 작업이 트리거되고 2개의 인스턴스에서 CPU 사용량이 56%가 됩니다. 이는 확장 집합에 대해 평균 28%를 제공합니다. 28%는 스케일 인 임계값보다 작기 때문에 자동 크기 조정은 스케일 인되어야 합니다. 스케일 아웃하면 확장 집합이 56% CPU 사용량으로 반환되어 스케일 아웃 작업이 트리거됩니다.

Time 인스턴트 수 CPU% 인스턴스당 CPU% 크기 조정 이벤트 결과 인스턴스 수
T0 1 56% 56% 확장 2
T1 2 56% 28% 스케일 인 1
T2 1 56% 56% 확장 2
T3 2 56% 28% 스케일 인 1

제어되지 않으면 계속되는 일련의 크기 조정 이벤트가 있을 것입니다. 그러나 이 상황에서 자동 크기 조정 엔진은 T1에서 스케일 인 이벤트를 연기하고 다음 자동 크기 조정 실행 중에 재평가합니다. 스케일 인은 평균 CPU 사용량이 30% 미만인 경우에만 발생합니다.

플래핑은 종종 다음으로 인해 발생합니다.

  • 임계값 사이의 여백이 작거나 없음
  • 둘 이상의 인스턴스로 확장
  • 다양한 메트릭을 사용하여 스케일 인 및 아웃

임계값 사이의 여백이 작거나 없음

플래핑을 방지하려면 크기 조정 임계값 사이에 적절한 여백을 유지합니다.

예를 들어, 임계값 사이에 여백이 없는 다음 규칙은 플래핑 원인이 됩니다.

  • 스레드 수가 >=600인 경우 스케일 아웃
  • 스레드 수가 < 600일 때 스케일 인

A screenshot showing autoscale rules with scale out when thread count is greater than or equal to 600 and scale in when thread count less than 600.

아래 표는 이러한 자동 크기 조정 규칙의 잠재적인 결과를 보여 줍니다.

Time 인스턴트 수 스레드 수 인스턴스당 스레드 수 크기 조정 이벤트 결과 인스턴스 수
T0 2 1250 625 확장 3
T1 3 1250 417 스케일 인 2
  • 시간 T0에는 1250개의 스레드 또는 인스턴스당 625개의 스레드를 처리하는 두 개의 인스턴스가 있습니다. 자동 크기 조정은 3개의 인스턴스로 스케일 아웃됩니다.
  • 스케일 아웃 후 T1에는 동일한 1250개의 스레드가 있지만 3개의 인스턴스가 있는 경우 인스턴스당 417개의 스레드만 있습니다. 스케일 인 이벤트가 트리거됩니다.
  • 스케일 인하기 전에 자동 크기 조정은 스케일 인 이벤트가 발생하면 어떻게 되는지 평가합니다. 이 예에서 1250/2 = 625, 즉 인스턴스당 625개의 스레드입니다. 자동 크기 조정은 스케일 인된 후 즉시 다시 스케일 아웃해야 합니다. 다시 스케일 아웃되면 프로세스가 반복되어 플래핑 루프가 발생합니다.
  • 이 상황을 방지하기 위해 자동 크기 조정은 스케일 인되지 않습니다. 자동 크기 조정은 현재 크기 조정 이벤트를 건너뛰고 다음 실행 주기에서 규칙을 재평가합니다.

이 경우 크기 조정 이벤트가 발생하지 않으므로 자동 크기 조정이 작동하지 않는 것처럼 보입니다. 자동 크기 조정 설정 페이지에서 실행 기록 탭을 확인하여 플래핑이 있는지 확인합니다.

A screenshot showing the autoscale run history tab with records showing flapping.

임계값 사이에 적절한 여백을 설정하면 위의 시나리오를 방지할 수 있습니다. 예를 들면 다음과 같습니다.

  • 스레드 수가 >=600인 경우 스케일 아웃
  • 스레드 수가 < 400일 때 스케일 인

A screenshot showing autoscale rules with scale out when thread count greater than or equal to 600 and scale in when thread count less than 400.

스케일 인 스레드 수가 400인 경우 크기 조정 이벤트가 발생하기 전에 총 스레드 수가 1200 미만으로 떨어져야 합니다. 아래 표를 참조하세요.

Time 인스턴트 수 스레드 수 인스턴스당 스레드 수 크기 조정 이벤트 결과 인스턴스 수
T0 2 1250 625 확장 3
T1 3 1250 417 크기 조정 이벤트 없음 3
T2 3 1180 394 스케일 인 2
T3 3 1180 590 크기 조정 이벤트 없음 2

둘 이상의 인스턴스로 확장

둘 이상의 인스턴스로 크기 조정하거나 크기 조정할 때 플래핑을 방지하기 위해 자동 크기 조정은 규칙에 지정된 인스턴스 수보다 적게 크기 조정될 수 있습니다.

예를 들어, 다음 규칙은 플래핑을 유발할 수 있습니다.

  • 요청 수가 인스턴스당 >=200인 경우 20으로 스케일 아웃합니다.
  • 또는 인스턴스당 CPU > 70%일 때.
  • 요청 수가 인스턴스당 <=50인 경우 10만큼 스케일 인합니다.

A screenshot showing an autoscale default scale condition with rules configured for the example.

아래 표는 이러한 자동 크기 조정 규칙의 잠재적인 결과를 보여 줍니다.

Time 인스턴스 수 CPU 요청 수 크기 조정 이벤트 결과 인스턴스 설명
T0 30 65% 3000개 또는 인스턴스당 100개 크기 조정 이벤트 없음 30
T1 30 65 1500 3개의 인스턴스로 스케일 인 27 10으로 스케일 인하면 예상 CPU 증가가 70%를 초과하여 스케일 아웃 이벤트가 발생합니다.

시간 T0에서 앱은 인스턴스 30개, 총 요청 수 3000개, 인스턴스당 CPU 사용량 65%로 실행 중입니다.

T1에서 요청 수가 1500개 요청 또는 인스턴스당 50개 요청으로 떨어지면 자동 크기 조정이 10개 인스턴스에서 20개로 스케일 인을 시도합니다. 그러나 자동 크기 조정은 20개의 인스턴스에 대한 CPU 로드가 70%를 초과하여 수평 스케일 아웃 이벤트가 발생할 것으로 예상합니다.

플래핑을 방지하기 위해 자동 크기 조정 엔진은 모든 메트릭이 정의된 임계값에 있는 인스턴스 수를 찾을 때까지 20개 이상의 인스턴스 수에 대한 CPU 사용량을 예상합니다.

  • CPU를 70% 이하로 유지합니다.
  • 인스턴스당 요청 수를 50개 이상으로 유지합니다.
  • 인스턴스 수를 30개 미만으로 줄입니다.

이 상황에서 규칙이 10 감소를 지정하더라도 자동 크기 조정은 규칙을 충족하기 위해 30개에서 27개 인스턴스로 3으로 스케일 인될 수 있습니다. 플래핑을 방지하기 위해 업데이트된 인스턴스 수로 스케일 다운이 포함된 설명과 함께 로그 메시지가 활동 로그에 로그됩니다.

자동 크기 조정이 적절한 수의 인스턴스를 찾지 못하면 스케일 인 이벤트를 건너뛰고 다음 주기 동안 재평가합니다.

참고 항목

자동 크기 조정 엔진이 목표 인스턴스 수로 조정한 결과 플래핑이 발생할 수 있음을 감지하면 현재 수와 목표 수 사이의 더 적은 수의 인스턴스로 조정을 시도합니다. 이 범위 내에서 플래핑이 발생하지 않는 경우 자동 크기 조정은 새 목표로 크기 조정 작업을 계속합니다.

로그 파일

다음 쿼리를 사용하여 활동 로그에서 플래핑을 찾습니다.

// Activity log, CategoryValue: Autoscale
// Lists latest Autoscale operations from the activity log, with OperationNameValue =="Microsoft.Insights/AutoscaleSettings/Flapping/Action
AzureActivity
|where CategoryValue =="Autoscale" and OperationNameValue =="Microsoft.Insights/AutoscaleSettings/Flapping/Action"
|sort by TimeGenerated desc 

다음은 플래핑에 대한 활동 로그 레코드의 예입니다.

A screenshot showing a log record from a flapping event.

{
"eventCategory": "Autoscale",
"eventName": "FlappingOccurred",
"operationId": "ffd31c67-1438-47a5-bee4-1e3a102cf1c2",
"eventProperties": 
    "{"Description":"Scale down will occur with updated instance count to avoid flapping. 
     Resource: '/subscriptions/d1234567-9876-a1b2-a2b1-123a567b9f8767/  resourcegroups/ed-rg-001/providers/Microsoft.Web/serverFarms/  ScaleableAppServicePlan'.
     Current instance count: '6', 
     Intended new instance count: '1'.
     Actual new instance count: '4'",
    "ResourceName":"/subscriptions/d1234567-9876-a1b2-a2b1-123a567b9f8767/resourcegroups/ed-rg-001/providers/Microsoft.Web/serverFarms/ScaleableAppServicePlan",
    "OldInstancesCount":6,
    "NewInstancesCount":4,
    "ActiveAutoscaleProfile":{"Name":"Auto created scale condition",
    "Capacity":{"Minimum":"1","Maximum":"30","Default":"1"},
    "Rules":[{"MetricTrigger":{"Name":"Requests","Namespace":"microsoft.web/sites","Resource":"/subscriptions/d1234567-9876-a1b2-a2b1-123a567b9f8767/resourceGroups/ed-rg-001/providers/Microsoft.Web/sites/ScaleableWebApp1","ResourceLocation":"West Central US","TimeGrain":"PT1M","Statistic":"Average","TimeWindow":"PT1M","TimeAggregation":"Maximum","Operator":"GreaterThanOrEqual","Threshold":3.0,"Source":"/subscriptions/d1234567-9876-a1b2-a2b1-123a567b9f8767/resourceGroups/ed-rg-001/providers/Microsoft.Web/sites/ScaleableWebApp1","MetricType":"MDM","Dimensions":[],"DividePerInstance":true},"ScaleAction":{"Direction":"Increase","Type":"ChangeCount","Value":"10","Cooldown":"PT1M"}},{"MetricTrigger":{"Name":"Requests","Namespace":"microsoft.web/sites","Resource":"/subscriptions/d1234567-9876-a1b2-a2b1-123a567b9f8767/resourceGroups/ed-rg-001/providers/Microsoft.Web/sites/ScaleableWebApp1","ResourceLocation":"West Central US","TimeGrain":"PT1M","Statistic":"Max","TimeWindow":"PT1M","TimeAggregation":"Maximum","Operator":"LessThan","Threshold":3.0,"Source":"/subscriptions/d1234567-9876-a1b2-a2b1-123a567b9f8767/resourceGroups/ed-rg-001/providers/Microsoft.Web/sites/ScaleableWebApp1","MetricType":"MDM","Dimensions":[],"DividePerInstance":true},"ScaleAction":{"Direction":"Decrease","Type":"ChangeCount","Value":"5","Cooldown":"PT1M"}}]}}",
"eventDataId": "b23ae911-55d0-4881-8684-fc74227b2ddb",
"eventSubmissionTimestamp": "2022-09-13T07:20:41.1589076Z",
"resource": "scaleableappserviceplan",
"resourceGroup": "ED-RG-001",
"resourceProviderValue": "MICROSOFT.WEB",
"subscriptionId": "D1234567-9876-A1B2-A2B1-123A567B9F876",
"activityStatusValue": "Succeeded"
}

다음 단계

자동 크기 조정에 대해 자세히 알아보려면 다음 리소스를 참조하세요.