Gestione dell'utilizzo delle risorse e del carico in Service Fabric con le metricheManaging resource consumption and load in Service Fabric with metrics

Con metriche si intendono le risorse rilevanti per i servizi, che sono fornite dai nodi nel cluster.Metrics are the resources that your services care about and which are provided by the nodes in the cluster. Una metrica è un qualsiasi elemento che si vuole gestire per controllare o migliorare le prestazioni dei servizi.A metric is anything that you want to manage in order to improve or monitor the performance of your services. Ad esempio, è possibile osservare il consumo di memoria per capire se il servizio è sovraccarico.For example, you might watch memory consumption to know if your service is overloaded. Le metriche possono essere usate per determinare se il servizio può essere spostato in un'altra posizione con memoria meno vincolata, per ottenere prestazioni migliori.Another use is to figure out whether the service could move elsewhere where memory is less constrained in order to get better performance.

Sono metriche, ad esempio, l'utilizzo della CPU, della memoria e dei dischi.Things like Memory, Disk, and CPU usage are examples of metrics. In questo caso si tratta di metriche fisiche, ovvero risorse che corrispondono alle risorse fisiche nel nodo e che devono essere gestite.These metrics are physical metrics, resources that correspond to physical resources on the node that need to be managed. Le metriche possono anche essere logiche e in genere sono di questo tipo.Metrics can also be (and commonly are) logical metrics. Sono metriche logiche, ad esempio, "MyWorkQueueDepth", "MessagesToProcess" e "TotalRecords".Logical metrics are things like “MyWorkQueueDepth” or "MessagesToProcess" or "TotalRecords". Le metriche logiche sono definite dall'applicazione e corrispondono indirettamente al consumo di alcune risorse fisiche.Logical metrics are application-defined and indirectly correspond to some physical resource consumption. Sono comuni in quanto può essere difficile misurare e creare report sul consumo delle risorse fisiche per ogni servizio.Logical metrics are common because it can be hard to measure and report consumption of physical resources on a per-service basis. La complessità della misurazione e della creazione di report delle metriche è anche il motivo per cui in Service Fabric vengono fornite alcune metriche predefinite.The complexity of measuring and reporting your own physical metrics is also why Service Fabric provides some default metrics.

Metriche predefiniteDefault metrics

Si supponga che si desideri iniziare a scrivere e a distribuire il servizio.Let’s say that you want to get started writing and deploying your service. Ancora non si conoscono le risorse fisiche o logiche che il servizio consuma.At this point you don’t know what physical or logical resources it consumes. Questo approccio non presenta problemi.That’s fine! Cluster Resource Manager di Service Fabric usa alcune metriche predefinite quando non vengono specificate altre metriche.The Service Fabric Cluster Resource Manager uses some default metrics when no other metrics are specified. Sono:They are:

  • PrimaryCount - Numero di repliche primarie nel nodoPrimaryCount - count of Primary replicas on the node
  • ReplicaCount - Numero di repliche con stato totali nel nodoReplicaCount - count of total stateful replicas on the node
  • Count - Numero di oggetti servizio (con e senza stato) nel nodoCount - count of all service objects (stateless and stateful) on the node
MetricaMetric Carico di istanza senza statoStateless Instance Load Carico secondario con statoStateful Secondary Load Carico primario con statoStateful Primary Load
PrimaryCountPrimaryCount 00 00 11
ReplicaCountReplicaCount 00 11 11
NumeroCount 11 11 11

Per i carichi di lavoro di base, le metriche predefinite forniscono una distribuzione ragionevole del lavoro nel cluster.For basic workloads, the default metrics provide a decent distribution of work in the cluster. L'esempio seguente illustra che cosa accade quando si creano due servizi e ci si affida alle metriche predefinite per il bilanciamento.In the following example, let’s see what happens when we create two services and rely on the default metrics for balancing. Il primo è un servizio con stato con tre partizioni e dimensioni del set di repliche di destinazione pari a tre.The first service is a stateful service with three partitions and a target replica set size of three. Il secondo è un servizio senza stato con una partizione e un numero di istanze pari a tre.The second service is a stateless service with one partition and an instance count of three.

Il risultato è il seguente:Here's what you get:

Layout dei cluster con metriche predefinite
Cluster Layout with Default Metrics

Alcuni punti di cui tenere conto:Some things to note:

  • Le repliche primarie per il servizio con stato vengono distribuite tra più nodi.Primary replicas for the stateful service are distributed across several nodes
  • Le repliche della stessa partizione si trovano su nodi differenti.Replicas for the same partition are on different nodes
  • Il numero totale di elementi primari e secondari è distribuito nel cluster.The total number of primaries and secondaries is distributed in the cluster
  • Il numero totale di oggetti di servizio è allocato in modo uniforme in ogni nodo.The total number of service objects are evenly allocated on each node

Ottimo.Good!

Le metriche predefinite sono un punto di partenza ideale,The default metrics work great as a start. ma non consentono di andare troppo oltre.However, the default metrics will only carry you so far. Sono infatti un approccio efficace fino a quando non si prende in considerazione l'effettiva probabilità che lo schema di partizionamento selezionato produca un consumo perfettamente uniforme in tutte le partizioni,For example: What's the likelihood that the partitioning scheme you picked results in perfectly even utilization by all partitions? e che il carico per un determinato servizio sia costante nel tempo o resti invariato.What’s the chance that the load for a given service is constant over time, or even just the same across multiple partitions right now?

È possibile operare solo con le metriche predefinite,You could run with just the default metrics. tuttavia, in genere ciò significa che il consumo del cluster è inferiore e non uniforme come desiderato.However, doing so usually means that your cluster utilization is lower and more uneven than you’d like. Ciò è dovuto al fatto che le metriche predefinite non sono adattive e presuppongono che tutti gli elementi siano equivalenti.This is because the default metrics aren't adaptive and presume everything is equivalent. Ad esempio, una replica primaria e una che non lo è contribuiscono entrambe con "1" alla metrica PrimaryCount.For example, a Primary that is busy and one that is not both contribute "1" to the PrimaryCount metric. Nel peggiore dei casi, l'uso delle sole metriche predefinite può determinare anche la sovrapianificazione dei nodi e di conseguenza problemi di prestazioni.In the worst case, using only the default metrics can also result in overscheduled nodes resulting in performance issues. Se si è interessati a sfruttare al meglio il cluster e a evitare problemi di prestazioni, è opportuno prendere in considerazione metriche personalizzate e creazione di report sul carico dinamico.If you're interested in getting the most out of your cluster and avoiding performance issues, you need to use custom metrics and dynamic load reporting.

Metriche personalizzateCustom metrics

Le metriche sono configurate in base alle singole istanze del servizio durante la creazione del servizio.Metrics are configured on a per-named-service-instance basis when you’re creating the service.

Qualsiasi metrica è descritta da alcune proprietà: nome, carico predefinito e peso.Any metric has some properties that describe it: a name, a weight, and a default load.

  • Nome della metrica: il nome della metrica,Metric Name: The name of the metric. che è un identificatore univoco della metrica nel cluster dal punto di vista di Resource Manager.The metric name is a unique identifier for the metric within the cluster from the Resource Manager’s perspective.
  • Peso: il peso della metrica ne definisce l'importanza rispetto alle altre metriche per il servizio.Weight: Metric weight defines how important this metric is relative to the other metrics for this service.
  • Default Load: il carico predefinito è rappresentato in modo diverso a seconda che il servizio sia con o senza stato.Default Load: The default load is represented differently depending on whether the service is stateless or stateful.
    • Per i servizi senza stato, ogni metrica ha un'unica proprietà denominata DefaultLoadFor stateless services, each metric has a single property named DefaultLoad
    • Per i servizi con stato si definiscono le proprietà seguenti.For stateful services you define:
      • PrimaryDefaultLoad: quantità predefinita della metrica utilizzata dal servizio quando è primarioPrimaryDefaultLoad: The default amount of this metric this service consumes when it is a Primary
      • SecondaryDefaultLoad: quantità predefinita della metrica utilizzata dal servizio quando è secondarioSecondaryDefaultLoad: The default amount of this metric this service consumes when it is a Secondary

Nota

Se si definiscono metriche personalizzate e si vogliono usare anche le metriche predefinite, è necessario aggiungerle esplicitamente, e definire per queste pesi e valori,If you define custom metrics and you want to also use the default metrics, you need to explicitly add the default metrics back and define weights and values for them. così da stabilire la relazione tra le metriche predefinite e quelle personalizzate.This is because you must define the relationship between the default metrics and your custom metrics. Ad esempio, si può essere più interessati a una metrico di tipo ConnectionCount o WorkQueueDepth che alla distribuzione della metrica primaria.For example, maybe you care about ConnectionCount or WorkQueueDepth more than Primary distribution. Per impostazione predefinita il peso della metrica PrimaryCount è elevato, pertanto si desidera ridurlo a medio se si aggiungono altre metriche, per garantire che abbiano la precedenza.By default the weight of the PrimaryCount metric is High, so you want to reduce it to Medium when you add your other metrics to ensure they take precedence.

Definizione delle metriche per il servizio: esempioDefining metrics for your service - an example

Si supponga di voler ottenere la configurazione seguente:Let’s say you want the following configuration:

  • Il servizio segnala una metrica denominata "ConnectionCount".Your service reports a metric named "ConnectionCount”
  • Si desidera usare anche le metriche predefinite.You also want to use the default metrics
  • Sono state eseguite alcune misurazioni rilevando che normalmente per una replica primaria del servizio sono necessarie 20 unità di "ConnectionCount",You’ve done some measurements and know that normally a Primary replica of that service takes up 20 units of "ConnectionCount"
  • mentre per quelle secondarie ne sono necessarie cinque.Secondaries use 5 units of "ConnectionCount"
  • Si è consapevoli del fatto che "ConnectionCount" è la metrica più importante in termini di gestione delle prestazioni del servizio specifico,You know that "ConnectionCount" is the most important metric in terms of managing the performance of this particular service
  • ma si vuole comunque che le repliche primarie siano bilanciate.You still want Primary replicas balanced. Il bilanciamento delle repliche primarie è comunque un approccio consigliabile.Balancing primary replicas is generally a good idea no matter what. Consente infatti di evitare che la perdita di alcuni nodi o domini di errore abbia conseguenze anche su un gran numero di repliche primarie.This helps prevent the loss of some node or fault domain from impacting a majority of primary replicas along with it.
  • Altrimenti, le metriche predefinite sono comunque una scelta valida.Otherwise, the default metrics are fine

Di seguito è riportato il codice da scrivere per creare un servizio con tale configurazione delle metriche:Here’s the code that you would write to create a service with that metric configuration:

Codice:Code:

StatefulServiceDescription serviceDescription = new StatefulServiceDescription();
StatefulServiceLoadMetricDescription connectionMetric = new StatefulServiceLoadMetricDescription();
connectionMetric.Name = "ConnectionCount";
connectionMetric.PrimaryDefaultLoad = 20;
connectionMetric.SecondaryDefaultLoad = 5;
connectionMetric.Weight = ServiceLoadMetricWeight.High;

StatefulServiceLoadMetricDescription primaryCountMetric = new StatefulServiceLoadMetricDescription();
primaryCountMetric.Name = "PrimaryCount";
primaryCountMetric.PrimaryDefaultLoad = 1;
primaryCountMetric.SecondaryDefaultLoad = 0;
primaryCountMetric.Weight = ServiceLoadMetricWeight.Medium;

StatefulServiceLoadMetricDescription replicaCountMetric = new StatefulServiceLoadMetricDescription();
replicaCountMetric.Name = "ReplicaCount";
replicaCountMetric.PrimaryDefaultLoad = 1;
replicaCountMetric.SecondaryDefaultLoad = 1;
replicaCountMetric.Weight = ServiceLoadMetricWeight.Low;

StatefulServiceLoadMetricDescription totalCountMetric = new StatefulServiceLoadMetricDescription();
totalCountMetric.Name = "Count";
totalCountMetric.PrimaryDefaultLoad = 1;
totalCountMetric.SecondaryDefaultLoad = 1;
totalCountMetric.Weight = ServiceLoadMetricWeight.Low;

serviceDescription.Metrics.Add(connectionMetric);
serviceDescription.Metrics.Add(primaryCountMetric);
serviceDescription.Metrics.Add(replicaCountMetric);
serviceDescription.Metrics.Add(totalCountMetric);

await fabricClient.ServiceManager.CreateServiceAsync(serviceDescription);

Powershell:Powershell:

New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName –Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton –Metric @("ConnectionCount,High,20,5”,"PrimaryCount,Medium,1,0”,"ReplicaCount,Low,1,1”,"Count,Low,1,1”)

Nota

Gli esempi precedenti e ciò che segue in questo documento illustrano come gestire le metriche di gestione di ogni specifico servizio.The above examples and the rest of this document describe managing metrics on a per-named-service basis. È anche possibile definire le metriche per i servizi a livello di tipo del servizio.It is also possible to define metrics for your services at the service type level. A tal fine, specificarle nei manifesti del servizio.This is accomplished by specifying them in your service manifests. La definizione delle metriche a livello di tipo non è consigliata per diversi motivi.Defining type level metrics is not recommended for several reasons. Il primo è che i nomi delle metriche sono spesso specifici dell'ambiente.The first reason is that metric names are frequently environment-specific. A meno che non sia disponibile un contratto aziendale, non è possibile assicurarsi che la metrica "Cores" in un ambiente non sia "MiliCores" o "CoRes" in altri.Unless there is a firm contract in place, you cannot be sure that the metric "Cores" in one environment isn't "MiliCores" or "CoReS" in others. Se le metriche vengono definite nel manifesto è necessario creare nuovi manifesti per ogni ambiente.If your metrics are defined in your manifest you need to create new manifests per environment. Questo comporta in genere una proliferazione di manifesti diversi che presentano solo piccole differenze, e ciò può implicare difficoltà di gestione.This usually leads to a proliferation of different manifests with only minor differences, which can lead to management difficulties.

I carichi delle metriche vengono in genere assegnati in base a determinate istanze del servizio.Metric loads are commonly assigned on a per-named-service-instance basis. Si supponga, ad esempio, di creare un'istanza del servizio per ClienteA, che ne prevede un utilizzo saltuario.For example, let's say you create one instance of the service for CustomerA who plans to use it only lightly. Si supponga quindi di crearne un'altra per ClienteB, che ha un carico di lavoro maggiore.Let's also say you create another for CustomerB who has a larger workload. In questo caso probabilmente si desidera ottimizzare i carichi predefiniti per tali servizi.In this case, you'd probably want to tweak the default loads for those services. In presenza di metriche e carichi definiti tramite i manifesti e si desidera supportare questo scenario, sono necessari tipi di servizio e applicazione diversi per ogni cliente.If you have metrics and loads defined via manifests and you want to support this scenario, it requires different application and service types for each customer. I valori definiti al momento della creazione del servizio sostituiscono quelli definiti nel manifesto, ed è pertanto possibile usarli per impostare valori predefiniti specifici.The values defined at service creation time override those defined in the manifest, so you could use that to set the specific defaults. Tuttavia, questa operazione determina che i valori dichiarati nei manifesti non corrispondano a quelli con i quali viene eseguito il servizio.However, doing that causes the values declared in the manifests to not match those the service actually runs with. Ciò può causare confusione.This can lead to confusion.

Promemoria: se si vogliono usare solo le metriche predefinite, non è necessario modificare in alcun modo la raccolta di metriche né eseguire operazioni speciali durante la creazione del servizio.As a reminder: if you just want to use the default metrics, you don’t need to touch the metrics collection at all or do anything special when creating your service. Le metriche predefinite vengono usate automaticamente quando non ne sono definite altre.The default metrics get used automatically when no others are defined.

Di seguito ognuna di queste impostazioni viene esaminata in modo più dettagliato; viene inoltre descritto il comportamento sul quale essa agisce.Now, let's go through each of these settings in more detail and talk about the behavior that it influences.

CaricamentoLoad

La definizione di metriche consiste essenzialmente nella rappresentazione di un carico.The whole point of defining metrics is to represent some load. Il carico è la quantità di una determinata metrica che viene consumata da una replica o un'istanza del servizio in un nodo specifico.Load is how much of a given metric is consumed by some service instance or replica on a given node. Il carico può essere configurato in qualsiasi momento,Load can be configured at almost any point. ad esempio:For example:

  • Può essere definito quando viene creato un servizio.Load can be defined when a service is created. Si tratta in questo caso del carico predefinito.This is called default load.
  • Le informazioni sulla metrica, inclusi i carichi predefiniti per un servizio possono essere aggiornati dopo aver creato il servizio.The metric information, including default loads, for a service can updated after the service is created. Si tratta in questo caso di aggiornamento di un servizio.This is called updating a service.
  • Il carico di una determinata partizione può essere reimpostato sui valori predefiniti per il servizio.The loads for a given partition can be reset to the default values for that service. Viene definita reimpostazione del carico della partizione.This is called resetting partition load.
  • Il carico può essere restituito per ogni oggetto servizio in modo dinamico in fase di esecuzione.Load can be reported on a per service object basis dynamically during runtime. Si ha in questo caso la creazione di report di carico.This is called reporting load.

Tutte queste strategie possono essere usate nello stesso servizio per tutta la relativa durata.All of these strategies can be used within the same service over its lifetime.

Carico predefinitoDefault load

Il carico predefinito è la quantità di metrica consumata da ogni oggetto servizio (istanza senza stato o replica con stato) del servizio specifico.Default load is how much of the metric each service object (stateless instance or stateful replica) of this service consumes. Cluster Resource Manager usa questo numero per il carico dell'oggetto servizio finché non riceve altre informazioni, ad esempio un report del carico dinamico.The Cluster Resource Manager uses this number for the load of the service object until it receives other information, such as a dynamic load report. Per i servizi più semplici, il carico predefinito è una definizione statica.For simpler services, the default load is a static definition. Non viene mai aggiornato e viene usato per tutta la durata del servizio.The default load is never updated and is used for the lifetime of the service. Il carico predefinito è efficace per scenari di pianificazione della capacità semplici, in cui determinate quantità di risorse sono dedicate a diversi carichi di lavoro e non vengono modificate.Default loads works great for simple capacity planning scenarios where certain amounts of resources are dedicated to different workloads and do not change.

Nota

Per altre informazioni sulla gestione della capacità e su come definire le capacità dei nodi del cluster, vedere questo articolo.For more information on capacity management and defining capacities for the nodes in your cluster, please see this article.

Cluster Resource Manager consente ai servizi con stato di definire un carico predefinito diverso per le repliche primarie e quelle secondarie,The Cluster Resource Manager allows stateful services to specify a different default load for their Primaries and Secondaries. mentre per i servizi senza stato può essere specificato un solo valore, applicato a tutte le istanze.Stateless services can only specify one value that applies to all instances. Per i servizi con stato, il carico predefinito per le repliche primarie e secondarie è in genere diverso perché le repliche eseguono diverse tipologie di lavoro nel rispettivo ruolo.For stateful services, the default load for Primary and Secondary replicas are typically different since replicas do different kinds of work in each role. A differenza delle repliche secondarie, ad esempio, le repliche primarie gestiscono in genere operazioni sia di lettura che di scrittura, oltre alla maggior parte delle operazioni di calcolo.For example, Primaries usually serve both reads and writes, and handle most of the computational burden, while secondaries do not. In genere il carico predefinito di una replica primaria è superiore rispetto al carico predefinito delle repliche secondarie.Usually the default load for a primary replica is higher than the default load for secondary replicas. I valori effettivi dipendono dalle proprie misurazioni.The real numbers should depend on your own measurements.

Carico dinamicoDynamic load

Si supponga di aver eseguito un servizio per un determinato periodo di tempoLet’s say that you’ve been running your service for a while. e di aver rilevato, con alcune attività di monitoraggio, quanto segue:With some monitoring, you’ve noticed that:

  1. Alcune partizioni o istanze di un determinato servizio utilizzano più risorse di altre.Some partitions or instances of a given service consume more resources than others
  2. Il carico di alcuni servizi varia nel tempo.Some services have load that varies over time.

Fluttuazioni del carico di questo tipo possono avere diverse cause.There's lots of things that could cause these types of load fluctuations. Ad esempio, servizi o partizioni diversi sono associati a clienti diversi con esigenze differenti.For example, different services or partitions are associated with different customers with different requirements. Il carico può anche cambiare, perché la quantità di lavoro svolto dal servizio varia nel corso della giornata.Load could also change because the amount of work the service does varies over the course of the day. Indipendentemente dal motivo, non esiste un singolo numero che possa essere usato come valore predefinito.Regardless of the reason, there’s usually no single number that you can use for default. Ciò vale soprattutto se si desidera ottimizzare al massimo il consumo del cluster.This is especially true if you want to get the most utilization out of the cluster. Qualsiasi valore selezionato come carico predefinito risulterà errato in determinati momenti.Any value you pick for default load is wrong some of the time. Carichi predefiniti non corretti causano un'allocazione eccessiva o insufficiente di risorse per il servizio da parte di Cluster Resource Manager.Incorrect default loads result in the Cluster Resource Manager either over or under allocating resources. Di conseguenza, i nodi saranno sovrautilizzati o sottoutilizzati nonostante Cluster Resource Manager ritenga che il cluster sia bilanciato.As a result, you have nodes that are over or under utilized even though the Cluster Resource Manager thinks the cluster is balanced. I carichi predefiniti sono comunque validi perché forniscono alcune informazioni, ma non rappresentano interamente i carichi di lavoro reali.Default loads are still good since they provide some information for initial placement, but they're not a complete story for real workloads. È possibile acquisire in modo preciso le variazioni dei requisiti delle risorse. Cluster Resource Manager consente a ogni oggetto servizio di aggiornare il proprio carico in fase di esecuzione,To accurately capture changing resource requirements, the Cluster Resource Manager allows each service object to update its own load during runtime. con la creazione di report di carico dinamici.This is called dynamic load reporting.

I report di carico dinamici consentono alle repliche o alle istanze di modificare l'allocazione o il carico segnalato delle metriche nel corso della propria durata.Dynamic load reports allow replicas or instances to adjust their allocation/reported load of metrics over their lifetime. Una replica o un'istanza del servizio che è inattiva e non esegue alcuna operazione segnalerà in genere un uso ridotto di una determinata metrica,A service replica or instance that was cold and not doing any work would usually report that it was using low amounts of a given metric. mentre una replica o un'istanza occupata segnalerà un uso superiore.A busy replica or instance would report that they are using more.

La creazione di report per ogni replica o istanza consente a Cluster Resource Manager di riorganizzare i singoli oggetti di servizio nel cluster,Reporting load per replica or instance allows the Cluster Resource Manager to reorganize the individual service objects in the cluster. in modo da garantire che i servizi ottengano le risorse necessarie.Reorganizing the services helps ensure that they get the resources they require. I servizi occupati riescono effettivamente a "recuperare" le risorse da altre repliche o istanze attualmente inattive o meno occupate.Busy services effectively get to "reclaim" resources from other replicas or instances that are currently cold or doing less work.

In Reliable Services, il codice per la creazione di report di carico dinamici si presenterà come riportato di seguito.Within Reliable Services, the code to report load dynamically looks like this:

Codice:Code:

this.Partition.ReportLoad(new List<LoadMetric> { new LoadMetric("CurrentConnectionCount", 1234), new LoadMetric("metric1", 42) });

Un servizio può segnalare in un report una qualsiasi delle metriche definite al momento della creazione.A service can report on any of the metrics defined for it at creation time. Se un servizio segnala il carico per una metrica non configurata per l'utilizzo, Service Fabric ignora il report.If a service reports load for a metric that it is not configured to use, Service Fabric ignores that report. Se nello stesso momento vengono segnalate altre metriche valide, i report vengono accettati.If there are other metrics reported at the same time that are valid, those reports are accepted. Il codice del servizio può eseguire la misurazione e la creazione di report per tutte le metriche configurate e gli operatori possono specificare la configurazione delle metriche da usare senza dover modificare il codice.Service code can measure and report all the metrics it knows how to, and operators can specify the metric configuration to use without having to change the service code.

Aggiornamento della configurazione delle metriche di un servizioUpdating a service's metric configuration

È possibile aggiornare in modo dinamico e in tempo reale l'elenco delle metriche associate al servizio e le proprietà di tali metriche.The list of metrics associated with the service, and the properties of those metrics can be updated dynamically while the service is live. Questo approccio consente di sperimentare con flessibilità.This allows for experimentation and flexibility. Di seguito alcuni esempi che mostrano l'utilità di questo tipo di aggiornamento:Some examples of when this is useful are:

  • disabilitazione di una metrica con un report anomalo per un determinato servizio;disabling a metric with a buggy report for a particular service
  • riconfigurazione dei pesi di metriche in base al comportamento desiderato;reconfiguring the weights of metrics based on desired behavior
  • abilitazione di una nuova metrica solo dopo che il codice è stato distribuito e convalidato tramite altri meccanismi;enabling a new metric only after the code has already been deployed and validated via other mechanisms
  • modifica del carico predefinito per un servizio in base al consumo e al comportamento osservato.changing the default load for a service based on observed behavior and consumption

Le principali API per modificare la configurazione della metrica sono disponibili FabricClient.ServiceManagementClient.UpdateServiceAsync in C# e Update-ServiceFabricService in PowerShell.The main APIs for changing metric configuration are FabricClient.ServiceManagementClient.UpdateServiceAsync in C# and Update-ServiceFabricService in PowerShell. Tutte le informazioni specificate con queste API sostituiscono immediatamente le informazioni sulla metrica esistenti relative al servizio.Whatever information you specify with these APIs replaces the existing metric information for the service immediately.

Combinazione di valori di carico predefiniti e report sul carico dinamicoMixing default load values and dynamic load reports

È possibile usare per lo stesso servizio il carico predefinito e carichi dinamici.Default load and dynamic loads can be used for the same service. Quando un servizio usa sia il carico predefinito sia i report di carico dinamici, il carico predefinito funge da stima finché non sono disponibili i report dinamici.When a service utilizes both default load and dynamic load reports, default load serves as an estimate until dynamic reports show up. Il carico predefinito è efficace perché offre a Cluster Resource Manager elementi su cui lavorare.Default load is good because it gives the Cluster Resource Manager something to work with. Consente anche di posizionare in modo ottimale gli oggetti servizio quando vengono creati.The default load allows the Cluster Resource Manager to place the service objects in good locations when they are created. Se non vengono specificate informazione sul carico predefinito, i servizi vengono posizionati in modo casuale.If no default load information is provided, placement of services is effectively random. Quando i report di carico vengono ricevuti in un secondo momento, il posizionamento casuale iniziale è spesso errato e Cluster Resource Manager deve spostare i servizi.When load reports arrive later the initial random placement is often wrong and the Cluster Resource Manager has to move services.

Partendo dall'esempio precedente, è possibile verificare le conseguenze dell'aggiunta di alcune metriche personalizzate e dei report di carico dinamici.Let’s take our previous example and see what happens when we add some custom metrics and dynamic load reporting. In questo esempio verrà usata la metrica "MemoryInMb".In this example, we use “MemoryInMb” as an example metric.

Nota

La memoria è una delle metriche di sistema che Service Fabric è in grado di controllare come risorsa; la creazione manuale dei relativi report in genere è difficile.Memory is one of the system metrics that Service Fabric can resource govern, and reporting it yourself is typically difficult. In realtà non si prevede che l'utente crei report sul consumo di memoria; la memoria viene usata come supporto per comprendere le funzionalità di Cluster Resource Manager,We don't actually expect you to report on Memory consumption; Memory is used here as an aid to learning about the capabilities of the Cluster Resource Manager.

e si presuppone che il servizio con stato sia stato inizialmente creato con il comando riportato di seguito.Let’s presume that we initially created the stateful service with the following command:

Powershell:Powershell:

New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName –Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton –Metric @("MemoryInMb,High,21,11”,"PrimaryCount,Medium,1,0”,"ReplicaCount,Low,1,1”,"Count,Low,1,1”)

Si ricordi che la sintassi è ("MetricName, MetricWeight, PrimaryDefaultLoad, SecondaryDefaultLoad").As a reminder, this syntax is ("MetricName, MetricWeight, PrimaryDefaultLoad, SecondaryDefaultLoad").

Un layout di cluster può avere un aspetto analogo al seguente:Let's see what one possible cluster layout could look like:

Cluster bilanciato con metriche sia predefinite che personalizzate
Cluster Balanced with both Default and Custom metrics

Occorre notare alcuni aspetti:Some things that are worth noting:

  • Le repliche secondarie in una partizione possono avere un carico specifico.Secondary replicas within a partition can each have their own load
  • Complessivamente, le metriche appaiono bilanciate.Overall the metrics look balanced. Per la memoria, il rapporto tra carico massimo e minimo è 1,75. Il nodo con il carico maggiore è N3, quello con il carico minore è N2 e 28/16 = 1,75.For Memory, the ratio between the maximum and minimum load is 1.75 (the node with the most load is N3, the least is N2, and 28/16 = 1.75).

Restano ancora da spiegare alcuni aspetti:There are some things that we still need to explain:

  • In che modo è stato stabilito se un rapporto di 1,75 è ragionevole?What determined whether a ratio of 1.75 was reasonable or not? Come determina Cluster Resource Manager se la configurazione è ottimale o deve essere modificata?How does the Cluster Resource Manager know if that’s good enough or if there is more work to do?
  • Quando viene applicato il bilanciamento?When does balancing happen?
  • Cosa significa che il peso di Memory è "High"?What does it mean that Memory was weighted “High”?

Pesi metriciMetric weights

La possibilità di tenere traccia delle stesse metriche in diversi servizi è importante,Tracking the same metrics across different services is important. perché consente a Cluster Resource Manager di tenere traccia del consumo nel cluster, bilanciare il consumo tra i nodi e garantire che non ne venga superata la capacità.That global view is what allows the Cluster Resource Manager to track consumption in the cluster, balance consumption across nodes, and ensure that nodes don’t go over capacity. La stessa metrica, tuttavia, può assumere una diversa importanza per i diversi servizi.However, services may have different views as to the importance of the same metric. In un cluster con molte metriche e numerosi servizi, inoltre, potrebbero non esistere soluzioni perfettamente bilanciate per tutte le metriche.Also, in a cluster with many metrics and lots of services, perfectly balanced solutions may not exist for all metrics. Come devono essere gestite queste situazioni in Cluster Resource Manager?How should the Cluster Resource Manager handle these situations?

I pesi delle metriche consentono a Cluster Resource Manager di decidere come bilanciare il cluster quando non esiste una risposta perfetta,Metric weights allow the Cluster Resource Manager to decide how to balance the cluster when there’s no perfect answer. nonché di bilanciare in modo diverso servizi specifici.Metric weights also allow the Cluster Resource Manager to balance specific services differently. Le metriche possono avere quattro livelli di peso diversi: Zero, Low, Medium e High.Metrics can have four different weight levels: Zero, Low, Medium, and High. Una metrica con peso zero non ha impatto quando si valuta se gli elementi sono bilanciati o meno,A metric with a weight of Zero contributes nothing when considering whether things are balanced or not. ma il suo carico ha conseguenze sulla gestione della capacità.However, its load does still contribute to capacity management. Le metriche con peso zero sono comunque utili e vengono spesso usate come componenti del comportamento del servizio e del monitoraggio delle prestazioni.Metrics with Zero weight are still useful and are frequently used as a part of service behavior and performance monitoring. Questo articolo offre altre informazioni sull'uso delle metriche per il monitoraggio e la diagnostica dei servizi.This article provides more information on the use of metrics for monitoring and diagnostics of your services.

L'impatto effettivo di pesi delle metriche diversi nel cluster consiste nel fatto che Cluster Resource Manager genera soluzioni diverse.The real impact of different metric weights in the cluster is that the Cluster Resource Manager generates different solutions. I pesi indicano a Cluster Resource Manager che determinate metriche sono più importanti di altre.Metric weights tell the Cluster Resource Manager that certain metrics are more important than others. Quando non esiste una soluzione perfetta, Cluster Resource Manager può preferire soluzioni con un migliore bilanciamento delle metriche con peso superiore.When there's no perfect solution the Cluster Resource Manager can prefer solutions which balance the higher weighted metrics better. Se una particolare metrica non è importante per un servizio, potrebbe sbilanciarne l'usoIf a service thinks a particular metric is unimportant, it may find their use of that metric imbalanced. in modo da garantire a un altro servizio, per cui è importante, una distribuzione uniforme.This allows another service to get an even distribution of some metric that is important to it.

L'esempio seguente illustra alcuni report di carico e come pesi diversi delle metriche possono determinare allocazioni diverse nel cluster.Let’s look at an example of some load reports and how different metric weights results in different allocations in the cluster. In questo esempio si può notare che la modifica del peso relativo delle metriche fa sì che Cluster Resource Manager crei disposizioni diverse dei servizi.In this example, we see that switching the relative weight of the metrics causes the Cluster Resource Manager to create different arrangements of services.

Esempio di peso delle metriche e del relativo impatto sulle soluzioni di bilanciamento
Metric Weight Example and Its Impact on Balancing Solutions

In questo esempio sono presenti quattro diversi servizi, tutti con valori diversi nei report di due diverse metriche, MetricA e MetricB.In this example, there are four different services, all reporting different values for two different metrics, MetricA and MetricB. In un caso, tutti i servizi definiscono MetricA come la più importante (Peso = High) e MetricB come non importante (Peso = Low).In one case, all the services define MetricA is the most important one (Weight = High) and MetricB as unimportant (Weight = Low). Di conseguenza, Cluster Resource Manager posiziona i servizi in modo da ottenere per MetricA un bilanciamento migliore rispetto a MetricB.As a result, we see that the Cluster Resource Manager places the services so that MetricA is better balanced than MetricB. "Bilanciamento migliore" significa che MetricA presenta una deviazione standard inferiore rispetto a MetricB."Better balanced" means that MetricA has a lower has a lower standard deviation than MetricB. Nel secondo caso, i pesi delle metriche sono invertiti.In the second case, we reverse the metric weights. Di conseguenza, Cluster Resource Manager scambia i servizi A e B in modo da ottenere un'allocazione in cui il bilanciamento di MetricB è migliore rispetto a MetricA.As a result, the Cluster Resource Manager swaps services A and B to come up with an allocation where MetricB is better balanced than MetricA.

Nota

I pesi della metrica determinano il modo in cui Cluster Resource Manager esegue il bilanciamento, ma non quando questo debba verificarsi.Metric weights determine how the Cluster Resource Manager should balance, but not when balancing should happen. Per altre informazioni sul bilanciamento, vedere questo articolo.For more information on balancing, check out this article

Pesi metrici globaliGlobal metric weights

Si supponga che ServiceA definisca il peso di MetricA come High e ServiceB imposta il peso di MetricA su Low o Zero.Let's say ServiceA defines MetricA as weight High, and ServiceB sets the weight for MetricA to Low or Zero. Qual è il peso che verrà effettivamente usato?What’s the actual weight that ends up getting used?

Per ogni metrica esistono più pesi di cui tenere traccia.There are multiple weights that are tracked for every metric. Il primo peso è quello definito per la metrica al momento della creazione del servizio.The first weight is the one defined for the metric when the service is created. L'altro è un peso globale, che viene calcolato automaticamente.The other weight is a global weight, which is computed automatically. Cluster Resource Manager usa entrambi questi pesi per calcolare i punteggi delle soluzioni.The Cluster Resource Manager uses both these weights when scoring solutions. Considerare entrambi i pesi è importante.Taking both weights into account is important. Ciò consente a Cluster Resource Manager di bilanciare ogni servizio in base alle relative priorità e di verificare anche che il cluster nel suo complesso sia stato allocato correttamente.This allows the Cluster Resource Manager to balance each service according to its own priorities, and also ensure that the cluster as a whole is allocated correctly.

Se Cluster Resource Manager non tiene conto del bilanciamento globale e locale,What would happen if the Cluster Resource Manager didn’t care about both global and local balance? si possono avere soluzioni bilanciate a livello globale, ma che determinano allocazioni inefficienti delle risorse per i singoli servizi.Well, it’s easy to construct solutions that are globally balanced, but which result in poor resource balance for individual services. L'esempio seguente illustra un servizio configurato esclusivamente con le metriche predefinite e mostra cosa accade se viene considerato solo il bilanciamento globale:In the following example, let’s look at a service configured with just the default metrics, and see what happens when only global balance is considered:

Impatto di una soluzione solo globale
The Impact of a Global Only Solution

Nell'esempio in alto, basato solo sul bilanciamento globale, il cluster nel suo complesso è effettivamente bilanciato.In the top example based only on global balance, the cluster as a whole is indeed balanced. Tutti i nodi hanno lo stesso numero di repliche primarie e di repliche totali.All nodes have the same count of primaries and the same number total replicas. Se tuttavia si esamina l'impatto effettivo di questa allocazione, si notano alcuni problemi. La perdita di un nodo influisce in modo sproporzionato su un carico di lavoro specifico, perché rende inattive tutte le repliche primarie.However, if you look at the actual impact of this allocation it’s not so good: the loss of any node impacts a particular workload disproportionately, because it takes out all of its primaries. In caso di errore nel primo nodo, ad esempio, tutte e tre le repliche primarie per le tre diverse partizioni del servizio rappresentato con il cerchio andrebbero perse.For example, if the first node fails the three primaries for the three different partitions of the Circle service would all be lost. Le partizioni dei servizi rappresentati con il triangolo e con l'esagono perdono invece una replica.Conversely, the Triangle and Hexagon services have their partitions lose a replica. L'unica interruzione di servizio, in questo caso, consiste nel ripristinare la replica perduta.This causes no disruption, other than having to recover the down replica.

Nell'esempio in basso, Cluster Resource Manager ha distribuito le repliche in base al bilanciamento globale e per i singoli servizi.In the bottom example, the Cluster Resource Manager has distributed the replicas based on both the global and per-service balance. Quando calcola il punteggio della soluzione, assegna la maggior parte del peso alla soluzione globale e una parte (configurabile) ai singoli servizi.When calculating the score of the solution it gives most of the weight to the global solution, and a (configurable) portion to individual services. Il bilanciamento globale della metrica viene calcolato in base alla media dei pesi delle metriche per ogni servizio.Global balance for a metric is calculated based on the average of the metric weights from each service. Ogni servizio viene bilanciato in base ai pesi delle metriche specificamente definiti.Each service is balanced according to its own defined metric weights. In questo modo, i servizi sono bilanciati internamente in base alle specifiche esigenze.This ensures that the services are balanced within themselves according to their own needs. In caso di errore nel primo nodo, quindi, la perdita viene distribuita in tutte le partizioni di tutti i servizi.As a result, if the same first node fails the failure is distributed across all partitions of all services. L'impatto su ogni elemento è uguale.The impact to each is the same.

Passaggi successiviNext steps

  • Per altre informazioni sulla configurazione dei servizi vedere Informazioni sulla configurazione dei servizi(service-fabric-cluster-resource-manager-configure-services.md)For more information on configuring services, Learn about configuring Services(service-fabric-cluster-resource-manager-configure-services.md)
  • Definire la metrica di deframmentazione rappresenta un modo per consolidare il carico sui nodi anziché distribuirlo. Per informazioni su come configurare la deframmentazione, vedere questo articoloDefining Defragmentation Metrics is one way to consolidate load on nodes instead of spreading it out. To learn how to configure defragmentation, refer to this article
  • 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
  • Partire dall'inizio e vedere l' introduzione a Cluster Resource Manager di Service FabricStart from the beginning and get an Introduction to the Service Fabric Cluster Resource Manager
  • 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 articoloTo learn more about movement cost, refer to this article