Flapping in Autoscale

Tento článek popisuje flapping v automatickém škálování a popisuje, jak se mu vyhnout.

Flapping označuje stav smyčky, který způsobuje řadu protichůdných událostí škálování. K flappingu dochází, když událost škálování aktivuje událost opačného měřítka.

Automatické škálování vyhodnocuje čekající akci horizontálního navýšení kapacity a zjistí, jestli by způsobila flapping. V případech, kdy by mohlo dojít k flappingu, může automatické škálování akci škálování přeskočit a znovu zhodnotit při dalším spuštění, nebo automatické škálování může být škálováno o méně než zadaný počet instancí prostředků. Proces vyhodnocení automatického škálování probíhá při každém spuštění modulu automatického škálování, což je každých 30 až 60 sekund v závislosti na typu prostředku.

Aby se zajistily odpovídající prostředky, kontrola potenciálního flappingu nedochází u událostí škálování na více instancí. Automatické škálování pouze odloží událost horizontálního navýšení kapacity, aby se zabránilo flappingu.

Předpokládejme například následující pravidla:

  • Horizontální navýšení kapacity o 1 instanci, když průměrné využití procesoru překročí 50 %.
  • Škálování na snížení počtu instancí o 1 instanci, pokud je průměrné využití procesoru nižší než 30 %.

V tabulce níže v T0 se v případě, že využití dosáhne 56 %, aktivuje se akce horizontálního navýšení kapacity, která má za následek 56% využití procesoru ve 2 instancích. To dává v průměru 28 % pro škálovací sadu. Vzhledem k tomu, že 28 % je nižší než prahová hodnota škálování, mělo by automatické škálování vertikálně snížit kapacitu zpět. Horizontální navýšení kapacity vrátí škálovací sadu na 56 % využití procesoru, což aktivuje akci horizontálního navýšení kapacity.

Čas Počet instancí Procento využití procesoru Procento využití procesoru na instanci Událost škálování Výsledný počet instancí
T0 1 56% 56% Horizontální navýšení kapacity 2
T1 2 56% 28% Horizontální snížení kapacity 1
T2 1 56% 56% Horizontální navýšení kapacity 2
T3 2 56% 28% Horizontální snížení kapacity 1

Pokud by to zůstalo nekontrolovatelné, došlo by k probíhající řadě událostí škálování. V této situaci však modul automatického škálování odloží událost horizontálního navýšení kapacity na T1 a při dalším spuštění automatického škálování znovu vyhodnocí. Ke škálování dojde pouze v případě, že průměrné využití procesoru klesne pod 30 %.

Flapping je často způsoben:

  • Malé nebo žádné okraje mezi prahovými hodnotami
  • Škálování podle více než jedné instance
  • Horizontální navýšení a snížení kapacity s využitím různých metrik

Malé nebo žádné okraje mezi prahovými hodnotami

Abyste se vyhnuli flappingu, udržujte mezi prahovými hodnotami škálování odpovídající meze.

Například následující pravidla, kde mezi prahovými hodnotami není žádná hranice, způsobují flapping.

  • Horizontální navýšení kapacity při počtu >vláken =600
  • Škálování na více instancí při počtu < vláken 600

Snímek obrazovky znázorňující pravidla automatického škálování s horizontálním navýšením kapacity, pokud je počet vláken větší nebo roven 600, a škálování na méně než 600 vláken

Následující tabulka ukazuje potenciální výsledek těchto pravidel automatického škálování:

Čas Počet instancí Počet vláken Počet vláken na instanci Událost škálování Výsledný počet instancí
T0 2 1250 625 Horizontální navýšení kapacity 3
T1 3 1250 417 Horizontální snížení kapacity 2
  • V čase T0 existují dvě instance zpracovávající 1250 vláken nebo 625 běhounů na instanci. Automatické škálování horizontálně navyšuje kapacitu na tři instance.
  • Po horizontálním navýšení kapacity v T1 máme stejných 1250 vláken, ale se třemi instancemi, pouze 417 vláken na instanci. Aktivuje se událost škálování na více instancí.
  • Před horizontálním navýšením kapacity automatické škálování vyhodnotí, co by se stalo, kdyby došlo k události horizontálního navýšení kapacity. V tomto příkladu 1250 / 2 = 625, tj. 625 vláken na instanci. Automatické škálování by po horizontálním navýšení kapacity muselo okamžitě znovu horizontálně snížit kapacitu. Pokud by se znovu škálovalo na více instancí, proces by se opakoval, což by vedlo k flappingové smyčce.
  • Aby se této situaci zabránilo, automatické škálování neškáluje. Automatické škálování přeskočí aktuální událost škálování a znovu vyhodnocuje pravidlo v dalším cyklu provádění.

