Descrizione di un cluster di Service FabricDescribing a service fabric cluster

Cluster Resource Manager di Service Fabric fornisce alcuni meccanismi per descrivere un cluster.The Service Fabric Cluster Resource Manager provides several mechanisms for describing a cluster. Durante la fase di esecuzione, Cluster Resource Manager usa queste informazioni per assicurare la disponibilità elevata dei servizi in esecuzione sul cluster.During runtime, the Cluster Resource Manager uses this information to ensure high availability of the services running in the cluster. Applicando queste regole importanti, tenta anche di ottimizzare il consumo di risorse all'interno del cluster.While enforcing these important rules, it also attempts to optimize the resource consumption within the cluster.

Concetti chiaveKey concepts

Cluster Resource Manager supporta diverse funzionalità che descrivono un cluster:The Cluster Resource Manager supports several features that describe a cluster:

  • Domini di erroreFault Domains
  • Domini di aggiornamentoUpgrade Domains
  • Proprietà del nodoNode Properties
  • Capacità del nodoNode Capacities

Domini di erroreFault domains

Un dominio di errore è un'area di errore coordinato.A Fault Domain is any area of coordinated failure. Un singolo computer è un dominio di errore, in quanto il computer si può arrestare da solo per vari motivi, da interruzioni dell'alimentazione a errori delle unità o firmware NIC non valido.A single machine is a Fault Domain (since it can fail on its own for various reasons, from power supply failures to drive failures to bad NIC firmware). I computer connessi allo stesso commutatore Ethernet si trovano nello stesso dominio di errore, analogamente ai computer che condividono una singola fonte di alimentazione o si trovano nella stessa posizione.Machines connected to the same Ethernet switch are in the same Fault Domain, as are machines sharing a single source of power or in a single location. Poiché è naturale che gli errori hardware si sovrappongano, i domini di errore sono intrinsecamente gerarchici e sono rappresentati come URI in Service Fabric.Since it's natural for hardware faults to overlap, Fault Domains are inherently hierarchal and are represented as URIs in Service Fabric.

È importante che i domini di errore siano impostati correttamente poiché Service Fabric usa queste informazioni per posizionare in modo sicuro i servizi.It is important that Fault Domains are set up correctly since Service Fabric uses this information to safely place services. Service Fabric non posiziona i servizi in modo che la perdita di un dominio di errore (a causa dell'errore di qualche componente) causi l'interruzione di un servizio.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. Service Fabric, nell'ambiente di Azure, usa le informazioni del dominio di errore fornite dall'ambiente per configurare in modo corretto i nodi nel cluster per conto dell'utente.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. Nella versione autonoma di Service Fabric, i domini di errore vengono definiti al momento della configurazione del clusterFor Service Fabric Standalone, Fault Domains are defined at the time that the cluster is set up

Avviso

È importante che le informazioni sul dominio di errore fornite a Service Fabric siano accurate.It is important that the Fault Domain information provided to Service Fabric is accurate. Si supponga, ad esempio, che i nodi del cluster di Service Fabric siano in esecuzione all'interno di dieci macchine virtuali, a loro volta in esecuzione su cinque host fisici.For example, let's say that your Service Fabric cluster's nodes are running inside 10 virtual machines, running on five physical hosts. In questo caso, anche se sono presenti 10 macchine virtuali, sono presenti solo 5 domini di errore diversi (livello superiore).In this case, even though there are 10 virtual machines, there are only 5 different (top level) fault domains. La condivisione dello stesso host fisico comporta per le macchine virtuali anche la condivisione dello stesso dominio di errore radice, poiché sulle macchine virtuali si verifica un errore coordinato se sul relativo host fisico si verifica un errore,Sharing the same physical host causes VMs to share the same root fault domain, since the VMs experience coordinated failure if their physical host fails.

Service Fabric non prevede il cambiamento del dominio di errore di un nodo.Service Fabric expects the Fault Domain of a node not to change. Altri meccanismi per garantire una disponibilità elevata delle macchine virtuali, ad esempio le macchine virtuali a disponibilità elevata, possono causare conflitti con Service Fabric, perché adottano la migrazione trasparente delle macchine virtuali da un host a un altro.Other mechanisms of ensuring high availability of the VMs such as HA-VMs may cause conflicts with Service Fabric, as they use transparent migration of VMs from one host to another. Questi meccanismi non riconfigurano né notificano il codice in esecuzione all'interno della macchina virtuale.These mechanisms do not reconfigure or notify the running code inside the VM. Di conseguenza, non sono supportati come ambienti per l'esecuzione dei cluster di Service Fabric.As such, they are not supported as environments for running Service Fabric clusters. Service Fabric deve essere l'unica tecnologia di disponibilità elevata in uso.Service Fabric should be the only high-availability technology employed. Non sono necessari meccanismi quali la migrazione in tempo reale della macchina virtuale, SAN, o altri.Mechanisms like live VM migration, SANs, or others are not necessary. Se usati insieme a Service Fabric, questi meccanismi riducono la disponibilità e l'affidabilità dell'applicazione, poiché introducono complessità aggiuntive, aggiungono origini centralizzate di errore e usano strategie di disponibilità e affidabilità che possono entrare in conflitto con quelle presenti in Service Fabric.If used in conjunction with Service Fabric, these mechanisms reduce application availability and reliability because they introduce additional complexity, add centralized sources of failure, and utilize reliability and availability strategies that conflict with those in Service Fabric.

Nella figura seguente tutte le entità che contribuiscono ai domini di errore sono colorate e sono elencati tutti i diversi domini di errore risultanti.In the graphic below we color all the entities that contribute to Fault Domains and list all the different Fault Domains that result. In questo esempio sono presenti data center ("DC"), rack ("R") e pannelli ("B").In this example, we have datacenters ("DC"), racks ("R"), and blades ("B"). Se ogni pannello include più macchine virtuali, è possibile che la gerarchia del dominio di errore includa un altro livello.Conceivably, if each blade holds more than one virtual machine, there could be another layer in the Fault Domain hierarchy.

Nodi organizzati tramite domini di errore
Nodes organized via Fault Domains

Durante la fase di esecuzione, Cluster Resource Manager di Service Fabric prende in considerazione i domini di errore del cluster e pianifica i layout.During runtime, the Service Fabric Cluster Resource Manager considers the Fault Domains in the cluster and plans layouts. Vengono distribuite le repliche con stato o le istanze senza stato per un determinato servizio in modo che si trovino in domini di errore diversi.The stateful replicas or stateless instances for a given service are distributed so they are in separate Fault Domains. La distribuzione del servizio tra domini di errore assicura che la disponibilità del servizio non sia compromessa se si verifica un errore in un dominio di errore a qualsiasi livello della gerarchia.Distributing the service across fault domains ensures the availability of the service is not compromised when a Fault Domain fails at any level of the hierarchy.

Cluster Resource Manager di Service Fabric non si cura del numero di livelli presenti nella gerarchia del dominio di errore.Service Fabric’s Cluster Resource Manager doesn’t care how many layers there are in the Fault Domain hierarchy. Tenta invece di garantire che la perdita di una parte della gerarchia non incida sui servizi che vi vengono eseguiti.However, it tries to ensure that the loss of any one portion of the hierarchy doesn’t impact services running in it.

È preferibile che sia presente lo stesso numero di nodi a ogni livello di profondità della gerarchia del dominio di errore.It is best if there are the same number of nodes at each level of depth in the Fault Domain hierarchy. Se l'albero dei domini di errore nel cluster è sbilanciato, è più difficile per Cluster Resource Manager determinare la migliore allocazione dei servizi.If the “tree” of Fault Domains is unbalanced in your cluster, it makes it harder for the Cluster Resource Manager to figure out the best allocation of services. Layout sbilanciati dei domini di errore comportano che la perdita di alcuni domini possa incidere maggiormente sulla disponibilità del cluster rispetto ad altri.Imbalanced Fault Domains layouts mean that the loss of some domains impact the availability of services more than other domains. Di conseguenza Cluster Resource Manager si trova a dover scegliere fra due obiettivi: usare i computer del dominio più dotato posizionando i servizi in essi o posizionare i servizi in altri domini, così che la perdita di un dominio non causi problemi.As a result, the Cluster Resource Manager is torn between two goals: It wants to use the machines in that “heavy” domain by placing services on them, and it wants to place services in other domains so that the loss of a domain doesn’t cause problems.

Come appaiono i domini sbilanciati?What do imbalanced domains look like? La figura seguente illustra due diversi layout per un cluster.In the diagram below, we show two different cluster layouts. Nel primo esempio i nodi sono distribuiti uniformemente tra i domini di errore.In the first example, the nodes are distributed evenly across the Fault Domains. Nel secondo esempio, un dominio di errore presenta molti più nodi degli altri.In the second example, one Fault Domain has many more nodes than the other Fault Domains.

Due layout diversi per i cluster
Two different cluster layouts

In Azure la scelta di quale dominio di errore deve contenere un nodo viene gestita automaticamente.In Azure, the choice of which Fault Domain contains a node is managed for you. Tuttavia, a seconda del numero di nodi di cui si esegue il provisioning, si possono comunque ottenere domini di errore con più nodi di altri.However, depending on the number of nodes that you provision you can still end up with Fault Domains with more nodes in them than others. Si immagini ad esempio di avere cinque domini di errore nel cluster e di eseguire il provisioning di sette nodi per un determinato NodeType.For example, say you have five Fault Domains in the cluster but provision seven nodes for a given NodeType. In questo caso i primi due domini di errore avranno più nodi.In this case, the first two Fault Domains end up with more nodes. Se si continua a distribuire altri NodeType con solo un paio di istanze, il problema peggiora.If you continue to deploy more NodeTypes with only a couple instances, the problem gets worse. Per questo motivo è consigliabile che il numero di nodi in ogni NodeType sia multiplo del numero di domini di errore.For this reason it's recommended that the number of nodes in each node type is a multiple of the number of Fault Domains.

Domini di aggiornamentoUpgrade domains

I domini di aggiornamento sono un'altra funzionalità che aiuta Cluster Resource Manager di Service Fabric a comprendere il layout del cluster.Upgrade Domains are another feature that helps the Service Fabric Cluster Resource Manager understand the layout of the cluster. I domini di aggiornamento definiscono set di nodi che vengono aggiornati contemporaneamente.Upgrade Domains define sets of nodes that are upgraded at the same time. I domini di aggiornamento aiutano Cluster Resource Manager a comprendere e orchestrare le operazioni di gestione come gli aggiornamenti.Upgrade Domains help the Cluster Resource Manager understand and orchestrate management operations like upgrades.

I domini di aggiornamento sono molto simili ai domini di errore, ma con un paio di differenze essenziali.Upgrade Domains are a lot like Fault Domains, but with a couple key differences. Innanzitutto, i domini di errore vengono definiti da aree di errori hardware coordinati.First, areas of coordinated hardware failures define Fault Domains. I domini di aggiornamento invece vengono definiti dai criteri.Upgrade Domains, on the other hand, are defined by policy. È possibile deciderne il numero desiderato, in quanto la decisione non viene presa dall'ambiente.You get to decide how many you want, rather than it being dictated by the environment. È possibile disporre dello stesso numero di domini di aggiornamento e di nodi.You could have as many Upgrade Domains as you do nodes. Un'altra differenza tra i domini di errore e i domini di aggiornamento è che questi ultimi non sono gerarchici.Another difference between Fault Domains and Upgrade Domains is that Upgrade Domains are not hierarchical. Sono invece più simili a un semplice tag.Instead, they are more like a simple tag.

Il diagramma seguente mostra tre domini di aggiornamento distribuiti su tre domini di errore.The following diagram shows three Upgrade Domains are striped across three Fault Domains. Illustra anche una sola posizione possibile per tre repliche diverse di un servizio con stato, dove ciascuna finisce in diversi domini di errore e di aggiornamento.It also shows one possible placement for three different replicas of a stateful service, where each ends up in different Fault and Upgrade Domains. Questo posizionamento consente la perdita di un dominio di errore mentre è in corso un aggiornamento del servizio, mantenendo comunque una copia del codice e dei dati.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.

Posizionamento con domini di errore e di aggiornamento
Placement With Fault and Upgrade Domains

L'uso di un numero elevato di domini di aggiornamento presenta vantaggi e svantaggi.There are pros and cons to having large numbers of Upgrade Domains. Se si hanno numerosi domini di aggiornamento, ogni passaggio dell'aggiornamento è più dettagliato e quindi influisce su un numero minore di nodi o servizi.More Upgrade Domains means each step of the upgrade is more granular and therefore affects a smaller number of nodes or services. Questo si traduce nella necessità di spostare meno servizi contemporaneamente nonché in una minore varianza del sistema.As a result, fewer services have to move at a time, introducing less churn into the system. Anche l'affidabilità tende a migliorare, poiché una parte minore del servizio è interessata da eventuali problemi introdotti durante l'aggiornamento.This tends to improve reliability, since less of the service is impacted by any issue introduced during the upgrade. La presenza di più domini di aggiornamento significa anche che è richiesto meno buffer disponibile negli altri nodi per gestire l'impatto dell'aggiornamento.More Upgrade Domains also means that you need less available buffer on other nodes to handle the impact of the upgrade. Ad esempio, se si dispone di cinque domini di aggiornamento, i nodi di ciascuno gestiscono circa il 20% del traffico.For example, if you have five Upgrade Domains, the nodes in each are handling roughly 20% of your traffic. Se è necessario bloccare il dominio di aggiornamento per un aggiornamento, il suo carico deve essere in genere trasferito altrove.If you need to take down that Upgrade Domain for an upgrade, that load usually needs to go somewhere. Poiché sono presenti quattro domini di aggiornamento rimanenti, ognuno deve disporre di spazio per circa il 5% del traffico totale.Since you have four remaining Upgrade Domains, each must have room for about 5% of the total traffic. Più domini di aggiornamento implicano la necessità di meno buffer nei nodi del cluster.More Upgrade Domains means you need less buffer on the nodes in the cluster. Si consideri, ad esempio, di disporre invece di dieci domini di aggiornamento.For example, consider if you had 10 Upgrade Domains instead. In questo caso ogni dominio di aggiornamento dovrebbe gestire solo circa il 10% del traffico totale.In that case, each UD would only be handling about 10% of the total traffic. Quando un aggiornamento passa per il cluster, ogni dominio deve avere spazio solo per circa l'1,1% del traffico totale.When an upgrade steps through the cluster, each domain would only need to have room for about 1.1% of the total traffic. Un maggior numero di domini di aggiornamento in genere consente un maggiore uso dei nodi, poiché è necessaria una capacità di riserva minore.More Upgrade Domains generally allow you to run your nodes at higher utilization, since you need less reserved capacity. Lo stesso vale per i domini di errore.The same is true for Fault Domains.

Lo svantaggio di avere molti domini di aggiornamento è che gli aggiornamenti tendono a richiedere più tempo.The downside of having many Upgrade Domains is that upgrades tend to take longer. Service Fabric attende per un breve periodo dopo il completamento di un aggiornamento ed esegue i controlli prima di avviare l'aggiornamento successivo.Service Fabric waits a short period of time after an Upgrade Domain is completed and performs checks before starting to upgrade the next one. Questi ritardi consentono di rilevare i problemi introdotti in seguito all'aggiornamento prima che l'aggiornamento continui.These delays enable detecting issues introduced by the upgrade before the upgrade proceeds. Questo compromesso è accettabile perché evita che modifiche non valide abbiano un impatto eccessivo sul servizio in un determinato momento.The tradeoff is acceptable because it prevents bad changes from affecting too much of the service at a time.

Anche l'uso di un numero troppo ridotto di domini di aggiornamento ha effetti collaterali negativi: mentre ogni singolo dominio di aggiornamento è inattivo e in fase di aggiornamento, una parte elevata della capacità complessiva non risulta disponibile.Too few Upgrade Domains has many negative side effects – while each individual Upgrade Domain is down and being upgraded a large portion of your overall capacity is unavailable. Ad esempio, se sono presenti solo tre domini di aggiornamento, 1/3 circa della capacità complessiva del servizio o del cluster non sarà disponibile in un determinato momento.For example, if you only have three Upgrade Domains you are taking down about 1/3 of your overall service or cluster capacity at a time. Avere una parte così grande del servizio inattiva contemporaneamente non è auspicabile poiché è necessario disporre di capacità sufficiente nel resto del cluster per gestire il carico di lavoro.Having so much of your service down at once isn’t desirable since you have to have enough capacity in the rest of your cluster to handle the workload. Gestire quel buffer significa che durante il normale funzionamento i nodi avranno minor carico di quanto dovuto.Maintaining that buffer means that during normal operation those nodes are less loaded than they would be otherwise. Questo approccio implica un aumento del costo di esecuzione del servizio.This increases the cost of running your service.

Non è previsto alcun limite effettivo per il numero totale di domini di errore o di aggiornamento in un ambiente e non sono previsti vincoli per le relative sovrapposizioni.There’s no real limit to the total number of fault or Upgrade Domains in an environment, or constraints on how they overlap. Ciò premesso, sono disponibili vari modelli comuni:That said, there are several common patterns:

  • Corrispondenza 1:1 fra domini di errore e domini di aggiornamentoFault Domains and Upgrade Domains mapped 1:1
  • Un dominio di aggiornamento per nodo (istanza del sistema operativo fisico o virtuale)One Upgrade Domain per Node (physical or virtual OS instance)
  • Un modello con "striping" o a "matrice" in cui i domini di errore e i domini di aggiornamento formano una matrice e i computer sono disposti lungo le diagonaliA “striped” or “matrix” model where the Fault Domains and Upgrade Domains form a matrix with machines usually running down the diagonals

Layout dei domini di errore e di aggiornamento
Fault and Upgrade Domain Layouts

Non esiste un layout ottimale, ogni layout presenta vantaggi e svantaggi.There’s no best answer which layout to choose, each has some pros and cons. Ad esempio, il modello di tipo 1FD:1UD è semplice da configurare.For example, the 1FD:1UD model is simple to set up. Il modello con un dominio di aggiornamento per nodo è probabilmente quello più noto.The 1 Upgrade Domain per Node model is most like what people are used to. Durante l'aggiornamento, ogni nodo viene aggiornato in modo indipendente.During upgrades each node is updated independently. È simile alla modalità con la quale un piccolo gruppo di computer veniva aggiornato manualmente in passato.This is similar to how small sets of machines were upgraded manually in the past.

Il modello più comune è basato sulla matrice FD/UD, in cui i domini di errore e i domini di aggiornamento formano una tabella e i nodi vengono posizionati a partire dalla diagonale.The most common model is the FD/UD matrix, where the FDs and UDs form a table and nodes are placed starting along the diagonal. È il modello usato per impostazione predefinita nei cluster di Service Fabric in Azure.This is the model used by default in Service Fabric clusters in Azure. Per i cluster con molti nodi, il risultato è simile al complesso modello di matrice precedente.For clusters with many nodes everything ends up looking like the dense matrix pattern above.

Vincoli del dominio di errore e di aggiornamento e comportamento risultanteFault and Upgrade Domain constraints and resulting behavior

Cluster Resource Manager considera come un vincolo il desiderio di mantenere un servizio bilanciato tra domini di errore e di aggiornamento.The Cluster Resource Manager treats the desire to keep a service balanced across fault and Upgrade Domains as a constraint. È possibile trovare altre informazioni sui vincoli in questo articolo.You can find out more about constraints in this article. I vincoli di dominio di errore e di aggiornamento stabiliscono: "Per una data partizione di servizio non deve esistere una differenza maggiore di uno nel numero di oggetti servizio (istanze di servizio senza stato o repliche con stato) tra due domini".The Fault and Upgrade Domain constraints state: "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 two domains." Ciò impedisce determinati spostamenti o disposizioni che violano il vincolo.This prevents certain moves or arrangements that violate this constraint.

Esaminiamo un esempio.Let's look at one example. Si supponga di avere un cluster con sei nodi, configurato con cinque domini di errore e cinque domini di aggiornamento.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

Si supponga ora di creare un servizio con TargetReplicaSetSize (oppure, per un servizio senza stato InstanceCount) pari a cinque.Now let's say that we create a service with a TargetReplicaSetSize (or, for a stateless service an InstanceCount) of five. Le repliche avvengono in N1 N5.The replicas land on N1-N5. N6 non verrà mai usato indipendentemente dal numero di servizi simili creati.In fact, N6 is never used no matter how many services like this you create. Ma perché?But why? Esaminiamo la differenza tra il layout corrente e ciò che accadrebbe se si scegliesse N6.Let's look at the difference between the current layout and what would happen if N6 is chosen.

Ecco il layout ottenuto e il numero totale di repliche per ogni dominio di errore e di aggiornamento: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 -

Questo layout è equilibrato in termini di nodi per dominio di errore e dominio di aggiornamento.This layout is balanced in terms of nodes per Fault Domain and Upgrade Domain. È anche bilanciato in termini di numero di repliche per dominio di errore e dominio di aggiornamento.It is also balanced in terms of the number of replicas per Fault and Upgrade Domain. Ogni dominio ha lo stesso numero di nodi e lo stesso numero di repliche.Each domain has the same number of nodes and the same number of replicas.

A questo punto vediamo cosa accadrebbe se usassimo N6 invece di N2.Now, let's look at what would happen if we'd used N6 instead of N2. Come sarebbero state distribuite le repliche?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 -

Questo layout viola la definizione del vincolo di dominio di errore.This layout violates our definition for the Fault Domain constraint. FD0 ha due repliche, mentre FD1 ne ha zero, perciò la differenza tra FD0 e FD1 è due.FD0 has two replicas, while FD1 has zero, making the difference between FD0 and FD1 a total of two. Cluster Resource Manager non consente questa disposizione.The Cluster Resource Manager does not allow this arrangement. Allo stesso modo, se si scegliesse N2 e N6 (anziché N1 e N2) si otterrebbe: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 -

Questo layout è bilanciato in termini di domini di errore.This layout is balanced in terms of Fault Domains. Viola tuttavia il vincolo del dominio di aggiornamento.However, now it's violating the Upgrade Domain constraint. Ciò avviene perché UD0 ha zero repliche mentre UD1 ne ha due.This is because UD0 has zero replicas while UD1 has two. Questo layout inoltre non è valido e non verrà scelto da Cluster Resource Manager.Therefore, this layout is also invalid and won't be picked by the Cluster Resource Manager.

Configurazione dei domini di errore e di aggiornamentoConfiguring fault and Upgrade Domains

La definizione dei domini di errore e dei domini di aggiornamento viene eseguita automaticamente nelle distribuzioni di Service Fabric ospitate in Azure.Defining Fault Domains and Upgrade Domains is done automatically in Azure hosted Service Fabric deployments. Service Fabric recupera semplicemente le informazioni sull'ambiente da Azure e le usa.Service Fabric picks up and uses the environment information from Azure.

Se si sta creando il proprio cluster o si desidera seguire una particolare topologia, è possibile specificare manualmente le informazioni sul dominio di errore e sul dominio di aggiornamento.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. In questo esempio definiamo un cluster di sviluppo locale con nove nodi che si estende su tre "data center" (ognuno con tre rack).In this example, we define a nine node local development cluster that spans three “datacenters” (each with three racks). Il cluster ha anche tre domini di aggiornamento distribuiti sui tre data center.This cluster also has three Upgrade Domains striped across those three datacenters. Di seguito viene riportato un esempio di configurazione:An example of the configuration is below:

ClusterManifest.xmlClusterManifest.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>

mediante ClusterConfig.json per le distribuzioni autonomevia 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"
  }
],

Nota

Quando si definiscono i cluster con Azure Resource Manager, Azure assegna i domini di errore e i domini di aggiornamento.When defining clusters via Azure Resource Manager, Fault Domains and Upgrade Domains are assigned by Azure. Pertanto, la definizione dei tipi di nodo e dei set di scalabilità delle macchine virtuali nel modello di Azure Resource Manager non include informazioni sul dominio di aggiornamento o sul dominio di errore.Therefore, the definition of your Node Types and Virtual Machine Scale Sets in your Azure Resource Manager template does not include Fault Domain or Upgrade Domain information.

Proprietà dei nodi e vincoli di posizionamentoNode properties and placement constraints

Nella maggior parte dei casi, si vuole assicurare che determinati carichi di lavoro vengano eseguiti solo su determinati tipi di nodi nel cluster.Sometimes (in fact, most of the time) you’re going to want to ensure that certain workloads run only on certain types of nodes in the cluster. Ad esempio, è possibile che alcuni carichi di lavoro richiedano GPU o SSD, mentre altri no.For example, some workload may require GPUs or SSDs while others may not. Un ottimo esempio di uso dell'hardware per carichi di lavoro specifici è dato da quasi tutte le architettura a più livelli.A great example of targeting hardware to particular workloads is almost every n-tier architecture out there. Alcuni computer fungono da lato front-end o API dell'applicazione e pertanto sono probabilmente esposti al client o a Internet.Certain machines serve as the front end or API serving side of the application and are exposed to the clients or the internet. Altri computer, spesso con risorse hardware diverse, gestiscono il lavoro dei livelli di calcolo o archiviazione.Different machines, often with different hardware resources, handle the work of the compute or storage layers. In genere non sono esposti direttamente a Internet o ai client.These are usually not directly exposed to clients or the internet. Service Fabric prevede alcune situazioni in cui determinati carichi di lavoro dovranno essere eseguiti in configurazioni hardware specifiche,Service Fabric expects that there are cases where particular workloads need to run on particular hardware configurations. ad esempio:For example:

  • Un'applicazione esistente con n livelli è stata "elevata e spostata" in un ambiente Service Fabric.an existing n-tier application has been “lifted and shifted” into a Service Fabric environment
  • Un carico di lavoro deve essere eseguito su hardware specifico per finalità di prestazioni, scalabilità o isolamento di sicurezza.a workload wants to run on specific hardware for performance, scale, or security isolation reasons
  • Un carico di lavoro deve essere isolato da altri carichi di lavoro per motivi relativi ai criteri o all'uso delle risorseA workload should be isolated from other workloads for policy or resource consumption reasons

Per supportare questi tipi di configurazione, Service Fabric dispone di tag estremamente efficienti applicabili ai nodi.To support these sorts of configurations, Service Fabric has a first class notion of tags that can be applied to nodes. Questi tag vengono chiamati proprietà del nodo.These tags are called node properties. I vincoli di posizionamento sono le istruzioni collegate ai singoli servizi che selezionano una o più proprietà del nodo.Placement constraints are the statements attached to individual services that select for one or more node properties. Definiscono la posizione in cui i servizi devono essere eseguiti.Placement constraints define where services should run. Il set di vincoli è estendibile: si può usare qualsiasi coppia chiave/valore.The set of constraints is extensible - any key/value pair can work.

Layout di cluster con carichi di lavoro diversi
Cluster Layout Different Workloads

Proprietà predefinite del nodoBuilt in node properties

Service Fabric definisce alcune proprietà predefinite dei nodi che possono essere successivamente usate automaticamente, senza alcun intervento da parte dell'utente.Service Fabric defines some default node properties that can be used automatically without the user having to define them. Le proprietà predefinite specificate a livello di ogni nodo sono NodeType e NodeName.The default properties defined at each node are the NodeType and the NodeName. Ad esempio è possibile scrivere un vincolo di posizionamento come "(NodeType == NodeType03)".So for example you could write a placement constraint as "(NodeType == NodeType03)". NodeType è una delle proprietà più usate.Generally we have found NodeType to be one of the most commonly used properties. È utile poiché ha una corrispondenza di 1:1 con un tipo di computer.It is useful since it corresponds 1:1 with a type of a machine. Ogni tipo di computer corrisponde a un tipo di carico di lavoro in un'applicazione tradizionale a più livelli.Each type of machine corresponds to a type of workload in a traditional n-tier application.

Vincoli di posizionamento e proprietà dei nodi
Placement Constraints and Node Properties

Vincoli di posizionamento e sintassi delle proprietà dei nodiPlacement Constraint and Node Property Syntax

Il valore specificato nella proprietà del nodo può essere una stringa, un valore booleano o un valore lungo firmato.The value specified in the node property can be a string, bool, or signed long. L'istruzione a livello di servizio è chiamata vincolo di posizionamento in quanto vincola la posizione in cui il servizio può essere eseguito nel cluster.The statement at the service is called a placement constraint since it constrains where the service can run in the cluster. Il vincolo può essere qualsiasi istruzione booleana che opera sulle diverse proprietà dei nodi nel cluster.The constraint can be any Boolean statement that operates on the different node properties in the cluster. I selettori validi in queste istruzioni booleane sono:The valid selectors in these boolean statements are:

1) controlli condizionali per la creazione di istruzioni specificheconditional checks for creating particular statements

IstruzioneStatement SintassiSyntax
"uguale a""equal to" "==""=="
"diverso da""not equal to" "!=""!="
"maggiore di""greater than" ">"">"
"maggiore o uguale a""greater than or equal to" ">="">="
"minore di""less than" "<""<"
"minore o uguale a""less than or equal to" "<=""<="

2) istruzioni booleane per il raggruppamento e le operazioni logicheboolean statements for grouping and logical operations

IstruzioneStatement SintassiSyntax
"and""and" "&&""&&"
"or""or" "||""||"
"not""not" "!""!"
"raggruppamento come singola istruzione""group as single statement" "()""()"

