Beschreiben eines Service Fabric-Clusters in Azure mithilfe des Clusterressourcen-ManagersDescribe a Service Fabric cluster by using Cluster Resource Manager

Der Clusterressourcen-Manager ist ein Feature von Azure Service Fabric, das verschiedene Methoden zum Beschreiben eines Clusters bereitstellt:The Cluster Resource Manager feature of Azure Service Fabric provides several mechanisms for describing a cluster:

  • FehlerdomänenFault domains
  • UpgradedomänenUpgrade domains
  • KnoteneigenschaftenNode properties
  • KnotenkapazitätenNode capacities

Zur Laufzeit nutzt der Clusterressourcen-Manager diese Informationen, um die Hochverfügbarkeit der Dienste sicherzustellen, die im Cluster ausgeführt werden.During runtime, Cluster Resource Manager uses this information to ensure high availability of the services running in the cluster. Beim Erzwingen dieser wichtigen Regeln wird auch versucht, den Ressourcenverbrauch innerhalb des Clusters zu optimieren.While enforcing these important rules, it also tries to optimize resource consumption within the cluster.

FehlerdomänenFault domains

Eine Fehlerdomäne ist ein beliebiger Bereich mit einem koordinierten Ausfall.A fault domain is any area of coordinated failure. Ein einzelner Computer ist eine Fehlerdomäne.A single machine is a fault domain. Diese kann aus vielen unterschiedlichen Gründen ausfallen, z. B. infolge eines Stromausfalls oder aufgrund von Laufwerkfehlern oder fehlerhafter NIC-Firmware.It can fail on its own for various reasons, from power supply failures to drive failures to bad NIC firmware.

In einer Fehlerdomäne befinden sich alle Computer, die mit demselben Ethernetswitch verbunden sind.Machines connected to the same Ethernet switch are in the same fault domain. Außerdem gehören dieser Domäne Computer an, die über eine gemeinsame Stromversorgung besitzen oder sich an einem Standort befinden.So are machines that share a single source of power or in a single location.

Da sich Hardwarefehler üblicherweise überschneiden, sind Fehlerdomänen hierarchisch aufgebaut.Because it's natural for hardware faults to overlap, fault domains are inherently hierarchical. In Service Fabric sind sie als URIs dargestellt.They're represented as URIs in Service Fabric.

Fehlerdomänen müssen unbedingt richtig eingerichtet werden, da Service Fabric diese Informationen nutzt, um Dienste sicher zu platzieren.It's important that fault domains are set up correctly because Service Fabric uses this information to safely place services. In Service Fabric soll eine Platzierung von Diensten vermieden werden, bei der der Ausfall einer Fehlerdomäne (aufgrund des Ausfalls einer Komponente) dazu führt, dass ein Dienst nicht mehr verfügbar ist.Service Fabric doesn't want to place services such that the loss of a fault domain (caused by the failure of some component) causes a service to go down.

In der Azure-Umgebung nutzt Service Fabric die von der Umgebung bereitgestellten Fehlerdomäneninformationen, um die Knoten im Cluster in Ihrem Auftrag richtig zu konfigurieren.In the Azure environment, Service Fabric uses the fault domain information provided by the environment to correctly configure the nodes in the cluster on your behalf. Für eigenständige Service Fabric-Instanzen werden Fehlerdomänen zum Zeitpunkt der Clustereinrichtung definiert.For standalone instances of Service Fabric, fault domains are defined at the time that the cluster is set up.

Warnung

Die Fehlerdomäneninformationen für Service Fabric müssen korrekt sein.It's important that the fault domain information provided to Service Fabric is accurate. Angenommen, die Knoten Ihres Service Fabric-Clusters werden auf zehn VMs ausgeführt, die auf fünf physischen Hosts betrieben werden.For example, let's say that your Service Fabric cluster's nodes are running inside 10 virtual machines, running on 5 physical hosts. In diesem Fall gibt es trotz der zehn VMs lediglich fünf verschiedene Fehlerdomänen (der obersten Ebene).In this case, even though there are 10 virtual machines, there are only 5 different (top level) fault domains. Die gemeinsame Verwendung eines physischen Hosts bewirkt, dass VMs dieselbe Stammfehlerdomäne gemeinsam nutzen, da die VMs bei einem Ausfall ihres physischen Hosts koordiniert ausfallen.Sharing the same physical host causes VMs to share the same root fault domain, because the VMs experience coordinated failure if their physical host fails.

In Service Fabric ist nicht vorgesehen, dass sich Fehlerdomänen eines Knotens ändern.Service Fabric expects the fault domain of a node not to change. Dies liegt daran, dass andere Mechanismen, mit denen die Hochverfügbarkeit von VMs sichergestellt wird (etwa im Fall von Hochverfügbarkeits-VMs), zu Konflikten mit Service Fabric führen könnten.Other mechanisms of ensuring high availability of the VMs, such as HA-VMs, might cause conflicts with Service Fabric. Bei diesen Mechanismen wird eine transparente Migration von VMs zwischen Hosts eingesetzt.These mechanisms use transparent migration of VMs from one host to another. Der ausgeführte Code wird dabei in der VM weder neu konfiguriert noch benachrichtigt.They don't reconfigure or notify the running code inside the VM. Derartige Mechanismen werden deswegen nicht als Grundlage für Umgebungen unterstützt, in denen Service Fabric-Cluster betrieben werden.As such, they're not supported as environments for running Service Fabric clusters.

Service Fabric sollte die einzige eingesetzte Hochverfügbarkeitstechnologie sein.Service Fabric should be the only high-availability technology employed. Mechanismen wie die Livemigration von VMs und SANs sind nicht erforderlich.Mechanisms like live VM migration and SANs are not necessary. Wenn diese in Verbindung mit Service Fabric verwendet werden, verringern sie die Verfügbarkeit und Zuverlässigkeit einer Anwendung.If these mechanisms are used in conjunction with Service Fabric, they reduce application availability and reliability. Der Grund dafür ist, dass sie zu zusätzlicher Komplexität führen, zentrale Fehlerquellen hinzufügen und Zuverlässigkeits- sowie Verfügbarkeitsstrategien nutzen, die mit denen von Service Fabric kollidieren.The reason is that they introduce additional complexity, add centralized sources of failure, and use reliability and availability strategies that conflict with those in Service Fabric.

In der Grafik unten sind alle Entitäten farbig markiert, die die Struktur von Fehlerdomänen beeinflussen, und alle unterschiedlichen Fehlerdomänen aufgeführt, die sich ergeben.In the following graphic, we color all the entities that contribute to fault domains and list all the different fault domains that result. Dieses Beispiel enthält Datencenter („DC“), Racks („R“) und Blades („B“).In this example, we have datacenters ("DC"), racks ("R"), and blades ("B"). Wenn jedes Blade mehrere virtuelle Computer enthält, kann die Fehlerdomänenhierarchie eine weitere Ebene umfassen.If each blade holds more than one virtual machine, there might be another layer in the fault domain hierarchy.

Mithilfe von Fehlerdomänen strukturierte Knoten

![Nodes organized via fault domains][Image1]

Zur Laufzeit berücksichtigt der Clusterressourcen-Manager von Service Fabric die Fehlerdomänen im Cluster und plant Layouts.During runtime, Service Fabric Cluster Resource Manager considers the fault domains in the cluster and plans layouts. Die zustandsbehafteten Replikate oder zustandslosen Instanzen für einen Dienst werden so verteilt, dass sie sich in separaten Fehlerdomänen befinden.The stateful replicas or stateless instances for a service are distributed so they're in separate fault domains. Das Verteilen des Diensts in mehreren Fehlerdomänen stellt sicher, dass seine Verfügbarkeit nicht beeinträchtigt wird, wenn eine Fehlerdomäne auf einer beliebigen Ebene der Hierarchie ausfällt.Distributing the service across fault domains ensures that the availability of the service isn't compromised when a fault domain fails at any level of the hierarchy.

Für den Clusterressourcen-Manager spielt es keine Rolle, wie viele Ebenen die Hierarchie der Fehlerdomäne umfasst.Cluster Resource Manager doesn’t care how many layers there are in the fault domain hierarchy. Es wird aber versucht, sicherzustellen, dass sich der Ausfall eines Teils der Hierarchie nicht auf die darin ausgeführten Dienste auswirkt.It tries to ensure that the loss of any one portion of the hierarchy doesn’t affect services running in it.

Es empfiehlt sich, dass jede Ebene der Fehlerdomänenhierarchie die gleiche Anzahl von Knoten enthält.It's best if the same number of nodes is at each level of depth in the fault domain hierarchy. Wenn die Struktur der Fehlerdomänen in Ihrem Cluster nicht ausgeglichen ist, ist es für den Clusterressourcen-Manager schwieriger, die beste Zuordnung für die Dienste zu ermitteln.If the “tree” of fault domains is unbalanced in your cluster, it's harder for Cluster Resource Manager to figure out the best allocation of services. Fehlerdomänenlayouts mit ungleichmäßiger Verteilung haben zur Folge, dass sich der Ausfall bestimmter Domänen stärker auf die Verfügbarkeit von Diensten auswirkt als der anderer Domänen.Imbalanced fault domain layouts mean that the loss of some domains affects the availability of services more than other domains. So kommt es für den Clusterressourcen-Manager zu einem Konflikt zwischen zwei Zielen:As a result, Cluster Resource Manager is torn between two goals:

  • Die Computer in der stark ausgelasteten Domäne sollen einerseits genutzt werden, indem Dienste darin platziert werden.It wants to use the machines in that “heavy” domain by placing services on them.
  • Andererseits sollen die Dienste so in anderen Domänen platziert werden, dass der Ausfall einer Domäne nicht zu Problemen führt.It wants to place services in other domains so that the loss of a domain doesn’t cause problems.

Wie sehen nicht ausgeglichene Domänen aus?What do imbalanced domains look like? Im folgenden Diagramm werden zwei verschiedene Clusterlayouts abgebildet.The following diagram shows two different cluster layouts. Im ersten Beispiel werden die Knoten gleichmäßig auf die Fehlerdomänen verteilt.In the first example, the nodes are distributed evenly across the fault domains. Im zweiten Beispiel verfügt eine Fehlerdomäne über mehr Knoten als die anderen Fehlerdomänen.In the second example, one fault domain has many more nodes than the other fault domains.

Zwei unterschiedliche Clusterlayouts

![Two different cluster layouts][Image2]

In Azure wird die Zuordnung eines Knotens zu einer bestimmten Fehlerdomäne automatisch vorgenommen.In Azure, the choice of which fault domain contains a node is managed for you. Je nach der Anzahl der Knoten, die Sie bereitstellen, kann es aber dennoch dazu kommen, dass einige Fehlerdomänen mehr Knoten als andere enthalten.But depending on the number of nodes that you provision, you can still end up with fault domains that have more nodes in them than in others.

Angenommen, Sie verfügen über fünf Fehlerdomänen im Cluster, stellen für einen Knotentyp (NodeType) aber sieben Knoten bereit.For example, say you have five fault domains in the cluster but provision seven nodes for a node type (NodeType). In diesem Fall verfügen die ersten beiden Fehlerdomänen über eine größere Anzahl von Knoten.In this case, the first two fault domains end up with more nodes. Das Problem verschlimmert sich, wenn Sie damit fortfahren, mehr NodeType-Instanzen mit nur wenigen Instanzen bereitzustellen.If you continue to deploy more NodeType instances with only a couple of instances, the problem gets worse. Daher empfiehlt es sich, die Anzahl der Knoten in jedem Knotentyp so festzulegen, dass diese ein Vielfaches der Anzahl der Fehlerdomänen betragen.For this reason, we recommend that the number of nodes in each node type is a multiple of the number of fault domains.

UpgradedomänenUpgrade domains

Upgradedomänen sind ein weiteres Feature, mit dem der Clusterressourcen-Manager von Service Fabric das Layout des Clusters nachvollziehen kann.Upgrade domains are another feature that helps Service Fabric Cluster Resource Manager understand the layout of the cluster. Mit Upgradedomänen werden Knotengruppen definiert, für die gleichzeitig Upgrades durchgeführt werden.Upgrade domains define sets of nodes that are upgraded at the same time. Mithilfe von Upgradedomänen kann der Clusterressourcen-Manager Verwaltungsvorgänge wie Upgrades nachvollziehen und orchestrieren.Upgrade domains help Cluster Resource Manager understand and orchestrate management operations like upgrades.

Upgradedomänen sind mit Fehlerdomänen vergleichbar. Es gibt jedoch einige wichtige Unterschiede.Upgrade domains are a lot like fault domains, but with a couple key differences. Zunächst werden Fehlerdomänen durch Bereiche von koordinierten Hardwarefehlern definiert.First, areas of coordinated hardware failures define fault domains. Upgradedomänen hingegen werden per Richtlinie definiert.Upgrade domains, on the other hand, are defined by policy. Die Anzahl dieser Domänen wird nicht von der Umgebung, sondern von Ihnen vorgegeben.You get to decide how many you want, instead of letting the environment dictate the number. Sie können genauso viele Upgradedomänen wie Knoten besitzen.You can have as many upgrade domains as you do nodes. Ein weiterer Unterschied zwischen Fehlerdomänen und Upgradedomänen besteht darin, dass Upgradedomänen nicht hierarchisch angeordnet sind.Another difference between fault domains and upgrade domains is that upgrade domains are not hierarchical. Stattdessen ähneln sie mehr einem einfachen Tag.Instead, they're more like a simple tag.

Das folgende Diagramm zeigt drei Upgradedomänen, die auf drei Fehlerdomänen verteilt sind.The following diagram shows three upgrade domains striped across three fault domains. Außerdem ist eine mögliche Platzierung für drei unterschiedliche Replikate eines zustandsbehafteten Diensts dargestellt, die jeweils in unterschiedlichen Fehler- und Upgradedomänen angeordnet werden.It also shows one possible placement for three different replicas of a stateful service, where each ends up in different fault and upgrade domains. Bei dieser Platzierung ist selbst bei einem Ausfall einer Fehlerdomäne während eines Dienstupgrades eine Kopie des Codes und der Daten vorhanden.This placement allows the loss of a fault domain while in the middle of a service upgrade and still have one copy of the code and data.

Platzierung mit Fehler- und Upgradedomänen

![Placement With fault and upgrade domains][Image3]

Die Verwendung einer größeren Anzahl von Upgradedomänen hat Vor- und Nachteile.There are pros and cons to having large numbers of upgrade domains. Mit einer größeren Anzahl von Upgradedomänen wird jeder Schritt des Upgrades präziser und wirkt sich daher auf eine kleinere Anzahl von Knoten oder Diensten aus.More upgrade domains mean each step of the upgrade is more granular and affects a smaller number of nodes or services. Da weniger Dienste auf einmal verschoben werden müssen, sind weniger Systemänderungen erforderlich.Fewer services have to move at a time, introducing less churn into the system. Dies bewirkt meist eine Verbesserung der Zuverlässigkeit, da ein kleinerer Bereich des Diensts von Problemen betroffen ist, die während des Upgrades auftreten.This tends to improve reliability, because less of the service is affected by any issue introduced during the upgrade. Eine höhere Anzahl von Upgradedomänen bedeutet auch, dass Sie einen geringeren verfügbaren Puffer auf anderen Knoten vorhalten müssen, um die Auswirkungen des Upgrades verarbeiten zu können.More upgrade domains also mean that you need less available buffer on other nodes to handle the impact of the upgrade.

Wenn Sie beispielsweise über fünf Upgradedomänen verfügen, verarbeiten die Knoten jeder Domäne ca. 20 % des Datenverkehrs.For example, if you have five upgrade domains, the nodes in each are handling roughly 20 percent of your traffic. Wenn Sie diese Upgradedomäne für ein Upgrade außer Betrieb nehmen müssen, muss diese Last üblicherweise verlagert werden können.If you need to take down that upgrade domain for an upgrade, that load usually needs to go somewhere. Da Sie über vier verbleibende Upgradedomänen verfügen, muss jede von ihnen ca. fünf Prozent des Gesamtdatenverkehrs aufnehmen können.Because you have four remaining upgrade domains, each must have room for about 5 percent of the total traffic. Eine höhere Anzahl von Upgradedomänen bedeutet, dass Sie einen kleineren Puffer auf den Knoten im Cluster benötigen.More upgrade domains mean that you need less buffer on the nodes in the cluster.

Angenommen, Sie verfügen nun über zehn Upgradedomänen.Consider if you had 10 upgrade domains instead. In diesem Fall muss jede Upgradedomäne nur etwa zehn Prozent des Gesamtdatenverkehrs verarbeiten.In that case, each upgrade domain would be handling only about 10 percent of the total traffic. Wenn ein Upgrade schrittweise im Cluster ausgeführt wird, benötigt jede Domäne nur Kapazitäten für ca. 1,1 % des Gesamtdatenverkehrs.When an upgrade steps through the cluster, each domain would need to have room for only about 1.1 percent of the total traffic. Eine größere Anzahl von Upgradedomänen ermöglicht Ihnen den Betrieb Ihrer Knoten mit höherer Auslastung, da weniger Reservekapazität erforderlich ist.More upgrade domains generally allow you to run your nodes at higher utilization, because you need less reserved capacity. Dasselbe gilt für Fehlerdomänen.The same is true for fault domains.

Der Nachteil bei der Verwendung vieler Upgradedomänen ist, dass Upgrades oft länger dauern.The downside of having many upgrade domains is that upgrades tend to take longer. Service Fabric wartet nach der Fertigstellung einer Upgradedomäne einen kurzen Zeitraum und führt Überprüfungen durch, bevor mit dem Upgrade der nächsten Domäne begonnen wird.Service Fabric waits a short period after an upgrade domain is completed and performs checks before starting to upgrade the next one. Diese Verzögerungen ermöglichen es, etwaige durch das Upgrade bewirkte Probleme zu erkennen, bevor mit dem Upgradevorgang fortgefahren wird.These delays enable detecting issues introduced by the upgrade before the upgrade proceeds. Dieser Kompromiss ist akzeptabel, da dadurch verhindert wird, dass sich negative Änderungen jeweils auf einen zu großen Teil des Diensts auswirken.The tradeoff is acceptable because it prevents bad changes from affecting too much of the service at a time.

Wenn zu wenige Upgradedomänen vorhanden sind, hat dies viele negative Auswirkungen.The presence of too few upgrade domains has many negative side effects. Da eine Upgradedomäne während eines Upgrades nicht verwendet werden kann, ist ein Großteil der Gesamtkapazität in diesem Zeitraum nicht verfügbar.While each upgrade domain is down and being upgraded, a large portion of your overall capacity is unavailable. Wenn Sie beispielsweise nur drei Upgradedomänen besitzen, nehmen Sie jeweils etwa ein Drittel der Dienst- oder Clustergesamtkapazität außer Betrieb.For example, if you have only three upgrade domains, you're taking down about one-third of your overall service or cluster capacity at a time. Es ist nicht wünschenswert, dass so ein großer Teil Ihres Diensts auf einmal nicht betriebsbereit ist, da im restlichen Cluster genügend Kapazität für die Verarbeitung der Workload vorhanden sein muss.Having so much of your service down at once isn’t desirable because you need enough capacity in the rest of your cluster to handle the workload. Eine Verwaltung eines solchen Puffers bedeutet, dass die betreffenden Knoten während des Normalbetriebs in geringerem Umfang genutzt werden können, als dies sonst der Fall wäre.Maintaining that buffer means that during normal operation, those nodes are less loaded than they would be otherwise. Dadurch steigen die Kosten für die Ausführung des Diensts.This increases the cost of running your service.

Es gibt keine tatsächliche Beschränkung bei der Gesamtanzahl der Fehler- oder Upgradedomänen in einer Umgebung bzw. keine Einschränkungen in Bezug auf ihre Überlappung.There’s no real limit to the total number of fault or upgrade domains in an environment, or constraints on how they overlap. Es gibt jedoch allgemeine Muster:But there are common patterns:

  • 1:1-Zuordnung von Fehlerdomänen und UpgradedomänenFault domains and upgrade domains mapped 1:1
  • Eine Upgradedomäne pro Knoten (physische oder virtuelle Betriebssysteminstanz)One upgrade domain per node (physical or virtual OS instance)
  • Ein „Stripeset“- oder „Matrix“-Modell, bei dem die Fehler- und Upgradedomänen eine Matrix bilden, in der die Computer normalerweise entlang der Diagonalen angeordnet sindA “striped” or “matrix” model where the fault domains and upgrade domains form a matrix with machines usually running down the diagonals

Layouts von Fehler- und Upgradedomänen

![Layouts of fault and upgrade domains][Image4]

Es gibt keine allgemeingültige Empfehlung für die Auswahl des Layouts.There’s no best answer for which layout to choose. Jede Möglichkeit hat ihre Vor- und Nachteile.Each has pros and cons. Das 1FD:1U-Modell ist beispielsweise einfach einzurichten.For example, the 1FD:1UD model is simple to set up. Das Modell „Eine Upgradedomäne pro Knoten“ ist wahrscheinlich das gängigste Modell.The model of one upgrade domain per node model is most like what people are used to. Während eines Upgrades wird jeder Knoten unabhängig aktualisiert.During upgrades, each node is updated independently. Dies ähnelt früheren Situationen, in denen für kleine Gruppen von Computern manuell ein Upgrade ausgeführt wurde.This is similar to how small sets of machines were upgraded manually in the past.

Das am häufigsten verwendete Modell ist die FD/UD-Matrix, bei der die Fehlerdomänen und Upgradedomänen eine Tabelle bilden und die Knoten am Anfang der Diagonalen angeordnet sind.The most common model is the FD/UD matrix, where the fault domains and upgrade domains form a table and nodes are placed starting along the diagonal. Dies ist das Modell, das in Service Fabric-Clustern in Azure standardmäßig verwendet wird.This is the model used by default in Service Fabric clusters in Azure. Bei Clustern mit vielen Knoten entspricht das Gesamtbild anschließend einem dichten Matrixmuster.For clusters with many nodes, everything ends up looking like a dense matrix pattern.

Hinweis

In Azure gehostete Service Fabric-Cluster unterstützten keine Änderung der Standardstrategie.Service Fabric clusters hosted in Azure don't support changing the default strategy. Nur eigenständige Cluster stellen diese Anpassungsmöglichkeit bereit.Only standalone clusters offer that customization.

Einschränkungen und daraus resultierendes Verhalten von Fehler- und UpgradedomänenFault and upgrade domain constraints and resulting behavior

StandardansatzDefault approach

Standardmäßig behält der Clusterressourcen-Manager die ausgewogene Verteilung der Dienste auf Fehler- und Upgradedomänen bei.By default, Cluster Resource Manager keeps services balanced across fault and upgrade domains. Dies wird als Einschränkung simuliert.This is modeled as a constraint. Für Fehler- und Upgradedomänen lautet diese wie folgt: „Für eine bestimmte Dienstpartition sollte sich die Anzahl der Dienstobjekte (zustandslose Dienstinstanzen oder zustandsbehaftete Dienstreplikate) zwischen Domänen auf derselben Hierarchieebene nie um mehr als eins unterscheiden.“The constraint for fault and upgrade domains states: “For a given service partition, there should never be a difference greater than one in the number of service objects (stateless service instances or stateful service replicas) between any two domains on the same level of hierarchy.”

Nehmen wir an, dass diese Einschränkung eine „maximale Differenz“ garantiert.Let's say that this constraint provides a “maximum difference” guarantee. Die Einschränkung für die Fehler- und Upgradedomänen verhindert bestimmte Verschiebungen oder Anordnungen, die die Regel verletzen.The constraint for fault and upgrade domains prevents certain moves or arrangements that violate the rule.

Angenommen, wir verwenden einen Cluster mit sechs Knoten, für die fünf Fehlerdomänen und fünf Upgradedomänen konfiguriert wurden.For example, let's say that we have a cluster with six nodes, configured with five fault domains and five upgrade domains.

FD0FD0 FD1FD1 FD2FD2 FD3FD3 FD4FD4
UD0UD0 N1N1
UD1UD1 N6N6 N2N2
UD2UD2 N3N3
UD3UD3 N4N4
UD4UD4 N5N5

Angenommen, wir erstellen nun einen Dienst und legen für TargetReplicaSetSize (bzw. für InstanceCount im Fall eines zustandslosen Diensts) den Wert fünf fest.Now let's say that we create a service with a TargetReplicaSetSize (or, for a stateless service, InstanceCount) value of five. Die Replikate (R) werden auf den Knoten N1-N5 gespeichert.The replicas land on N1-N5. N6 wird unabhängig von der Anzahl der erstellten Dienste tatsächlich niemals verwendet.In fact, N6 is never used no matter how many services like this you create. Warum ist das so?But why? Wir betrachten den Unterschied zwischen dem aktuellen Layout und dem Fall, in dem N6 gewählt wird.Let's look at the difference between the current layout and what would happen if N6 is chosen.

Im Folgenden sehen Sie das Layout und die Gesamtzahl der Replikate pro Fehler- und Upgradedomäne:Here's the layout we got and the total number of replicas per fault and upgrade domain:

FD0FD0 FD1FD1 FD2FD2 FD3FD3 FD4FD4 UDTotalUDTotal
UD0UD0 R1R1 11
UD1UD1 R2R2 11
UD2UD2 R3R3 11
UD3UD3 R4R4 11
UD4UD4 R5R5 11
FDTotalFDTotal 11 11 11 11 11 -

Dieses Layout ist in Bezug auf die Knoten pro Fehler- und Upgradedomäne ausgeglichen.This layout is balanced in terms of nodes per fault domain and upgrade domain. Zusätzlich ist es in Bezug auf die Anzahl der Replikate pro Fehler- und Upgradedomäne ausgeglichen.It's also balanced in terms of the number of replicas per fault and upgrade domain. Jede Domäne verfügt über die gleiche Anzahl von Knoten und die gleiche Anzahl von Replikaten.Each domain has the same number of nodes and the same number of replicas.

Nun sehen wir uns an, was passieren würde, wenn wir N6 anstelle von N2 verwenden würden.Now, let's look at what would happen if we'd used N6 instead of N2. Wie wären die Replikate dann verteilt?How would the replicas be distributed then?

FD0FD0 FD1FD1 FD2FD2 FD3FD3 FD4FD4 UDTotalUDTotal
UD0UD0 R1R1 11
UD1UD1 R5R5 11
UD2UD2 R2R2 11
UD3UD3 R3R3 11
UD4UD4 R4R4 11
FDTotalFDTotal 22 00 11 11 11 -

Dieses Layout verstößt gegen die Definition der „maximalen Differenz“ für die Fehlerdomäneneinschränkung.This layout violates our definition of the “maximum difference” guarantee for the fault domain constraint. In FD0 befinden sich zwei Replikate, in FD1 hingegen gar keine.FD0 has two replicas, whereas FD1 has zero. Der Unterschied zwischen FD0 und FD1 beträgt zwei und überschreitet damit die maximale Differenz von eins.The difference between FD0 and FD1 is a total of two, which is greater than the maximum difference of one. Da die Einschränkung verletzt wird, lässt der Clusterressourcen-Manager diese Anordnung nicht zu.Because the constraint is violated, Cluster Resource Manager does not allow this arrangement. Wenn wir N2 und N6 (anstelle von N1 und N2) auswählen, erhalten wir Folgendes:Similarly, if we picked N2 and N6 (instead of N1 and N2), we'd get:

FD0FD0 FD1FD1 FD2FD2 FD3FD3 FD4FD4 UDTotalUDTotal
UD0UD0 00
UD1UD1 R5R5 R1R1 22
UD2UD2 R2R2 11
UD3UD3 R3R3 11
UD4UD4 R4R4 11
FDTotalFDTotal 11 11 11 11 11 -

Dieses Layout ist in Bezug auf Fehlerdomänen ausgeglichen.This layout is balanced in terms of fault domains. Allerdings verletzt es jetzt die Upgradedomäneneinschränkung, da UD0 keine Replikate aufweist, UD1 hingegen zwei.But now it's violating the upgrade domain constraint, because UD0 has zero replicas and UD1 has two. Daher ist dieses Layout ebenfalls ungültig und wird vom Clusterressourcen-Manager nicht ausgewählt.This layout is also invalid and won't be picked by Cluster Resource Manager.

Dieser Ansatz zur Verteilung zustandsbehafteter Replikate oder zustandsloser Instanzen bietet die bestmögliche Fehlertoleranz.This approach to the distribution of stateful replicas or stateless instances provides the best possible fault tolerance. Wenn eine Domäne ausfällt, fällt die kleinstmögliche Anzahl von Replikaten und Instanzen aus.If one domain goes down, the minimal number of replicas/instances is lost.

Andererseits kann dieser Ansatz zu streng sein und dem Cluster nicht die Nutzung aller Ressourcen erlauben.On the other hand, this approach can be too strict and not allow the cluster to utilize all resources. Bei bestimmten Clusterkonfigurationen können bestimmte Knoten nicht verwendet werden.For certain cluster configurations, certain nodes can't be used. Dies kann dazu führen, dass Service Fabric Ihre Dienste nicht platziert, was zu Warnmeldungen führt.This can cause Service Fabric to not place your services, resulting in warning messages. Im vorherigen Beispiel können einige der Clusterknoten nicht verwendet werden (im Beispiel N6).In the previous example, some of the cluster nodes can’t be used (N6 in the example). Auch wenn Sie diesem Cluster Knoten hinzufügen würden (N7 bis N10), würden Replikate und Instanzen aufgrund der Fehler- und Upgradedomäneneinschränkungen nur auf N1 bis N5 platziert werden.Even if you added nodes to that cluster (N7-N10), replicas/instances would be placed only on N1–N5 because of constraints on fault and upgrade domains.

FD0FD0 FD1FD1 FD2FD2 FD3FD3 FD4FD4
UD0UD0 N1N1 N10N10
UD1UD1 N6N6 N2N2
UD2UD2 N7N7 N3N3
UD3UD3 N8N8 N4N4
UD4UD4 N9N9 N5N5

Alternativer AnsatzAlternative approach

Der Clusterressourcen-Manager unterstützt für Fehler- und Upgradedomänen eine weitere Einschränkungsversion.Cluster Resource Manager supports another version of the constraint for fault and upgrade domains. Diese ermöglicht eine Platzierung und garantiert gleichzeitig ein Mindestmaß an Sicherheit.It allows placement while still guaranteeing a minimum level of safety. Die alternative Einschränkung kann wie folgt formuliert werden: „Für eine bestimmte Dienstpartition sollte die domänenübergreifende Replikatverteilung sicherstellen, dass die Partition keinem Quorumverlust unterliegt.“The alternative constraint can be stated as follows: “For a given service partition, replica distribution across domains should ensure that the partition does not suffer a quorum loss.” Nehmen wir an, dass diese Einschränkung eine „Quorumsicherheit“ garantiert.Let’s say that this constraint provides a “quorum safe” guarantee.

Hinweis

Für einen zustandsbehafteten Dienst definieren wir den Quorumsverlust in einer Situation, wo der überwiegende Teil der Partitionsreplikate zur gleichen Zeit außer Betrieb ist.For a stateful service, we define quorum loss in a situation when a majority of the partition replicas are down at the same time. Wenn z. B. TargetReplicaSetSize fünf beträgt, stellt eine Gruppe mit drei Replikaten das Quorum dar.For example, if TargetReplicaSetSize is five, a set of any three replicas represents quorum. Wenn TargetReplicaSetSize sechs beträgt, sind dementsprechend vier Replikate für das Quorum erforderlich.Similarly, if TargetReplicaSetSize is six, four replicas are necessary for quorum. In beiden Fällen können nicht mehr als zwei Replikate zur gleichen Zeit außer Betrieb sein, damit die Partition noch ordnungsgemäß funktioniert.In both cases, no more than two replicas can be down at the same time if the partition wants to continue functioning normally.

Im Fall eines zustandslosen Diensts gibt es keinen Quorumverlust.For a stateless service, there's no such thing as quorum loss. Zustandslose Dienste werden auch dann weiterhin ordnungsgemäß ausgeführt, wenn mehr als die Hälfte der Instanzen gleichzeitig ausfällt.Stateless services continue to function normally even if a majority of instances go down at the same time. Darum konzentrieren wir uns im weiteren Verlauf des Artikels auf zustandsbehaftete Dienste.So, we'll focus on stateful services in the rest of this article.

Wir kehren zum vorherigen Beispiel zurück.Let’s go back to the previous example. Mit der „quorumsicheren“ Version der Einschränkung würden alle drei Layouts gültig sein.With the “quorum safe” version of the constraint, all three layouts would be valid. Selbst bei einem Ausfall von FD0 im zweiten Layout oder UD1 im dritten Layout würde die Partition noch über ein Quorum verfügen würde,Even if FD0 failed in the second layout or UD1 failed in the third layout, the partition would still have quorum. und der überwiegende Teil der Replikate wäre noch funktionsfähig. Mit dieser Version der Einschränkung kann N6 fast immer genutzt werden.(A majority of the replicas would still be up.) With this version of the constraint, N6 can almost always be utilized.

Der „quorumsichere“ Ansatz bietet mehr Flexibilität als die Strategie der „maximalen Differenz“.The “quorum safe” approach provides more flexibility than the “maximum difference” approach. Dies liegt daran, dass es einfacher ist, Replikatverteilungen zu finden, die in fast allen Clustertopologien gültig sind.The reason is that it's easier to find replica distributions that are valid in almost any cluster topology. Allerdings kann dieser Ansatz nicht die besten Fehlertoleranzeigenschaften garantieren, da manche Ausfälle schlimmer sind als andere.However, this approach can’t guarantee the best fault tolerance characteristics because some failures are worse than others.

Im schlimmsten Fall kann der überwiegende Teil der Replikate mit dem Ausfall einer Domäne und eines zusätzlichen Replikats verlorengehen.In the worst case scenario, a majority of the replicas can be lost with the failure of one domain and one additional replica. Sie können z. B. anstatt mit drei Ausfällen, die bei fünf Replikaten oder Instanzen für einen Quorumverlust erforderlich sind, jetzt mit nur zwei Ausfällen den überwiegenden Teil verlieren.For example, instead of three failures being required to lose quorum with five replicas or instances, you can now lose a majority with just two failures.

Adaptiver AnsatzAdaptive approach

Da beide Ansätze Stärken und Schwächen aufweisen, wurde ein adaptiver Ansatz eingeführt, der diese beiden Strategien kombiniert.Because both approaches have strengths and weaknesses, we've introduced an adaptive approach that combines these two strategies.

Hinweis

Dies ist das Standardverhalten ab Version 6.2 von Service Fabric.This is the default behavior starting with Service Fabric version 6.2.

Der adaptive Ansatz nutzt in der Standardeinstellung die Logik der „maximalen Differenz“ und wechselt nur bei Bedarf zur „quorumsicheren“ Logik.The adaptive approach uses the “maximum difference” logic by default and switches to the “quorum safe” logic only when necessary. Der Clusterressourcen-Manager ermittelt automatisch anhand der Konfiguration von Clustern und Diensten, welche Strategie erforderlich ist.Cluster Resource Manager automatically figures out which strategy is necessary by looking at how the cluster and services are configured.

Der Clusterressourcen-Manager sollte die „quorumbasierte“ Logik für einen Dienst verwenden, wenn die folgenden beiden Bedingungen erfüllt sind:Cluster Resource Manager should use the “quorum based” logic for a service both of these conditions are true:

  • Der Wert von TargetReplicaSetSize muss durch die Anzahl der Fehlerdomänen und die Anzahl der Upgradedomänen teilbar sein.TargetReplicaSetSize for the service is evenly divisible by the number of fault domains and the number of upgrade domains.
  • Die Anzahl der Knoten muss kleiner oder gleich der Zahl sein, die sich aus der Anzahl der Fehlerdomänen multipliziert mit der Anzahl der Upgradedomänen ergibt.The number of nodes is less than or equal to the number of fault domains multiplied by the number of upgrade domains.

Bedenken Sie, dass der Clusterressourcen-Manager diesen Ansatz für zustandslose und zustandsbehaftete Dienste verwendet, obwohl der Quorumverlust für zustandslose Dienste nicht relevant ist.Bear in mind that Cluster Resource Manager will use this approach for both stateless and stateful services, even though quorum loss isn't relevant for stateless services.

Im Folgenden gehen wir vom vorherigen Beispiel aus, nehmen nun jedoch an, dass sich im Cluster acht Knoten befinden.Let’s go back to the previous example and assume that a cluster now has eight nodes. Der Cluster ist immer noch mit fünf Fehlerdomänen und fünf Upgradedomänen konfiguriert. Auch der TargetReplicaSetSize-Wert für einen Dienst, der in diesem Cluster gehostet ist, beträgt nach wie vor fünf.The cluster is still configured with five fault domains and five upgrade domains, and the TargetReplicaSetSize value of a service hosted on that cluster remains five.

FD0FD0 FD1FD1 FD2FD2 FD3FD3 FD4FD4
UD0UD0 N1N1
UD1UD1 N6N6 N2N2
UD2UD2 N7N7 N3N3
UD3UD3 N8N8 N4N4
UD4UD4 N5N5

Da alle erforderlichen Bedingungen erfüllt sind, nutzt der Clusterressourcen-Manager die „quorumbasierte“ Logik bei der Verteilung des Diensts.Because all necessary conditions are satisfied, Cluster Resource Manager will use the “quorum based” logic in distributing the service. Dies ermöglicht die Verwendung von N6 bis N8.This enables usage of N6-N8. Eine mögliche Dienstverteilung könnte in diesem Fall wie folgt aussehen:One possible service distribution in this case might look like this:

FD0FD0 FD1FD1 FD2FD2 FD3FD3 FD4FD4 UDTotalUDTotal
UD0UD0 R1R1 11
UD1UD1 R2R2 11
UD2UD2 R3R3 R4R4 22
UD3UD3 00
UD4UD4 R5R5 11
FDTotalFDTotal 22 11 11 00 11 -

Wenn der TargetReplicaSetSize-Wert Ihres Diensts beispielsweise auf vier verringert wird, erkennt der Clusterressourcen-Manager diese Änderung.If your service’s TargetReplicaSetSize value is reduced to four (for example), Cluster Resource Manager will notice that change. Daraufhin wechselt er wieder zur Logik der „maximalen Differenz“, da TargetReplicaSetSize nicht mehr durch die Anzahl der Fehlerdomänen und Upgradedomänen teilbar ist.It will resume using the “maximum difference” logic because TargetReplicaSetSize isn’t dividable by the number of fault domains and upgrade domains anymore. Das Ergebnis sind Replikatverschiebungen, bei denen die verbleibenden vier Replikate auf die Knoten N1 bis N5 verteilt werden.As a result, certain replica movements will occur to distribute the remaining four replicas on nodes N1-N5. Auf diese Weise wird die Logik der „maximalen Differenz“ für Fehler- und Upgradedomänen nicht verletzt.That way, the “maximum difference” version of the fault domain and upgrade domain logic is not violated.

Wenn im vorherigen Layout der TargetReplicaSetSize-Wert fünf beträgt und N1 aus dem Cluster entfernt wird, beträgt die Anzahl der Upgradedomänen vier.In the previous layout, if the TargetReplicaSetSize value is five and N1 is removed from the cluster, the number of upgrade domains becomes equal to four. Erneut beginnt der Clusterressourcen-Manager mit der Verwendung der Logik der „maximalen Differenz“, da der TargetReplicaSetSize-Wert des Diensts nicht mehr durch die Anzahl der Upgradedomänen teilbar ist.Again, Cluster Resource Manager starts using “maximum difference” logic because the number of upgrade domains doesn’t evenly divide the service’s TargetReplicaSetSize value anymore. Daher muss Replikat R1 beim erneuten Erstellen auf N4 untergebracht werden, sodass die Einschränkung für die Fehler- und Upgradedomäne nicht verletzt wird.As a result, replica R1, when built again, has to land on N4 so that the constraint for the fault and upgrade domain is not violated.

FD0FD0 FD1FD1 FD2FD2 FD3FD3 FD4FD4 UDTotalUDTotal
UD0UD0 N/A N/A N/A N/A N/A N/A
UD1UD1 R2R2 11
UD2UD2 R3R3 R4R4 22
UD3UD3 R1R1 11
UD4UD4 R5R5 11
FDTotalFDTotal 11 11 11 11 11 -

Konfigurieren von Fehler- und UpgradedomänenConfiguring fault and upgrade domains

In Azure gehosteten Service Fabric-Bereitstellungen werden Fehler- und Upgradedomänen automatisch definiert.In Azure-hosted Service Fabric deployments, fault domains and upgrade domains are defined automatically. Service Fabric wählt die Umgebungsinformationen von Azure und verwendet sie.Service Fabric picks up and uses the environment information from Azure.

Wenn Sie Ihren eigenen Cluster erstellen (oder eine bestimmte Topologie ausführen möchten, die sich in der Entwicklung befindet), können Sie die Informationen für die Fehler- und Upgradedomänen selbst angeben.If you’re creating your own cluster (or want to run a particular topology in development), you can provide the fault domain and upgrade domain information yourself. Im folgenden Beispiel definieren wir einen lokalen Entwicklungscluster mit neun Knoten, der drei Datencenter (mit jeweils drei Racks) umfasst.In this example, we define a nine-node local development cluster that spans three datacenters (each with three racks). Dieser Cluster verfügt auch über drei Upgradedomänen, die auf diese drei Datencenter verteilt sind.This cluster also has three upgrade domains striped across those three datacenters. Im Folgenden sehen Sie eine Beispielkonfiguration, die sich in der Datei „ClusterManifest.xml“ befindet:Here's an example of the configuration in ClusterManifest.xml:

  <Infrastructure>
    <!-- IsScaleMin indicates that this cluster runs on one box/one single server -->
    <WindowsServer IsScaleMin="true">
      <NodeList>
        <Node NodeName="Node01" IPAddressOrFQDN="localhost" NodeTypeRef="NodeType01" FaultDomain="fd:/DC01/Rack01" UpgradeDomain="UpgradeDomain1" IsSeedNode="true" />
        <Node NodeName="Node02" IPAddressOrFQDN="localhost" NodeTypeRef="NodeType02" FaultDomain="fd:/DC01/Rack02" UpgradeDomain="UpgradeDomain2" IsSeedNode="true" />
        <Node NodeName="Node03" IPAddressOrFQDN="localhost" NodeTypeRef="NodeType03" FaultDomain="fd:/DC01/Rack03" UpgradeDomain="UpgradeDomain3" IsSeedNode="true" />
        <Node NodeName="Node04" IPAddressOrFQDN="localhost" NodeTypeRef="NodeType04" FaultDomain="fd:/DC02/Rack01" UpgradeDomain="UpgradeDomain1" IsSeedNode="true" />
        <Node NodeName="Node05" IPAddressOrFQDN="localhost" NodeTypeRef="NodeType05" FaultDomain="fd:/DC02/Rack02" UpgradeDomain="UpgradeDomain2" IsSeedNode="true" />
        <Node NodeName="Node06" IPAddressOrFQDN="localhost" NodeTypeRef="NodeType06" FaultDomain="fd:/DC02/Rack03" UpgradeDomain="UpgradeDomain3" IsSeedNode="true" />
        <Node NodeName="Node07" IPAddressOrFQDN="localhost" NodeTypeRef="NodeType07" FaultDomain="fd:/DC03/Rack01" UpgradeDomain="UpgradeDomain1" IsSeedNode="true" />
        <Node NodeName="Node08" IPAddressOrFQDN="localhost" NodeTypeRef="NodeType08" FaultDomain="fd:/DC03/Rack02" UpgradeDomain="UpgradeDomain2" IsSeedNode="true" />
        <Node NodeName="Node09" IPAddressOrFQDN="localhost" NodeTypeRef="NodeType09" FaultDomain="fd:/DC03/Rack03" UpgradeDomain="UpgradeDomain3" IsSeedNode="true" />
      </NodeList>
    </WindowsServer>
  </Infrastructure>

Im folgenden Beispiel wird „ClusterConfig.json“ für eigenständige Bereitstellungen verwendet:This example uses ClusterConfig.json for standalone deployments:

"nodes": [
  {
    "nodeName": "vm1",
    "iPAddress": "localhost",
    "nodeTypeRef": "NodeType0",
    "faultDomain": "fd:/dc1/r0",
    "upgradeDomain": "UD1"
  },
  {
    "nodeName": "vm2",
    "iPAddress": "localhost",
    "nodeTypeRef": "NodeType0",
    "faultDomain": "fd:/dc1/r0",
    "upgradeDomain": "UD2"
  },
  {
    "nodeName": "vm3",
    "iPAddress": "localhost",
    "nodeTypeRef": "NodeType0",
    "faultDomain": "fd:/dc1/r0",
    "upgradeDomain": "UD3"
  },
  {
    "nodeName": "vm4",
    "iPAddress": "localhost",
    "nodeTypeRef": "NodeType0",
    "faultDomain": "fd:/dc2/r0",
    "upgradeDomain": "UD1"
  },
  {
    "nodeName": "vm5",
    "iPAddress": "localhost",
    "nodeTypeRef": "NodeType0",
    "faultDomain": "fd:/dc2/r0",
    "upgradeDomain": "UD2"
  },
  {
    "nodeName": "vm6",
    "iPAddress": "localhost",
    "nodeTypeRef": "NodeType0",
    "faultDomain": "fd:/dc2/r0",
    "upgradeDomain": "UD3"
  },
  {
    "nodeName": "vm7",
    "iPAddress": "localhost",
    "nodeTypeRef": "NodeType0",
    "faultDomain": "fd:/dc3/r0",
    "upgradeDomain": "UD1"
  },
  {
    "nodeName": "vm8",
    "iPAddress": "localhost",
    "nodeTypeRef": "NodeType0",
    "faultDomain": "fd:/dc3/r0",
    "upgradeDomain": "UD2"
  },
  {
    "nodeName": "vm9",
    "iPAddress": "localhost",
    "nodeTypeRef": "NodeType0",
    "faultDomain": "fd:/dc3/r0",
    "upgradeDomain": "UD3"
  }
],

Hinweis

Wenn Sie über den Azure Resource Manager Cluster definieren, weist Azure Fehler- und Upgradedomänen zu.When you're defining clusters via Azure Resource Manager, Azure assigns fault domains and upgrade domains. Deshalb umfasst die Definition von Knotentypen und VM-Skalierungsgruppen in Ihrer Azure Resource Manager-Vorlage keine Informationen zu Fehler- oder Upgradedomänen.So the definition of your node types and virtual machine scale sets in your Azure Resource Manager template doesn't include information about fault domain or upgrade domain.

Knoteneigenschaften und PlatzierungseinschränkungenNode properties and placement constraints

In den meisten Fällen müssen Sie sicherstellen, dass bestimmte Workloads nur auf bestimmten Knotentypen im Cluster ausgeführt werden.Sometimes (in fact, most of the time) you’ll want to ensure that certain workloads run only on certain types of nodes in the cluster. Beispielsweise ist es möglich, dass nur für bestimmte Workloads GPUs oder SSDs erforderlich sind.For example, some workloads might require GPUs or SSDs, and others might not.

Nahezu jede n-schichtige Architektur eignet sich als Beispiel für die Ausrichtung von Hardware auf bestimmte Workloads.A great example of targeting hardware to particular workloads is almost every n-tier architecture. Bestimmte Computer werden von der Anwendung als Front-End oder zur Bereitstellung der API verwendet und sind für die Clients oder das Internet verfügbar.Certain machines serve as the front end or API-serving side of the application and are exposed to the clients or the internet. Unterschiedliche Computer (häufig mit unterschiedlichen Hardwareressourcen) verarbeiten die Workload der Compute- oder Speicherebenen.Different machines, often with different hardware resources, handle the work of the compute or storage layers. Diese sind normalerweise nicht direkt für Clients oder das Internet verfügbar.These are usually not directly exposed to clients or the internet.

In Service Fabric wird davon ausgegangen, dass Situationen eintreten, in denen bestimmte Workloads in bestimmten Hardwarekonfigurationen ausgeführt werden müssen.Service Fabric expects that in some cases, particular workloads might need to run on particular hardware configurations. Beispiel:For example:

  • Eine vorhandene n-schichtige Anwendung wurde per Lift & Shift in eine Service Fabric-Umgebung verschoben.An existing n-tier application has been “lifted and shifted” into a Service Fabric environment.
  • Eine Workload muss aus Gründen der Leistung, Skalierbarkeit oder Sicherheitsisolation auf einer bestimmten Hardware ausgeführt werden.A workload must be run on specific hardware for performance, scale, or security isolation reasons.
  • Eine Workload sollte aufgrund von Richtlinien oder des Ressourcenverbrauchs von anderen Workloads isoliert werden.A workload should be isolated from other workloads for policy or resource consumption reasons.

Service Fabric unterstützt diese Konfigurationen durch Tags, die Sie auf Knoten anwenden können.To support these sorts of configurations, Service Fabric includes tags that you can apply to nodes. Diese Tags werden als Knoteneigenschaften bezeichnet.These tags are called node properties. Platzierungseinschränkungen sind die Anweisungen, die an einzelne Dienste angefügt sind. Diese Anweisungen wählen Sie für mindestens eine Knoteneigenschaft aus.Placement constraints are the statements attached to individual services that you select for one or more node properties. Platzierungseinschränkungen definieren, an welcher Stelle Dienste ausgeführt werden sollen.Placement constraints define where services should run. Die Einschränkungen sind erweiterbar.The set of constraints is extensible. Dafür können beliebige Schlüssel-Wert-Paare verwendet werden.Any key/value pair can work.

Verschiedene Workloads für ein Clusterlayout

![Different workloads for a cluster layout][Image5]

Integrierte KnoteneigenschaftenBuilt-in node properties

In Service Fabric werden einige Standardknoteneigenschaften definiert, die automatisch verwendet werden können, ohne vorher festgelegt werden zu müssen.Service Fabric defines some default node properties that can be used automatically so you don't have to define them. Für jeden Knoten sind die Standardeigenschaften NodeType und NodeName definiert.The default properties defined at each node are NodeType and NodeName.

Sie können beispielsweise folgende Platzierungseinschränkung schreiben: "(NodeType == NodeType03)".For example, you can write a placement constraint as "(NodeType == NodeType03)". NodeType ist eine häufig verwendete Eigenschaft.NodeType is a commonly used property. Sie ist hilfreich, da sie eindeutig dem Typ eines Computers entspricht.It's useful because it corresponds 1:1 with a type of a machine. Jeder Computertyp wiederum entspricht einem Typ von Workload in einer herkömmlichen n-schichtigen Anwendung.Each type of machine corresponds to a type of workload in a traditional n-tier application.

Platzierungseinschränkungen und Knoteneigenschaften

![Placement constraints and node properties][Image6]

Syntax von Platzierungseinschränkungen und KnoteneigenschaftenPlacement constraints and node property syntax

Der Wert in der Knoteneigenschaft kann als Zeichenfolge, boolescher Wert oder als Wert des Typs „signed long“ angegeben werden.The value specified in the node property can be a string, Boolean, or signed long. Die Anweisung im Dienst wird als Platzierungseinschränkung bezeichnet, weil damit eingeschränkt wird, wo der Dienst im Cluster ausgeführt werden kann.The statement at the service is called a placement constraint because it constrains where the service can run in the cluster. Bei der Einschränkung kann es sich um eine boolesche Anweisung handeln, die für die Knoteneigenschaften im Cluster ausgeführt wird.The constraint can be any Boolean statement that operates on the node properties in the cluster. Die gültigen Selektoren in diesen booleschen Anweisungen lauten:The valid selectors in these Boolean statements are:

  • Bedingungsüberprüfungen zum Erstellen bestimmter Anweisungen:Conditional checks for creating particular statements:

    -Anweisung.Statement SyntaxSyntax
    "equal to" (ist gleich)"equal to" "==""=="
    "not equal to" (ungleich)"not equal to" "!=""!="
    "greater than" (größer als)"greater than" ">"">"
    "greater than or equal to" (größer als oder gleich)"greater than or equal to" ">="">="
    "less than" (kleiner als)"less than" "<""<"
    "less than or equal to" (kleiner als oder gleich)"less than or equal to" "<=""<="
  • Boolesche Anweisungen für Gruppierungen und logische Vorgänge:Boolean statements for grouping and logical operations:

    -Anweisung.Statement SyntaxSyntax
    "and" (und)"and" "&&""&&"
    "or" (oder)"or" "||""||"
    "not" (nicht)"not" "!""!"
    "group as single statement" (Als einzelne Anweisung gruppieren)"group as single statement" "()""()"

Im Folgenden sehen Sie einige Beispiele für Anweisungen von Basiseinschränkungen:Here are some examples of basic constraint statements:

  • "Value >= 5"
  • "NodeColor != green"
  • "((OneProperty < 100) || ((AnotherProperty == false) && (OneProperty >= 100)))"

Nur auf Knoten, bei denen die Anweisung der Platzierungseinschränkung insgesamt als „True“ ausgewertet wird, kann ein Dienst platziert werden.Only nodes where the overall placement constraint statement evaluates to “True” can have the service placed on it. Für Knoten ohne eine Eigenschaft kann keine Übereinstimmung mit einer Platzierungseinschränkung ermittelt werden, die die Eigenschaft enthält.Nodes that don't have a property defined don't match any placement constraint that contains the property.

Angenommen, die folgenden Knoteneigenschaften für einen Knotentyp wurden in „ClusterManifest.xml“ definiert:Let’s say that the following node properties were defined for a node type in ClusterManifest.xml:

    <NodeType Name="NodeType01">
      <PlacementProperties>
        <Property Name="HasSSD" Value="true"/>
        <Property Name="NodeColor" Value="green"/>
        <Property Name="SomeProperty" Value="5"/>
      </PlacementProperties>
    </NodeType>

Im folgenden Beispiel werden Knoteneigenschaften gezeigt, die sich bei eigenständigen Bereitstellungen in „ClusterConfig.json“ und bei Clustern, die in Azure gehostet sind, in „Template.json“ befinden.The following example shows node properties defined via ClusterConfig.json for standalone deployments or Template.json for Azure-hosted clusters.

Hinweis

In der Azure Resource Manager-Vorlage ist der Knotentyp üblicherweise parametrisiert.In your Azure Resource Manager template, the node type is usually parameterized. Er liegt nicht als „NodeType01“, sondern in der Form "[parameters('vmNodeType1Name')]" vor.It would look like "[parameters('vmNodeType1Name')]" rather than NodeType01.

"nodeTypes": [
    {
        "name": "NodeType01",
        "placementProperties": {
            "HasSSD": "true",
            "NodeColor": "green",
            "SomeProperty": "5"
        },
    }
],

Sie können Dienstplatzierungseinschränkungen für einen Dienst wie folgt erstellen:You can create service placement constraints for a service as follows:

FabricClient fabricClient = new FabricClient();
StatefulServiceDescription serviceDescription = new StatefulServiceDescription();
serviceDescription.PlacementConstraints = "(HasSSD == true && SomeProperty >= 4)";
// Add other required ServiceDescription fields
//...
await fabricClient.ServiceManager.CreateServiceAsync(serviceDescription);
New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceType -Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton -PlacementConstraint "HasSSD == true && SomeProperty >= 4"

Wenn alle Knoten des Typs „NodeType01“ gültig sind, können Sie diesen Knotentyp auch mit der Einschränkung "(NodeType == NodeType01)" auswählen.If all nodes of NodeType01 are valid, you can also select that node type with the constraint "(NodeType == NodeType01)".

Platzierungseinschränkungen eines Diensts können während der Laufzeit dynamisch aktualisiert werden.A service’s placement constraints can be updated dynamically during runtime. Falls erforderlich, können Sie beispielsweise einen Dienst im Cluster verschieben oder Anforderungen hinzufügen und entfernen.If you need to, you can move a service around in the cluster, add and remove requirements, and so on. Service Fabric stellt sicher, dass der Dienst einsatzbereit und verfügbar bleibt, selbst wenn diese Änderungen ausgeführt werden.Service Fabric ensures that the service stays up and available even when these types of changes are made.

StatefulServiceUpdateDescription updateDescription = new StatefulServiceUpdateDescription();
updateDescription.PlacementConstraints = "NodeType == NodeType01";
await fabricClient.ServiceManager.UpdateServiceAsync(new Uri("fabric:/app/service"), updateDescription);
Update-ServiceFabricService -Stateful -ServiceName $serviceName -PlacementConstraints "NodeType == NodeType01"

Platzierungseinschränkungen werden für jede benannte Dienstinstanz angegeben.Placement constraints are specified for every named service instance. Updates ersetzen (überschreiben) immer die vorherige Angabe.Updates always take the place of (overwrite) what was previously specified.

Die Clusterdefinition definiert die Eigenschaften für einen Knoten.The cluster definition defines the properties on a node. Werden die Eigenschaften eines Knotens geändert, ist ein Upgrade der Clusterkonfiguration erforderlich.Changing a node's properties requires an upgrade to the cluster configuration. Beim Durchführen eines Upgrades für Knoteneigenschaften muss jeder betroffene Knoten neu gestartet werden, sodass seine neuen Eigenschaften gemeldet werden.Upgrading a node's properties requires each affected node to restart to report its new properties. Diese parallelen Upgrades werden von Service Fabric verwaltet.Service Fabric manages these rolling upgrades.

Beschreiben und Verwalten von ClusterressourcenDescribing and managing cluster resources

Eine der wichtigsten Aufgaben eines Orchestrators besteht in der Verwaltung des Ressourcenverbrauchs im Cluster.One of the most important jobs of any orchestrator is to help manage resource consumption in the cluster. Das Verwalten von Clusterressourcen kann viele verschiedene Aspekte umfassen.Managing cluster resources can mean a couple of different things.

Zunächst ist sicherstellen, dass die Computer nicht überlastet werden.First, there's ensuring that machines are not overloaded. Das heißt, es muss dafür gesorgt werden, dass auf Computern nicht mehr Dienste ausgeführt werden, als sie bewältigen können.This means making sure that machines aren't running more services than they can handle.

Zusätzlich sind Lastenausgleiche und Optimierungen erforderlich. Diese sind unverzichtbar, damit Dienste effizient ausgeführt werden.Second, there's balancing and optimization, which are critical to running services efficiently. Kosteneffiziente oder leistungsabhängige Dienstangebote lassen nicht zu, dass einige Knoten stark und andere nur gering ausgelastet werden.Cost-effective or performance-sensitive service offerings can't allow some nodes to be hot while others are cold. Stark ausgelastete Knoten führen zu Ressourcenkonflikten und schlechter Leistung.Hot nodes lead to resource contention and poor performance. Knoten mit geringer Auslastung führen zur Verschwendung von Ressourcen und zu höheren Kosten.Cold nodes represent wasted resources and increased costs.

Service Fabric stellt Ressourcen als Metriken dar.Service Fabric represents resources as metrics. Bei Metriken handelt es sich um alle logischen oder physischen Ressourcen, die Sie für Service Fabric beschreiben möchten.Metrics are any logical or physical resource that you want to describe to Service Fabric. Beispiele für Metriken sind „WorkQueueDepth“ oder „MemoryInMb“.Examples of metrics are “WorkQueueDepth” or “MemoryInMb.” Informationen zu den physischen Ressourcen, die von Service Fabric auf Knoten verwaltet werden können, finden Sie unter Ressourcenkontrolle.For information about the physical resources that Service Fabric can govern on nodes, see Resource governance. Informationen zu den Standardmetriken, die vom Clusterressourcen-Manager verwendet werden, sowie zum Konfigurieren von benutzerdefinierten Metriken finden Sie in diesem Artikel.For information on the default metrics used by the Cluster Resource Manager and how to configure custom metrics, see this article.

Metriken unterscheiden sich von Platzierungseinschränkungen und Knoteneigenschaften.Metrics are different from placement constraints and node properties. Knoteneigenschaften sind statische Deskriptoren der Knoten.Node properties are static descriptors of the nodes themselves. Metriken beschreiben die Ressourcen, über die Knoten verfügen und die von Diensten genutzt werden, wenn sie auf einem Knoten ausgeführt werden.Metrics describe resources that nodes have and that services consume when they run on a node. Eine Knoteneigenschaft ist beispielsweise HasSSD. Diese kann auf „true“ oder „false“ festgelegt werden.A node property might be HasSSD and might be set to true or false. Die Menge des verfügbaren Speicherplatzes auf dieser SSD und der von Diensten verwendete Speicher kann eine Metrik wie „DriveSpaceInMb“ sein.The amount of space available on that SSD and how much is consumed by services would be a metric like “DriveSpaceInMb.”

Der Clusterressourcen-Manager von Service Fabric kann die Namen von Metriken ebenso wenig interpretieren wie Platzierungseinschränkungen und Knoteneigenschaften.Just like for placement constraints and node properties, Service Fabric Cluster Resource Manager doesn't understand what the names of the metrics mean. Bei Namen von Metriken handelt es sich lediglich um Zeichenfolgen.Metric names are just strings. Falls die Gefahr von Mehrdeutigkeiten besteht, sollten Sie Einheiten als Teil der von Ihnen erstellten Metriknamen deklarieren.It's a good practice to declare units as a part of the metric names that you create when they might be ambiguous.

CapacityCapacity

Wenn Sie den Lastenausgleichfür alle Ressourcen deaktivieren, kann der Clusterressourcen-Manager von Service Fabric dennoch versuchen sicherzustellen, dass kein Knoten überlastet wird.If you turned off all resource balancing, Service Fabric Cluster Resource Manager would still ensure that no node goes over its capacity. Das Verwalten von Kapazitätsüberläufen ist möglich, es sei denn, der Cluster ist zu belegt und die Workload ist größer als jeder einzelne Knoten.Managing capacity overruns is possible unless the cluster is too full or the workload is larger than any node. Die Kapazität ist eine weitere Einschränkung, anhand der der Clusterressourcen-Manager ermittelt, wie viele Ressourcen auf einem Knoten verfügbar sind.Capacity is another constraint that Cluster Resource Manager uses to understand how much of a resource a node has. Auch die verbleibende Kapazität wird für den gesamten Cluster nachverfolgt.Remaining capacity is also tracked for the cluster as a whole.

Sowohl die Kapazität als auch der Verbrauch auf Dienstebene werden als Metrik ausgedrückt.Both the capacity and the consumption at the service level are expressed in terms of metrics. Die Metrik kann beispielsweise „ClientConnections“ lauten, und ein Knoten kann für „ClientConnections“ eine Kapazität von 32.768 Verbindungen aufweisen.For example, the metric might be "ClientConnections" and a node might have a capacity for "ClientConnections" of 32,768. Anderen Knoten können andere Grenzwerte aufweisen.Other nodes can have other limits. Ein Dienst, der auf diesem Knoten ausgeführt wird, kann beispielsweise melden, dass aktuell 32.256 Einheiten der Metrik „ClientConnections“ genutzt werden.A service running on that node can say it's currently consuming 32,256 of the metric "ClientConnections."

Während der Laufzeit verfolgt der Clusterressourcen-Manager die verbleibende Kapazität im Cluster und auf den Knoten nach.During runtime, Cluster Resource Manager tracks remaining capacity in the cluster and on nodes. Dazu subtrahiert er den Verbrauch jedes Diensts von der Kapazität des Knotens, auf dem der Dienst ausgeführt wird.To track capacity, Cluster Resource Manager subtracts each service's usage from a node's capacity where the service runs. Mit diesen Informationen kann der Clusterressourcen-Manager ermitteln, wo Replikate platziert oder wohin diese verschoben werden sollen, um die Kapazität der Knoten nicht zu überschreiten.With this information, Cluster Resource Manager can figure out where to place or move replicas so that nodes don’t go over capacity.

Clusterknoten und -kapazität

![Cluster nodes and capacity][Image7]
StatefulServiceDescription serviceDescription = new StatefulServiceDescription();
ServiceLoadMetricDescription metric = new ServiceLoadMetricDescription();
metric.Name = "ClientConnections";
metric.PrimaryDefaultLoad = 1024;
metric.SecondaryDefaultLoad = 0;
metric.Weight = ServiceLoadMetricWeight.High;
serviceDescription.Metrics.Add(metric);
await fabricClient.ServiceManager.CreateServiceAsync(serviceDescription);
New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName –Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton –Metric @("ClientConnections,High,1024,0)

Die festgelegten Kapazitäten finden Sie im Clustermanifest.You can see capacities defined in the cluster manifest. Im Folgenden sehen Sie ein Beispiel für „ClusterManifest.xml“:Here's an example for ClusterManifest.xml:

    <NodeType Name="NodeType03">
      <Capacities>
        <Capacity Name="ClientConnections" Value="65536"/>
      </Capacities>
    </NodeType>

Im folgenden Beispiel werden Kapazitäten gezeigt, die sich bei eigenständigen Bereitstellungen in „ClusterConfig.json“ und bei Clustern, die in Azure gehostet sind, in „Template.json“ befinden:Here's an example of capacities defined via ClusterConfig.json for standalone deployments or Template.json for Azure-hosted clusters:

"nodeTypes": [
    {
        "name": "NodeType03",
        "capacities": {
            "ClientConnections": "65536",
        }
    }
],

Häufig ändert sich die Last eines Diensts dynamisch.A service’s load often changes dynamically. Angenommen, die Last eines Replikats, die mit der Metrik „ClientConnections“ erfasst wird, ist von 1024 auf 2048 angestiegen.Say that a replica's load of "ClientConnections" changed from 1,024 to 2,048. Zuvor waren für den Knoten, auf dem das Replikat ausgeführt wurde, noch 512 Metrikeinheiten verfügbar.The node that it was running on then had a capacity of only 512 remaining for that metric. Die Platzierung dieses Replikats bzw. der Instanz ist nun ungültig, da auf dem Knoten nicht genügend Kapazitäten vorhanden sind.Now that replica or instance's placement is invalid, because there's not enough room on that node. Daher muss der Clusterressourcen-Manager eingreifen und für den Knoten wieder die Einhaltung der Kapazitätsgrenze sicherstellen.Cluster Resource Manager has to get the node back below capacity. Er verringert den Teil der Knotenlast, der seine Kapazität übersteigt, indem ein oder mehrere Replikate bzw. Instanzen von diesem Knoten auf andere Knoten verschoben werden.It reduces load on the node that's over capacity by moving one or more of the replicas or instances from that node to other nodes.

Der Clusterressourcen-Manager versucht, den Aufwand für das Verschieben von Replikaten zu minimieren.Cluster Resource Manager tries to minimize the cost of moving replicas. Weitere Informationen finden Sie im Artikel zum Verschiebungsaufwand und im Artikel zu Strategien und Regeln für einen erneuten Ausgleich.You can learn more about movement cost and about rebalancing strategies and rules.

ClusterkapazitätCluster capacity

Wie stellt der Clusterressourcen-Manager von Service Fabric sicher, dass der Cluster insgesamt nicht zu stark ausgelastet wird?How does the Service Fabric Cluster Resource Manager keep the overall cluster from being too full? Bei einer dynamischen Last sind die Möglichkeiten begrenzt.With dynamic load, there’s not a lot it can do. Dienste können unabhängig von Aktionen, die vom Clusterressourcen-Manager ausgeführt werden, Lastspitzen aufweisen.Services can have their load spike independently of actions that Cluster Resource Manager takes. Ein Cluster, der aktuell über eine ausreichende Kapazität verfügt, kann bei stark ansteigender Nachfrage in kürzester Zeit überlastet werden.As a result, your cluster with plenty of headroom today might be underpowered if there's a spike tomorrow.

Dieses Problem kann durch Steuermechanismen im Clusterressourcen-Manager vermieden werden.Controls in Cluster Resource Manager help prevent problems. Sie können zunächst die Erstellung neuer Workloads verhindern, die eine Überlastung des Clusters verursachen.The first thing you can do is prevent the creation of new workloads that would cause the cluster to become full.

Angenommen, Sie erstellen einen zustandslosen Dienst, der eine bestimmte Last aufweist.Let's say that you create a stateless service, and it has some load associated with it. Der Dienst berücksichtigt die Metrik „DiskSpaceInMb“The service cares about the "DiskSpaceInMb" metric. und nutzt für jede Dienstinstanz fünf Einheiten.The service will consume five units of "DiskSpaceInMb" for every instance of the service. Sie möchten drei Instanzen des Diensts erstellen.You want to create three instances of the service. Daher benötigen Sie 15 Einheiten von „DiskSpaceInMb“ im Cluster, um die Dienstinstanzen erstellen zu können.That means you need 15 units of "DiskSpaceInMb" to be present in the cluster for you to even create these service instances.

Der Clusterressourcen-Manager berechnet regelmäßig die Kapazität und den Verbrauch jeder Metrik, sodass die verbleibende Kapazität im Cluster bestimmt werden kann.Cluster Resource Manager continually calculates the capacity and consumption of each metric so it can determine the remaining capacity in the cluster. Falls nicht genügend Speicherplatz vorhanden ist, lehnt der Clusterressourcen-Manager den Aufruf zum Erstellen des Diensts ab.If there isn't enough space, Cluster Resource Manager rejects the call to create a service.

Da die einzige Anforderung darin besteht, dass 15 Einheiten verfügbar sein müssen, können Sie den Speicher für diese auf unterschiedliche Weise belegen.Because the requirement is only that 15 units will be available, you can allocate this space in many different ways. Möglicherweise ist für 15 unterschiedlichen Knoten eine verbleibende Kapazitätseinheit verfügbar, oder drei verbleibende Einheiten stehen für fünf unterschiedlichen Knoten bereit.For example, there might be one remaining unit of capacity on 15 different nodes, or three remaining units of capacity on five different nodes. Wenn der Clusterressourcen-Manager die Anordnung so ändern kann, dass auf drei Knoten fünf Einheiten verfügbar sind, wird der Dienst platziert.If Cluster Resource Manager can rearrange things so there are five units available on three nodes, it places the service. Das Neuanordnen des Clusters ist im Allgemeinen möglich, es sei denn, der Cluster ist nahezu voll belegt oder die vorhandenen Dienste können aus bestimmten Gründen nicht konsolidiert werden.Rearranging the cluster is usually possible unless the cluster is almost full or the existing services can't be consolidated for some reason.

Gepufferte KapazitätBuffered capacity

Die gepufferte Kapazität ist ein weiteres Feature des Clusterressourcen-Managers.Buffered capacity is another feature of Cluster Resource Manager. Sie ermöglicht die Reservierung eines bestimmten Teils der Knotengesamtkapazität.It allows reservation of some portion of the overall node capacity. Dieser Kapazitätspuffer wird ausschließlich dazu verwendet, Dienste während Upgrades und Knotenausfällen zu platzieren.This capacity buffer is used only to place services during upgrades and node failures.

Die gepufferte Kapazität wird pro Metrik global für alle Knoten angegeben.Buffered capacity is specified globally per metric for all nodes. Der Wert, den Sie für die reservierte Kapazität auswählen, ist abhängig von der Anzahl der Fehler- und Upgradedomänen im Cluster.The value that you pick for the reserved capacity is a function of the number of fault and upgrade domains that you have in the cluster. Eine höhere Anzahl von Fehler- und Upgradedomänen bedeutet, dass Sie für Ihre gepufferte Kapazität einen niedrigeren Wert festlegen können.More fault and upgrade domains mean that you can pick a lower number for your buffered capacity. Bei einer größeren Zahl von Domänen können Sie erwarten, dass geringere Mengen Ihres Clusters bei Upgrades und Ausfällen nicht verfügbar sind.If you have more domains, you can expect smaller amounts of your cluster to be unavailable during upgrades and failures. Das Angeben der gepufferten Kapazität ist nur sinnvoll, wenn Sie auch die Knotenkapazität für eine Metrik angegeben haben.Specifying buffered capacity makes sense only if you have also specified the node capacity for a metric.

Anhand des folgenden Beispiels wird gezeigt, wie Sie die gepufferte Kapazität in „ClusterManifest.xml“ festlegen:Here's an example of how to specify buffered capacity in ClusterManifest.xml:

        <Section Name="NodeBufferPercentage">
            <Parameter Name="SomeMetric" Value="0.15" />
            <Parameter Name="SomeOtherMetric" Value="0.20" />
        </Section>

Im folgenden Beispiel wird gezeigt, wie Sie die gepufferte Kapazität festlegen. Für eigenständige Bereitstellungen verwenden Sie „ClusterConfig.json“, für Cluster, die in Azure gehostet sind, nutzen Sie „Template.json“:Here's an example of how to specify buffered capacity via ClusterConfig.json for standalone deployments or Template.json for Azure-hosted clusters:

"fabricSettings": [
  {
    "name": "NodeBufferPercentage",
    "parameters": [
      {
          "name": "SomeMetric",
          "value": "0.15"
      },
      {
          "name": "SomeOtherMetric",
          "value": "0.20"
      }
    ]
  }
]

Die Erstellung neuer Dienste ist nicht erfolgreich, wenn der Cluster für eine Metrik keine gepufferte Kapazität mehr aufweist.The creation of new services fails when the cluster is out of buffered capacity for a metric. Dadurch, dass zum Erhalt des Puffers verhindert wird, dass neue Dienste erstellt werden, wird sichergestellt, dass bei Upgrades oder Ausfällen die Kapazität von Knoten nicht überschritten wird.Preventing the creation of new services to preserve the buffer ensures that upgrades and failures don’t cause nodes to go over capacity. Die gepufferte Kapazität ist optional, aber sie wird für alle Cluster empfohlen, für die eine Kapazitätsmetrik definiert wird.Buffered capacity is optional, but we recommend it in any cluster that defines a capacity for a metric.

Der Clusterressourcen-Manager macht diese Lastinformationen verfügbar.Cluster Resource Manager exposes this load information. Für jede Metrik sind folgende Informationen vorhanden:For each metric, this information includes:

  • die Einstellungen für die gepufferte KapazitätThe buffered capacity settings.
  • die GesamtkapazitätThe total capacity.
  • die aktuelle NutzungThe current consumption.
  • die Angabe, ob die jeweilige Metrik als ausgeglichen oder nicht ausgeglichen betrachtet wirdWhether each metric is considered balanced or not.
  • Statistiken zur StandardabweichungStatistics about the standard deviation.
  • die Knoten mit der stärksten und der geringsten AuslastungThe nodes that have the most and least load.

Der folgende Code enthält hierzu eine Beispielausgabe:The following code shows an example of that output:

PS C:\Users\user> Get-ServiceFabricClusterLoadInformation
LastBalancingStartTimeUtc : 9/1/2016 12:54:59 AM
LastBalancingEndTimeUtc   : 9/1/2016 12:54:59 AM
LoadMetricInformation     :
                            LoadMetricName        : Metric1
                            IsBalancedBefore      : False
                            IsBalancedAfter       : False
                            DeviationBefore       : 0.192450089729875
                            DeviationAfter        : 0.192450089729875
                            BalancingThreshold    : 1
                            Action                : NoActionNeeded
                            ActivityThreshold     : 0
                            ClusterCapacity       : 189
                            ClusterLoad           : 45
                            ClusterRemainingCapacity : 144
                            NodeBufferPercentage  : 10
                            ClusterBufferedCapacity : 170
                            ClusterRemainingBufferedCapacity : 125
                            ClusterCapacityViolation : False
                            MinNodeLoadValue      : 0
                            MinNodeLoadNodeId     : 3ea71e8e01f4b0999b121abcbf27d74d
                            MaxNodeLoadValue      : 15
                            MaxNodeLoadNodeId     : 2cc648b6770be1bc9824fa995d5b68b1

Nächste SchritteNext steps