Costo di spostamento dei serviziService movement cost

Un fattore preso in considerazione da Cluster Resource Manager di Service Fabric nel tentativo di determinare le modifiche da apportare a un cluster è il costo di tali modifiche.A factor that the Service Fabric Cluster Resource Manager considers when trying to determine what changes to make to a cluster is the cost of those changes. Il concetto di "costo" viene compensato sulla base di quanto il cluster può essere migliorato.The notion of "cost" is traded off against how much the cluster can be improved. Il factoring del costo avviene durante lo spostamento di servizi di bilanciamento del carico, la deframmentazione e altri requisiti.Cost is factored in when moving services for balancing, defragmentation, and other requirements. L'obiettivo è soddisfare i requisiti nel modo meno problematico o costoso.The goal is to meet the requirements in the least disruptive or expensive way.

Lo spostamento dei servizi comporta costi, come minimo in termini di tempo della CPU e ampiezza di banda della rete.Moving services costs CPU time and network bandwidth at a minimum. Per i servizi con stato, è necessario copiare lo stato di tali servizi, consumando disco e memoria aggiuntivi.For stateful services, it requires copying the state of those services, consuming additional memory and disk. La riduzione del costo delle soluzioni offerta da Cluster Resource Manager di Azure Service Fabric contribuisce a garantire che le risorse del cluster non vengono usate inutilmente.Minimizing the cost of solutions that the Azure Service Fabric Cluster Resource Manager comes up with helps ensure that the cluster's resources aren't spent unnecessarily. Ma non bisogna neppure ignorare le soluzioni in grado di migliorare significativamente l'allocazione delle risorse del cluster.However, you also don’t want to ignore solutions that would significantly improve the allocation of resources in the cluster.

Cluster Resource Manager prevede due modalità di calcolo dei costi e del relativo contenimento quando tenta di gestire il cluster.The Cluster Resource Manager has two ways of computing costs and limiting them while it tries to manage the cluster. Il primo meccanismo è semplicemente il conteggio ogni spostamento che verrebbe eseguito.The first mechanism is simply counting every move that it would make. Se due soluzioni vengono generate in modo bilanciato, ovvero con un punteggio analogo, Cluster Resource Manager sceglie quella con il costo minore (numero totale degli spostamenti).If two solutions are generated with about the same balance (score), then the Cluster Resource Manager prefers the one with the lowest cost (total number of moves).

Questa strategia funziona bene.This strategy works well. Ma come con i carichi predefiniti o statici, è improbabile che in qualsiasi sistema complesso tutti gli spostamenti siano uguali.But as with default or static loads, it's unlikely in any complex system that all moves are equal. Alcuni possono risultare molto più costosi.Some are likely to be much more expensive.

Impostazione dei costi di spostamentoSetting Move Costs

È possibile specificare il costo predefinito degli spostamenti di un servizio al momento della creazione:You can specify the default move cost for a service when it is created:

PowerShell:PowerShell:

New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName –Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton -DefaultMoveCost Medium

C#:C#:

FabricClient fabricClient = new FabricClient();
StatefulServiceDescription serviceDescription = new StatefulServiceDescription();
//set up the rest of the ServiceDescription
serviceDescription.DefaultMoveCost = MoveCost.Medium;
await fabricClient.ServiceManager.CreateServiceAsync(serviceDescription);

È anche possibile specificare o aggiornare in modo dinamico MoveCost per un servizio dopo averlo creato:You can also specify or update MoveCost dynamically for a service after the service has been created:

PowerShell:PowerShell:

Update-ServiceFabricService -Stateful -ServiceName "fabric:/AppName/ServiceName" -DefaultMoveCost High

C#:C#:

StatefulServiceUpdateDescription updateDescription = new StatefulServiceUpdateDescription();
updateDescription.DefaultMoveCost = MoveCost.High;
await fabricClient.ServiceManager.UpdateServiceAsync(new Uri("fabric:/AppName/ServiceName"), updateDescription);

Specificare in modo dinamico il costo di spostamento su base di replicaDynamically specifying move cost on a per-replica basis

I precedenti frammenti di codice sono tutti per la specifica di MoveCost contemporaneamente per un intero servizio all'esterno del servizio stesso.The preceding snippets are all for specifying MoveCost for a whole service at once from outside the service itself. Tuttavia, il costo di spostamento è maggiormente utile quando questo cambia per un servizio specifico durante la sua durata.However, move cost is most useful is when the move cost of a specific service object changes over its lifespan. Poiché i servizi stessi sono a conoscenza del costo del loro spostamento in un determinato momento, è disponibile un'API per i servizi che notifica i singoli costi di spostamento in fase di runtime.Since the services themselves probably have the best idea of how costly they are to move a given time, there's an API for services to report their own individual move cost during runtime.

C#:C#:

this.Partition.ReportMoveCost(MoveCost.Medium);

Impatto del costo di spostamentoImpact of move cost

MoveCost ha quattro livelli: Zero, Low, Medium e High.MoveCost has four levels: Zero, Low, Medium, and High. Ad eccezione del livello Zero, tali livelli sono correlati.MoveCosts are relative to each other, except for Zero. Se un costo di spostamento è di livello Zero, significa che lo spostamento è gratuito e non deve influire sul punteggio della soluzione.Zero move cost means that movement is free and should not count against the score of the solution. L'impostazione del costo di spostamento su High non garantisce che la replica rimanga in un'unica posizione.Setting your move cost to High does not guarantee that the replica stays in one place.

Costo di spostamento come fattore da considerare per la selezione delle repliche da spostare
Move cost as a factor in selecting replicas for movement

MoveCost consente di trovare le soluzioni che causano un'interruzione complessivamente minima e che sono più facili da realizzare garantendo allo stesso tempo un bilanciamento equivalente.MoveCost helps you find the solutions that cause the least disruption overall and are easiest to achieve while still arriving at equivalent balance. Il concetto di costo di un servizio può essere correlato a molti aspetti.A service’s notion of cost can be relative to many things. I fattori più comuni per il calcolo del costo di spostamento sono:The most common factors in calculating your move cost are:

  • La quantità di stato o dati che il servizio deve spostare.The amount of state or data that the service has to move.
  • Il costo di disconnessione dei client.The cost of disconnection of clients. Lo spostamento di una replica primaria è solitamente più costoso dello spostamento di una replica secondaria.Moving a primary replica is usually more costly than the cost of moving a secondary replica.
  • Il costo di interruzione di un'operazione in corso.The cost of interrupting an in-flight operation. Alcune operazioni a livello di archivio dati o operazioni eseguite in risposta a una chiamata del client sono costose.Some operations at the data store level or operations performed in response to a client call are costly. Dopo un certo punto è preferibile non arrestarle se non è indispensabile.After a certain point, you don’t want to stop them if you don’t have to. Durante l'esecuzione dell'operazione, aumentare il costo di spostamento di questo oggetto del servizio per ridurre la probabilità che si sposti.So while the operation is going on, you increase the move cost of this service object to reduce the likelihood that it moves. Al termine dell'operazione, reimpostare il costo sul valore normale.When the operation is done, you set the cost back to normal.

Abilitazione del costo di spostamento del clusterEnabling move cost in your cluster

Per considerare il MoveCosts più granulare, è necessario abilitare MoveCost nel cluster.In order for the more granular MoveCosts to be taken into account, MoveCost must be enabled in your cluster. Senza questa impostazione, viene usata la modalità predefinita per conteggio degli spostamenti per calcolare MoveCost e i report di MoveCost vengono ignorati.Without this setting, the default mode of counting moves is used for calculating MoveCost, and MoveCost reports are ignored.

ClusterManifest.xml:ClusterManifest.xml:

        <Section Name="PlacementAndLoadBalancing">
            <Parameter Name="UseMoveCostReports" Value="true" />
        </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": "UseMoveCostReports",
          "value": "true"
      }
    ]
  }
]

Passaggi successiviNext steps