Dela via


Defragmentering av mått och belastning i Service Fabric

Service Fabric-klustret Resource Manager standardstrategi för att hantera belastningsmått i klustret är att distribuera belastningen. Om du ser till att noderna används jämnt undviker du frekventa och kalla platser som leder till både konkurrens och bortkastade resurser. Att distribuera arbetsbelastningar i klustret är också det säkraste när det gäller kvarvarande fel eftersom det säkerställer att ett fel inte tar ut en stor procentandel av en viss arbetsbelastning.

Service Fabric-klustrets Resource Manager stöder en annan strategi för att hantera belastningen, vilket är defragmentering. Defragmentering innebär att det konsolideras i stället för att försöka distribuera användningen av ett mått i klustret. Konsolidering är bara en inversion av standardbalanseringsstrategin – i stället för att minimera den genomsnittliga standardavvikelsen för måttbelastning försöker klustret Resource Manager öka den.

När defragmentering ska användas

Distribution av belastning i klustret förbrukar en del av resurserna på varje nod. Vissa arbetsbelastningar skapar tjänster som är exceptionellt stora och förbrukar de flesta eller alla av en nod. I dessa fall är det möjligt att när det skapas stora arbetsbelastningar finns det inte tillräckligt med utrymme på någon nod för att köra dem. Stora arbetsbelastningar är inte ett problem i Service Fabric. I dessa fall avgör kluster Resource Manager att det behöver organisera om klustret för att göra plats för den här stora arbetsbelastningen. Under tiden måste dock arbetsbelastningen vänta tills den schemaläggs i klustret.

Om det finns många tjänster och tillstånd att flytta runt kan det ta lång tid innan den stora arbetsbelastningen placeras i klustret. Detta är mer troligt om andra arbetsbelastningar i klustret också är stora och därför tar längre tid att organisera om. Service Fabric-teamet mätte skapandetider i simuleringar av det här scenariot. Vi upptäckte att det tog mycket längre tid att skapa stora tjänster när klusteranvändningen översteg mellan 30 % och 50 %. För att hantera det här scenariot introducerade vi defragmentering som en balansstrategi. Vi upptäckte att defragmentering verkligen hjälpte de nya arbetsbelastningarna att schemaläggas i klustret för stora arbetsbelastningar, särskilt sådana där skapandetiden var viktig.

Du kan konfigurera defragmenteringsmått så att klustret Resource Manager för att proaktivt försöka komprimera belastningen på tjänsterna till färre noder. Detta säkerställer att det nästan alltid finns plats för stora tjänster utan att omorganisera klustret. Om du inte behöver omorganisera klustret kan du snabbt skapa stora arbetsbelastningar.

De flesta behöver inte defragmentering. Tjänsterna är vanligtvis små, så det är inte svårt att hitta plats för dem i klustret. När omorganisering är möjlig går det snabbt, igen eftersom de flesta tjänster är små och kan flyttas snabbt och parallellt. Men om du har stora tjänster och behöver dem skapade snabbt är defragmenteringsstrategin för dig. Vi diskuterar kompromisserna med att använda defragmentering härnäst.

Defragmenteringsavvägningar

Defragmentering kan öka effekten av fel, eftersom fler tjänster körs på noder som misslyckas. Defragmentering kan också öka kostnaderna eftersom resurser i klustret måste lagras i reserven i väntan på att stora arbetsbelastningar skapas.

Följande diagram ger en visuell representation av två kluster, ett som är defragmenterat och ett som inte är det.

Jämföra balanserade och defragmenterade kluster

I det balanserade fallet bör du överväga det antal rörelser som skulle vara nödvändiga för att placera ett av de största tjänstobjekten. I det defragmenterade klustret kan den stora arbetsbelastningen placeras på noder fyra eller fem utan att behöva vänta på att andra tjänster ska flyttas.

För- och nackdelar med defragmentering

Så vad är de andra konceptuella kompromisserna? Här är en snabb tabell med saker att tänka på:

Defragmenteringspros Defragmentering nackdelar
Möjliggör snabbare skapande av stora tjänster Koncentrerar belastningen till färre noder, vilket ökar konkurrensen
Möjliggör lägre dataförflyttning under skapandet Fel kan påverka fler tjänster och orsaka mer omsättning
Tillåter omfattande beskrivning av krav och återtagning av utrymme Mer komplex övergripande resurshanteringskonfiguration

Du kan blanda defragmenterade och normala mått i samma kluster. Klustret Resource Manager försöker konsolidera defragmenteringsmåtten så mycket som möjligt samtidigt som de andra sprids. Resultatet av att blanda defragmenterings- och balansstrategier beror på flera faktorer, bland annat:

  • antalet balansmått jämfört med antalet defragmenteringsmått
  • Om någon tjänst använder båda typerna av mått
  • måttvikterna
  • aktuella måttinläsningar

Experimentering krävs för att fastställa den exakta konfiguration som krävs. Vi rekommenderar noggrann mätning av dina arbetsbelastningar innan du aktiverar defragmenteringsmått i produktion. Detta gäller särskilt vid blandning av defragmentering och balanserade mått i samma tjänst.

Konfigurera defragmenteringsmått

Att konfigurera defragmenteringsmått är ett globalt beslut i klustret, och enskilda mått kan väljas för defragmentering. Följande konfigurationsfragment visar hur du konfigurerar mått för defragmentering. I det här fallet konfigureras "Metric1" som ett defragmenteringsmått, medan "Metric2" fortsätter att balanseras normalt.

ClusterManifest.xml:

<Section Name="DefragmentationMetrics">
    <Parameter Name="Metric1" Value="true" />
    <Parameter Name="Metric2" Value="false" />
</Section>

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

"fabricSettings": [
  {
    "name": "DefragmentationMetrics",
    "parameters": [
      {
          "name": "Metric1",
          "value": "true"
      },
      {
          "name": "Metric2",
          "value": "false"
      }
    ]
  }
]

Nästa steg

  • Klustret Resource Manager har många alternativ för att beskriva klustret. Mer information om dem finns i den här artikeln om hur du beskriver ett Service Fabric-kluster
  • 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 den här artikeln