Limitazione del Cluster Resource Manager di Service FabricThrottling the Service Fabric Cluster Resource Manager

Anche se Cluster Resource Manager è stato configurato correttamente, il cluster può essere interrotto.Even if you’ve configured the Cluster Resource Manager correctly, the cluster can get disrupted. Ad esempio potrebbero verificarsi errori simultanei di nodi e di domini di errore. Che cosa succederebbe se ciò si verificasse durante un aggiornamento?For example, there could be simultaneous node and fault domain failures - what would happen if that occurred during an upgrade? Cluster Resource Manager tenta sempre di correggere tutti gli elementi, usando le risorse del cluster nel tentativo di riorganizzare e correggere il cluster.The Cluster Resource Manager always tries to fix everything, consuming the cluster's resources trying to reorganize and fix the cluster. Le limitazioni contribuiscono a creare una barriera in modo che il cluster possa impiegare risorse per stabilizzarsi: vengono ripristinati i nodi, vengono riparate le partizioni di rete e vengono distribuiti i bit corretti.Throttles help provide a backstop so that the cluster can use resources to stabilize - the nodes come back, the network partitions heal, corrected bits get deployed.

Per risolvere questi tipi di situazioni, Cluster Resource Manager di Service Fabric prevede diverse limitazioni.To help with these sorts of situations, the Service Fabric Cluster Resource Manager includes several throttles. Queste limitazioni intervengono tutte in modo piuttosto pesante.These throttles are all fairly large hammers. In genere non devono essere modificate senza una pianificazione e un test accurati.Generally they shouldn’t be changed without careful planning and testing.

Se si modificano le limitazioni di Cluster Resource Manager, è consigliabile ottimizzarle al carico effettivo previsto.If you change the Cluster Resource Manager's throttles, you should tune them to your expected actual load. Potrebbe essere necessario introdurre alcune limitazioni, anche se ciò significa che il cluster impiega più tempo per stabilizzarsi in alcune situazioni.You may determine you need to have some throttles in place, even if it means the cluster takes longer to stabilize in some situations. Il test è obbligatorio per determinare i valori corretti per le limitazioni.Testing is required to determine the correct values for throttles. Le limitazioni devono essere sufficientemente alte in modo da consentire al cluster di rispondere alle modifiche in un intervallo di tempo ragionevole, e sufficientemente basse per impedire effettivamente un eccessivo consumo di risorse.Throttles need to be high enough to allow the cluster to respond to changes in a reasonable amount of time, and low enough to actually prevent too much resource consumption.

Nella maggior parte dei casi è stato notato che i clienti usano delle limitazioni perché si trovavano già in un ambiente dalle risorse limitate.Most of the time we’ve seen customers use throttles it has been because they were already in a resource constrained environment. Alcuni esempi sono una limitata larghezza di banda per singoli nodi o dischi non in grado di compilare molte repliche con stato in parallelo a causa di limiti di velocità effettiva.Some examples would be limited network bandwidth for individual nodes, or disks that aren't able to build many stateful replicas in parallel due to throughput limitations. Senza limitazioni, le operazioni potrebbero sovraccaricare queste risorse, causando l'esito negativo delle operazione o un loro rallentamento.Without throttles, operations could overwhelm these resources, causing operations to fail or be slow. In queste situazioni i clienti usavano delle limitazioni sapevano che il tempo richiesto al cluster per raggiungere uno stato stabile sarebbe stato maggiore.In these situations customers used throttles and knew they were extending the amount of time it would take the cluster to reach a stable state. I clienti inoltre hanno compreso anche che il livello complessivo di affidabilità era inferiore in presenza di limitazioni.Customers also understood they could end up running at lower overall reliability while they were throttled.

Configurazione delle limitazioniConfiguring the throttles

Service Fabric ha due meccanismi per la limitazione del numero di spostamenti della replica.Service Fabric has two mechanisms for throttling the number of replica movements. Il meccanismo predefinito che esisteva prima di Service Fabric 5.7 rappresenta la limitazione come un numero assoluto di spostamenti consentito.The default mechanism that existed before Service Fabric 5.7 represents throttling as an absolute number of moves allowed. Non funziona per i cluster di tutte le dimensioni.This does not work for clusters of all sizes. In particolare, per i cluster di grandi dimensioni il valore predefinito può essere troppo piccolo, rallentando notevolmente il bilanciamento del carico anche quando è necessario, mentre non ha alcun impatto nei cluster più piccoli.In particular, for large clusters the default value can be too small, significantly slowing down balancing even when it is necessary, while having no effect in smaller clusters. Il meccanismo precedentemente descritto è stato sostituito dalla limitazione basata sulla percentuale, che offre una scalabilità migliore con i cluster dinamici in cui il numero di servizi e i nodi cambia regolarmente.This prior mechanism has been superseded by percentage-based throttling, which scales better with dynamic clusters in which the number of services and nodes change regularly.

Le limitazioni sono basate su una percentuale del numero di repliche dei cluster.The throttles are based on a percentage of the number of replicas in the clusters. Le limitazioni basate sulla percentuale abilitano l'espressione della regola: "non spostare più del 10% di repliche in un intervallo di 10 minuti", ad esempio.Percetage based throttles enable expressing the rule: "do not move more than 10% of replicas in a 10 minute interval", for example.

Le impostazioni di configurazione per la limitazione basata sulla percentuale sono:The configuration settings for percentage-based throttling are:

  • GlobalMovementThrottleThresholdPercentage: numero massimo di movimenti consentiti nel cluster in qualsiasi momento, espresso come percentuale del numero totale di repliche del cluster.GlobalMovementThrottleThresholdPercentage - Maximum number of movements allowed in cluster at any time, expressed as percentage of total number of replicas in the cluster. Impostarlo su 0 per non avere limiti.0 indicates no limit. Il valore predefinito è 0.The default value is 0. Se vengono specificati sia l'impostazione sia la GlobalMovementThrottleThreshold, viene usato il limite più conservativo.If both this setting and GlobalMovementThrottleThreshold are specified, then the more conservative limit is used.
  • GlobalMovementThrottleThresholdPercentageForPlacement: numero massimo di movimenti consentiti durante la fase di posizionamento, espresso come percentuale del numero totale di repliche del cluster.GlobalMovementThrottleThresholdPercentageForPlacement - Maximum number of movements allowed during the placement phase, expressed as percentage of total number of replicas in the cluster. Impostarlo su 0 per non avere limiti.0 indicates no limit. Il valore predefinito è 0.The default value is 0. Se vengono specificati sia l'impostazione sia la GlobalMovementThrottleThresholdForPlacement, viene usato il limite più conservativo.If both this setting and GlobalMovementThrottleThresholdForPlacement are specified, then the more conservative limit is used.
  • GlobalMovementThrottleThresholdPercentageForBalancing: numero massimo di movimenti consentiti durante la fase di bilanciamento, espresso come percentuale del numero totale di repliche del cluster.GlobalMovementThrottleThresholdPercentageForBalancing - Maximum number of movements allowed during the balancing phase, expressed as percentage of total number of replicas in the cluster. Impostarlo su 0 per non avere limiti.0 indicates no limit. Il valore predefinito è 0.The default value is 0. Se vengono specificati sia l'impostazione sia la GlobalMovementThrottleThresholdPercentageForBalancing, viene usato il limite più conservativo.If both this setting and GlobalMovementThrottleThresholdForBalancing are specified, then the more conservative limit is used.

Quando si specifica la percentuale di limitazione, è necessario specificare 5% come 0,05.When specifying the throttle percentage, you'd specify 5% as 0.05. L'intervallo in cui vengono gestite queste limitazioni è il GlobalMovementThrottleCountingInterval, che è espresso in secondi.The interval on which these throttles are governed is the GlobalMovementThrottleCountingInterval, which is specified in seconds.

<Section Name="PlacementAndLoadBalancing">
     <Parameter Name="GlobalMovementThrottleThresholdPercentage" Value="0" />
     <Parameter Name="GlobalMovementThrottleThresholdPercentageForPlacement" Value="0" />
     <Parameter Name="GlobalMovementThrottleThresholdPercentageForBalancing" Value="0" />
     <Parameter Name="GlobalMovementThrottleCountingInterval" Value="600" />
</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": "GlobalMovementThrottleThresholdPercentage",
          "value": "0.0"
      },
      {
          "name": "GlobalMovementThrottleThresholdPercentageForPlacement",
          "value": "0.0"
      },
      {
          "name": "GlobalMovementThrottleThresholdPercentageForBalancing",
          "value": "0.0"
      },
      {
          "name": "GlobalMovementThrottleCountingInterval",
          "value": "600"
      }
    ]
  }
]

Limitazioni basate sul conteggio predefinitoDefault count based throttles

Queste informazioni vengono fornite nel caso in cui si disponga di cluster precedenti o si mantengano queste configurazioni in cluster che sono quindi stati aggiornati.This information is provided in case you have older clusters or still retain these configurations in clusters that have since been upgraded. In generale, è consigliabile che queste ultime vengano sostituite con le limitazioni basate su percentuale descritte in precedenza.In general, it is recommended that these are replaced with the percentage-based throttles above. Poiché la limitazione basata su percentuale è disabilitata per impostazione predefinita, queste limitazioni restano le limitazioni predefinite per un cluster finché non vengono disabilitate e sostituite con le limitazioni basate su percentuale.Since percentage-based throttling is disabled by default, these throttles remain the default throttles for a cluster until they are disabled and replaced with the percentage-based throttles.

  • GlobalMovementThrottleThreshold: consente di controllare il numero totale di spostamenti nel cluster in un determinato intervallo di tempo.GlobalMovementThrottleThreshold – this setting controls the total number of movements in the cluster over some time. La quantità di tempo viene specificata in secondi come GlobalMovementThrottleCountingInterval.The amount of time is specified in seconds as the GlobalMovementThrottleCountingInterval. Il valore predefinito per la GlobalMovementThrottleThreshold è 1000 e il valore predefinito per il GlobalMovementThrottleCountingInterval è 600.The default value for the GlobalMovementThrottleThreshold is 1000 and the default value for the GlobalMovementThrottleCountingInterval is 600.
  • MovementPerPartitionThrottleThreshold: consente di controllare il numero totale di spostamenti per qualsiasi partizione di servizio in un determinato intervallo di tempo.MovementPerPartitionThrottleThreshold – this setting controls the total number of movements for any service partition over some time. La quantità di tempo viene specificata in secondi come MovementPerPartitionThrottleCountingInterval.The amount of time is specified in seconds as the MovementPerPartitionThrottleCountingInterval. Il valore predefinito per la MovementPerPartitionThrottleThreshold è 50 e il valore predefinito per il MovementPerPartitionThrottleCountingInterval è 600.The default value for the MovementPerPartitionThrottleThreshold is 50 and the default value for the MovementPerPartitionThrottleCountingInterval is 600.

La configurazione di queste limitazioni segue lo stesso modello delle limitazioni basate su percentuale.The configuration for these throttles follows the same pattern as the percentage-based throttling.

Passaggi successiviNext steps

  • Per informazioni sul modo in cui Cluster Resource Manager gestisce e bilancia il carico nel cluster, vedere l'articolo relativo al bilanciamento del caricoTo find out about how the Cluster Resource Manager manages and balances load in the cluster, check out the article on balancing load
  • Cluster Resource Manager dispone di varie opzioni per descrivere il cluster.The Cluster Resource Manager has many options for describing the cluster. Per altre informazioni a riguardo vedere l'articolo Descrivere un cluster di Service FabricTo find out more about them, check out this article on describing a Service Fabric cluster