Share via


Balansera service fabric-klustret

Service Fabric-klustrets Resource Manager stöder dynamiska belastningsändringar, som reagerar på tillägg eller borttagningar av noder eller tjänster. Den korrigerar också automatiskt begränsningsöverträdelser och balanserar proaktivt om klustret. Men hur ofta vidtas dessa åtgärder och vad utlöser dem?

Det finns tre olika arbetskategorier som klustret Resource Manager utför:

  • Placering – det här steget handlar om att placera tillståndskänsliga repliker eller tillståndslösa instanser som saknas. Placeringen omfattar både nya tjänster och hantering av tillståndskänsliga repliker eller tillståndslösa instanser som har misslyckats. Här hanteras borttagning och borttagning av repliker eller instanser.
  • Villkorskontroller – det här steget söker efter och korrigerar överträdelser av de olika placeringsbegränsningarna (reglerna) i systemet. Exempel på regler är saker som att se till att noder inte överskrider kapaciteten och att en tjänsts placeringsbegränsningar uppfylls.
  • Balansering – det här steget kontrollerar om ombalansering krävs baserat på den konfigurerade önskade balansnivån för olika mått. Om så är fallet försöker den hitta ett arrangemang i klustret som är mer balanserat.

Konfigurera kluster Resource Manager timers

Den första uppsättningen kontroller kring balansering är en uppsättning timers. Dessa timers styr hur ofta klustret Resource Manager undersöker klustret och vidtar korrigerande åtgärder.

Var och en av dessa olika typer av korrigeringar som klustret Resource Manager kan göra styrs av en annan timer som styr dess frekvens. När varje timer utlöses schemaläggs uppgiften. Som standard Resource Manager:

  • söker igenom dess tillstånd och tillämpar uppdateringar (som att registrera att en nod är nere) var 1/10:e sekund
  • anger flaggan för placeringskontroll varje sekund
  • anger flaggan för begränsningskontroll varje sekund
  • anger balansflaggan var femte sekund

Exempel på konfigurationen som styr dessa timers finns nedan:

ClusterManifest.xml:

        <Section Name="PlacementAndLoadBalancing">
            <Parameter Name="PLBRefreshGap" Value="0.1" />
            <Parameter Name="MinPlacementInterval" Value="1.0" />
            <Parameter Name="MinConstraintCheckInterval" Value="1.0" />
            <Parameter Name="MinLoadBalancingInterval" Value="5.0" />
        </Section>

via ClusterConfig.json för fristående distributioner eller Template.json för Azure-värdbaserade kluster:

"fabricSettings": [
  {
    "name": "PlacementAndLoadBalancing",
    "parameters": [
      {
          "name": "PLBRefreshGap",
          "value": "0.10"
      },
      {
          "name": "MinPlacementInterval",
          "value": "1.0"
      },
      {
          "name": "MinConstraintCheckInterval",
          "value": "1.0"
      },
      {
          "name": "MinLoadBalancingInterval",
          "value": "5.0"
      }
    ]
  }
]

I dag utför kluster Resource Manager bara en av dessa åtgärder i taget, sekventiellt. Det är därför vi kallar dessa timers för "minsta intervall" och de åtgärder som vidtas när timers går ut som "inställningsflaggor". Klustret Resource Manager till exempel tar hand om väntande begäranden om att skapa tjänster innan klustret balanseras. Som du ser med de angivna standardtidsintervallen söker klustret Resource Manager efter allt som behövs för att göra det ofta. Normalt innebär det att den uppsättning ändringar som görs under varje steg är liten. Små, frekventa ändringar gör att klustret Resource Manager vara responsivt när saker händer i klustret. Standardtimers tillhandahåller viss batchbearbetning eftersom många av samma typer av händelser tenderar att inträffa samtidigt.

När noder till exempel misslyckas kan de göra det hela feldomäner åt gången. Alla dessa fel samlas in under nästa tillståndsuppdatering efter PLBRefreshGap. Korrigeringarna bestäms under följande placering, begränsningskontroll och utjämningskörningar. Som standard genomsöker kluster Resource Manager inte genom timmar av ändringar i klustret och försöker åtgärda alla ändringar samtidigt. Det skulle leda till omsättningstoppar.

Klustret Resource Manager behöver också ytterligare information för att avgöra om klustret är obalanserat. För det har vi två andra konfigurationsdelar: BalancingThresholds och ActivityThresholds.

Utjämningströsklar

Ett utjämningströskelvärde är den viktigaste kontrollen för att utlösa ombalansering. Utjämningströskeln för ett mått är ett förhållande. Om belastningen för ett mått på den mest inlästa noden dividerat med belastningen på den minst inlästa noden överskrider måttets BalancingThreshold är klustret obalanserat. Därför utlöses utjämning nästa gång klustret Resource Manager kontroller. Tidstimern MinLoadBalancingInterval definierar hur ofta klustrets Resource Manager ska kontrollera om ombalansering krävs. Kontroll betyder inte att något händer.

Tröskelvärden för utjämning definieras per mått som en del av klusterdefinitionen. Mer information om mått finns i måttartikeln.

ClusterManifest.xml

    <Section Name="MetricBalancingThresholds">
      <Parameter Name="MetricName1" Value="2"/>
      <Parameter Name="MetricName2" Value="3.5"/>
    </Section>

via ClusterConfig.json för fristående distributioner eller Template.json för Azure-värdbaserade kluster:

"fabricSettings": [
  {
    "name": "MetricBalancingThresholds",
    "parameters": [
      {
          "name": "MetricName1",
          "value": "2"
      },
      {
          "name": "MetricName2",
          "value": "3.5"
      }
    ]
  }
]

Diagram som visar ett exempel på ett tröskelvärde för nodutjämning

I det här exemplet använder varje tjänst en enhet med vissa mått. I det översta exemplet är den maximala belastningen på en nod fem och minst två. Anta att balanströskelvärdet för det här måttet är tre. Eftersom förhållandet i klustret är 5/2 = 2,5 och det är mindre än det angivna balanströskelvärdet på tre, balanseras klustret. Ingen utjämning utlöses när klustret Resource Manager kontrollerar.

I det nedre exemplet är den maximala belastningen på en nod 10, medan minimivärdet är två, vilket resulterar i ett förhållande på fem. Fem är större än det avsedda balanströskelvärdet på tre för det måttet. Därför schemaläggs en ombalanseringskörning nästa gång balanstimern utlöses. I en situation som denna distribueras vanligtvis viss belastning till nod 3. Eftersom Service Fabric-klustret Resource Manager inte använder en girig metod kan viss belastning också distribueras till nod 2.

Diagram som visar en åtgärd som vidtagits som svar på ett utjämningströskelvärde.

Anteckning

"Balancing" hanterar två olika strategier för att hantera belastningen i klustret. Standardstrategin som klustret Resource Manager använder är att distribuera belastningen över noderna i klustret. Den andra strategin är defragmentering. Defragmentering utförs under samma utjämningskörning. Strategier för utjämning och defragmentering kan användas för olika mått i samma kluster. En tjänst kan ha mått för både utjämning och defragmentering. För defragmenteringsmått utlöser förhållandet mellan belastningarna i klustret ombalansering när den ligger under balanströskeln.

Att komma under utjämningströskeln är inte ett uttryckligt mål. Utjämningströsklar är bara en utlösare. När du balanserar körningar avgör klustret Resource Manager vilka förbättringar det kan göra, om det finns några. Bara för att en balanssökning startas betyder det inte att något rör sig. Ibland är klustret obalanserat men för begränsat för att korrigera. Alternativt kräver förbättringarna rörelser som är för kostsamma).

Aktivitetströsklar

Ibland, även om noderna är relativt obalanserade, är den totala belastningen i klustret låg. Bristen på belastning kan vara en tillfällig dipp, eller på grund av att klustret är nytt och bara blir bootstrapped. I båda fallen kanske du inte vill spendera tid på att balansera klustret eftersom det inte finns mycket att vinna. Om klustret genomgick en balansering skulle du spendera nätverks- och beräkningsresurser för att flytta runt saker utan att göra någon stor absolut skillnad. För att undvika onödiga rörelser finns det en annan kontroll som kallas aktivitetströsklar. Med aktivitetströsklar kan du ange en absolut nedre gräns för aktivitet. Om ingen nod överskrider det här tröskelvärdet utlöses inte balanseringen även om utjämningströskeln uppfylls.

Anta att vi behåller vår balanströskel på tre för det här måttet. Anta också att vi har ett aktivitetströskelvärde på 1536. I det första fallet, medan klustret är obalanserat per utjämningströskeln, finns det ingen nod som uppfyller aktivitetströskeln, så ingenting händer. I det nedre exemplet överskrider nod 1 aktivitetströskeln. Eftersom både utjämningströskeln och aktivitetströskeln för måttet överskrids schemaläggs saldot. Som ett exempel ska vi titta på följande diagram:

Diagram som visar ett exempel på ett tröskelvärde för nodaktivitet.

Precis som tröskelvärden för utjämning definieras aktivitetströsklar per mått via klusterdefinitionen:

ClusterManifest.xml

    <Section Name="MetricActivityThresholds">
      <Parameter Name="Memory" Value="1536"/>
    </Section>

via ClusterConfig.json för fristående distributioner eller Template.json för Azure-värdbaserade kluster:

"fabricSettings": [
  {
    "name": "MetricActivityThresholds",
    "parameters": [
      {
          "name": "Memory",
          "value": "1536"
      }
    ]
  }
]

Utjämnings- och aktivitetströsklar är båda knutna till ett visst mått – utjämning utlöses endast om både tröskelvärdet för utjämning och aktivitet överskrids för samma mått.

Anteckning

När det inte anges är utjämningströskeln för ett mått 1 och aktivitetströskelvärdet är 0. Det innebär att klustret Resource Manager försöker hålla måttet perfekt balanserat för en viss belastning. Om du använder anpassade mått rekommenderar vi att du uttryckligen definierar dina egna tröskelvärden för utjämning och aktivitet för dina mått.

Balansera tjänster tillsammans

Om klustret är obalanserat eller inte är ett klusteromfattande beslut. Vi åtgärdar det dock genom att flytta enskilda tjänstrepliker och instanser runt. Det här är vettigt, eller hur? Om minnet staplas på en nod kan flera repliker eller instanser bidra till den. Att åtgärda obalansen kan kräva att någon av de tillståndskänsliga replikerna eller tillståndslösa instanser som använder det obalanserade måttet flyttas.

Ibland flyttas dock en tjänst som inte var obalanserad (kom ihåg diskussionen om lokala och globala vikter tidigare). Varför skulle en tjänst flyttas när alla mått för tjänsten var balanserade? Nu ska vi se ett exempel:

  • Anta att det finns fyra tjänster, Service 1, Service 2, Service 3 och Service 4.
  • Service 1 rapporterar mått Mått 1 och Mått 2.
  • Service 2 rapporterar mått Mått 2 och Mått 3.
  • Service 3 rapporterar mått mått 3 och mått 4.
  • Service 4 rapporterar måttet Metric 99.

Vi har egentligen inte fyra oberoende tjänster, vi har tre tjänster som är relaterade och en som är av på egen hand.

Diagram som visar hur du balanserar tjänster tillsammans.

På grund av den här kedjan är det möjligt att en obalans i måtten 1–4 kan leda till att repliker eller instanser som tillhör tjänster 1–3 flyttas runt. Vi vet också att en obalans i Mått 1, 2 eller 3 inte kan orsaka förflyttningar i Tjänst 4. Det skulle inte vara någon mening eftersom flytt av repliker eller instanser som hör till Tjänst 4 kan göra absolut ingenting för att påverka saldot för mått 1–3.

Klustret Resource Manager automatiskt ta reda på vilka tjänster som är relaterade. Att lägga till, ta bort eller ändra mått för tjänster kan påverka deras relationer. Mellan två körningar av utjämningstjänsten 2 kan till exempel ha uppdaterats för att ta bort mått 2. Detta bryter kedjan mellan Service 1 och Service 2. I stället för två grupper med relaterade tjänster finns det nu tre:

Diagram som visar att kluster Resource Manager avgör vilka tjänster som är relaterade.

Utjämning av ett kluster per nodtyp

Som vi beskrev i de tidigare avsnitten är de viktigaste kontrollerna för att utlösa ombalansering aktivitetströsklar, balansera tröskelvärden och timers. Service Fabric-klustrets Resource Manager ger mer detaljerad kontroll över att utlösa ombalansering med att ange parametrar per nodtyp och endast tillåta förflyttning på obalanserade nodtyper. Den största fördelen med att balansera per nodtyp är att tillåta prestandaförbättringar för nodtyper som kräver strängare balansregler, utan prestandaförsämring för andra nodtyper. Funktionen innehåller två huvuddelar:

  • Detektering av obalans görs per nodtyp. Tidigare global beräkning av obalans beräknas för varje nodtyp. Om alla nodtyper är balanserade utlöser INTE CRM utjämningsfasen. Om minst en nodtyp är obalanserad krävs annars balansfasen.
  • Utjämning flyttar endast repliker på en nodtyp som är obalanserad, andra nodtyper påverkas inte av utjämningsfasen.

Hur utjämning per nodtyp påverkar ett kluster

Under utjämningen av ett kluster per nodtyp beräknar Service Fabric-klustret Resource Manager obalanstillståndet för varje nodtyp. Om minst en nodtyp är obalanserad utlöses utjämningsfasen. Utjämningsfasen flyttar inte repliker på nodtyper som är obalanserade, när utjämningen tillfälligt pausas på dessa nodtyper (t.ex. har minimalt balansintervall inte passerat sedan en tidigare utjämningsfas). Identifieringen av ett obalanserat tillstånd använder vanliga mekanismer som redan är tillgängliga för klassisk klusterbalansering, men förbättrar konfigurationens kornighet och flexibilitet. De mekanismer som används för att balansera per nodtyp för att identifiera obalans finns i listan nedan:

  • Tröskelvärden för måttbalansering per nodtyp är värden som har en liknande roll som det globalt definierade utjämningströskelvärdet som används i klassisk utjämning. Förhållandet mellan lägsta och högsta måttbelastning beräknas för varje nodtyp. Om förhållandet för en nodtyp är högre än det definierade balanströskelvärdet för nodtypen markeras nodtypen som obalanserad. Mer information om konfiguration av tröskelvärden för måttaktivitet per nodtyp finns i avsnittet tröskelvärden för utjämning per nodtyp.
  • Tröskelvärden för måttaktivitet per nodtyp är värden som har en liknande roll som det globalt definierade aktivitetströskelvärdet som används i klassisk utjämning. Den maximala måttbelastningen beräknas för varje nodtyp. Om den maximala belastningen för en nodtyp är högre än det definierade aktivitetströskelvärdet för den nodtypen markeras nodtypen som obalanserad. Mer information om konfiguration av tröskelvärden för måttaktivitet per nodtyp finns i avsnittet activity-thresholds-per-node-type.
  • Minsta balanseringsintervall per nodtyp har en roll som liknar det globalt definierade minsta balansintervallet. För varje nodtyp bevarar Kluster Resource Manager tidsstämpeln för den senaste utjämningen. Två på varandra följande utjämningsfaser kunde inte köras på en nodtyp inom det definierade minsta balansintervallet. Mer information om konfiguration av minsta balansintervall per nodtyp finns i avsnittet minsta balanseringsintervall per nodtyp.

Beskriva balansering per nodtyp

För att aktivera utjämning per nodtyp måste parametern SeparateBalancingStrategyPerNodeType aktiveras i ett klustermanifest. Dessutom måste även underklusterfunktionen aktiveras. Exempel på ett avsnitt med klustermanifestet PlacementAndLoadBalancing för att aktivera funktionen:

<Section Name="PlacementAndLoadBalancing">
    <Parameter Name="SeparateBalancingStrategyPerNodeType" Value="true" />
    <Parameter Name="SubclusteringEnabled" Value="true" />
    <Parameter Name="SubclusteringReportingPolicy" Value="1" />
</Section>

ClusterConfig.json för fristående distributioner eller Template.json för Azure-värdbaserade kluster:

"fabricSettings": [
  {
    "name": "PlacementAndLoadBalancing",
    "parameters": [
      {
          "name": "SeparateBalancingStrategyPerNodeType",
          "value": "true"
      },
      {
          "name": "SubclusteringEnabled",
          "value": "true"
      },
      {
          "name": "SubclusteringReportingPolicy",
          "value": "1"
      },
    ]
  }
]

Som vi beskrev i föregående avsnitt kan tröskelvärden och intervall anges per nodtyp. Mer information om hur du uppdaterar en specifik parameter finns i följande avsnitt:

Balansera tröskelvärden per nodtyp

Tröskelvärdet för måttbalansering kan definieras per nodtyp för att öka kornigheten från utjämningskonfigurationen. Utjämningströsklar har flyttalstyp, eftersom de representerar tröskelvärdet för förhållandet mellan högsta och lägsta belastningsvärde inom en viss nodtyp. Tröskelvärden för utjämning definieras i avsnittet PlacementAndLoadBalancingOverrides för varje nodtyp:

<NodeTypes>
    <NodeType Name="NodeType1">
        <PlacementAndLoadBalancingOverrides>
            <MetricBalancingThresholdsPerNodeType>
                <BalancingThreshold Name="Metric1" Value="2.5">
                <BalancingThreshold Name="Metric2" Value="4">
                <BalancingThreshold Name="Metric3" Value="3.25">
            </MetricBalancingThresholdsPerNodeType>
        </PlacementAndLoadBalancingOverrides>
    </NodeType>
</NodeTypes>

Om tröskelvärdet för ett mått inte har definierats för en nodtyp ärver tröskelvärdet värdet för tröskelvärdet för måttutjämning som definierats globalt i avsnittet PlacementAndLoadBalancing . Om balanströskelvärdet för ett mått inte har definierats varken för en nodtyp eller globalt i ett PlacementAndLoadBalancing-avsnitt har tröskelvärdet ett.

Aktivitetströsklar per nodtyp

Tröskelvärdet för måttaktivitet kan definieras per nodtyp för att öka kornigheten för utjämningskonfigurationen. Aktivitetströsklar har heltalstyp eftersom de representerar tröskelvärdet för maximalt belastningsvärde inom en viss nodtyp. Aktivitetströsklar definieras i avsnittet PlacementAndLoadBalancingOverrides för varje nodtyp:

<NodeTypes>
    <NodeType Name="NodeType1">
        <PlacementAndLoadBalancingOverrides>
            <MetricActivityThresholdsPerNodeType>
                <ActivityThreshold Name="Metric1" Value="500">
                <ActivityThreshold Name="Metric2" Value="40">
                <ActivityThreshold Name="Metric3" Value="1000">
            </MetricActivityThresholdsPerNodeType>
        </PlacementAndLoadBalancingOverrides>
    </NodeType>
</NodeTypes>

Om aktivitetströskelvärdet för ett mått inte har definierats för en nodtyp ärver tröskelvärdet värdet från tröskelvärdet för måttaktivitet som definierats globalt i avsnittet PlacementAndLoadBalancing . Om aktivitetströskelvärdet för ett mått inte har definierats varken för en nodtyp eller globalt i ett PlacementAndLoadBalancing-avsnitt har tröskelvärdet noll.

Minsta balansintervall per nodtyp

Minimalt balansintervall kan definieras per nodtyp för att öka kornigheten för utjämningskonfigurationen. Minimalt balansintervall har heltalstyp, eftersom det representerar den minsta tid som måste passera före två på varandra följande balansrundor på samma nodtyp. Minsta balansintervall definieras i avsnittet PlacementAndLoadBalancingOverrides för varje nodtyp:

<NodeTypes>
    <NodeType Name="NodeType1">
        <PlacementAndLoadBalancingOverrides>
            <MinLoadBalancingIntervalPerNodeType>100</MinLoadBalancingIntervalPerNodeType>
        </PlacementAndLoadBalancingOverrides>
    </NodeType>
</NodeTypes>

Om minimalt balansintervall inte har definierats för en nodtyp ärver interval värdet från det minsta balansintervall som definierats globalt i avsnittet PlacementAndLoadBalancing . Annars, om minimalt intervall inte har definierats varken för en nodtyp eller globalt i ett PlacementAndLoadBalancing-avsnitt , har det minimala intervallet standardvärdet noll , vilket indikerar att paus mellan efterföljande balansrundor inte krävs.

Exempel

Exempel 1

Låt oss ta en titt på ett fall där ett kluster innehåller två nodtyper, nodtyp A och nodtyp B. Alla tjänster rapporterar samma mått och de delas mellan dessa nodtyper, vilket innebär att belastningsstatistik skiljer sig åt för dem. I det här exemplet har nodtypen A maximal belastning på 300 och minst 100, och nodtypen B har en maximal belastning på 700 och en minsta belastning på 500:

Diagram som visar ett exempel på ett tröskelvärde för nodtypsutjämning med två nodtyper.

Kunden upptäckte att arbetsbelastningar av två nodtyper har olika balansbehov och bestämde sig för att ange olika tröskelvärden för utjämning och aktivitet per nodtyp. Utjämningströskeln för nodtyp A är 2,5 och aktivitetströskelvärdet är 50. För nodtyp B anger kunden utjämningströskeln till 1,2 och aktivitetströskeln till 400.

Vid identifiering av obalans för klustret i det här exemplet bryter båda nodtyperna mot aktivitetströskeln. Den maximala belastningen för nodtypen A300 är högre än det definierade aktivitetströskelvärdet på 50. Den maximala belastningen för nodtyp B700 är högre än det definierade aktivitetströskelvärdet på 400. Nodtyp A strider mot utjämningströskelkriterierna, eftersom det aktuella förhållandet mellan högsta och lägsta belastning är 3 och balanströskelvärdet är 2,5. Tvärtom bryter nodtyp B inte mot utjämningströskelkriterierna, eftersom det aktuella förhållandet för maximal och minsta belastning för den här nodtypen är 1,2, men balanströskelvärdet är 1,4. Utjämning krävs endast för repliker i nodtyp A, och den enda uppsättningen repliker som är berättigade till förflyttningar under utjämningsfasen är repliker som placeras i nodtypen A.

Exempel 2

Låt oss ta en titt på ett fall där ett kluster innehåller tre nodtyper, nodtyp A, B och C. Alla tjänster rapporterar samma mått och de delas mellan dessa nodtyper, vilket innebär att belastningsstatistik skiljer sig åt för dem. I det här exemplet har nodtypen A maximal belastning på 600 och minst 100, nodtypen B har en maximal belastning på 900 och en minsta belastning på 100 och nodtypen C har en maximal belastning på 600 och en minsta belastning på 300:

Diagram som visar ett exempel på ett tröskelvärde för utjämning av nodtyper med tre nodtyper.

Kunden upptäckte att arbetsbelastningar av dessa nodtyper har olika balansbehov och bestämde sig för att ange olika tröskelvärden för utjämning och aktivitet per nodtyp. Utjämningströskeln för nodtyp A är 5 och aktivitetströskelvärdet är 700. För nodtyp B anger kunden balanströskelvärdet till 10 och aktivitetströskelvärdet till 200. För nodtyp C anger kunden utjämningströskel till 2 och aktivitetströskel till 300.

Den maximala belastningen för nodtypen A600 är lägre än det definierade aktivitetströskelvärdet på 700, vilket innebär att nodtyp A inte balanseras. Den maximala belastningen för nodtyp B900 är högre än det definierade aktivitetströskelvärdet på 200. Nodtypen B bryter mot villkoren för aktivitetströskel. Den maximala belastningen för nodtypen C600 är högre än det definierade aktivitetströskelvärdet på 300. Nodtypen C bryter mot villkoren för aktivitetströskel. Nodtypen B bryter inte mot utjämningströskelkriterierna, eftersom det aktuella förhållandet för maximal och minsta belastning för den här nodtypen är 9, men balanströskelvärdet är 10. Nodtyp C bryter mot utjämningströskelkriterierna, eftersom det aktuella förhållandet mellan högsta och lägsta belastning är 2 och balanströskelvärdet är 2. Utjämning krävs endast för repliker i nodtypen C, och den enda uppsättningen repliker som är berättigade till förflyttningar under utjämningsfasen är repliker som placeras i nodtypen C.

Nästa steg

  • Mått är hur Service Fabric-klusterresurshanteraren hanterar förbrukning och kapacitet i klustret. Mer information om mått och hur du konfigurerar dem finns i måttartikeln
  • Rörelsekostnad är ett sätt att signalera till klustret Resource Manager att vissa tjänster är dyrare att flytta än andra. Mer information om flyttkostnader finns i artikeln om flyttkostnader
  • Klustret Resource Manager har flera begränsningar som du kan konfigurera för att sakta ned omsättningen i klustret. De är normalt inte nödvändiga, men om du behöver dem kan du lära dig mer om dem den avancerade begränsningsartikeln
  • Klustrets Resource Manager kan identifiera och hantera underkluster. Underkluster kan uppstå när du använder placeringsbegränsningar och balansering. Information om hur underkluster kan påverka utjämning och hur du kan hantera det finns i underklusterartikeln