Bilanciamento delle metriche sottocluster

Che cos'è il sottoclustering

La sottoclustering si verifica quando i servizi con vincoli di posizionamento diversi hanno una metrica comune e entrambi segnalano il caricamento. Se il carico segnalato dai servizi differisce in modo significativo, il carico totale nei nodi avrà una deviazione standard di grandi dimensioni e sembra che il cluster sia sbilanciato, anche quando ha il migliore equilibrio possibile.

Come il sottoclustering influisce sul bilanciamento del carico

Se il carico segnalato dai servizi in nodi diversi differisce in modo significativo, potrebbe sembrare che vi sia un grande squilibrio in cui non esiste alcuna. Inoltre, se lo squilibrio falso causato dalla sottoclustering è maggiore dello squilibrio effettivo, ha il potenziale di confondere l'algoritmo di bilanciamento Resource Manager e di produrre un equilibrio suboptimal nel cluster.

Ad esempio, si supponga di avere quattro servizi e tutti segnalano un carico per metrica Metric1:

  • Service A: ha un vincolo di posizionamento "NodeType==Frontnd", segnala un carico di 10
  • Service B: ha un vincolo di posizionamento "NodeType==Frontnd", segnala un carico di 10
  • Service C: ha un vincolo di posizionamento "NodeType==Back-end", segnala un carico di 100
  • Service D: ha un vincolo di posizionamento "NodeType==Back-end", segnala un carico di 100
  • E abbiamo quattro nodi. Due di essi hanno NodeType impostato come "Frontend" e gli altri due sono "Back-end"

E abbiamo il posizionamento seguente:

Esempio di posizionamento sottoclustered

Il cluster potrebbe sembrare sbilanciato, è disponibile un carico elevato sui nodi 3 e 4, ma questa posizione crea il migliore equilibrio possibile in questa situazione.

Resource Manager può riconoscere situazioni di sottoclustering e in quasi tutti i casi può produrre l'equilibrio ottimale per la situazione specificata.

Per alcune situazioni eccezionali quando Resource Manager non è in grado di bilanciare in modo ottimale una metrica subcluster, la metrica rileverà comunque il subcluster e genererà un report di integrità per consigliare di risolvere il problema.

Tipi di subclustering e come vengono gestiti

Le situazioni di sottoclustering possono essere classificate in tre categorie diverse. La categoria di una situazione di sottocluster specifica determina come verrà gestita da Resource Manager.

Prima categoria: subcluster flat con gruppi di nodi disgiunti

Questa categoria ha la forma più semplice di sottoclustering in cui i nodi possono essere separati in gruppi diversi e ogni servizio può essere inserito solo nei nodi in uno di questi gruppi. Ogni nodo appartiene a un gruppo e a un solo gruppo. La situazione descritta sopra appartiene a questa categoria come la maggior parte delle situazioni di sottoclustering.

Per le situazioni in questa categoria, l'Resource Manager può produrre l'equilibrio ottimale e non è necessario un ulteriore intervento.

Seconda categoria: sottoclustering con gruppi di nodi gerarchici

Questa situazione si verifica quando un gruppo di nodi consentiti per un servizio è un subset del gruppo di nodi consentiti per un altro servizio. L'esempio più comune di questa situazione è quando alcuni servizi hanno un vincolo di posizionamento definito e un altro servizio non ha alcun vincolo di posizionamento e può essere inserito in qualsiasi nodo.

Esempio:

  • Servizio A: nessun vincolo di posizionamento
  • Service B: vincolo di posizionamento "NodeType==Frontnd"
  • Service C: vincolo di posizionamento "NodeType==Back-end"

Questa configurazione crea una relazione subset-superset tra gruppi di nodi per servizi diversi.

Subset subset subcluster

In questa situazione, c'è la possibilità che venga effettuato un equilibrio suboptimale.

Resource Manager riconoscerà questa situazione e produrrà un report di integrità che consiglia di suddividere il servizio A in due servizi: servizio A1 che può essere posizionato nei nodi Front-end e Service A2 che possono essere posizionati nei nodi back-end. Questo ci fa tornare alla prima situazione di categoria che può essere bilanciata in modo ottimale.

Terza categoria: sottoclustering con sovrapposizione parziale tra set di nodi

Questa situazione si verifica quando si verifica una sovrapposizione parziale tra set di nodi in cui è possibile inserire alcuni servizi.

Ad esempio, se si dispone di una proprietà node denominata NodeColor e sono presenti tre nodi:

  • Nodo 1: NodeColor=Red
  • Nodo 2: NodeColor=Blue
  • Nodo 3: NodeColor=Green

E abbiamo due servizi:

  • Servizio A: con vincolo di posizionamento "Color==Red || Color==Blue"
  • Servizio B: con vincolo di posizionamento "Color==Blue || Color==Verde"

A causa di questo, il servizio A può essere posizionato sui nodi 1 e 2 e il servizio B possono essere posizionati sui nodi 2 e 3.

In questa situazione, c'è la possibilità che venga effettuato un equilibrio suboptimale.

Resource Manager riconoscerà questa situazione e produrrà un report di integrità che consiglia di suddividere alcuni dei servizi.

Per questa situazione, l'Resource Manager non è in grado di dare una proposta come suddividere i servizi, poiché è possibile eseguire più divisioni e non c'è modo di stimare quale sarebbe il modo ottimale per suddividere i servizi.

Configurazione della sottoclustering

Il comportamento di Resource Manager sulla sottoclustering può essere modificato modificando i parametri di configurazione seguenti:

  • SubclusteringEnabled : parametro determina se Resource Manager prenderà in considerazione la sottoclustering durante l'esecuzione del bilanciamento del carico. Se questo parametro viene disattivato, Resource Manager ignorerà il subcluster e tenterà di ottenere un equilibrio ottimale a livello globale. Il valore predefinito di questo parametro è false.
  • SubclusteringReportingPolicy: determina come Resource Manager genererà report di integrità per subcluster gerarchici e parziali. Un valore pari a zero indica che i report di integrità relativi al sottocluster vengono disattivati, "1" significa che i report di integrità verranno generati per situazioni di subcluster non ottimali e un valore di "2" genererà report di integrità "OK". Il valore predefinito per questo parametro è "1".

ClusterManifest.xml:

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

mediante ClusterConfig.json per le distribuzioni autonome o Template.json per i cluster ospitati in Azure:

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

Passaggi successivi