Udostępnij za pośrednictwem


Równoważenie metryk podrzędnych

Co to jest podklasowanie

Tworzenie podklasy ma miejsce, gdy usługi z różnymi ograniczeniami umieszczania mają wspólną metrykę i oba te metryki raportują obciążenie. Jeśli obciążenie zgłoszone przez usługi znacznie się różni, łączne obciążenie węzłów będzie miało duże odchylenie standardowe i wyglądałoby na to, że klaster jest nierównowagowany, nawet jeśli ma najlepszą możliwą równowagę.

Wpływ podklasowania na równoważenie obciążenia

Jeśli obciążenie zgłoszone przez usługi w różnych węzłach znacznie się różni, może się wydawać, że występuje duża dysproporcja, w której nie ma żadnego. Ponadto jeśli nierównowaga fałszywa spowodowana przez podklasę jest większa niż rzeczywista nierównowaga, istnieje możliwość dezorientacji algorytmu równoważenia Resource Manager i wygenerowania 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ą na "Fronton", a pozostałe dwa to "Zaplecze"

Mamy następujące położenie:

Przykład umieszczania podklasowanego

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

Resource Manager może rozpoznać sytuacje podklasowania, a w prawie wszystkich przypadkach może to przynieść optymalną równowagę dla danej sytuacji.

W przypadku niektórych wyjątkowych sytuacji, gdy Resource Manager nie jest w stanie optymalnie zrównoważyć podklasowaną metrykę, nadal wykryje podklasę i wygeneruje raport kondycji, aby zalecić rozwiązanie problemu.

Typy podklasy 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 Resource Manager.

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

Ta kategoria ma najprostszą formę podklasy, w której węzły można rozdzielić na różne grupy, a każda usługa może zostać umieszczona tylko na 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, tak jak większość sytuacji podklasowania.

W przypadku sytuacji w tej kategorii Resource Manager może zapewnić 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"
  • Service C: ograniczenie umieszczania "NodeType==Backend"

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

Podzestaw podzbiorów podrzędnych

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

Resource Manager rozpozna tę sytuację i utworzy raport kondycji doradzający podzielenie usługi A na dwie usługi — usługa A1, którą 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=Blue
  • 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 || Color==Green"

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

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

Resource Manager rozpozna tę sytuację i utworzy raport dotyczący kondycji, w którym zaleca się podzielenie niektórych usług.

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

Konfigurowanie podklasowania

Zachowanie Resource Manager o podklasowaniu można zmodyfikować, modyfikując następujące parametry konfiguracji:

  • PodklasowanieEnabled — parametr określa, czy Resource Manager uwzględnić podklasy podczas równoważenia obciążenia. Jeśli ten parametr jest wyłączony, Resource Manager zignoruje podklasę i spróbuje osiągnąć optymalną równowagę na poziomie globalnym. Wartość domyślna tego parametru to false.
  • SubclusteringReportingPolicy — określa, w jaki sposób Resource Manager emitować raporty o kondycji dla podklasowania hierarchicznego i częściowego nakładania się. Wartość zero oznacza, że raporty o kondycji dotyczące podklasy są wyłączone, "1" oznacza, że raporty kondycji ostrzeżenia będą generowane dla nieoptymalnych sytuacji podklasowania, a wartość "2" spowoduje wygenerowanie raportów kondycji "OK". Wartość domyślna tego parametru to "1".

ClusterManifest.xml:

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

za pomocą pliku 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