V tomto případě to vypadá, že automatické škálování nefunguje, protože nedochází k žádné události škálování. Podívejte se na kartu Historie spuštění na stránce nastavení automatického škálování a zjistěte, jestli nedošlo k nějakému flappingu.

Snímek obrazovky zobrazující kartu historie spuštění automatického škálování se záznamy, které ukazují flapping

Nastavením přiměřené hranice mezi prahovými hodnotami se výše uvedený scénář vyhne. Třeba

  • Horizontální navýšení kapacity při počtu >vláken =600
  • Škálování na více instancí při počtu < vláken 400

Snímek obrazovky znázorňující pravidla automatického škálování s horizontálním navýšením kapacity, pokud počet vláken je větší nebo roven 600, a škálování na méně než 400 vláken

Pokud je počet vláken škálování na více instancí 400, musel by celkový počet vláken před událostí škálování klesnout pod 1200. Podívejte se na následující tabulku.

Čas Počet instancí Počet vláken Počet vláken na instanci Událost škálování Výsledný počet instancí
T0 2 1250 625 Horizontální navýšení kapacity 3
T1 3 1250 417 žádná událost škálování 3
T2 3 1180 394 horizontální snížení kapacity 2
T3 3 1180 590 žádná událost škálování 2

Škálování podle více než jedné instance

Aby nedocházelo k flappingu při horizontálním snížení nebo snížení kapacity o více než jednu instanci, může automatické škálování škálovat o méně instancí, než je počet instancí zadaný v pravidle.

Například následující pravidla můžou způsobit flapping:

  • Horizontální navýšení kapacity o 20, pokud počet >požadavků = 200 na instanci.
  • NEBO v případě 70 % využití procesoru > na instanci.
  • Horizontální snížení kapacity o 10, pokud počet <požadavků na instanci = 50.

Snímek obrazovky znázorňující výchozí podmínku automatického škálování s pravidly nakonfigurovanými pro tento příklad

Následující tabulka ukazuje potenciální výsledek těchto pravidel automatického škálování:

Čas Počet instancí Procesor Počet požadavků Událost škálování Výsledné instance Komentáře
T0 30 65% 3000 nebo 100 na instanci. Žádná událost škálování 30
T1 30 65 1 500 Horizontální snížení kapacity o 3 instance 27 Škálování na více instancí o 10 by způsobilo odhadované zvýšení využití procesoru nad 70 %, což by vedlo k události horizontálního navýšení kapacity.

V době T0 aplikace běží s 30 instancemi, celkovým počtem požadavků 3000 a využitím procesoru 65 % na instanci.

Když v T1 klesne počet požadavků na 1500 požadavků nebo na 50 požadavků na instanci, automatické škálování se pokusí škálovat o 10 instancí na 20. Automatické škálování ale odhaduje, že zatížení procesoru pro 20 instancí bude vyšší než 70 %, což způsobí událost škálování na více instancí.

Aby nedošlo k flappingu, modul automatického škálování odhaduje využití procesoru pro počet instancí vyšších než 20, dokud nenajde počet instancí, ve kterém jsou všechny metriky v definovaných prahových hodnotách:

  • Udržujte procesor pod 70 %.
  • Udržujte počet požadavků na instanci vyšší než 50.
  • Snižte počet instancí pod 30.

V takové situaci se automatické škálování může škálovat o 3, z 30 na 27 instancí, aby se splnila pravidla, i když pravidlo určuje snížení o 10. Do protokolu aktivit se zapíše zpráva protokolu s popisem vertikálního snížení kapacity s aktualizovaným počtem instancí, aby se zabránilo flappingu.

Pokud automatické škálování nemůže najít vhodný počet instancí, přeskočí škálování v události a během dalšího cyklu znovu vyhodnotí.

Poznámka

Pokud modul automatického škálování zjistí, že v důsledku škálování na cílový počet instancí může dojít k flappingu, pokusí se také škálovat na nižší počet instancí mezi aktuálním a cílovým počtem. Pokud v tomto rozsahu nedojde k flappingu, bude automatické škálování pokračovat v operaci škálování s novým cílem.

Soubory protokolu

V protokolu aktivit vyhledejte flapping pomocí následujícího dotazu:

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

Níže je příklad záznamu protokolu aktivit pro flapping:

Snímek obrazovky zobrazující záznam protokolu z události flapping

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

Další kroky

Další informace o automatickém škálování najdete v následujících zdrojích informací: