Bilanciamento del carico nel cluster di Service FabricBalancing your service fabric cluster

Cluster Resource Manager di Service Fabric supporta le modifiche al carico dinamico, reagisce all'aggiunta o alla rimozione di nodi o servizi.The Service Fabric Cluster Resource Manager supports dynamic load changes, reacting to additions or removals of nodes or services. Corregge anche automaticamente le violazioni dei vincoli ed esegue in modo proattivo il ribilanciamento del cluster.It also automatically corrects constraint violations, and proactively rebalances the cluster. Ma con quale frequenza vengono eseguite queste azioni, e che cosa le attiva?But how often are these actions taken, and what triggers them?

Sono disponibili tre diverse categorie di lavoro eseguite da Cluster. Resource Manager.There are three different categories of work that the Cluster Resource Manager performs. Sono:They are:

  1. Posizionamento: questa fase riguarda l'inserimento di repliche con stato o istanze senza stato mancanti.Placement – this stage deals with placing any stateful replicas or stateless instances that are missing. Il posizionamento include sia i nuovi servizi sia la gestione di repliche con stato o istanze senza stato non riuscite.Placement includes both new services and handling stateful replicas or stateless instances that have failed. In questa fase viene gestita l'eliminazione di istanze e repliche.Deleting and dropping replicas or instances are handled here.
  2. Verifiche dei vincoli: in questa fase vengono controllate e corrette le violazioni dei vincoli (regole) di posizionamento all'interno del sistema.Constraint Checks – this stage checks for and corrects violations of the different placement constraints (rules) within the system. Le regole servono, ad esempio, per controllare che i nodi non superino la capacità o che i vincoli di posizionamento di un servizio vengano rispettati.Examples of rules are things like ensuring that nodes are not over capacity and that a service’s placement constraints are met.
  3. Bilanciamento del carico: in questa fase viene verificata la necessità di applicare il ribilanciamento sulla base del livello di bilanciamento configurato per le diverse metriche.Balancing – this stage checks to see if rebalancing is necessary based on the configured desired level of balance for different metrics. In tal caso, viene eseguito il tentativo di trovare una disposizione più bilanciata nel cluster.If so it attempts to find an arrangement in the cluster that is more balanced.

Configurazione dei timer di Cluster Resource ManagerConfiguring Cluster Resource Manager Timers

Il primo set di controlli sul bilanciamento del carico sono un set di timer.The first set of controls around balancing are a set of timers. Questi timer controllano la frequenza con cui Cluster Resource Manager esamina il cluster e intraprende le azioni correttive.These timers govern how often the Cluster Resource Manager examines the cluster and takes corrective actions.

Ognuno dei tipi diversi di correzioni che Cluster Resource Manager può apportare è controllato da un timer diverso che ne determina la frequenza.Each of these different types of corrections the Cluster Resource Manager can make is controlled by a different timer that governs its frequency. Quando viene attivato ogni timer, l'attività viene pianificata.When each timer fires, the task is scheduled. Per impostazione predefinita, Resource Manager:By default the Resource Manager:

  • Analizza lo stato e applica gli aggiornamenti, ad esempio la registrazione di un nodo inattivo, ogni decimo di secondo.scans its state and applies updates (like recording that a node is down) every 1/10th of a second
  • imposta il flag di controllo di selezionesets the placement check flag
  • imposta il flag di controllo del vincolo ogni secondosets the constraint check flag every second
  • Imposta il flag di bilanciamento ogni cinque secondi.sets the balancing flag every five seconds.

Di seguito sono riportati alcuni esempi di configurazione che controllano i timer:Examples of the configuration governing these timers are below:

ClusterManifest.xml:ClusterManifest.xml:

        <Section Name="PlacementAndLoadBalancing">
            <Parameter Name="PLBRefreshGap" Value="0.1" />
            <Parameter Name="MinPlacementInterval" Value="1.0" />
            <Parameter Name="MinConstraintCheckInterval" Value="1.0" />
            <Parameter Name="MinLoadBalancingInterval" Value="5.0" />
        </Section>

mediante ClusterConfig.json per le distribuzioni autonome o Template.json per i cluster ospitati in Azure:via ClusterConfig.json for Standalone deployments or Template.json for Azure hosted clusters:

"fabricSettings": [
  {
    "name": "PlacementAndLoadBalancing",
    "parameters": [
      {
          "name": "PLBRefreshGap",
          "value": "0.10"
      },
      {
          "name": "MinPlacementInterval",
          "value": "1.0"
      },
      {
          "name": "MinConstraintCheckInterval",
          "value": "1.0"
      },
      {
          "name": "MinLoadBalancingInterval",
          "value": "5.0"
      }
    ]
  }
]

Oggi Cluster Resource Manager esegue solo una di queste azioni alla volta, in sequenza.Today the Cluster Resource Manager only performs one of these actions at a time, sequentially. Questo è il motivo per cui si fa riferimento a questi timer come "intervalli minimi" e le azioni che vengono eseguite quando il timer viene spente come "flag di impostazione".This is why we refer to these timers as “minimum intervals” and the actions that get taken when the timers go off as "setting flags". Ad esempio, Cluster Resource Manager si occupa delle richieste di creazione di servizi in sospeso prima di bilanciare il carico del cluster.For example, the Cluster Resource Manager takes care of pending requests to create services before balancing the cluster. Come si nota dagli intervalli di tempo predefiniti specificati, Cluster Resource Manager analizza di frequente tutte le attività.As you can see by the default time intervals specified, the Cluster Resource Manager scans for anything it needs to do frequently. In genere, ciò significa che il set di modifiche apportate durante ogni passaggio è piccolo.Normally this means that the set of changes made during each step is small. Le modifiche piccole e frequenti consentono a Cluster Resource Manager di essere sensibile quando ciò si verifica nel cluster.Making small changes frequently allows the Cluster Resource Manager to be responsive when things happen in the cluster. I timer predefiniti eseguono una sorta di divisione in batch, dato che molti degli eventi dello stesso tipo tendono a verificarsi simultaneamente.The default timers provide some batching since many of the same types of events tend to occur simultaneously.

Ad esempio, quando i nodi presentano errori possono procedere con interi domini di errore alla volta.For example, when nodes fail they can do so entire fault domains at a time. Tutti questi errori vengono acquisiti durante il successivo aggiornamento dopo il PLBRefreshGap.All these failures are captured during the next state update after the PLBRefreshGap. Le correzioni vengono determinate durante il posizionamento seguente del controllo del vincolo, e bilanciamento del carico viene eseguito.The corrections are determined during the following placement, constraint check, and balancing runs. Per impostazione predefinita, Cluster Resource Manager non analizza ore di modifiche nel cluster e non tenta di risolvere tutte le modifiche in una sola volta.By default the Cluster Resource Manager is not scanning through hours of changes in the cluster and trying to address all changes at once. Questo potrebbe generare burst di varianza.Doing so would lead to bursts of churn.

Cluster Resource Manager necessita di informazioni aggiuntive per determinare se il cluster è sbilanciato.The Cluster Resource Manager also needs some additional information to determine if the cluster imbalanced. Per gestire questi aspetti sono disponibili due controlli di configurazione: le soglie di bilanciamento e le soglie di attività.For that we have two other pieces of configuration: BalancingThresholds and ActivityThresholds.

Soglie di bilanciamento del caricoBalancing thresholds

Una soglia di bilanciamento del carico è il controllo principale per attivare il ribilanciamento.A Balancing Threshold is the main control for triggering rebalancing. La soglia di bilanciamento del carico per una metrica è espressa con un rapporto.The Balancing Threshold for a metric is a ratio. Se il volume di carico sul nodo più carico diviso per il volume di carico sul nodo meno carico supera il BalancingThresholddella metrica, il cluster viene considerato sbilanciato.If the load for a metric on the most loaded node divided by the amount of load on the least loaded node exceeds that metric's BalancingThreshold, then the cluster is imbalanced. In tal caso, al successivo controllo di Cluster Resource Manager viene attivato il bilanciamento del carico.As a result balancing is triggered the next time the Cluster Resource Manager checks. Il timer MinLoadBalancingInterval definisce la frequenza dei controlli eseguiti da Cluster Resource Manager se è necessario il ribilanciamento.The MinLoadBalancingInterval timer defines how often the Cluster Resource Manager should check if rebalancing is necessary. Controllare non comporta che venga eseguita un'operazione.Checking doesn't mean that anything happens.

Le soglie di bilanciamento del carico sono definite sulla base delle singole metriche nell'ambito della definizione del cluster.Balancing Thresholds are defined on a per-metric basis as a part of the cluster definition. Per altre informazioni sulle metriche, vedere questo articolo.For more information on metrics, check out this article.

ClusterManifest.xmlClusterManifest.xml

    <Section Name="MetricBalancingThresholds">
      <Parameter Name="MetricName1" Value="2"/>
      <Parameter Name="MetricName2" Value="3.5"/>
    </Section>

mediante ClusterConfig.json per le distribuzioni autonome o Template.json per i cluster ospitati in Azure:via ClusterConfig.json for Standalone deployments or Template.json for Azure hosted clusters:

"fabricSettings": [
  {
    "name": "MetricBalancingThresholds",
    "parameters": [
      {
          "name": "MetricName1",
          "value": "2"
      },
      {
          "name": "MetricName2",
          "value": "3.5"
      }
    ]
  }
]

Esempio di soglia di bilanciamento
Balancing Threshold Example

In questo esempio ogni servizio usa una unità di una metrica.In this example, each service is consuming one unit of some metric. Nell'esempio in alto il carico massimo su un nodo è cinque e il carico minimo è due.In the top example, the maximum load on a node is five and the minimum is two. Si supponga che la soglia di bilanciamento del carico per questa metrica sia tre.Let’s say that the balancing threshold for this metric is three. Dato che il rapporto nel cluster è 5/2 = 2,5 e che tale cifra è inferiore al valore tre della soglia di bilanciamento, il cluster è bilanciato.Since the ratio in the cluster is 5/2 = 2.5 and that is less than the specified balancing threshold of three, the cluster is balanced. In tal caso, al successivo controllo di Cluster Resource Manager non viene attivato alcun bilanciamento del carico.No balancing is triggered when the Cluster Resource Manager checks.

Nell'esempio in basso il carico massimo su un nodo è 10, mentre il carico minimo è due. Il rapporto è quindi pari a cinque.In the bottom example, the maximum load on a node is 10, while the minimum is two, resulting in a ratio of five. Cinque è superiore alla soglia di bilanciamento del carico designata di tre per tale metrica.Five is greater than the designated balancing threshold of three for that metric. Di conseguenza, all'attivazione successiva del timer di bilanciamento del carico verrà pianificato un ribilanciamento.As a result, a rebalancing run will be scheduled next time the balancing timer fires. In una situazione come questa, parte del carico viene in genere distribuito nel nodo 3.In a situation like this some load is usually distributed to Node3. Poiché Cluster Resource Manager di Service Fabric non usa un approccio greedy, parte del carico potrebbe essere distribuita anche nel nodo 2.Because the Service Fabric Cluster Resource Manager doesn't use a greedy approach, some load could also be distributed to Node2.

Azioni sull'esempio di soglia di bilanciamento
Balancing Threshold Example Actions

Nota

Il "Bilanciamento" gestisce due diverse strategie per gestire il carico nel cluster."Balancing" handles two different strategies for managing load in your cluster. La strategia predefinita usata da Cluster Resource Manager consiste nel distribuire il carico tra i nodi del cluster.The default strategy that the Cluster Resource Manager uses is to distribute load across the nodes in the cluster. L'altra strategia è la deframmentazione.The other strategy is defragmentation. La deframmentazione viene eseguita durante l'esecuzione dello stesso bilanciamento.Defragmentation is performed during the same balancing run. Le strategie di bilanciamento e deframmentazione possono essere usate per metriche diverse all'interno dello stesso cluster.The balancing and defragmentation strategies can be used for different metrics within the same cluster. Un servizio può disporre di metriche di bilanciamento e di deframmentazione.A service can have both balancing and defragmentation metrics. Per la metrica di deframmentazione, il rapporto dei carichi nel cluster attiva in questo caso il ribilanciamento quando è al di sotto della soglia di bilanciamento.For defragmentation metrics, the ratio of the loads in the cluster triggers rebalancing when it is below the balancing threshold.

Rimanere sotto la soglia di bilanciamento del carico non è un obiettivo esplicito.Getting below the balancing threshold is not an explicit goal. Le soglie di bilanciamento sono semplicemente un trigger.Balancing Thresholds are just a trigger. Quando viene eseguito il bilanciamento, Cluster Resource Manager determina quali miglioramenti può apportare, se ve ne sono.When balancing runs, the Cluster Resource Manager determines what improvements it can make, if any. Il fatto che venga avviata una ricerca di bilanciamento non significa che vengano spostati degli elementi.Just because a balancing search is kicked off doesn't mean anything moves. A volte il cluster non è bilanciato ma è troppo limitato per essere corretto.Sometimes the cluster is imbalanced but too constrained to correct. In alternativa, i miglioramenti richiedono dei movimenti che sono troppo costosi).Alternatively, the improvements require movements that are too costly).

soglie di attivitàActivity thresholds

A volte, sebbene i nodi siano relativamente sbilanciati, la quantità totale di carico nel cluster è bassa.Sometimes, although nodes are relatively imbalanced, the total amount of load in the cluster is low. La mancanza di carico può essere dovuta a un calo temporaneo o al fatto che il cluster è nuovo ed è stato avviato da poco.The lack of load could be a transient dip, or because the cluster is new and just getting bootstrapped. In entrambi i casi non è consigliabile perdere tempo con il bilanciamento del carico del cluster perché i risultati non sarebbero soddisfacenti.In either case, you may not want to spend time balancing the cluster because there’s little to be gained. Se il carico del cluster è stato bilanciato, si perderebbero risorse di rete e di calcolo per spostamenti che non farebbero grandi differenze.If the cluster underwent balancing, you’d spend network and compute resources to move things around without making any large absolute difference. Per evitare movimenti non necessari, è disponibile un altro controllo noto come Soglie di attività.To avoid unnecessary moves, there’s another control known as Activity Thresholds. Le soglie di attività consentono di specificare un limite inferiore assoluto per l'attività.Activity Thresholds allows you to specify some absolute lower bound for activity. Se nessun nodo supera tale soglia, il bilanciamento del carico non viene attivato neanche se viene raggiunta la soglia di bilanciamento.If no node is over this threshold, balancing isn't triggered even if the Balancing Threshold is met.

Si supponga che abbiamo mantenuto la soglia di bilanciamento su tre per questa metrica.Let’s say that we retain our Balancing Threshold of three for this metric. Si supponga anche che sia disponibile una Soglia di attività di 1536.Let's also say we have an Activity Threshold of 1536. Nel primo caso il cluster è sbilanciato in base alla soglia di bilanciamento, ma nessun nodo raggiunge la soglia di attività, quindi non viene eseguita alcuna azione.In the first case, while the cluster is imbalanced per the Balancing Threshold there's no node meets that Activity Threshold, so nothing happens. Nell'esempio in basso il nodo 1 supera la Soglia di attività.In the bottom example, Node1 is over the Activity Threshold. Dato che vengono superate sia la soglia di bilanciamento che la soglia di attività per la metrica, viene pianificato un bilanciamento del carico.Since both the Balancing Threshold and the Activity Threshold for the metric are exceeded, balancing is scheduled. Ad esempio, si veda il diagramma seguente:As an example, let's look at the following diagram:

Esempio di soglia di attività
Activity Threshold Example

Proprio come le soglie di bilanciamento del carico, le soglie di attività sono definite sulla base di singoli metriche tramite la definizione del cluster:Just like Balancing Thresholds, Activity Thresholds are defined per-metric via the cluster definition:

ClusterManifest.xmlClusterManifest.xml

    <Section Name="MetricActivityThresholds">
      <Parameter Name="Memory" Value="1536"/>
    </Section>

Tramite ClusterConfig.json per le distribuzioni autonome o Template.json per cluster ospitati in Azure:via ClusterConfig.json for Standalone deployments or Template.json for Azure hosted clusters:

"fabricSettings": [
  {
    "name": "MetricActivityThresholds",
    "parameters": [
      {
          "name": "Memory",
          "value": "1536"
      }
    ]
  }
]

Si noti che le soglie di bilanciamento e di attività sono entrambe legate a una metrica specifica. Il bilanciamento del carico viene attivato solo se vengono superate entrambe le soglie di bilanciamento e di attività per la stessa metrica.Balancing and activity thresholds are both tied to a specific metric - balancing is triggered only if both the Balancing Threshold and Activity Threshold is exceeded for the same metric.

Nota

Se omessa, la soglia di bilanciamento del carico per una metrica è 1, mentre la soglia di attività è 0.When not specified, the Balancing Threshold for a metric is 1, and the Activity Threshold is 0. Ciò significa che Cluster Resource Manager tenterà di mantenere tale metrica perfettamente bilanciata per un determinato carico.This means that the Cluster Resource Manager will try to keep that metric perfectly balanced for any given load. Se si usano metriche personalizzate, è consigliabile definire le soglie di bilanciamento del carico e delle attività in modo esplicito per le metriche.If you are using custom metrics it is recommended that you explicitly define your own balancing and activity thresholds for your metrics.

Bilanciamento composto dei serviziBalancing services together

