Колебания при автомасштабировании

В этой статье описаны колебания при автомасштабировании и как их избежать.

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

Автомасштабирование оценивает ожидающее действие горизонтального уменьшения масштаба, чтобы узнать, приведет ли оно к колебаниям. В случаях потенциальных колебаний автомасштабирование может пропустить действие масштабирования и повторно оценить его при следующем выполнении. Кроме того, автомасштабирование может добавить меньше экземпляров, чем указано. Процесс оценки автомасштабирования происходит каждый раз, когда выполняется подсистема автомасштабирования, то есть каждые 30–60 секунд в зависимости от типа ресурса.

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

Например, у нас действуют следующие правила:

  • Увеличение масштаба на 1 экземпляр, если средняя загрузка ЦП превышает 50 %.
  • Уменьшение числа экземпляров на 1, если среднее использование ЦП меньше 30 %.

В таблице ниже на T0, когда использование составляет 56 %, запускается действие горизонтального увеличения масштаба, что приводит к загрузке ЦП в 56 % на 2 экземплярах, то есть по 28 % в масштабируемом наборе. Так как 28 % меньше порогового значения масштабирования, автомасштабирование должно уменьшить масштаб обратно. При горизонтальном уменьшении масштаба загрузка снова увеличится до 56 % и запустится действие увеличение масштаба.

Time Число экземпляров ЦП, % % ЦП на экземпляр Событие масштабирования Результирующее число экземпляров
T0 1 56 % 56 % Горизонтальное увеличение масштаба 2
T1 2 56 % 28 % Свертывание 1
T2 1 56 % 56 % Горизонтальное увеличение масштаба 2
T3 2 56 % 28 % Свертывание 1

Если оставить без контроля, будет происходит непрерывный ряд событий масштабирования. Однако в этом случае подсистема автомасштабирования откладывает событие горизонтального уменьшения масштаба на T1 и проводит повторную оценку при следующем запуске автомасштабирования. Уменьшение масштаба произойдет только после того, как средняя загрузка ЦП будет ниже 30 %.

Распространенные причины колебаний:

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

Небольшая разница между пороговыми значениями.

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

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

  • Горизонтальное увеличение масштаба при количестве потоков >=600
  • Горизонтальное уменьшение масштаба при количестве потоков < 600

Снимок экрана: правила автомасштабирования, которые предусматривают увеличение масштаба при количестве потоков не менее 600, и уменьшение масштаба, если потоков меньше 600.

В приведенной ниже таблице показаны возможные результаты этих правил автомасштабирования:

Time Число экземпляров Количество потоков Количество потоков на экземпляр Событие масштабирования Результирующее число экземпляров
T0 2 1250 625 Горизонтальное увеличение масштаба 3
T1 3 1250 417 Свертывание 2
  • В момент T0 существует два экземпляра, обрабатывающие 1250 потоков, то есть 625 потоков на экземпляр. Автомасштабирование увеличивает количество до трех экземпляров.
  • После горизонтального увеличения масштаба в момент T1 у нас есть те же 1250 потоков, но экземпляров три, поэтому количество потоков составляет всего 417 на экземпляр. Активируется событие увеличения масштаба.
  • Перед уменьшением масштаба автомасштабирование оценивает, что произойдет. В этом примере 1250 / 2 = 625, то есть 625 потоков на экземпляр. Автомасштабированию придется сразу же снова увеличить масштаб. Если затем вновь увеличить масштаб, вся процедура будет повторяться, приводя к колебаниям.
  • Чтобы избежать такой ситуации, автомасштабирование не уменьшает масштаб. Автомасштабирование пропускает текущее событие масштабирования и повторно оценивает правило в следующем цикле выполнения.

Выглядит это так, будто автомасштабирование не работает, так как событие масштабирования не выполняется. Перейдите на вкладку Журнал выполнения на странице параметров автомасштабирования, чтобы узнать больше о колебаниях.

Снимок экрана: вкладка журнала выполнения автомасштабирования с записями о колебаниях.

Чтобы избежать таких ситуаций, задавайте пороговые значения с адекватной разницей. Например, примененная к объекту директива

  • Горизонтальное увеличение масштаба при количестве потоков >=600
  • Горизонтальное уменьшение масштаба при количестве потоков < 400

Снимок экрана: правила автомасштабирования, которые предусматривают увеличение масштаба при количестве потоков не менее 600, и уменьшение масштаба, если потоков меньше 400.

Если для уменьшения масштаба требуется, чтобы потоков было меньше 400, общее количество потоков должно быть меньше 1200, чтобы произошло событие масштабирования. См. таблицу ниже.

Time Число экземпляров Количество потоков Количество потоков на экземпляр Событие масштабирования Результирующее число экземпляров
T0 2 1250 625 Горизонтальное увеличение масштаба 3
T1 3 1250 417 нет события масштабирования 3
T2 3 1180 394 горизонтальное уменьшение масштаба 2
T3 3 1180 590 нет события масштабирования 2

Добавление или удаление сразу нескольких экземпляров.

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

Например, следующие правила могут вызвать колебания:

  • Увеличение масштаба на 20 экземпляров при количестве запросов >=200 на экземпляр.
  • ИЛИ если ЦП > 70 % на экземпляр.
  • Уменьшение масштаба на 10 экземпляров при количестве запросов <=50 на экземпляр.

Снимок экрана: условие масштабирования по умолчанию с настроенными примерами правил.

В приведенной ниже таблице показаны возможные результаты этих правил автомасштабирования:

Time Количество экземпляров. ЦП Число запросов Событие масштабирования Результирующие экземпляры Комментарии
T0 30 65 % 3000, или 100 на экземпляр. Нет события масштабирования 30
T1 30 65 1500 Уменьшение масштаба на 3 экземпляра 27 Уменьшение масштаба на 10 экземпляров приведет к увеличению загрузки ЦП выше 70%, что вызовет событие увеличения масштаба.

В момент T0 приложение работает с 30 экземплярами, общее число запросов составляет 3000, а загрузка ЦП — 65 % на экземпляр.

В момент T1 при падении количества запросов до 1500, то есть 50 запросов на экземпляр, автомасштабирование попытается уменьшить масштаб на 10 экземпляров до 20 экземпляров. Однако автомасштабирование оценивает, что загрузка ЦП при 20 экземплярах будет выше 70 %, что вызовет событие увеличения масштаба.

Чтобы избежать колебаний, подсистема автомасштабирования оценивает загрузку ЦП для числа экземпляров выше 20, пока не найдет то число экземпляров, при котором никакие метрики не будут выходить за пороговые значения:

  • Сохранение ЦП ниже 70 %.
  • Сохранение количества запросов на экземпляр выше 50.
  • Уменьшение количества экземпляров до значения ниже 30.

В этой ситуации автомасштабирование может уменьшить число экземпляров на 3, с 30 до 27, чтобы соблюсти все правила, хотя в правилах указано, что нужно удалить 10 экземпляров. В журнал действий вносится сообщение с описанием, того, что масштаб будет уменьшен на другое число, чтобы избежать колебаний

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

Примечание

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

Файлы журнала

Найти колебания в журнале действий можно с помощью следующего запроса:

// 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 

Пример записи в журнале действий для колебания:

Снимок экрана: запись в журнале о событии колебания.

{
"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"
}

Дальнейшие действия

Дополнительные сведения об автомасштабировании см. в следующих статьях: