Sdílet prostřednictvím


Flapping in Autoscale

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

Flapping označuje podmínku smyčky, která způsobuje řadu protichůdných událostí škálování. K flappingu dojde, když událost škálování aktivuje opačnou událost škálování.

Automatické škálování vyhodnotí čekající akci horizontálního snížení kapacity a zjistí, jestli by to způsobilo flapping. V případech, kdy může dojít k flappingu, může automatické škálování přeskočit akci škálování a znovu vyhodnotit při dalším spuštění nebo automatické škálování může škálovat 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 v závislosti na typu prostředku každých 30 až 60 sekund.

Pokud chcete zajistit adekvátní prostředky, kontrola potenciálního prolnutí nedochází u událostí horizontálního navýšení kapacity. Automatické škálování odloží pouze událost horizontálního snížení kapacity, aby se zabránilo flappingu.

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

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

V tabulce níže v tabulce T0 se při využití na 56 % aktivuje akce horizontálního navýšení kapacity a výsledkem je 56% využití procesoru napříč 2 instancemi. To poskytuje průměr 28 % pro škálovací sadu. Vzhledem k tomu, že 28 % je menší než prahová hodnota horizontálního snížení kapacity, automatické škálování by se mělo škálovat zpět. Škálování by vrátilo škálovací sadu na 56% využití procesoru, které aktivuje akci horizontálního navýšení kapacity.

Čas Počet instancí CPU % Cpu % na instanci Událost škálování Výsledný počet instancí
T0 0 56% 56% Horizontální navýšení kapacity 2
T1 2 56% 28 % Škálovat na méně instancí 0
T2 0 56% 56% Horizontální navýšení kapacity 2
T3 2 56% 28 % Škálovat na méně instancí 0

Pokud by zůstal nekontrolovatelný, bylo by stále k dispozici řada událostí škálování. V této situaci ale modul automatického škálování odloží událost škálování na T1 a během dalšího spuštění automatického škálování znovu vyhodnocuje. Škálování na více instancí proběhne pouze v poté, co 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 instancí
  • Horizontální navýšení nebo snížení kapacity s využitím různých metrik

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

Abyste se vyhnuli flappingu, zachovejte odpovídající okraje mezi prahovými hodnotami škálování.

Například následující pravidla, u kterých mezi prahovými hodnotami není žádný okraj, může dojít k prolnutí.

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

Snímek obrazovky zobrazují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í v případech, kdy počet vláken menší než 600

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 Škálovat na méně instancí 2
  • V době T0 existují dvě instance zpracovávající 1250 vláken nebo 625 treadů na instanci. Automatické škálování horizontálně navyšuje kapacitu na tři instance.
  • Po horizontálním navýšení kapacity na úrovni T1 máme stejná 1250 vláken, ale se třemi instancemi, pouze 417 vláken na instanci. Aktivuje se událost horizontálního snížení kapacity.
  • Před horizontálním škálováním automatické škálování vyhodnotí, co by se stalo, když dojde k události horizontálního snížení kapacity. V tomto příkladu 1250 / 2 = 625, to znamená 625 vláken na instanci. Automatické škálování by po horizontálním navýšení kapacity muselo okamžitě horizontálně snížit kapacitu. Pokud se znovu škáluje na více instancí, proces by se opakoval, což by vedlo k výklopné smyčce.
  • Aby se této situaci zabránilo, automatické škálování se nes škáluje. Automatické škálování přeskočí aktuální událost škálování a v dalším cyklu provádění znovu vyhodnocuje pravidlo.

V tomto případě to vypadá, že automatické škálování nefunguje, protože neprobíhá žádná událost škálování. Na stránce nastavení automatického škálování zkontrolujte kartu Historie spuštění a zkontrolujte, 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 zobrazující flapping

Nastavení přiměřeného okraje mezi prahovými hodnotami zabrání výše uvedenému scénáři. Příklad:

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

Snímek obrazovky zobrazují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í, když počet vláken menší než 400

Pokud je počet vláken horizontálního snížení kapacity 400, celkový počet vláken by musel před provedením události škálování snížit na nižší než 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 instancí

Pokud se chcete vyhnout flappingu při horizontálním navýšení nebo snížení kapacity o více než jednu instanci, může se automatické škálování škálovat o méně než počet instancí zadaných v pravidle.

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

  • Horizontální navýšení kapacity o 20, když počet >požadavků =200 na instanci.
  • NEBO, když procesor > 70 % na instanci.
  • Pokud se <počet požadavků =50 na instanci škáluje o 10.

Snímek obrazovky znázorňující výchozí podmínku škálování automatického škálování s nakonfigurovanými pravidly pro 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 1500 Škálování podle 3 instancí 27 Vertikální navýšení kapacity o 10 by způsobilo odhadovaný nárůst procesoru nad 70 %, což vede k události horizontálního navýšení kapacity.

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

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

Aby se zabránilo flappingu, modul automatického škálování odhadne využití procesoru pro instance vyšší než 20, dokud nenajde počet instancí, ve kterém se všechny metriky nacházejí v definovaných prahových hodnotách:

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

V takovém případě se automatické škálování může škálovat o 3, od 30 do 27 instancí, aby vyhovovalo pravidlům, i když pravidlo určuje snížení o 10. Do protokolu aktivit se zapíše zpráva protokolu s popisem, který zahrnuje vertikální snížení kapacity, dojde s aktualizovaným počtem instancí, aby se zabránilo flappingu.

Pokud automatické škálování nedokáže najít vhodný počet instancí, škálování v případě potřeby přeskočí a během dalšího cyklu znovu vyhodnocuje.

Poznámka:

Pokud modul automatického škálování zjistí, že k flappingu může dojít v důsledku škálování na cílový počet instancí, pokusí se také škálovat na nižší počet instancí mezi aktuálním počtem a cílovým počtem. Pokud v tomto rozsahu nedochází k flappingu, automatické škálování bude 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 flappingu

{
"eventCategory": "Autoscale",
"eventName": "FlappingOccurred",
"operationId": "1111bbbb-22cc-dddd-ee33-ffffff444444",
"eventProperties": 
    "{"Description":"Scale down will occur with updated instance count to avoid flapping. 
     Resource: '/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/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/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/ed-rg-001/providers/Microsoft.Web/sites/ScaleableWebApp1","MetricType":"MDM","Dimensions":[],"DividePerInstance":true},"ScaleAction":{"Direction":"Decrease","Type":"ChangeCount","Value":"5","Cooldown":"PT1M"}}]}}",
"eventDataId": "dddd3333-ee44-5555-66ff-777777aaaaaa",
"eventSubmissionTimestamp": "2022-09-13T07:20:41.1589076Z",
"resource": "scaleableappserviceplan",
"resourceGroup": "RG-001",
"resourceProviderValue": "MICROSOFT.WEB",
"subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
"activityStatusValue": "Succeeded"
}

Další kroky

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