Che il cluster sia bilanciato o no è una decisione a livello di cluster.Whether the cluster is imbalanced or not is a cluster-wide decision. Viene, tuttavia, corretto spostando le singole repliche e le istanze dei servizi.However, the way we go about fixing it is moving individual service replicas and instances around. Questo approccio ha senso, giusto?This makes sense, right? Uno stack di memoria in un nodo può ricevere contributi da più repliche o istanze.If memory is stacked up on one node, multiple replicas or instances could be contributing to it. Per correggere lo sbilanciamento potrebbe essere necessario spostare una delle repliche con stato o delle istanze senza stato che usano la metrica sbilanciata.Fixing the imbalance could require moving any of the stateful replicas or stateless instances that use the imbalanced metric.

In alcuni casi però viene spostato un servizio che non era sbilanciato (ricordare la discussione precedente relativa ai pesi locali e globali).Occasionally though, a service that wasn’t itself imbalanced gets moved (remember the discussion of local and global weights earlier). Per quale motivo si dovrebbe spostare un servizio quando tutte le metriche di quel servizio sono state bilanciate?Why would a service get moved when all that service’s metrics were balanced? Di seguito viene illustrato un esempio:Let’s see an example:

  • Si supponga di avere quattro servizi: Service1, Service2, Service3 e Service4.Let's say there are four services, Service1, Service2, Service3, and Service4.
  • Service1 riporta le metriche Metric1 e Metric2.Service1 reports metrics Metric1 and Metric2.
  • Service2 riporta le metriche Metric2 e Metric3.Service2 reports metrics Metric2 and Metric3.
  • Service3 riporta le metriche Metric3 e Metric4.Service3 reports metrics Metric3 and Metric4.
  • Service4 riporta la metrica Metric99.Service4 reports metric Metric99.

Sicuramente è già possibile intravedere una spiegazione: la catena.Surely you can see where we’re going here: There's a chain! Non ci sono quattro servizi indipendenti, ma tre servizi correlati tra loro e uno autonomo.We don’t really have four independent services, we have three services that are related and one that is off on its own.

Bilanciamento composto dei servizi
Balancing Services Together

A causa di questa catena, è possibile che uno squilibrio nelle metriche 1-4 provochi lo spostamento di repliche o istanze appartenenti ai servizi 1-3.Because of this chain, it's possible that an imbalance in metrics 1-4 can cause replicas or instances belonging to services 1-3 to move around. Sappiamo anche che uno sbilanciamento delle metriche 1, 2 o 3 non può comportare movimenti in Service4.We also know that an imbalance in Metrics 1, 2, or 3 can't cause movements in Service4. Non sarebbero di alcuna utilità, dato che lo spostamento di repliche o istanze appartenenti a Service4 non influirebbe in alcun modo sul bilanciamento delle metriche 1-3.There would be no point since moving the replicas or instances belonging to Service4 around can do absolutely nothing to impact the balance of Metrics 1-3.

Cluster Resource Manager determina automaticamente i servizi correlati.The Cluster Resource Manager automatically figures out what services are related. Aggiungere, rimuovere o modificare le metriche per i servizi può influire sulle relative relazioni.Adding, removing, or changing the metrics for services can impact their relationships. Ad esempio, tra due esecuzioni di bilanciamento del carico, Service2 potrebbe essere stato aggiornato per rimuovere Metric2.For example, between two runs of balancing Service2 may have been updated to remove Metric2. Questa operazione interrompe la catena tra Service1 e Service2.This breaks the chain between Service1 and Service2. Ora, invece di due gruppi di servizi correlati ce ne sono tre:Now instead of two groups of related services, there are three:

Bilanciamento composto dei servizi
Balancing Services Together

Passaggi successiviNext steps

  • Le metriche determinano il modo in cui Cluster Resource Manger di Service Fabric gestisce il consumo e la capacità del cluster.Metrics are how the Service Fabric Cluster Resource Manger manages consumption and capacity in the cluster. Per altre informazioni sulle metriche e su come configurarle, vedere questo articoloTo learn more about metrics and how to configure them, check out this article
  • Il costo dello spostamento è un modo per segnalare a Cluster Resource Manager che alcuni servizi sono più costosi da spostare rispetto ad altri.Movement Cost is one way of signaling to the Cluster Resource Manager that certain services are more expensive to move than others. Per altre informazioni sui costi di spostamento, vedere questo articolo.For more about movement cost, refer to this article
  • Cluster Resource Manager dispone di diverse limitazioni da configurare per rallentare la varianza del cluster.The Cluster Resource Manager has several throttles that you can configure to slow down churn in the cluster. Queste limitazioni non sono in genere necessarie, ma sono eventualmente disponibili altre informazioni quiThey're not normally necessary, but if you need them you can learn about them here