Verwalten von Ressourcenverbrauch und Auslastung in Service Fabric mit MetrikenManaging resource consumption and load in Service Fabric with metrics

Metriken die Ressourcen, die für Ihre Dienste wichtig sind und die von den Knoten im Cluster bereitgestellt werden.Metrics are the resources that your services care about and which are provided by the nodes in the cluster. Eine Metrik ist ein beliebiges Element, das Sie verwalten möchten, um die Leistung Ihrer Dienste zu verbessern oder zu steuern.A metric is anything that you want to manage in order to improve or monitor the performance of your services. Sie können beispielsweise den Arbeitsspeicherverbrauch überwachen, um festzustellen, ob Ihr Dienst überlastet ist.For example, you might watch memory consumption to know if your service is overloaded. Eine weitere Verwendungsmöglichkeit: Sie können ermitteln, ob der Dienst an eine andere Position verschoben werden kann, bei der eine geringere Arbeitsspeicherauslastung gegeben ist, um die Leistung zu steigern.Another use is to figure out whether the service could move elsewhere where memory is less constrained in order to get better performance.

Arbeitsspeicher, Festplatte und CPU-Auslastung sind Beispiele für Metriken.Things like Memory, Disk, and CPU usage are examples of metrics. Bei diesen Metriken handelt es sich um physische Metriken, also Ressourcen, die physischen Ressourcen auf dem Knoten entsprechen und verwaltet werden müssen.These metrics are physical metrics, resources that correspond to physical resources on the node that need to be managed. In vielen Fällen handelt es sich bei Metriken aber um logische Metriken.Metrics can also be (and commonly are) logical metrics. Beispiele für logische Metriken wären „MyWorkQueueDepth“, „MessagesToProcess“ und „TotalRecords“.Logical metrics are things like “MyWorkQueueDepth” or "MessagesToProcess" or "TotalRecords". Logische Metriken sind in der Anwendung definiert und entsprechen indirekt einem physischen Ressourcenverbrauch.Logical metrics are application-defined and indirectly correspond to some physical resource consumption. Logische Metriken werden häufig genutzt, da der Verbrauch von physischen Ressourcen für einzelne Dienste nur schwer gemessen und gemeldet werden kann.Logical metrics are common because it can be hard to measure and report consumption of physical resources on a per-service basis. Die Komplexität der Messung und Meldung Ihrer eigenen physischen Metriken ist auch der Grund, warum in Service Fabric eine Reihe von Standardmetriken bereitgestellt werden.The complexity of measuring and reporting your own physical metrics is also why Service Fabric provides some default metrics.

StandardmetrikenDefault metrics

Angenommen, Sie möchten damit beginnen, Ihren Dienst zu schreiben und bereitzustellen.Let’s say that you want to get started writing and deploying your service. Zu diesem Zeitpunkt ist Ihnen sein Verbrauch von physischen oder logischen Ressourcen nicht bekannt.At this point you don’t know what physical or logical resources it consumes. Das ist kein Problem.That’s fine! Der Clusterressourcen-Manager von Service Fabric verwendet einige Standardmetriken, wenn keine anderen Metriken angegeben sind.The Service Fabric Cluster Resource Manager uses some default metrics when no other metrics are specified. Sie lauten wie folgt:They are:

  • PrimaryCount – Anzahl der primären Replikate auf dem KnotenPrimaryCount - count of Primary replicas on the node
  • ReplicaCount – Anzahl der insgesamt zustandsbehafteten Replikate auf dem KnotenReplicaCount - count of total stateful replicas on the node
  • Count – Anzahl aller (zustandslosen und zustandsbehafteten) Dienstobjekte auf dem KnotenCount - count of all service objects (stateless and stateful) on the node
MetrikMetric Auslastung für zustandslose InstanzStateless Instance Load Zustandsbehaftete sekundäre AuslastungStateful Secondary Load Zustandsbehaftete primäre AuslastungStateful Primary Load WeightWeight
PrimaryCountPrimaryCount 00 00 11 HighHigh
ReplicaCountReplicaCount 00 11 11 MediumMedium
AnzahlCount 11 11 11 NiedrigLow

Für grundlegende Workloads liefern die Standardmetriken eine hinreichende Lastverteilung im Cluster.For basic workloads, the default metrics provide a decent distribution of work in the cluster. Im folgenden Beispiel wird untersucht, was geschieht, wenn zwei Dienste erstellt und die Standardmetriken für den Ausgleich verwendet werden.In the following example, let’s see what happens when we create two services and rely on the default metrics for balancing. Der erste Dienst ist ein zustandsbehafteter Dienst mit drei Partitionen und der Zielreplikatgruppen-Größe „3“.The first service is a stateful service with three partitions and a target replica set size of three. Der zweite Dienst ist ein zustandsloser Dienst mit einer einzelnen Partition und drei Instanzen.The second service is a stateless service with one partition and an instance count of three.

Ergebnis:Here's what you get:

Clusterlayout mit Standardmetriken

![Cluster Layout with Default Metrics][Image1]

Hinweise, die Sie beachten sollten:Some things to note:

  • Primäre Replikate für den zustandsbehafteten Dienst werden auf mehrere Knoten verteilt.Primary replicas for the stateful service are distributed across several nodes
  • Replikate einer Partition befinden sich auf unterschiedlichen Knoten.Replicas for the same partition are on different nodes
  • Die Gesamtanzahl primärer und sekundärer Replikate ist über den Cluster verteilt.The total number of primaries and secondaries is distributed in the cluster
  • Die Gesamtanzahl von Dienstobjekten ist auf den einzelnen Knoten gleichmäßig zugewiesen.The total number of service objects are evenly allocated on each node

So weit, so gut.Good!

Die Standardmetriken funktionieren hervorragend als Ausgangspunkt.The default metrics work great as a start. Anschließend reichen die Standardmetriken jedoch nicht mehr aus.However, the default metrics will only carry you so far. Beispiel: Wie hoch ist die Wahrscheinlichkeit, dass sich mit dem gewählten Partitionierungsschema eine absolut gleichmäßige Auslastung für alle Partitionen erreichen lässt?For example: What's the likelihood that the partitioning scheme you picked results in perfectly even utilization by all partitions? Wie hoch ist die Wahrscheinlichkeit, dass die Auslastung für einen bestimmten Dienst dauerhaft konstant oder auch nur zum aktuellen Zeitpunkt für mehrere Partitionen gleich ist?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?

Sie können den Dienst auch nur mit den Standardmetriken ausführen.You could run with just the default metrics. Dies bedeutet jedoch im Allgemeinen nur, dass Ihre Clusterauslastung geringer und ungleichmäßiger als erwartet ist.However, doing so usually means that your cluster utilization is lower and more uneven than you’d like. Das liegt daran, dass die Standardmetriken nicht adaptiv sind und davon ausgegangen wird, dass alles gleichwertig ist.This is because the default metrics aren't adaptive and presume everything is equivalent. So tragen sowohl ein ausgelasteter als auch ein nicht ausgelasteter primärer Knoten zur Metrik „PrimaryCount“ jeweils „1“ bei.For example, a Primary that is busy and one that is not both contribute "1" to the PrimaryCount metric. Im schlimmsten Fall kann die ausschließliche Verwendung der Standardmetriken auch zu überlasteten Knoten und damit zu Leistungseinbußen führen.In the worst case, using only the default metrics can also result in overscheduled nodes resulting in performance issues. Wenn Sie also Ihren Cluster optimal nutzen und Leistungsprobleme vermeiden möchten, müssen Sie auf benutzerdefinierte Metriken und dynamische Auslastungsberichte zurückgreifen.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.

Benutzerdefinierte MetrikenCustom metrics

Metriken werden beim Erstellen des Diensts individuell für benannte Dienstinstanzen konfiguriert.Metrics are configured on a per-named-service-instance basis when you’re creating the service.

Jede Metrik verfügt über beschreibende Eigenschaften wie Name, Gewichtung und Standardauslastung.Any metric has some properties that describe it: a name, a weight, and a default load.

  • Metrikname: Der Name der Metrik.Metric Name: The name of the metric. Der Metrikname ist ein eindeutiger Bezeichner für die Metrik (innerhalb des Clusters aus der Perspektive von Resource Manager).The metric name is a unique identifier for the metric within the cluster from the Resource Manager’s perspective.
  • Gewichtung: Die Metrikgewichtung gibt die Bedeutung der Metrik in Relation zu den anderen Metriken für diesen Dienst an.Weight: Metric weight defines how important this metric is relative to the other metrics for this service.
  • Standardlast: Die Standardlast wird unterschiedlich repräsentiert, je nachdem, ob der Dienst zustandslos oder zustandsbehaftet ist.Default Load: The default load is represented differently depending on whether the service is stateless or stateful.
    • Bei zustandslosen Diensten besitzt jede Metrik eine einzelne Eigenschaft namens „DefaultLoad“.For stateless services, each metric has a single property named DefaultLoad
    • Bei zustandsbehafteten Diensten definieren Sie Folgendes:For stateful services you define:
      • PrimaryDefaultLoad: Die Standardmenge dieser Metrik, die der Dienst verbraucht, wenn es sich dabei um ein primäres Replikat handeltPrimaryDefaultLoad: The default amount of this metric this service consumes when it is a Primary
      • SecondaryDefaultLoad: Die Standardmenge dieser Metrik, die der Dienst verbraucht, wenn es sich dabei um ein sekundäres Replikat handeltSecondaryDefaultLoad: The default amount of this metric this service consumes when it is a Secondary

Hinweis

Wenn Sie benutzerdefinierte Metriken definieren und auch die Standardmetriken verwenden möchten, müssen Sie die Standardmetriken explizit wieder hinzufügen und ihre Gewichtungen und Werte festlegen.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. Dies ist erforderlich, um die Beziehung zwischen den Standardmetriken und Ihren benutzerdefinierten Metriken zu definieren.This is because you must define the relationship between the default metrics and your custom metrics. Beispielsweise haben „ConnectionCount“ und „WorkQueueDepth“ für Sie eine höhere Gewichtung als die primäre Verteilung.For example, maybe you care about ConnectionCount or WorkQueueDepth more than Primary distribution. In der Standardeinstellung ist die Gewichtung der Metrik „PrimaryCount“ auf „Hoch“ festgelegt. Verringern Sie sie daher beim Hinzufügen der anderen Metriken auf „Mittel“, um sicherzustellen, dass diese Vorrang haben.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.

Definieren von Metriken für Ihren Dienst – ein BeispielDefining metrics for your service - an example

Angenommen, Sie wünschen die folgende Konfiguration:Let’s say you want the following configuration:

  • Ihr Dienst meldet eine Metrik mit dem Namen „ConnectionCount“.Your service reports a metric named "ConnectionCount”
  • Sie möchten auch die Standardmetriken verwenden.You also want to use the default metrics
  • Sie haben im Zuge einiger Messungen ermittelt, dass für ein primäres Replikat des Diensts in der Regel 20 Einheiten von „ConnectionCount“ verbraucht werden.You’ve done some measurements and know that normally a Primary replica of that service takes up 20 units of "ConnectionCount"
  • Für sekundäre Replikate fallen fünf Einheiten von „ConnectionCount“ an.Secondaries use 5 units of "ConnectionCount"
  • Sie wissen, dass „ConnectionCount“ die wichtigste Metrik für die Verwaltung der Leistung dieses speziellen Diensts ist.You know that "ConnectionCount" is the most important metric in terms of managing the performance of this particular service
  • Dennoch sollen primäre Replikate ausgeglichen werden.You still want Primary replicas balanced. Das Ausgleichen der primären Replikate empfiehlt sich generell in jeder Situation.Balancing primary replicas is generally a good idea no matter what. Dadurch werden der Ausfall von Knoten oder fehlerhafte Domänen verhindert, die auch die Mehrzahl der primären Replikate beeinträchtigen.This helps prevent the loss of some node or fault domain from impacting a majority of primary replicas along with it.
  • In allen übrigen Aspekten sind die Standardmetriken ausreichend.Otherwise, the default metrics are fine

Hier sehen Sie den Code, den Sie schreiben würden, um einen Dienst mit dieser Metrikkonfiguration zu erstellen:Here’s the code that you would write to create a service with that metric configuration:

Code: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”)

Hinweis

In den obigen Beispielen und den übrigen Abschnitten dieses Dokuments wird das Verwalten von Metriken für benannte Dienste erläutert.The above examples and the rest of this document describe managing metrics on a per-named-service basis. Sie können Metriken für Ihre Dienste auch auf der Ebene der Diensttypen definieren.It is also possible to define metrics for your services at the service type level. Dazu müssen Sie sie in den Dienstmanifesten angeben.This is accomplished by specifying them in your service manifests. Das Definieren von Metriken auf der Typebene ist aus verschiedenen Gründen nicht zu empfehlen.Defining type level metrics is not recommended for several reasons. Der erste Grund ist, dass Metriknamen häufig umgebungsspezifisch sind.The first reason is that metric names are frequently environment-specific. Sofern kein fester Vertrag in Kraft ist, können Sie nicht sicher sein, dass die Metrik „Cores“ in einer Umgebung in anderen nicht „MiliCores“ oder „CoReS“ heißt.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. Wenn die Metriken in Ihrem Manifest definiert sind, müssen Sie für jede Umgebung neue Manifeste erstellen.If your metrics are defined in your manifest you need to create new manifests per environment. Dies führt normalerweise zu einer Verbreitung von unterschiedlichen Manifesten, die sich jedoch nur geringfügig unterscheiden, was die Verwaltung erschwert.This usually leads to a proliferation of different manifests with only minor differences, which can lead to management difficulties.

Metrikauslastungen werden normalerweise für einzelne Instanzen benannter Dienste zugewiesen.Metric loads are commonly assigned on a per-named-service-instance basis. Angenommen, Sie erstellen eine Instanz des Diensts für Kunde A, der sie in nur geringem Umfang nutzen möchte.For example, let's say you create one instance of the service for CustomerA who plans to use it only lightly. Darüber hinaus erstellen Sie eine weitere Instanz für Kunde B, der über eine größere Workload verfügt.Let's also say you create another for CustomerB who has a larger workload. In einer solchen Situation möchten Sie wahrscheinlich die Standardlasten für diese Dienste optimieren.In this case, you'd probably want to tweak the default loads for those services. Wenn Sie Metriken und Auslastungen über Manifeste definiert haben und dieses Szenario unterstützt werden soll, werden für jeden Kunden unterschiedliche Anwendungs- und Diensttypen benötigt.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. Die Werte, die beim Erstellen der einzelnen Dienste festgelegt werden, setzen die im Manifest definierten Werte außer Kraft; somit können Sie auf diese Weise spezielle Standardwerte festlegen.The values defined at service creation time override those defined in the manifest, so you could use that to set the specific defaults. Wenn Sie so vorgehen, entsprechen jedoch die in den Manifesten deklarierten Werte nicht den Werten, mit denen der Dienst tatsächlich ausgeführt wird.However, doing that causes the values declared in the manifests to not match those the service actually runs with. Dies kann verwirrend sein.This can lead to confusion.

Zur Erinnerung: Falls Sie nur die Standardmetriken verwenden möchten, müssen Sie beim Erstellen des Diensts weder die Sammlung mit den Metriken verwenden noch sonstige Einstellungen konfigurieren.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. Sofern keine anderen Metriken angegeben sind, werden automatisch die Standardmetriken verwendet.The default metrics get used automatically when no others are defined.

Im Folgenden betrachten wir jede dieser Einstellungen eingehender und diskutieren das Verhalten, das von ihnen beeinflusst wird.Now, let's go through each of these settings in more detail and talk about the behavior that it influences.

LadenLoad

Metriken werden definiert, um eine Auslastung darzustellen.The whole point of defining metrics is to represent some load. Die Auslastung gibt an, welcher Anteil einer bestimmten Metrik von einer Dienstinstanz oder von einem Replikat auf einem bestimmten Knoten verbraucht wird.Load is how much of a given metric is consumed by some service instance or replica on a given node. Die Auslastung kann an beinahe jedem Punkt konfiguriert werden.Load can be configured at almost any point. Beispiel:For example:

  • Die Auslastung kann beim Erstellen eines Diensts definiert werden.Load can be defined when a service is created. Hierbei wird von der Standardauslastung gesprochen.This is called default load.
  • Die Metrikinformationen für einen Dienst, einschließlich der Standardauslastungen, können nach dem Erstellen des Diensts aktualisiert werden.The metric information, including default loads, for a service can updated after the service is created. Dies wird als Aktualisieren eines Diensts bezeichnet.This is called updating a service.
  • Die Auslastungen für eine bestimmte Partition können auf die Standardwerte für den betreffenden Dienst zurückgesetzt werden.The loads for a given partition can be reset to the default values for that service. Dies wird als Zurücksetzen der Partitionsauslastung bezeichnet.This is called resetting partition load.
  • Die Auslastung kann dynamisch während der Laufzeit für einzelne Dienstobjekte gemeldet werden.Load can be reported on a per service object basis dynamically during runtime. Dies wird als Melden der Auslastung bezeichnet.This is called reporting load.

Alle diese Strategien können für ein und denselben Dienst während dessen Lebensdauer verfolgt werden.All of these strategies can be used within the same service over its lifetime.

StandardauslastungDefault load

Die Standardauslastung gibt den Verbrauch der Metrik an, der für die einzelnen Dienstobjekte (zustandslose Instanz oder zustandsbehaftetes Replikat) dieses Dienstes anfällt.Default load is how much of the metric each service object (stateless instance or stateful replica) of this service consumes. Der Clusterressourcen-Manager verwendet diesen Wert als Auslastung des Dienstobjekts, bis er weitere Informationen erhält, beispielsweise einen dynamischen Auslastungsbericht.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. Für einfachere Dienste stellt die Standardauslastung eine statische Definition dar.For simpler services, the default load is a static definition. Die Standardauslastung wird nie aktualisiert und über die gesamte Lebensdauer des Diensts verwendet.The default load is never updated and is used for the lifetime of the service. Standardauslastungen eignen sich gut für einfache Kapazitätsplanungsszenarien, in denen verschiedenen Workloads bestimmte Ressourcenmengen zugewiesen werden, die sich nicht ändern.Default loads works great for simple capacity planning scenarios where certain amounts of resources are dedicated to different workloads and do not change.

Hinweis

Weitere Informationen zur Kapazitätsverwaltung und zum Definieren von Kapazitäten für die Knoten im Cluster finden Sie in diesem Artikel.For more information on capacity management and defining capacities for the nodes in your cluster, please see this article.

Der Clusterressourcen-Manager ermöglicht für zustandsbehaftete Dienste die Angabe unterschiedlicher Standardauslastungen für seine primären und sekundären Replikate.The Cluster Resource Manager allows stateful services to specify a different default load for their Primaries and Secondaries. Bei zustandslosen Diensten kann hingegen nur ein einzelner Wert angegeben werden, der für alle Instanzen gilt.Stateless services can only specify one value that applies to all instances. Bei zustandsbehafteten Diensten unterscheidet sich die Auslastung für primäre Replikate üblicherweise von der Auslastung für sekundäre Replikate, da Replikate in jeder Rolle verschiedene Arten von Aufgaben übernehmen.For stateful services, the default load for Primary and Secondary replicas are typically different since replicas do different kinds of work in each role. So übernehmen primäre Replikate im Gegensatz zu sekundären Replikaten in der Regel sowohl Lese- als auch Schreibvorgänge sowie den Großteil der Rechenlast.For example, Primaries usually serve both reads and writes, and handle most of the computational burden, while secondaries do not. Im Allgemeinen ist die Standardauslastung für ein primäres Replikat höher als die für sekundäre Replikate.Usually the default load for a primary replica is higher than the default load for secondary replicas. Bei den Istwerten sollten Sie sich auf eigene Messungen verlassen.The real numbers should depend on your own measurements.

Dynamische AuslastungDynamic load

Nehmen wir an, Sie haben den Dienst bereits eine Zeitlang ausgeführt.Let’s say that you’ve been running your service for a while. Dabei haben Sie aufgrund der Überwachung Folgendes festgestellt:With some monitoring, you’ve noticed that:

  1. Einige Partitionen oder Instanzen eines bestimmten Diensts verbrauchen mehr Ressourcen als andere.Some partitions or instances of a given service consume more resources than others
  2. Die Auslastung einiger Dienste verändert sich im Laufe der Zeit.Some services have load that varies over time.

Diese Auslastungsschwankungen können verschiedenste Ursachen haben.There's lots of things that could cause these types of load fluctuations. So sind beispielsweise verschiedene Dienste oder Partitionen unterschiedlichen Kunden mit unterschiedlichen Anforderungen zugeordnet.For example, different services or partitions are associated with different customers with different requirements. Die Auslastung kann sich auch ändern, weil die Arbeitslast des Diensts im Verlauf des Tages variiert.Load could also change because the amount of work the service does varies over the course of the day. Ungeachtet der Ursache gibt es im Allgemeinen keinen Einzelwert, den Sie als Standardwert verwenden können.Regardless of the reason, there’s usually no single number that you can use for default. Dies gilt insbesondere dann, wenn sie eine optimale Auslastung des Clusters anstreben.This is especially true if you want to get the most utilization out of the cluster. Jeder Wert, den Sie für die Standardauslastung festlegen, ist für einen gewissen Zeitraum unzutreffend.Any value you pick for default load is wrong some of the time. Bei einer falschen Standardauslastung weist der Clusterressourcen-Manager entweder zu viele oder zu wenige Ressourcen zu.Incorrect default loads result in the Cluster Resource Manager either over or under allocating resources. Dies führt zu einer übermäßigen oder unzureichenden Auslastung von Knoten, selbst wenn der Cluster für den Clusterressourcen-Manager ausgewogen erscheint.As a result, you have nodes that are over or under utilized even though the Cluster Resource Manager thinks the cluster is balanced. Standardauslastungen haben einen gewissen Informationsgehalt für die anfängliche Platzierung und sind daher nicht schlecht, vermitteln in der Praxis aber kein umfassendes Bild von den Workloads.Default loads are still good since they provide some information for initial placement, but they're not a complete story for real workloads. Um sich ändernde Ressourcenanforderungen genau widerzuspiegeln, ermöglicht der Clusterressourcen-Manager den einzelnen Dienstobjekten die Aktualisierung der eigenen Auslastung zur Laufzeit.To accurately capture changing resource requirements, the Cluster Resource Manager allows each service object to update its own load during runtime. Dies wird als „dynamisches Melden der Auslastung“ bezeichnet.This is called dynamic load reporting.

Mit Berichten zur dynamischen Auslastung können Replikate oder Instanzen die Zuordnung bzw. die gemeldete Auslastung von Metriken im Laufe ihrer Lebensdauer anpassen.Dynamic load reports allow replicas or instances to adjust their allocation/reported load of metrics over their lifetime. Dienstreplikate oder -instanzen, die gerade nicht aktiv sind und nichts zu tun haben, melden in der Regel eine geringe Nutzung einer bestimmten Metrik.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. Aktive Replikate oder Instanzen melden eine höhere Auslastung.A busy replica or instance would report that they are using more.

Auf der Grundlage replikat- oder instanzspezifischer Berichte kann der Clusterressourcen-Manager die einzelnen Dienstobjekte im Cluster organisieren.Reporting load per replica or instance allows the Cluster Resource Manager to reorganize the individual service objects in the cluster. Durch das Neuorganisieren der Dienste wird sichergestellt, dass den Diensten die benötigten Ressourcen zur Verfügung stehen.Reorganizing the services helps ensure that they get the resources they require. Dadurch können aktive Dienste Ressourcen von anderen Replikaten oder Instanzen abziehen, die gerade nicht aktiv sind oder weniger zu tun haben.Busy services effectively get to "reclaim" resources from other replicas or instances that are currently cold or doing less work.

Innerhalb von Reliable Services sieht der Code zum dynamischen Melden der Auslastung wie folgt aus:Within Reliable Services, the code to report load dynamically looks like this:

Code:Code:

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

Ein Dienst kann Berichte zu jeder der Metriken liefern, die für ihn bei seiner Erstellung definiert wurden.A service can report on any of the metrics defined for it at creation time. Wenn ein Dienst eine Auslastung für eine Metrik meldet, dessen Verwendung für ihn nicht konfiguriert ist, wird der betreffende Bericht von Service Fabric ignoriert.If a service reports load for a metric that it is not configured to use, Service Fabric ignores that report. Werden gleichzeitig andere Metriken gemeldet, die gültig sind, werden diese Berichte akzeptiert.If there are other metrics reported at the same time that are valid, those reports are accepted. Der Dienstcode kann sämtliche ihm bekannten Metriken messen und melden, und der Bediener kann die zu verwendende Metrikkonfiguration angeben, ohne den Dienstcode zu ändern.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.

Aktualisieren der Metrikkonfiguration eines DienstsUpdating a service's metric configuration

Die dem Dienst zugeordnete Liste der Metriken und die Eigenschaften dieser Metriken können dynamisch aktualisiert werden, während der Dienst aktiv ist.The list of metrics associated with the service, and the properties of those metrics can be updated dynamically while the service is live. Dies bietet eine gewisse Flexibilität und Experimentiermöglichkeiten.This allows for experimentation and flexibility. Beispiele für Situationen, in denen dies hilfreich ist:Some examples of when this is useful are:

  • Deaktivieren einer Metrik mit einem fehlerhaften Bericht für einen bestimmten Dienstdisabling a metric with a buggy report for a particular service
  • Neukonfigurieren der Gewichtungen von Metriken entsprechend dem gewünschten Verhaltenreconfiguring the weights of metrics based on desired behavior
  • Aktivieren einer neuen Metrik erst nach erfolgter Bereitstellung und Überprüfung des Codes durch andere Mechanismenenabling a new metric only after the code has already been deployed and validated via other mechanisms
  • Ändern der Standardauslastung für einen Dienst gemäß dem beobachteten Verhalten und Verbrauchchanging the default load for a service based on observed behavior and consumption

Die wichtigsten APIs zum Ändern der Metrikkonfiguration sind FabricClient.ServiceManagementClient.UpdateServiceAsync in C# und Update-ServiceFabricService in PowerShell.The main APIs for changing metric configuration are FabricClient.ServiceManagementClient.UpdateServiceAsync in C# and Update-ServiceFabricService in PowerShell. Die Informationen, die Sie in diesen APIs angeben, ersetzen sofort die vorhandenen Metrikinformationen für den Dienst.Whatever information you specify with these APIs replaces the existing metric information for the service immediately.

Kombinieren von Standardauslastungswerten und dynamischen AuslastungsberichtenMixing default load values and dynamic load reports

Für einen Dienst können sowohl Standardauslastungen als auch dynamische Auslastungen verwendet werden.Default load and dynamic loads can be used for the same service. Wenn ein Dienst sowohl Standardauslastungsberichte als dynamische Auslastungsberichte nutzt, fungiert die Standardauslastung als Schätzwert, bis dynamische Berichte zur Verfügung stehen.When a service utilizes both default load and dynamic load reports, default load serves as an estimate until dynamic reports show up. Die Standardauslastung empfiehlt sich, weil der Clusterressourcen-Manager damit über einen vorläufigen Arbeitswert verfügt.Default load is good because it gives the Cluster Resource Manager something to work with. Auf der Grundlage der Standardauslastung kann der Clusterressourcen-Manager die Dienstobjekte bei deren Erstellung sinnvoll platzieren.The default load allows the Cluster Resource Manager to place the service objects in good locations when they are created. Ohne Angabe einer Standardauslastung werden die Dienste im Endeffekt zufällig platziert.If no default load information is provided, placement of services is effectively random. Wenn später Auslastungsberichte eingehen, erweist sich die Anfangsplatzierung häufig als falsch, und der Clusterressourcen-Manager muss Dienste verschieben.When load reports arrive later the initial random placement is often wrong and the Cluster Resource Manager has to move services.

Im Anschluss sehen wir uns anhand des vorherigen Beispiels an, was passiert, wenn wir einige benutzerdefinierte Metriken sowie dynamische Auslastungsberichte hinzufügen.Let’s take our previous example and see what happens when we add some custom metrics and dynamic load reporting. In diesem Beispiel verwenden wir „MemoryInMb“ als Beispielmetrik.In this example, we use “MemoryInMb” as an example metric.

Hinweis

Der Arbeitsspeicher stellt eine der Systemmetriken dar, für die Service Fabric die Ressourcensteuerung übernehmen kann, und wenn Sie selbst Berichte dazu erstellen möchten, ist dies in der Regel schwierig.Memory is one of the system metrics that Service Fabric can resource govern, and reporting it yourself is typically difficult. Es wird nicht erwartet, dass Sie selbst Berichte zum Arbeitsspeicherverbrauch ausgeben; der Arbeitsspeicher fungiert hier nur als Anschauungspunkt, anhand dessen Sie sich mit den Fähigkeiten des Clusterressourcen-Managers vertraut machen können.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.

Außerdem nehmen wir an, dass der zustandsbehaftete Dienst ursprünglich mit dem folgenden Befehl erstellt wurde: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”)

Syntax: ("Metrikname, Metrikgewichtung, Standardauslastung des primären Replikats, Standardauslastung des sekundären Replikats").As a reminder, this syntax is ("MetricName, MetricWeight, PrimaryDefaultLoad, SecondaryDefaultLoad").

Ein mögliches Clusterlayout kann beispielsweise wie folgt aussehen:Let's see what one possible cluster layout could look like:

Ausgeglichener Cluster mit Standardmetriken und benutzerdefinierten Metriken

![Cluster Balanced with both Default and Custom metrics][Image2]

Beachten Sie folgende Punkte:Some things that are worth noting:

  • Sekundäre Replikate innerhalb einer Partition können jeweils über eine eigene Auslastung verfügen.Secondary replicas within a partition can each have their own load
  • Insgesamt machen die Metriken einen ausgeglichenen Eindruck.Overall the metrics look balanced. Für den Arbeitsspeicher liegt das Verhältnis zwischen maximaler und minimaler Auslastung bei 1,75. (Der Knoten mit der höchsten Auslastung ist N3, der Knoten mit der geringsten Auslastung ist N2, also: 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).

Einige Punkte müssen noch erläutert werden:There are some things that we still need to explain:

  • Wie wird bestimmt, ob ein Verhältnis von 1,75 gut oder nicht gut ist?What determined whether a ratio of 1.75 was reasonable or not? Woher weiß der Clusterressourcen-Manager, ob dieses Ergebnis ausreicht oder ob noch weitere Optimierungen erforderlich sind?How does the Cluster Resource Manager know if that’s good enough or if there is more work to do?
  • Wann wird ein Lastenausgleich durchgeführt?When does balancing happen?
  • Was bedeutet es, dass „Memory“ die Gewichtung „Hoch“ erhalten hat?What does it mean that Memory was weighted “High”?

MetrikgewichtungenMetric weights

Es ist unverzichtbar, dass die gleichen Metriken über verschiedene Dienste hinweg nachverfolgt werden können.Tracking the same metrics across different services is important. Mit dieser globalen Sicht kann der Clusterressourcen-Manager den Verbrauch im Cluster überwachen, knotenübergreifend ausgleichen und sicherstellen, dass die Kapazität von Knoten nicht überschritten wird.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. Die gleiche Metrik hat jedoch bei unterschiedlichen Diensten unter Umständen nicht den gleichen Stellenwert.However, services may have different views as to the importance of the same metric. Außerdem sind perfekt ausgewogene Lösungen in einem Cluster mit zahlreichen Metriken und einer Vielzahl von Diensten unter Umständen gar nicht für alle Metriken möglich.Also, in a cluster with many metrics and lots of services, perfectly balanced solutions may not exist for all metrics. Wie soll der Clusterressourcen-Manager mit solchen Situationen umgehen?How should the Cluster Resource Manager handle these situations?

Dank Metrikgewichtungen kann der Clusterressourcen-Manager entscheiden, wie der Cluster ausgeglichen werden soll, falls keine perfekte Lösung verfügbar ist.Metric weights allow the Cluster Resource Manager to decide how to balance the cluster when there’s no perfect answer. Auf der Grundlage von Metrikgewichtungen kann der Clusterressourcen-Manager außerdem bestimmte Dienste unterschiedlich ausgleichen.Metric weights also allow the Cluster Resource Manager to balance specific services differently. Metriken können vier unterschiedliche Gewichtungen haben: Null, Niedrig, Mittel und Hoch.Metrics can have four different weight levels: Zero, Low, Medium, and High. Eine Metrik mit der Gewichtung „Null“ hat keine Auswirkung auf die Frage, ob ein guter Ausgleich besteht.A metric with a weight of Zero contributes nothing when considering whether things are balanced or not. Ihre Auslastung wird jedoch für bestimmte Aspekte der Kapazitätsverwaltung berücksichtigt.However, its load does still contribute to capacity management. Metriken mit der Gewichtung „Null“ sind dennoch hilfreich und werden häufig bei der Überwachung von Dienstverhalten und -leistung hinzugezogen.Metrics with Zero weight are still useful and are frequently used as a part of service behavior and performance monitoring. Dieser Artikel liefert weitere Informationen zur Nutzung von Metriken für das Überwachen und Diagnostizieren Ihrer Dienste.This article provides more information on the use of metrics for monitoring and diagnostics of your services.

Der tatsächliche Nutzen von Metrikgewichtungen im Cluster besteht darin, dass der Clusterressourcen-Manager unterschiedliche Lösungen generiert.The real impact of different metric weights in the cluster is that the Cluster Resource Manager generates different solutions. Mithilfe von Metrikgewichtungen wird dem Clusterressourcen-Manager vermittelt, dass bestimmte Metriken einen höheren Stellenwert haben als andere.Metric weights tell the Cluster Resource Manager that certain metrics are more important than others. Sollte keine perfekte Lösung verfügbar sein, kann der Clusterressourcen-Manager Lösungen bevorzugen, bei denen die höher gewichteten Metriken besser ausgeglichen werden.When there's no perfect solution the Cluster Resource Manager can prefer solutions which balance the higher weighted metrics better. Falls ein Dienst eine bestimmte Metrik als unwichtig betrachtet, entsteht für ihn unter Umständen der Eindruck, dass die Verwendung dieser Metrik zu einer Unausgewogenheit führt.If a service thinks a particular metric is unimportant, it may find their use of that metric imbalanced. Dadurch kann bei einem anderen Dienst, bei dem dies wichtig ist, eine ausgewogene Verteilung einer bestimmten Metrik erzielt werden.This allows another service to get an even distribution of some metric that is important to it.

Im Anschluss sehen wir uns ein Beispiel für einige Auslastungsberichte an und beschäftigen uns damit, wie unterschiedliche Metrikgewichtungen zu unterschiedlichen Zuordnungen im Cluster führen.Let’s look at an example of some load reports and how different metric weights results in different allocations in the cluster. In diesem Beispiel sehen Sie, dass die Umstellung der relativen Metrikgewichtung bewirkt, dass der Clusterressourcen-Manager unterschiedliche Dienstanordnungen erstellt.In this example, we see that switching the relative weight of the metrics causes the Cluster Resource Manager to create different arrangements of services.

Beispiel für die Metrikgewichtung und deren Auswirkungen auf Ausgleichslösungen

![Metric Weight Example and Its Impact on Balancing Solutions][Image3]

In diesem Beispiel gibt es vier verschiedene Dienste, die jeweils unterschiedliche Werte für zwei verschiedene Metriken („MetricA“ und „MetricB“) liefern.In this example, there are four different services, all reporting different values for two different metrics, MetricA and MetricB. In einem Fall definieren alle Dienste „MetricA“ als wichtigste Metrik (Weight = High, Gewichtung = Hoch) und „MetricB“ als unwichtig (Weight = Low, Gewichtung = Niedrig).In one case, all the services define MetricA is the most important one (Weight = High) and MetricB as unimportant (Weight = Low). Daher platziert der Clusterressourcen-Manager die Dienste so, dass „MetricA“ im Vergleich zu „MetricB“ besser ausgeglichen ist.As a result, we see that the Cluster Resource Manager places the services so that MetricA is better balanced than MetricB. „Besser ausgeglichen“ bedeutet, dass „MetricA“ eine geringere Standardabweichung als „MetricB“ aufweist."Better balanced" means that MetricA has a lower has a lower standard deviation than MetricB. Im zweiten Fall kehren wir die Metrikgewichtungen um.In the second case, we reverse the metric weights. Daraufhin vertauscht der Clusterressourcen-Manager die Dienste A und B, um eine Zuordnung zu erzielen, bei der „MetricB“ im Vergleich zu „MetricA“ einen besseren Ausgleich aufweist.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.

Hinweis

Metrikgewichtungen bestimmen, auf welche Weise der Clusterressourcen-Manager einen Ausgleich vornehmen soll, nicht dass ein Ausgleich stattfinden soll.Metric weights determine how the Cluster Resource Manager should balance, but not when balancing should happen. Weitere Informationen zum Ausgleichen finden Sie in diesem Artikel.For more information on balancing, check out this article

Globale MetrikgewichtungenGlobal metric weights

Angenommen „ServiceA“ definiert die Gewichtung von „MetricA“ als „High“ (Hoch), während „ServiceB“ die Gewichtung für „MetricA“ auf „Low“ (Niedrig) oder „Zero“ (Null) festlegt.Let's say ServiceA defines MetricA as weight High, and ServiceB sets the weight for MetricA to Low or Zero. Welche tatsächliche Gewichtung wird letztendlich verwendet?What’s the actual weight that ends up getting used?

Für jede Metrik werden mehrere Gewichtungen verfolgt.There are multiple weights that are tracked for every metric. Die erste Gewichtung ist diejenige, die beim Erstellen des Diensts für die Metrik definiert wird.The first weight is the one defined for the metric when the service is created. Bei der anderen Gewichtung handelt es sich um eine globale Gewichtung, die automatisch berechnet wird.The other weight is a global weight, which is computed automatically. Beim Bewerten von Lösungen werden vom Clusterressourcen-Manager beide Gewichtungen verwendet.The Cluster Resource Manager uses both these weights when scoring solutions. Es ist unerlässlich, dass beide Gewichtungen berücksichtigt werden.Taking both weights into account is important. Dadurch kann der Clusterressourcen-Manager jeden Dienst gemäß dessen spezifischen Prioritäten ausgleichen und zudem sicherstellen, dass die Zuordnung für den Cluster als Ganzes korrekt erfolgt.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.

Was würde passieren, wenn sich der Clusterressourcen-Manager nicht um die globale und lokale Ausgewogenheit kümmert?What would happen if the Cluster Resource Manager didn’t care about both global and local balance? Es ist nicht schwer, global ausgewogene Lösungen zu erstellen, die jedoch eine unzureichende Ressourcenzuordnung für einzelne Dienste nach sich ziehen.Well, it’s easy to construct solutions that are globally balanced, but which result in poor resource balance for individual services. Im folgenden Beispiel betrachten wir einen Dienst, der lediglich mit den Standardmetriken konfiguriert ist. Dabei wird untersucht, was geschieht, wenn lediglich die globale Ausgewogenheit berücksichtigt wird: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:

Auswirkung einer rein globalen Lösung

![The Impact of a Global Only Solution][Image4]

Im oberen Beispiel, das ausschließlich auf dem globalen Ausgleich basierte, ist der Cluster insgesamt tatsächlich ausgeglichen.In the top example based only on global balance, the cluster as a whole is indeed balanced. Alle Knoten verfügen über die gleiche Anzahl von primären Replikaten sowie über die gleiche Gesamtanzahl von Replikaten.All nodes have the same count of primaries and the same number total replicas. Wenn wir uns jedoch die tatsächlichen Auswirkungen dieser Zuordnung ansehen, ist das Ergebnis nicht so gut: Der Verlust eines Knotens wirkt sich unverhältnismäßig stark auf eine bestimmte Workload aus, da alle zugehörigen primären Replikate davon betroffen sind.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. Wenn also beispielsweise der erste Knoten ausfällt, gehen die drei primären Replikate für die drei verschiedenen Partitionen des Diensts „Circle“ verloren.For example, if the first node fails the three primaries for the three different partitions of the Circle service would all be lost. Im Gegensatz dazu fällt bei den Diensten vom Typ „Dreieck“und „Sechseck“ ein Replikat in den Partitionen aus.Conversely, the Triangle and Hexagon services have their partitions lose a replica. Dies bewirkt keine Unterbrechung, und es muss lediglich das ausgefallene Replikat wiederhergestellt werden.This causes no disruption, other than having to recover the down replica.

Im unteren Beispiel hat der Clusterressourcen-Manager die Replikate sowohl auf der Grundlage des globalen Ausgleichs als auch auf der Grundlage des dienstspezifischen Ausgleichs verteilt.In the bottom example, the Cluster Resource Manager has distributed the replicas based on both the global and per-service balance. Beim Berechnen der Lösungspunktzahl entfällt der Großteil der Gewichtung auf die globale Lösung und ein (konfigurierbar) Teil auf einzelne Dienste.When calculating the score of the solution it gives most of the weight to the global solution, and a (configurable) portion to individual services. Der globale Ausgleich für eine Metrik wird auf der Grundlage des Durchschnitts der Metrikgewichtungen für die einzelnen Dienste berechnet.Global balance for a metric is calculated based on the average of the metric weights from each service. Jeder Dienst wird gemäß seiner eigenen definierten Metrikgewichtungen ausgeglichen.Each service is balanced according to its own defined metric weights. Dadurch wird sichergestellt, dass die Dienste gemäß ihren jeweiligen Anforderungen untereinander ausgeglichen sind.This ensures that the services are balanced within themselves according to their own needs. Wenn nun der erste Knoten ausfällt, verteilt sich daher der Ausfall auf alle Partitionen aller Dienste.As a result, if the same first node fails the failure is distributed across all partitions of all services. Die Auswirkungen sind also für alle gleich.The impact to each is the same.

Nächste SchritteNext steps