Udostępnij za pośrednictwem


Równoważenie metryk podklastrowanych

Co to jest podklasowanie

Podklasowanie ma miejsce, gdy usługi z różnymi ograniczeniami umieszczania mają wspólną metrykę i oba raporty ładują je. Jeśli obciążenie zgłaszane przez usługi znacznie się różni, całkowite obciążenie węzłów będzie miało duże odchylenie standardowe i wyglądałoby na to, że klaster jest niezrównoważony, nawet jeśli ma najlepszą możliwą równowagę.

Jak podklasowanie wpływa na równoważenie obciążenia

Jeśli obciążenie zgłaszane przez usługi w różnych węzłach znacznie się różni, może się wydawać, że istnieje duża dysproporcja, w której nie ma żadnych. Ponadto jeśli fałszywa nierównowaga spowodowana przez podklasę jest większa niż rzeczywista dysproporcja, istnieje możliwość dezorientacji algorytmu równoważenia usługi Resource Manager i utworzenia nieoptymalnego salda w klastrze.

Załóżmy na przykład, że mamy cztery usługi i wszystkie zgłaszają obciążenie metryki Metric1:

  • Usługa A — ma ograniczenie umieszczania "NodeType==Frontend", zgłasza obciążenie 10
  • Usługa B — ma ograniczenie umieszczania "NodeType==Frontend", zgłasza obciążenie 10
  • Usługa C — ma ograniczenie umieszczania "NodeType==Backend", zgłasza obciążenie 100
  • Service D — ma ograniczenie umieszczania "NodeType==Backend", zgłasza obciążenie 100
  • Mamy cztery węzły. Dwa z nich mają właściwość NodeType ustawioną jako "Fronton", a pozostałe dwa to "Zaplecze"

A mamy następujące położenie:

Przykład umieszczania podklastrowanego

Klaster może wyglądać na niezrównoważone, mamy duże obciążenie węzłów 3 i 4, ale to umieszczenie tworzy najlepszą możliwą równowagę w tej sytuacji.

Usługa Resource Manager może rozpoznawać sytuacje podklasowania i w prawie wszystkich przypadkach może wygenerować optymalną równowagę dla danej sytuacji.

W niektórych wyjątkowych sytuacjach, gdy usługa Resource Manager nie może optymalnie zrównoważyć podklasyfikatowanej metryki, będzie nadal wykrywać podklasowanie i wygeneruje raport kondycji, aby doradzić sobie z rozwiązaniem problemu.

Typy podklastrowania i sposób ich obsługi

Sytuacje klasyfikacji podrzędnej można podzielić na trzy różne kategorie. Kategoria konkretnej sytuacji podklasowania określa, jak będzie ona obsługiwana przez usługę Resource Manager.

Pierwsza kategoria — płaskie podklasowanie z rozłącznymi grupami węzłów

Ta kategoria ma najprostszą formę podklasowania, w której węzły można rozdzielić na różne grupy, a każda usługa może zostać umieszczona tylko w węzłach w jednej z tych grup. Każdy węzeł należy tylko do jednej grupy i jednej grupy. Sytuacja opisana powyżej należy do tej kategorii, podobnie jak większość sytuacji podklastrowania.

W sytuacjach w tej kategorii usługa Resource Manager może wygenerować optymalną równowagę i nie jest potrzebna żadna dalsza interwencja.

Druga kategoria — podklasowanie z hierarchicznymi grupami węzłów

Taka sytuacja występuje, gdy grupa węzłów dozwolona dla jednej usługi jest podzbiorem grupy węzłów dozwolonych dla innej usługi. Najczęstszym przykładem tej sytuacji jest sytuacja, gdy niektóre usługi mają zdefiniowane ograniczenie umieszczania, a inna usługa nie ma ograniczenia umieszczania i może zostać umieszczona w dowolnym węźle.

Przykład:

  • Usługa A: brak ograniczenia umieszczania
  • Usługa B: ograniczenie umieszczania "NodeType==Frontend"
  • Usługa C: ograniczenie umieszczania "NodeType==Backend"

Ta konfiguracja tworzy relację podzbioru-nadzestawu między grupami węzłów dla różnych usług.

Podzbiór podzbiorów podrzędnych

W tej sytuacji istnieje szansa, że zostanie wykonana nieoptymalna równowaga.

Usługa Resource Manager rozpozna tę sytuację i utworzy raport kondycji, który zaleca podzielenie usługi A na dwie usługi — service A1, które można umieścić w węzłach frontonu i usłudze A2, które można umieścić w węzłach zaplecza. Spowoduje to powrót do pierwszej sytuacji kategorii, która może być optymalnie zrównoważona.

Trzecia kategoria — podklasowanie z częściowym nakładaniem się między zestawami węzłów

Taka sytuacja występuje, gdy istnieje częściowe nakładanie się między zestawami węzłów, na które można umieścić niektóre usługi.

Jeśli na przykład mamy właściwość węzła o nazwie NodeColor i mamy trzy węzły:

  • Węzeł 1: NodeColor=Red
  • Węzeł 2: NodeColor=Niebieski
  • Węzeł 3: NodeColor=Green

Mamy dwie usługi:

  • Service A: z ograniczeniem umieszczania "Color==Red || Color==Blue"
  • Usługa B: z ograniczeniem umieszczania "Color==Blue || Kolor==Zielony"

W związku z tym usługę A można umieścić w węzłach 1 i 2, a usługa B można umieścić w węzłach 2 i 3.

W tej sytuacji istnieje szansa, że zostanie wykonana nieoptymalna równowaga.

Usługa Resource Manager rozpozna tę sytuację i utworzy raport kondycji, który pomoże Ci podzielić niektóre usługi.

W takiej sytuacji usługa Resource Manager nie może przekazać propozycji podziału usług, ponieważ można dokonać wielu podziałów i nie ma możliwości oszacowania, w jaki sposób byłby optymalny do podziału usług.

Konfigurowanie podklasyfikatu

Zachowanie usługi Resource Manager dotyczące podklasowania można zmodyfikować, modyfikując następujące parametry konfiguracji:

  • PodklasowanieEnabled — parametr określa, czy usługa Resource Manager weźmie pod uwagę podklasy podczas równoważenia obciążenia. Jeśli ten parametr jest wyłączony, usługa Resource Manager zignoruje podklasę i spróbuje osiągnąć optymalną równowagę na poziomie globalnym. Wartość domyślna tego parametru to false.
  • PodklasowanieReportingPolicy — określa, w jaki sposób usługa Resource Manager będzie emitować raporty o kondycji dla hierarchicznych i częściowych nakładających się podklasów. Wartość zero oznacza, że raporty o kondycji dotyczące podklasowania są wyłączone, "1" oznacza, że raporty kondycji ostrzeżenia będą tworzone dla nieoptymalnych sytuacji podklasowania, a wartość "2" spowoduje wygenerowanie "OK" raportów o kondycji. Wartość domyślna tego parametru to "1".

ClusterManifest.xml:

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

za pośrednictwem ClusterConfig.json dla wdrożeń autonomicznych lub Template.json dla klastrów hostowanych na platformie Azure:

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

Następne kroki