Criteri di posizionamento per i servizi di Service FabricPlacement policies for service fabric services

I criteri di posizionamento sono le regole aggiuntive che possono essere usate per definire la posizione del servizio in alcuni scenari specifici, meno comuni.Placement policies are additional rules that can be used to govern service placement in some specific, less-common scenarios. Alcuni esempi di questi scenari sono:Some examples of those scenarios are:

  • Il cluster di Service Fabric si estende nelle distanze geografiche, come più data center locali o in diverse aree di AzureYour Service Fabric cluster spans geographic distances, such as multiple on-premises datacenters or across Azure regions
  • L'ambiente si estende su più aree di controllo geopolitico o giuridico o in qualche altro caso in cui sono presenti limiti normativi che è necessario applicareYour environment spans multiple areas of geopolitical or legal control, or some other case where you have policy boundaries you need to enforce
  • Vi sono considerazioni sulle prestazioni o sulla latenza di comunicazione dovute a distanze di grandi dimensioni o all'uso di collegamenti di rete lenta o meno affidabiliThere are communication performance or latency considerations due to large distances or use of slower or less reliable network links
  • È necessario mantenere determinati carichi di lavoro collocati come un tentativo migliore, con altri carichi di lavoro o in prossimità dei clientiYou need to keep certain workloads collocated as a best effort, either with other workloads or in proximity to customers

La maggior parte di questi requisiti si allineano con il layout fisico del cluster, rappresentati come domini di errore del cluster.Most of these requirements align with the physical layout of the cluster, represented as the fault domains of the cluster.

I criteri di posizionamento avanzati che consentono di indirizzare questi scenari sono:The advanced placement policies that help address these scenarios are:

  1. Domini non validiInvalid domains
  2. Domini obbligatoriRequired domains
  3. Domini preferitiPreferred domains
  4. Divieto di compressione della replicaDisallowing replica packing

La maggior parte dei comandi seguenti può essere configurata tramite le proprietà del nodo e i vincoli di posizionamento, ma alcuni sono più complessi.Most of the following controls could be configured via node properties and placement constraints, but some are more complicated. Per semplificare le cose, Cluster Resource Manager di Service Fabric offre questi criteri di posizionamento aggiuntivi.To make things simpler, the Service Fabric Cluster Resource Manager provides these additional placement policies. I criteri di posizionamento sono configurati in una base all'istanza singola del servizio.Placement policies are configured on a per-named service instance basis. Possono anche essere aggiornati in modo dinamico.They can also be updated dynamically.

Specifica di domini non validiSpecifying invalid domains

Il criterio di posizionamento InvalidDomain consente di specificare che un particolare dominio di errore non è valido per un servizio specifico.The InvalidDomain placement policy allows you to specify that a particular Fault Domain is invalid for a specific service. Questo criterio garantisce che un particolare servizio non sia mai eseguito in una determinata area, ad esempio per motivi geopolitici o criteri aziendali.This policy ensures that a particular service never runs in a particular area, for example for geopolitical or corporate policy reasons. È possibile specificare più domini non validi tramite criteri separati.Multiple invalid domains may be specified via separate policies.

Esempio di dominio non valido
Invalid Domain Example

Codice:Code:

ServicePlacementInvalidDomainPolicyDescription invalidDomain = new ServicePlacementInvalidDomainPolicyDescription();
invalidDomain.DomainName = "fd:/DCEast"; //regulations prohibit this workload here
serviceDescription.PlacementPolicies.Add(invalidDomain);

Powershell:Powershell:

New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName –Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton -PlacementPolicy @("InvalidDomain,fd:/DCEast”)

Specifica dei domini obbligatoriSpecifying required domains

I criteri di selezione del dominio richiesto richiedono che il servizio sia presente solo nel dominio specificato.The required domain placement policy requires that the service is present only in the specified domain. È possibile specificare più domini richiesti tramite criteri separati.Multiple required domains can be specified via separate policies.

Esempio di dominio obbligatorio
Required Domain Example

Codice:Code:

ServicePlacementRequiredDomainPolicyDescription requiredDomain = new ServicePlacementRequiredDomainPolicyDescription();
requiredDomain.DomainName = "fd:/DC01/RK03/BL2";
serviceDescription.PlacementPolicies.Add(requiredDomain);

Powershell:Powershell:

New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName –Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton -PlacementPolicy @("RequiredDomain,fd:/DC01/RK03/BL2")

Specifica di un dominio preferito per le repliche primarie di un servizio con statoSpecifying a preferred domain for the primary replicas of a stateful service

Il dominio primario preferito specifica il dominio di errore per posizionare il server primario.The Preferred Primary Domain specifies the fault domain to place the Primary in. Quando ogni elemento è integro, l'elemento primario finisce in questo dominio.The Primary ends up in this domain when everything is healthy. Se il dominio o la replica primaria non riescono o vengono chiusi, il database primario si sposta in un'altra posizione, idealmente nello stesso dominio.If the domain or the Primary replica fails or shuts down, the Primary moves to some other location, ideally in the same domain. Se questa nuova posizione non si trova nel dominio preferito, Cluster Resource Manager riporta l'elemento nel dominio preferito.If this new location isn't in the preferred domain, the Cluster Resource Manager moves it back to the preferred domain as soon as possible. Naturalmente questa impostazione è adatta solo ai servizi con stati.Naturally this setting only makes sense for stateful services. Questo criterio è particolarmente utile in cluster distribuiti tra più data center o aree di Azure, ma hanno dei data center che preferiscono la collocazione in una determinata posizione.This policy is most useful in clusters that are spanned across Azure regions or multiple datacenters but have services that prefer placement in a certain location. Mantenendo i Primari vicini agli utenti o ad altri servizi si permette di garantire una latenza più bassa, in particolare per le letture, che sono gestite dai Primari, per impostazione predefinita.Keeping Primaries close to their users or other services helps provide lower latency, especially for reads, which are handled by Primaries by default.

Failover e domini primari preferiti
Preferred Primary Domains and Failover

ServicePlacementPreferPrimaryDomainPolicyDescription primaryDomain = new ServicePlacementPreferPrimaryDomainPolicyDescription();
primaryDomain.DomainName = "fd:/EastUS/";
serviceDescription.PlacementPolicies.Add(invalidDomain);

Powershell:Powershell:

New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName –Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton -PlacementPolicy @("PreferredPrimaryDomain,fd:/EastUS")

Necessità di distribuzione della replica e divieto di compressioneRequiring replica distribution and disallowing packing

Le repliche sono normalmente distribuite in domini di errore e di aggiornamento quando il cluster è integro.Replicas are normally distributed across fault and upgrade domains when the cluster is healthy. Tuttavia, vi sono casi in cui più di una replica per una determinata partizione rischia di essere temporaneamente compressa in un singolo dominio.However, there are cases where more than one replica for a given partition may end up temporarily packed into a single domain. Ad esempio, si supponga che il cluster abbia nove nodi in tre domini di errore (fd::/ 0, fd: / 1 e fd: / 2).For example, let's say that the cluster has nine nodes in three fault domains, fd:/0, fd:/1, and fd:/2. Si supponga anche che il servizio disponga di tre repliche.Let's also say that your service has three replicas. Si supponga che i nodi che sono stati usati per tali repliche in fd: / 1 e fd: / 2 siano inattivi.Let's say that the nodes that were being used for those replicas in fd:/1 and fd:/2 went down. In genere Cluster Resource Manager sceglie altri nodi negli stessi domini di errore.Normally the Cluster Resource Manager would prefer other nodes in those same fault domains. In questo caso, si supponga che nessuno degli altri nodi in questi domini sia valido a causa di problemi di capacità.In this case, let's say due to capacity issues none of the other nodes in those domains were valid. Se Cluster Resource Manager genera sostituzioni per tali repliche, deve scegliere i nodi in fd::/ 0.If the Cluster Resource Manager builds replacements for those replicas, it would have to choose nodes in fd:/0. Tuttavia, questa operazione crea una situazione in cui viene violato il vincolo del dominio di errore.However, doing that creates a situation where the Fault Domain constraint is violated. La compressione delle repliche aumenta anche la possibilità che l'intero set di repliche vada perso.Packing replicas increases the chance that the whole replica set could go down or be lost.

Nota

Per altre informazioni sui vincoli e sulle priorità dei vincoli in generale, vedere questo argomento.For more information on constraints and constraint priorities generally, check out this topic.

Se viene visualizzato un messaggio di integrità come "The Load Balancer has detected a Constraint Violation for this Replica:fabric:/<some service name> Secondary Partition <some partition ID> is violating the Constraint: FaultDomain", allora si verifica questa condizione o una condizione simile.If you've ever seen a health message such as "The Load Balancer has detected a Constraint Violation for this Replica:fabric:/<some service name> Secondary Partition <some partition ID> is violating the Constraint: FaultDomain", then you've hit this condition or something like it. In genere solo una o due repliche vengono compresse insieme temporaneamente.Usually only one or two replicas are packed together temporarily. Finché sono presenti meno di un quorum di repliche in un dominio specifico, si è sicuri.So long as there are fewer than a quorum of replicas in a given domain, you're safe. La compressione è rara, ma può capitare e in genere queste situazioni sono temporanee perché i nodi tornano attivi.Packing is rare, but it can happen, and usually these situations are transient since the nodes come back. Se i nodi rimangono inattivi e Cluster Resource Manager deve generare sostituzioni, in genere sono disponibili altri nodi nei domini di errore predefiniti.If the nodes do stay down and the Cluster Resource Manager needs to build replacements, usually there are other nodes available in the ideal fault domains.

Alcuni carichi di lavoro preferiscono avere sempre il numero di destinazione di repliche, anche se vengono raggruppati in un minor numero di domini.Some workloads would prefer always having the target number of replicas, even if they are packed into fewer domains. Questi carichi di lavoro puntano contro la presenza di errori di dominio permanenti totali e simultanei e in genere sono in grado di ripristinare lo stato locale.These workloads are betting against total simultaneous permanent domain failures and can usually recover local state. Altri carichi di lavoro preferiscono che il tempo di inattività si verifichi prima, piuttosto che rischiare di mettere a repentaglio i dati o perderli.Other workloads would rather take the downtime earlier than risk correctness or loss of data. La maggior parte dei carichi di lavoro di produzione viene eseguita con più di tre repliche, più di tre domini di errore e numerosi nodi validi per ogni dominio di errore.Most production workloads run with more than three replicas, more than three fault domains, and many valid nodes per fault domain. Per questo motivo, il comportamento predefinito consente una compressione del dominio per impostazione predefinita.Because of this, the default behavior allows domain packing by default. Il comportamento predefinito consente un bilanciamento e un failover normali per gestire questi casi estremi, anche se ciò comporta una compressione del dominio temporanea.The default behavior allows normal balancing and failover to handle these extreme cases, even if that means temporary domain packing.

Se si desidera disabilitare questo raggruppamento per un determinato carico di lavoro, è possibile specificare il criterio RequireDomainDistribution nel servizio.If you want to disable such packing for a given workload, you can specify the RequireDomainDistribution policy on the service. Quando questo criterio è impostato, Cluster Resource Manager garantisce che due repliche della stessa partizione non siano in esecuzione nello stesso dominio di errore o di aggiornamento.When this policy is set, the Cluster Resource Manager ensures no two replicas from the same partition run in the same fault or upgrade domain.

Codice:Code:

ServicePlacementRequireDomainDistributionPolicyDescription distributeDomain = new ServicePlacementRequireDomainDistributionPolicyDescription();
serviceDescription.PlacementPolicies.Add(distributeDomain);

Powershell:Powershell:

New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName –Stateful -MinReplicaSetSize 3 -TargetReplicaSetSize 3 -PartitionSchemeSingleton -PlacementPolicy @("RequiredDomainDistribution")

È possibile dunque usare queste configurazioni per i servizi in un cluster non distribuito geograficamente?Now, would it be possible to use these configurations for services in a cluster that was not geographically spanned? È possibile, ma non ce n'è motivo.You could, but there’s not a great reason too. A meno che non li richiedano gli scenari, è opportuno evitare le configurazioni di dominio richiesto, non valido e preferito.The required, invalid, and preferred domain configurations should be avoided unless the scenarios require them. Non è opportuno provare a forzare l'esecuzione di un determinato carico di lavoro in un singolo rack né preferire un determinato segmento del cluster locale rispetto a un altro.It doesn't make any sense to try to force a given workload to run in a single rack, or to prefer some segment of your local cluster over another. È necessario distribuire diverse configurazioni hardware tra i domini di errore e gestirle tramite normali vincoli di posizionamento e proprietà dei nodi.Different hardware configurations should be spread across fault domains and handled via normal placement constraints and node properties.

Passaggi successiviNext steps