Taakverdeling van metrische gegevens in subclusters
Wat is subclustering?
Subclustering treedt op wanneer services met verschillende plaatsingsbeperkingen een algemene metrische waarde hebben en beide rapportbelastingen hiervoor rapporteren. Als de belasting die door de services wordt gerapporteerd aanzienlijk verschilt, heeft de totale belasting op de knooppunten een grote standaarddeviatie en lijkt het alsof het cluster onevenwicht is, zelfs wanneer het de best mogelijke balans heeft.
Hoe subclustering van invloed is op taakverdeling
Als de belasting die door de services op verschillende knooppunten wordt gerapporteerd aanzienlijk verschilt, kan het lijken alsof er een grote onevenwichtigheid is wanneer er geen is. Als de onwaar-onevenwichtigheid die wordt veroorzaakt door subclustering groter is dan de werkelijke onevenwichtigheid, is het mogelijk om het Resource Manager-taakverdelingsalgoritme te verwarren en om een suboptimaal evenwicht in het cluster te produceren.
Stel dat we vier services hebben en dat ze allemaal een belasting rapporteren voor metrische metrische gegevens1:
- Service A: heeft een plaatsingsbeperking "NodeType===Frontend", rapporteert een belasting van 10
- Service B: heeft een plaatsingsbeperking "NodeType===Frontend", rapporteert een belasting van 10
- Service C: heeft een plaatsingsbeperking "NodeType==Backend", rapporteert een belasting van 100
- Service D: heeft een plaatsingsbeperking "NodeType===Backend", rapporteert een belasting van 100
- En we hebben vier knooppunten. Twee van hen hebben NodeType ingesteld als 'Front-end' en de andere twee zijn 'Back-end'
En we hebben de volgende plaatsing:
Het cluster ziet er mogelijk niet uit, we hebben een grote belasting op knooppunten 3 en 4, maar deze plaatsing zorgt voor het best mogelijke evenwicht in deze situatie.
Resource Manager kan subclustersituaties herkennen en in bijna alle gevallen kan het optimale evenwicht voor de opgegeven situatie opleveren.
In uitzonderlijke situaties waarin Resource Manager een metrische subclusterwaarde niet optimaal kan verdelen, wordt er nog steeds subclustering gedetecteerd en wordt er een statusrapport gegenereerd om u te adviseren het probleem op te lossen.
Typen subclustering en hoe ze worden verwerkt
Subclusteringssituaties kunnen worden geclassificeerd in drie verschillende categorieën. De categorie van een specifieke subclusteringssituatie bepaalt hoe deze wordt verwerkt door Resource Manager.
Eerste categorie: platte subclustering met niet-aaneengesloten knooppuntgroepen
Deze categorie heeft de eenvoudigste vorm van subclustering waarbij knooppunten kunnen worden gescheiden in verschillende groepen en elke service alleen op knooppunten in een van deze groepen kan worden geplaatst. Elk knooppunt behoort tot één groep en slechts één groep. De hierboven beschreven situatie behoort in deze categorie tot de meeste subclustersituaties.
Voor de situaties in deze categorie kan Resource Manager het optimale evenwicht produceren en is er geen verdere interventie nodig.
Tweede categorie: subclustering met hiërarchische knooppuntgroepen
Deze situatie treedt op wanneer een groep knooppunten die voor de ene service zijn toegestaan, een subset is van de groep knooppunten die zijn toegestaan voor een andere service. Het meest voorkomende voorbeeld van deze situatie is wanneer een bepaalde service een plaatsingsbeperking heeft gedefinieerd en een andere service geen plaatsingsbeperking heeft en op elk knooppunt kan worden geplaatst.
Voorbeeld:
- Service A: geen plaatsingsbeperking
- Service B: plaatsingsbeperking "NodeType===Frontend"
- Service C: plaatsingsbeperking "NodeType==Backend"
Met deze configuratie maakt u een subset-supersetrelatie tussen knooppuntgroepen voor verschillende services.
In deze situatie is er een kans dat er een suboptimaal saldo wordt gemaakt.
Resource Manager herkent deze situatie en produceert een statusrapport dat u adviseert service A op te splitsen in twee services: Service A1 die kan worden geplaatst op front-endknooppunten en service A2 die op back-endknooppunten kunnen worden geplaatst. Dit brengt ons terug naar de eerste categoriesituatie die optimaal in balans kan worden gebracht.
Derde categorie: subclustering met gedeeltelijke overlap tussen knooppuntsets
Deze situatie treedt op wanneer er een gedeeltelijke overlap is tussen sets knooppunten waarop sommige services kunnen worden geplaatst.
Als we bijvoorbeeld een knooppunteigenschap hebben met de naam NodeColor en we hebben drie knooppunten:
- Knooppunt 1: NodeColor=Rood
- Knooppunt 2: NodeColor=Blauw
- Knooppunt 3: NodeColor=Groen
En we hebben twee services:
- Service A: met plaatsingsbeperking "Color==Red || Color==Blauw"
- Service B: met plaatsingsbeperking "Color==Blue || Color==Groen"
Daarom kan Service A worden geplaatst op knooppunten 1 en 2 en service B op knooppunten 2 en 3.
In deze situatie is er een kans dat er een suboptimaal saldo wordt gemaakt.
Resource Manager herkent deze situatie en produceert een gezondheidsrapport waarin u wordt geadviseerd om een aantal services op te splitsen.
In deze situatie kan Resource Manager geen voorstel doen voor het splitsen van de services, omdat er meerdere splitsingen kunnen worden uitgevoerd en er geen manier is om te schatten welke manier het optimale is om de services te splitsen.
Subclustering configureren
Het gedrag van Resource Manager over subclustering kan worden gewijzigd door de volgende configuratieparameters te wijzigen:
- SubclusteringEnabled - parameter bepaalt of Resource Manager rekening houdt met subclustering bij het uitvoeren van taakverdeling. Als deze parameter is uitgeschakeld, negeert Resource Manager subclustering en probeert het optimale evenwicht te bereiken op globaal niveau. De standaardwaarde van deze parameter is onwaar.
- SubclusteringReportingPolicy - bepaalt hoe Resource Manager statusrapporten verzendt voor hiërarchische en gedeeltelijke overlap subclustering. Een waarde van nul betekent dat statusrapporten over subclustering zijn uitgeschakeld, '1' betekent dat waarschuwingsstatusrapporten worden geproduceerd voor suboptimale subclusteringsituaties en een waarde van '2' zal 'OK' statusrapporten opleveren. De standaardwaarde voor deze parameter is '1'.
ClusterManifest.xml:
<Section Name="PlacementAndLoadBalancing">
<Parameter Name="SubclusteringEnabled" Value="true" />
<Parameter Name="SubclusteringReportingPolicy" Value="1" />
</Section>
via ClusterConfig.json voor zelfstandige implementaties of Template.json voor gehoste Azure-clusters:
"fabricSettings": [
{
"name": "PlacementAndLoadBalancing",
"parameters": [
{
"name": "SubclusteringEnabled",
"value": "true"
},
{
"name": "SubclusteringReportingPolicy",
"value": "1"
},
]
}
]
Volgende stappen
- Raadpleeg het artikel over taakverdeling
- Zie Knooppunteigenschappen en plaatsingsbeperkingen voor meer informatie over hoe uw services kunnen worden beperkt om alleen op bepaalde knooppunten te worden geplaatst