Di seguito sono riportati alcuni esempi di semplici istruzioni di vincolo.Here are some examples of basic constraint statements.

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

È possibile posizionare il servizio solo sui nodi in cui l'istruzione del vincolo di posizionamento generale restituisce "True".Only nodes where the overall placement constraint statement evaluates to “True” can have the service placed on it. I nodi per i quali sono state definite proprietà non corrispondono ad alcun vincolo di posizionamento che contiene proprietà.Nodes that do not have a property defined do not match any placement constraint containing that property.

Si supponga che siano state definite le proprietà seguenti per un tipo di nodo specifico:Let’s say that the following node properties were defined for a given node type:

ClusterManifest.xmlClusterManifest.xml

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

mediante ClusterConfig.json per le distribuzioni autonome o Template.json per cluster ospitati in Azure.via ClusterConfig.json for Standalone deployments or Template.json for Azure hosted clusters.

Nota

Nel modello di Azure Resource Manager il tipo di nodo è in genere con parametri,In your Azure Resource Manager template the node type is usually parameterized. e più simile a "[parameters('vmNodeType1Name')]" che non a "NodeType01".It would look like "[parameters('vmNodeType1Name')]" rather than "NodeType01".

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

È possibile creare vincoli di posizionamento del servizio per un servizio in modo analogo al seguente:You can create service placement constraints for a service like as follows:

C#C#

FabricClient fabricClient = new FabricClient();
StatefulServiceDescription serviceDescription = new StatefulServiceDescription();
serviceDescription.PlacementConstraints = "(HasSSD == true && SomeProperty >= 4)";
// add other required servicedescription fields
//...
await fabricClient.ServiceManager.CreateServiceAsync(serviceDescription);

Powershell:Powershell:

New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceType -Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton -PlacementConstraint "HasSSD == true && SomeProperty >= 4"

Se tutti i nodi NodeType01 sono validi, è anche possibile selezionare un tipo di nodo con vincolo "(NodeType == NodeType01)".If all nodes of NodeType01 are valid, you can also select that node type with the constraint "(NodeType == NodeType01)".

Uno dei vantaggi dei vincoli di posizionamento di un servizio consiste nel fatto che possono essere aggiornati in modo dinamico durante la fase di esecuzione.One of the cool things about a service’s placement constraints is that they can be updated dynamically during runtime. Se necessario, è quindi possibile spostare un servizio nel cluster, aggiungere e rimuovere requisiti e così via. Service Fabric assicura che il servizio sia sempre attivo e disponibile, anche durante l'applicazione di questi tipi di modifiche.So if you need to, you can move a service around in the cluster, add and remove requirements, etc. Service Fabric takes care of ensuring that the service stays up and available even when these types of changes are made.

C#:C#:

StatefulServiceUpdateDescription updateDescription = new StatefulServiceUpdateDescription();
updateDescription.PlacementConstraints = "NodeType == NodeType01";
await fabricClient.ServiceManager.UpdateServiceAsync(new Uri("fabric:/app/service"), updateDescription);

Powershell:Powershell:

Update-ServiceFabricService -Stateful -ServiceName $serviceName -PlacementConstraints "NodeType == NodeType01"

I vincoli di posizionamento vengono specificati per ogni istanza del servizio denominata in modo differente.Placement constraints are specified for every different named service instance. Gli aggiornamenti sostituiscono (sovrascrivono) sempre quanto specificato in precedenza.Updates always take the place of (overwrite) what was previously specified.

La definizione del cluster definisce le proprietà in un nodo.The cluster definition defines the properties on a node. Per modificare le proprietà di un nodo è necessario un aggiornamento della configurazione del cluster.Changing a node's properties requires a cluster configuration upgrade. L'aggiornamento delle proprietà di un nodo richiede che ogni nodo in questione venga riavviato per segnalare le nuove proprietà.Upgrading a node's properties requires each affected node to restart to report its new properties. Questi aggiornamenti in sequenza sono gestiti da Service Fabric.These rolling upgrades are managed by Service Fabric.

Descrizione e gestione delle risorse del clusterDescribing and Managing Cluster Resources

Uno dei processi più importanti di un agente di orchestrazione consiste nel semplificare la gestione dell'utilizzo delle risorse del cluster.One of the most important jobs of any orchestrator is to help manage resource consumption in the cluster. Gestione delle risorse del cluster può avere significati diversi.Managing cluster resources can mean a couple of different things. Innanzitutto, è necessario verificare che i computer non siano sovraccarichi,First, there's ensuring that machines are not overloaded. ovvero che non eseguano più servizi di quanti ne possano gestire.This means making sure that machines aren't running more services than they can handle. In secondo luogo, il bilanciamento e l'ottimizzazione sono di fondamentale importanza per l'esecuzione efficiente dei servizi.Second, there's balancing and optimization which is critical to running services efficiently. Un'offerta di servizi conveniente o esigente in termini di prestazioni non può permettere un eccessivo sbilanciamento di utilizzo dei nodi.Cost effective or performance sensitive service offerings can't allow some nodes to be hot while others are cold. I nodi più usati si contendono le risorse offrendo prestazioni scarse mentre i nodi poco usati sono uno spreco di risorse e costi.Hot nodes lead to resource contention and poor performance, and cold nodes represent wasted resources and increased costs.

Service Fabric rappresenta le risorse come Metrics.Service Fabric represents resources as Metrics. Per metrica si intende qualsiasi risorsa logica o fisica che deve essere descritta per Service Fabric,Metrics are any logical or physical resource that you want to describe to Service Fabric. ad esempio "WorkQueueDepth" o "MemoryInMb".Examples of metrics are things like “WorkQueueDepth” or “MemoryInMb”. Per informazioni sulle risorse fisiche che Service Fabric può gestire sui nodi, vedere governance delle risorse.For information about the physical resources that Service Fabric can govern on nodes, see resource governance. Per informazioni sulla configurazione di metriche personalizzate e sul loro utilizzo, vedere questo articoloFor information on configuring custom metrics and their uses, see this article

Le metriche sono diverse dai vincoli di posizionamento e dalle proprietà del nodo.Metrics are different from placements constraints and node properties. Le proprietà dei nodi sono descrittori statici dei nodi stessi.Node properties are static descriptors of the nodes themselves. Le metriche descrivono le risorse di cui dispongono i nodi e che vengono consumate dai servizi quando vengono eseguiti in un nodo.Metrics describe resources that nodes have and that services consume when they are run on a node. Una proprietà del nodo potrebbe essere "HasSSD" e potrebbe essere impostata su true o false.A node property could be "HasSSD" and could be set to true or false. La quantità di spazio disponibile su tale unità SSD (e la quantità usata dai servizi) può essere una metrica come "DriveSpaceInMb".The amount of space available on that SSD and how much is consumed by services would be a metric like “DriveSpaceInMb”.

È importante notare che, come per i vincoli di posizionamento e le proprietà del nodo, Cluster Resource Manager di Service Fabric non sa cosa significano i nomi delle metriche.It is important to note that just like for placement constraints and node properties, the Service Fabric Cluster Resource Manager doesn't understand what the names of the metrics mean. I nomi delle metriche sono semplicemente stringhe.Metric names are just strings. È consigliabile dichiarare l'unità come parte del nome della metrica creato quando potrebbe essere ambigua.It is a good practice to declare units as a part of the metric names that you create when it could be ambiguous.

CapacityCapacity

Se si disattiva completamente il bilanciamentodi tutte le risorse, Cluster Resource Manager di Service Fabric tenta comunque di assicurare che nessun nodo superi la propria capacità consentita.If you turned off all resource balancing, Service Fabric’s Cluster Resource Manager would still ensure that no node ended up over its capacity. Gestire i sovraccarichi di capacità è possibile, a meno che il cluster non sia pieno o il carico di lavoro sia maggiore rispetto a qualsiasi altro nodo.Managing capacity overruns is possible unless the cluster is too full or the workload is larger than any node. La capacità è un altro vincolo usato da Cluster Resource Manager per conoscere la quantità di una risorsa posseduta da un nodo.Capacity is another constraint that the Cluster Resource Manager uses to understand how much of a resource a node has. La capacità rimanente verrà registrata anche per il cluster nel suo complesso.Remaining capacity is also tracked for the cluster as a whole. Sia la capacità che l'utilizzo a livello di servizio sono espressi in termini di metriche.Both the capacity and the consumption at the service level are expressed in terms of metrics. Ad esempio la metrica potrebbe essere "ClientConnections" e un determinato nodo potrebbe avere una capacità "ClientConnections" di 32768.So for example, the metric might be "ClientConnections" and a given Node may have a capacity for "ClientConnections" of 32768. Gli altri nodi possono avere altri limiti. Alcuni servizi in esecuzione nel nodo possono dichiarare che esso consumi al momento 32256 della metrica "ClientConnections".Other nodes can have other limits Some service running on that node can say it is currently consuming 32256 of the metric "ClientConnections".

In fase di esecuzione, Cluster Resource Manager tiene traccia delle capacità rimanenti nel cluster e nei nodi.During runtime, the Cluster Resource Manager tracks remaining capacity in the cluster and on nodes. A tal fine, sottrae quanto usato da ciascun servizio dalla capacità del nodo in cui esso viene eseguito.In order to track capacity the Cluster Resource Manager subtracts each service's usage from node's capacity where the service runs. Queste informazioni consentono a Cluster Resource Manager di Service Fabric di individuare la posizione ottimale per l'inserimento o lo spostamento di repliche, in modo che i nodi non superino le rispettive capacità.With this information, the Service Fabric Cluster Resource Manager can figure out where to place or move replicas so that nodes don’t go over capacity.

Nodi e capacità del cluster
Cluster nodes and capacity

C#:C#:

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);

Powershell:Powershell:

New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName –Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton –Metric @("ClientConnections,High,1024,0)

È possibile vedere le capacità definite nel manifesto del cluster:You can see capacities defined in the cluster manifest:

ClusterManifest.xmlClusterManifest.xml

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

mediante ClusterConfig.json per le distribuzioni autonome o Template.json per cluster ospitati in Azure.via ClusterConfig.json for Standalone deployments or Template.json for Azure hosted clusters.

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

In genere il carico di un servizio cambia in modo dinamico.Commonly a service’s load changes dynamically. Si supponga che il carico di una replica di "ClientConnections" sia stato modificato da 1024 a 2048, ma il nodo in cui era in esecuzione in quel momento avesse solo una disponibilità residua della metrica pari a 512.Say that a replica's load of "ClientConnections" changed from 1024 to 2048, but the node it was running on then only had 512 capacity remaining for that metric. Ora il posizionamento della replica o dell'istanza non è valido, poiché in quel nodo non c'è spazio sufficiente.Now that replica or instance's placement is invalid, since there's not enough room on that node. Cluster Resource Manager deve intervenire e riportare il nodo sotto il valore di capacità massimo.The Cluster Resource Manager has to kick in and get the node back below capacity. A tal fine, deve spostare una o più repliche o istanze da quel nodo ad altri nodi.It reduces load on the node that is over capacity by moving one or more of the replicas or instances from that node to other nodes. Quando sposta le repliche, Cluster Resource Manager tenta di ridurre al minimo il costo di tali spostamenti.When moving replicas, the Cluster Resource Manager tries to minimize the cost of those movements. I costi degli spostamenti vengono approfonditi in questo articolo. Altre informazioni sulle strategie e le regole di ribilanciamento di Cluster Resource Manager sono disponibili qui.Movement cost is discussed in this article and more about the Cluster Resource Manager's rebalancing strategies and rules is described here.

Capacità del clusterCluster capacity

In che modo Cluster Resource Manager di Service Fabric impedisce il caricamento eccessivo del cluster nel suo complesso?So how does the Service Fabric Cluster Resource Manager keep the overall cluster from being too full? Con il carico dinamico non è possibile intervenire in modo netto.Well, with dynamic load there’s not a lot it can do. I servizi possono subire picchi di carico indipendentemente dalle azioni eseguite da Cluster Resource Manager.Services can have their load spike independently of actions taken by the Cluster Resource Manager. Di conseguenza un cluster che dispone di molta capacità oggi può non essere abbastanza potente domani se l'utilizzo aumenta.As a result, your cluster with plenty of headroom today may be underpowered when you become famous tomorrow. Detto ciò, sono stati integrati alcuni controlli per evitare problemi.That said, there are some controls that are baked in to prevent problems. È prima di tutto possibile impedire la creazione di nuovi carichi di lavoro che riempirebbero il cluster.The first thing we can do is prevent the creation of new workloads that would cause the cluster to become full.

Si supponga di creare un servizio senza stato al quale è associato un carico.Say that you create a stateless service and it has some load associated with it. Si immagini che il servizio monitori la metrica "DiskSpaceInMb".Let’s say that the service cares about the "DiskSpaceInMb" metric. Si supponga anche che consumerà cinque unità di "DiskSpaceInMb" per ogni istanza del servizio.Let's also say that it is going to consume five units of "DiskSpaceInMb" for every instance of the service. Si vogliono creare tre istanze del servizio.You want to create three instances of the service. L'installazione è riuscita.Great! È quindi necessario che 15 unità di "DiskSpaceInMb" siano presenti nel cluster per consentire la mera creazione di queste istanze del servizio.So that means that we need 15 units of "DiskSpaceInMb" to be present in the cluster in order for us to even be able to create these service instances. Cluster Resource Manager calcola continuamente la capacità e il consumo di ogni metrica e può pertanto determinare la capacità residua nel cluster.The Cluster Resource Manager continually calculates the capacity and consumption of each metric so it can determine the remaining capacity in the cluster. Se non c'è spazio sufficiente, Cluster Resource Manager rifiuta la chiamata di creazione del servizio.If there isn't enough space, the Cluster Resource Manager rejects the create service call.

Poiché l'unico requisito è che ci siano 15 unità disponibili, questo spazio può essere allocato in molti modi diversi.Since the requirement is only that there be 15 units available, this space could be allocated many different ways. Ad esempio potrebbe esserci un'unità di capacità rimanente in 15 nodi diversi oppure tre unità di capacità rimanenti in cinque nodi diversi.For example, there could be one remaining unit of capacity on 15 different nodes, or three remaining units of capacity on five different nodes. Se Cluster Resource Manager è in grado di sistemare le cose in modo che ci siano cinque unità disponibili in tre nodi, alla fine posizionerà il servizio.If the Cluster Resource Manager can rearrange things so there's five units available on three nodes, it places the service. In genere la riorganizzazione del cluster è possibile, a meno che il cluster non sia quasi pieno o che, per qualsiasi motivo, non sia possibile consolidare i servizi esistenti.Rearranging the cluster is usually possible unless the cluster is almost full or the existing services can't be consolidated for some reason.

Capacità in bufferingBuffered Capacity

La capacità in buffering è un'altra funzionalità di Cluster Resource Manager,Buffered capacity is another feature of the Cluster Resource Manager. che consente di riservare parti della capacità complessiva del nodo.It allows reservation of some portion of the overall node capacity. Questo buffer di capacità viene usato solo per posizionare i servizi durante gli aggiornamenti e gli errori del nodo.This capacity buffer is only used to place services during upgrades and node failures. La capacità in buffering è specificata a livello globale per ogni metrica e per tutti i nodi.Buffered Capacity is specified globally per metric for all nodes. Il valore scelto per la capacità di riserva è una funzione del numero di domini di errore e di aggiornamento presenti nel cluster.The value you pick for the reserved capacity is a function of the number of Fault and Upgrade Domains you have in the cluster. Quando è presente un numero maggiore di domini di errore e di aggiornamento è possibile scegliere un valore inferiore per il buffer di capacità.More Fault and Upgrade Domains means that you can pick a lower number for your buffered capacity. Se si dispone di molti domini, ci si può aspettare la mancata disponibilità di porzioni inferiori del cluster durante gli aggiornamenti e gli errori.If you have more domains, you can expect smaller amounts of your cluster to be unavailable during upgrades and failures. Specificare capacità in buffering risulta utile solo se è stata specificata anche la capacità del nodo per una metrica.Specifying Buffered Capacity only makes sense if you have also specified the node capacity for a metric.

Di seguito è riportato un esempio di come specificare la capacità di memorizzazione nel buffer:Here's an example of how to specify buffered capacity:

ClusterManifest.xmlClusterManifest.xml

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

mediante ClusterConfig.json per le distribuzioni autonome o Template.json per i cluster ospitati in Azure:via ClusterConfig.json for Standalone deployments or Template.json for Azure hosted clusters:

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

La creazione di nuovi servizi non riesce quando il cluster esaurisce il buffer di capacità per una metrica.The creation of new services fails when the cluster is out of buffered capacity for a metric. Impedire la creazione di nuovi servizi per conservare il buffer garantisce che gli errori e gli aggiornamenti non causino il superamento della capacità dei nodi.Preventing the creation of new services to preserve the buffer ensures that upgrades and failures don’t cause nodes to go over capacity. Il buffer di capacità è un'opzione facoltativa ma consigliata per tutti i cluster che definiscono una capacità per una metrica.Buffered capacity is optional but is recommended in any cluster that defines a capacity for a metric.

Cluster Resource Manager espone le informazioni sul carico seguenti.The Cluster Resource Manager exposes this load information. Per ogni metrica, le informazioni includono:For each metric, this information includes:

  • impostazioni della capacità di bufferingthe buffered capacity settings
  • capacità totalethe total capacity
  • consumo correntethe current consumption
  • se ogni metrica può essere considerata bilanciata oppure nowhether each metric is considered balanced or not
  • statistiche relative alla deviazione standardstatistics about the standard deviation
  • nodi con più e meno caricothe nodes which have the most and least load

Di seguito un esempio dell'output:Below we see 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

Passaggi successiviNext steps