Flapping in Automatische schaalaanpassing

In dit artikel wordt beschreven hoe u overslaan in automatische schaalaanpassing kunt gebruiken en hoe u dit kunt voorkomen.

Flappen verwijst naar een lusvoorwaarde die een reeks tegengestelde schaalgebeurtenissen veroorzaakt. Flapping treedt op wanneer een schaalgebeurtenis de tegenovergestelde schaalgebeurtenis activeert.

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

Om ervoor te zorgen dat er voldoende resources zijn, wordt er niet gecontroleerd op mogelijke flappingen voor uitschaalgebeurtenissen. Automatisch schalen stelt alleen een inschaalgebeurtenis uit 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 het aantal exemplaren met 1 exemplaar te verlagen wanneer het gemiddelde CPU-gebruik lager is dan 30%.

In de onderstaande tabel op T0, wanneer het gebruik op 56% ligt, wordt een uitschaalactie geactiveerd die resulteert in 56% CPU-gebruik voor 2 exemplaren. Dat geeft een gemiddelde van 28% voor de schaalset. Aangezien 28% lager is dan de drempelwaarde voor inschalen, moet automatisch schalen weer worden ingeschaald. Als u inschaalt, wordt het CPU-gebruik van de schaalset geretourneerd naar 56%, 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 dit niet controleert, is er een doorlopende reeks schaalgebeurtenissen. In dit geval stelt de engine voor automatisch schalen de inschaalgebeurtenis echter uit op T1 en evalueert deze opnieuw 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 verschillende metrische gegevens

Kleine of geen marges tussen drempelwaarden

Houd voldoende marges tussen de drempelwaarden voor schalen om te voorkomen dat de schaal wordt overschreden.

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

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

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 is dan 600.

In de onderstaande tabel ziet u een mogelijk resultaat van deze regels voor automatische schaalaanpassing:

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 T0 zijn er twee exemplaren die 1250 threads verwerken, ofwel 625 looplijnen per exemplaar. Automatisch schalen wordt uitgeschaald naar drie exemplaren.
  • Na de uitschaal hebben we bij 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 inschalingsgebeurtenis optreedt. 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 werd uitgeschaald, zou het proces worden herhaald, wat leidde tot een flapping-lus.
  • Om deze situatie te voorkomen, wordt automatisch schalen niet ingeschaald. Automatisch schalen slaat de huidige schaal gebeurtenis over en evalueert de regel opnieuw in de volgende uitvoeringscyclus.

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 automatisch schalen met records met flappingen.

Als u een voldoende marge tussen drempelwaarden instelt, wordt het bovenstaande scenario vermeden. Bijvoorbeeld:

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

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

Als het aantal inschaalthreads 400 is, moet het totale aantal threads dalen tot onder de 1200 voordat er een schaalgebeurtenis plaatsvindt. 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 flappingen veroorzaken:

  • Uitschalen met 20 wanneer het aantal >aanvragen =200 per exemplaar is.
  • OF wanneer CPU > 70% per exemplaar.
  • Schaal in 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 mogelijk 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 Inschalen met 10 zou leiden tot een geschatte CPU-toename van meer dan 70%, wat leidt tot een uitschaalgebeurtenis.

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

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

Om flappingen te voorkomen, schat de engine voor automatisch schalen het CPU-gebruik voor het aantal exemplaren boven de 20 totdat er een aantal exemplaren wordt gevonden waarbij alle metrische gegevens worden meegeteld in de gedefinieerde drempelwaarden:

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

In dit geval kan automatisch schalen met 3, van 30 naar 27 exemplaren worden geschaald om aan de regels te voldoen, zelfs als de regel een afname van 10 aangeeft. Er wordt een logboekbericht naar het activiteitenlogboek geschreven met een beschrijving die omlaag schalen met een bijgewerkt aantal exemplaren bevat om flappingen te voorkomen

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

Notitie

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

Logboekbestanden

Zoek flappingen 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 activiteitenlogboekrecord voor flapping:

Een schermopname van een logboekrecord van een flapping-gebeurtenis.

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

Volgende stappen

Zie de volgende resources voor meer informatie over automatische schaalaanpassing: