Condividi tramite


Bilanciamento delle metriche sottoclustere

Che cos'è il sottoclustering

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

Impatto del sottoclustering sul bilanciamento del carico

Se il carico segnalato dai servizi in nodi diversi differisce in modo significativo, può sembrare che ci sia uno squilibrio elevato in cui non c'è nessuno. Inoltre, se lo squilibrio falso causato dal sottoclustering è maggiore dello squilibrio effettivo, può confondere l'algoritmo di bilanciamento di Resource Manager e produrre un equilibrio non ottimale nel cluster.

Si supponga, ad esempio, di avere quattro servizi e di segnalare tutti un carico per metrica Metric1:

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

E abbiamo il posizionamento seguente:

Esempio di posizionamento sottoclustered

Il cluster potrebbe sembrare sbilanciato, abbiamo un carico elevato sui nodi 3 e 4, ma questo posizionamento crea il miglior 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 in cui Resource Manager non è in grado di bilanciare in modo ottimale una metrica sottoclustera, rileverà comunque il sottoclustering e genererà un report sull'integrità per consigliare di risolvere il problema.

Tipi di sottoclustering e modalità di gestione

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

Prima categoria: sottoclustering flat con gruppi di nodi non contigui

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 in nodi in uno di questi gruppi. Ogni nodo appartiene a un gruppo e a un solo gruppo. La situazione descritta in precedenza appartiene a questa categoria, come la maggior parte delle situazioni di sottoclustering.

Per le situazioni in questa categoria, Resource Manager può produrre il bilanciamento ottimale e non è necessario alcun intervento aggiuntivo.

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 vincoli di posizionamento e può essere inserito in qualsiasi nodo.

Esempio:

  • Servizio A: nessun vincolo di posizionamento
  • Service B: vincolo di posizionamento "NodeType==Frontend"
  • Service C: vincolo di posizionamento "NodeType==Backend"

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

Subset superset subclusters

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

Resource Manager riconosce questa situazione e genera un report sull'integrità che consiglia di suddividere il servizio A in due servizi: servizio A1 che può essere posizionato nei nodi front-end e servizio A2 che possono essere posizionati nei nodi back-end. Questo ci riporta alla situazione di prima 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 posizionare alcuni servizi.

Ad esempio, se è disponibile 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"

Per questo motivo, il servizio A può essere posizionato nei nodi 1 e 2 e il servizio B può essere posizionato nei nodi 2 e 3.

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

Resource Manager riconosce questa situazione e genera un report sull'integrità che consiglia di suddividere alcuni dei servizi.

Per questa situazione, Resource Manager non è in grado di fornire una proposta come suddividere i servizi, poiché è possibile eseguire più divisioni e non è possibile stimare il modo migliore per suddividere i servizi.

Configurazione del sottoclustering

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

  • SubclusteringEnabled : il parametro determina se Resource Manager terrà conto del sottoclustering durante il bilanciamento del carico. Se questo parametro è disattivato, Resource Manager ignorerà il sottoclustering 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 sottoclustering gerarchico e parziale. Un valore pari a zero indica che i report sull'integrità relativi al sottoclustering sono disattivati, "1" indica che i report di integrità degli avvisi verranno generati per situazioni di sottoclustering non ottimali e il valore "2" produrrà 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