Delen via


Flappen in automatische schaalaanpassing

In dit artikel wordt het flappen in automatische schaalaanpassing beschreven en hoe u dit kunt voorkomen.

Flapping verwijst naar een lusvoorwaarde die een reeks tegengestelde schaal gebeurtenissen veroorzaakt. Flapping treedt op wanneer een schaal gebeurtenis de tegenovergestelde schaal gebeurtenis activeert.

Met automatische schaalaanpassing wordt een in behandeling zijnde inschaling geëvalueerd om te zien of dit een flapping veroorzaakt. In gevallen waarin flapping kan optreden, kan automatisch schalen de schaalactie overslaan en de volgende uitvoering opnieuw uitvoeren, of automatisch schalen kan worden geschaald met minder dan het opgegeven aantal resource-exemplaren. Het evaluatieproces voor automatische schaalaanpassing vindt plaats telkens wanneer de engine voor automatische schaalaanpassing wordt uitgevoerd. Dit is elke 30 tot 60 seconden, afhankelijk van het resourcetype.

Om ervoor te zorgen dat er voldoende resources zijn, wordt er geen controle uitgevoerd op mogelijke flappingen voor uitschaalgebeurtenissen. Met automatisch schalen wordt een inschaalgebeurtenis alleen uitgesteld om flapping te voorkomen.

Laten we bijvoorbeeld uitgaan van de volgende regels:

  • Uitschalen met 1 exemplaar wanneer het gemiddelde CPU-gebruik hoger is dan 50%.
  • Schaal in om het aantal exemplaren te verlagen met 1 exemplaar wanneer het gemiddelde CPU-gebruik lager is dan 30%.

In de onderstaande tabel bij T0, wanneer het gebruik 56% is, wordt een uitschaalactie geactiveerd en resulteert dit in 56% CPU-gebruik in twee exemplaren. Dit geeft een gemiddelde van 28% voor de schaalset. Omdat 28% kleiner is dan de drempelwaarde voor inschalen, moet automatisch schalen weer worden ingeschaald. Als u inschaalt, wordt de schaalset teruggezet op 56% CPU-gebruik, waardoor een uitschaalactie wordt geactiveerd.

Tijd Aantal exemplaren CPU% CPU% per exemplaar Gebeurtenis schalen Resulterend aantal exemplaren
T0 1 56% 56% Uitschalen 2
T1 2 56% 28% Inschalen 1
T2 1 56% 56% Uitschalen 2
T3 2 56% 28% Inschalen 1

Als u onbeheerd blijft, zou er een doorlopende reeks schaalevenementen zijn. In deze situatie wordt de schaalaanpassingsengine echter uitgesteld op T1 en opnieuw geëvalueerd tijdens de volgende uitvoering van automatische schaalaanpassing. De inschaling vindt alleen plaats zodra het gemiddelde CPU-gebruik lager is dan 30%.

Flapping wordt vaak veroorzaakt door:

  • Kleine of geen marges tussen drempelwaarden
  • Schalen met meer dan één exemplaar
  • In- en uitschalen met behulp van verschillende metrische gegevens

Kleine of geen marges tussen drempelwaarden

Om flapping te voorkomen, moet u voldoende marges behouden tussen drempelwaarden voor schalen.

De volgende regels waarbij er geen marge tussen drempelwaarden is, veroorzaken bijvoorbeeld flapping.

  • Uitschalen wanneer het aantal >threads =600 is
  • Inschalen wanneer thread 600 telt <

Een schermopname van regels voor automatisch schalen met uitschalen wanneer het aantal threads groter is dan of gelijk is aan 600 en inschalen wanneer het aantal threads kleiner dan 600 is.

In de onderstaande tabel ziet u een potentieel resultaat van deze regels voor automatisch schalen:

Tijd Aantal exemplaren Aantal threads Aantal threads per exemplaar Gebeurtenis schalen Resulterend aantal exemplaren
T0 2 1250 625 Uitschalen 3
T1 3 1250 417 Inschalen 2
  • Op het moment T0 zijn er twee exemplaren die 1250 threads verwerken of 625 treads per exemplaar. Automatisch schalen wordt uitgeschaald naar drie exemplaren.
  • Na de uitschaal hebben we op T1 dezelfde 1250 threads, maar met drie exemplaren, slechts 417 threads per exemplaar. Er wordt een inschaalgebeurtenis geactiveerd.
  • Voordat u inschaalt, evalueert automatische schaalaanpassing wat er zou gebeuren als de gebeurtenis voor inschalen plaatsvindt. In dit voorbeeld is 1250 / 2 = 625, dat wil gezegd, 625 threads per exemplaar. Automatisch schalen moet onmiddellijk opnieuw worden uitgeschaald nadat deze is ingeschaald. Als het opnieuw wordt uitgeschaald, wordt het proces herhaald, wat leidt tot een flapping-lus.
  • Om deze situatie te voorkomen, wordt automatisch schalen niet ingeschaald. Met automatisch schalen wordt de huidige schaalgebeurtenis overgeslagen en wordt de regel in de volgende uitvoeringscyclus opnieuw geëvalueerd.

In dit geval lijkt het erop dat automatische schaalaanpassing niet werkt, omdat er geen schaal gebeurtenis plaatsvindt. Controleer het tabblad Uitvoeringsgeschiedenis op de instellingspagina voor automatisch schalen om te zien of er flappingen zijn.

Een schermopname van het tabblad Uitvoeringsgeschiedenis voor automatische schaalaanpassing met records met flapping.

Het instellen van een voldoende marge tussen drempelwaarden voorkomt het bovenstaande scenario. Bijvoorbeeld:

  • Uitschalen wanneer het aantal >threads =600 is
  • Inschalen wanneer thread 400 telt <

Een schermopname van regels voor automatisch schalen met uitschalen wanneer het aantal threads groter dan of gelijk is aan 600 en inschalen wanneer threads minder dan 400 tellen.

Als het aantal inschaalthreads 400 is, moet het totale aantal threads dalen tot onder 1200 voordat een schaalgebeurtenis zou plaatsvinden. Zie de onderstaande tabel.

Tijd Aantal exemplaren Aantal threads Aantal threads per exemplaar Gebeurtenis schalen Resulterend aantal exemplaren
T0 2 1250 625 Uitschalen 3
T1 3 1250 417 geen schaal gebeurtenis 3
T2 3 1180 394 inschalen 2
T3 3 1180 590 geen schaal gebeurtenis 2

Schalen met meer dan één exemplaar

Om flapping te voorkomen bij het in- of uitschalen van meer dan één exemplaar, kan automatisch schalen met minder dan het aantal exemplaren dat is opgegeven in de regel.

De volgende regels kunnen bijvoorbeeld leiden tot flapping:

  • Uitschalen met 20 wanneer het aantal aanvragen >=200 per exemplaar is.
  • OF wanneer CPU > 70% per exemplaar.
  • Schalen met 10 wanneer het aantal aanvragen <=50 per exemplaar is.

Een schermopname van een standaardschaalvoorwaarde voor automatisch schalen met regels die zijn geconfigureerd voor het voorbeeld.

In de onderstaande tabel ziet u een potentieel resultaat van deze regels voor automatisch schalen:

Tijd Aantal exemplaren CPU Aantal aanvragen Gebeurtenis schalen Resulterende exemplaren Opmerkingen
T0 30 65% 3000 of 100 per exemplaar. Geen schaal gebeurtenis 30
T1 30 65 1500 Inschalen met 3 exemplaren 27 Bij inschalen met 10 zou een geschatte CPU-toename van meer dan 70% ontstaan, wat leidt tot een uitschaalgebeurtenis.

Op het moment T0 wordt de app uitgevoerd met 30 exemplaren, een totaal aantal aanvragen van 3000 en een CPU-gebruik van 65% per exemplaar.

Bij T1, wanneer het aantal aanvragen afneemt tot 1500 aanvragen, of 50 aanvragen per exemplaar, wordt automatisch schalen met 10 exemplaren naar 20 geprobeerd. Automatische schaalaanpassing schat echter dat de CPU-belasting voor 20 exemplaren hoger is dan 70%, wat een uitschaalgebeurtenis veroorzaakt.

Om flapping te voorkomen, maakt de engine voor automatische schaalaanpassing een schatting van het CPU-gebruik voor exemplaren van meer dan 20 totdat een aantal exemplaren wordt gevonden waarbij alle metrische gegevens zich in de gedefinieerde drempelwaarden bevinden:

  • Houd de CPU onder de 70%.
  • Houd het aantal aanvragen per exemplaar boven de 50.
  • Verminder het aantal exemplaren onder de 30.

In dit geval kan automatisch schalen met 3, van 30 tot 27 instanties om te voldoen aan de regels, ook al geeft de regel een afname van 10 op. Er wordt een logboekbericht naar het activiteitenlogboek geschreven met een beschrijving met omlaag schalen, waarbij het aantal exemplaren wordt bijgewerkt om flapping te voorkomen

Als automatisch schalen geen geschikt aantal exemplaren kan vinden, wordt de schaal in gebeurtenis overgeslagen en opnieuw geëvalueerd tijdens de volgende cyclus.

Notitie

Als de engine voor automatische schaalaanpassing detecteert dat flapping kan optreden als gevolg van het schalen naar het doelaantal exemplaren, wordt er ook geprobeerd om te schalen naar een lager aantal exemplaren tussen het huidige aantal en het doelaantal. Als flapping niet binnen dit bereik plaatsvindt, wordt de schaalbewerking voortgezet met het nieuwe doel.

Logboekbestanden

Zoek flapping in het activiteitenlogboek met de volgende query:

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

Hieronder ziet u een voorbeeld van een record voor activiteitenlogboeken voor flapping:

Een schermopname van een logboekrecord van een flapping-gebeurtenis.

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

Volgende stappen

Zie de volgende bronnen voor meer informatie over automatische schaalaanpassing: