Dela via


Defragmentering av mått och belastning i Service Fabric

Service Fabric-klusterresurshanterarens 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 andel av en viss arbetsbelastning.

Service Fabric Cluster Resource Manager stöder en annan strategi för att hantera belastning, 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 Klusterresurshanteraren öka den.

När du ska använda defragmentering

När belastningen distribueras i klustret används en del av resurserna på varje nod. Vissa arbetsbelastningar skapar tjänster som är exceptionellt stora och använder 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 fastställer Klusterresurshanteraren att klustret måste organiseras om för att ge plats åt den här stora arbetsbelastningen. Under tiden måste dock arbetsbelastningen vänta på att schemaläggas 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 för stora arbetsbelastningar, särskilt sådana där skapandetiden var viktig, hjälpte defragmentering verkligen de nya arbetsbelastningarna att schemaläggas i klustret.

Du kan konfigurera defragmenteringsmått så att Klusterresurshanteraren proaktivt försöker 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 ska 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ördelar och nackdelar med defragmentering

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

Defragmenteringspros Nackdelar med defragmentering
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 återtagande av utrymme Mer komplex övergripande resource management-konfiguration

Du kan blanda defragmenterade och normala mått i samma kluster. Klusterresurshanteraren försöker konsolidera defragmenteringsmåtten så mycket som möjligt samtidigt som de andra sprids ut. Resultatet av att blanda defragmentering och balanseringsstrategier 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 när defragmentering och balanserade mått blandas 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

  • Klusterresurshanteraren 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 Cluster Resource Manger hanterar förbrukning och kapacitet i klustret. Mer information om mått och hur du konfigurerar dem finns i den här artikeln