Dela via


Utjämning av underklistrade mått

Vad är underclustering

Subclustering sker när tjänster med olika placeringsbegränsningar har ett gemensamt mått och båda rapporterar inläsning för det. Om belastningen som rapporteras av tjänsterna skiljer sig avsevärt, kommer den totala belastningen på noderna att ha en stor standardavvikelse och det skulle se ut som om klustret är obalanserat, även när det har bästa möjliga balans.

Hur underlustering påverkar belastningsutjämning

Om belastningen som rapporteras av tjänsterna på olika noder skiljer sig avsevärt kan det se ut som om det finns en stor obalans där det inte finns någon. Om den falska obalansen som orsakas av underkluster är större än den faktiska obalansen kan den också förvirra Resource Manager-utjämningsalgoritmen och generera suboptimal balans i klustret.

Anta till exempel att vi har fyra tjänster och att alla rapporterar en belastning för metric Metric1:

  • Service A – har placeringsbegränsningen "NodeType==Frontend", rapporterar en belastning på 10
  • Service B – har placeringsbegränsningen "NodeType==Frontend", rapporterar en belastning på 10
  • Service C – har placeringsbegränsningen "NodeType==Backend", rapporterar en belastning på 100
  • Service D – har placeringsbegränsningen "NodeType==Backend", rapporterar en belastning på 100
  • Och vi har fyra noder. Två av dem har NodeType inställt som "Klientdel" och de andra två är "Serverdel"

Och vi har följande placering:

Exempel på underordnad placering

Klustret kan se obalanserat ut, vi har en stor belastning på noderna 3 och 4, men den här placeringen skapar bästa möjliga balans i den här situationen.

Resource Manager kan identifiera subklusteringssituationer och i nästan alla fall kan det ge den optimala balansen för den angivna situationen.

För vissa exceptionella situationer när Resource Manager inte kan balansera ett underkllustermått optimalt identifieras fortfarande underclustering och det genererar en hälsorapport som råder dig att åtgärda problemet.

Typer av undermappning och hur de hanteras

Subclusteringssituationer kan klassificeras i tre olika kategorier. Kategorin för en specifik subclusteringssituation avgör hur den ska hanteras av Resource Manager.

Första kategorin – platt subclustering med osammanhängande nodgrupper

Den här kategorin har den enklaste formen av subclustering där noder kan delas in i olika grupper och varje tjänst endast kan placeras på noder i en av dessa grupper. Varje nod tillhör endast en grupp och en grupp. Situationen som beskrivs ovan hör hemma i den här kategorin, liksom de flesta av de underklusterande situationerna.

För situationer i den här kategorin kan Resource Manager skapa den optimala balansen och inga ytterligare åtgärder krävs.

Andra kategorin – subclustering med hierarkiska nodgrupper

Den här situationen inträffar när en grupp noder som tillåts för en tjänst är en delmängd av den grupp noder som tillåts för en annan tjänst. Det vanligaste exemplet på den här situationen är när en viss tjänst har en definierad placeringsbegränsning och en annan tjänst inte har någon placeringsbegränsning och kan placeras på valfri nod.

Exempel:

  • Tjänst A: ingen placeringsbegränsning
  • Tjänst B: placeringsbegränsningen "NodeType==Frontend"
  • Tjänst C: placeringsbegränsningen "NodeType==Backend"

Den här konfigurationen skapar en delmängds-superset-relation mellan nodgrupper för olika tjänster.

Delmängdens supermängdsunderluster

I den här situationen finns det en chans att en suboptimal balans görs.

Resource Manager identifierar den här situationen och skapar en hälsorapport där du uppmanas att dela upp Tjänst A i två tjänster – Service A1 som kan placeras på klientdelsnoder och Service A2 som kan placeras på serverdelsnoder. Detta kommer att föra oss tillbaka till den första kategorisituationen som kan balanseras optimalt.

Tredje kategorin – subclustering med partiell överlappning mellan noduppsättningar

Den här situationen inträffar när det finns en partiell överlappning mellan uppsättningar med noder som vissa tjänster kan placeras på.

Om vi till exempel har en nodegenskap med namnet NodeColor och vi har tre noder:

  • Nod 1: NodeColor=Röd
  • Nod 2: NodeColor=Blå
  • Nod 3: NodeColor=Grön

Och vi har två tjänster:

  • Tjänst A: med placeringsbegränsningen "Color==Red || Color==Blue"
  • Tjänst B: med placeringsbegränsningen "Color==Blue || Color==Green"

Därför kan service A placeras på noderna 1 och 2 och service B kan placeras på noderna 2 och 3.

I den här situationen finns det en chans att en suboptimal balans görs.

Resource Manager identifierar den här situationen och skapar en hälsorapport där du uppmanas att dela upp några av tjänsterna.

I den här situationen kan Resource Manager inte ge ett förslag på hur tjänsterna ska delas, eftersom flera delningar kan göras och det inte finns något sätt att uppskatta vilket sätt som skulle vara optimalt att dela tjänsterna på.

Konfigurera undermappning

Beteendet för Resource Manager om undermappning kan ändras genom att ändra följande konfigurationsparametrar:

  • SubclusteringEnabled – parametern avgör om Resource Manager tar hänsyn till underklistrar när belastningsutjämning utförs. Om den här parametern är inaktiverad ignorerar Resource Manager subclustering och försöker uppnå optimal balans på global nivå. Standardvärdet för den här parametern är falskt.
  • SubclusteringReportingPolicy – bestämmer hur Resource Manager ska generera hälsorapporter för hierarkisk och partiell överlappning. Ett värde på noll innebär att hälsorapporter om underkluster är inaktiverade, "1" innebär att varningshälsorapporter skapas för suboptimala underkluster och ett värde på "2" genererar "OK"-hälsorapporter. Standardvärdet för den här parametern är "1".

ClusterManifest.xml:

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

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

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

Nästa steg