Configurazione di servizi Reliable Services con statoConfigure stateful reliable services

Esistono due set di impostazioni di configurazione per i servizi Reliable Services.There are two sets of configuration settings for reliable services. Un set è globale per tutti i servizi Reliable Services del cluster, mentre l'altro è specifico per un particolare servizio Reliable Services.One set is global for all reliable services in the cluster while the other set is specific to a particular reliable service.

Configurazione globaleGlobal Configuration

La configurazione globale dei servizi Reliable Services viene specificata nel manifesto del cluster per il cluster nella sezione KtlLogger.The global reliable service configuration is specified in the cluster manifest for the cluster under the KtlLogger section. Consente di configurare il percorso di log condiviso e la dimensione oltre i limiti di memoria globali utilizzati dal logger.It allows configuration of the shared log location and size plus the global memory limits used by the logger. Il manifesto del cluster è un unico file XML che contiene le impostazioni e le configurazioni applicabili a tutti i nodi e ai servizi del cluster.The cluster manifest is a single XML file that holds settings and configurations that apply to all nodes and services in the cluster. Il file tipicamente si chiama ClusterManifest.xml.The file is typically called ClusterManifest.xml. È possibile visualizzare il manifesto del cluster utilizzando il comando Powershell Get-ServiceFabricClusterManifest.You can see the cluster manifest for your cluster using the Get-ServiceFabricClusterManifest powershell command.

Nomi delle configurazioniConfiguration names

NomeName UnitàUnit Valore predefinitoDefault value OsservazioniRemarks
WriteBufferMemoryPoolMinimumInKBWriteBufferMemoryPoolMinimumInKB KilobyteKilobytes 83886088388608 Numero minimo di KB da allocare in modalità kernel per il pool di memoria del buffer di scrittura del logger.Minimum number of KB to allocate in kernel mode for the logger write buffer memory pool. Questo pool di memoria viene utilizzato per il caching delle informazioni sullo stato prima della scrittura su disco.This memory pool is used for caching state information before writing to disk.
WriteBufferMemoryPoolMaximumInKBWriteBufferMemoryPoolMaximumInKB KilobyteKilobytes Nessun limiteNo Limit Dimensioni massime raggiungibili dal pool di memoria del buffer di scrittura del logger.Maximum size to which the logger write buffer memory pool can grow.
SharedLogIdSharedLogId GUIDGUID """" Specifica un GUID univoco per individuare il file di log condiviso predefinito usato da tutti i servizi Reliable Services su tutti i nodi del cluster che non specificano il parametro SharedLogId nella configurazione specifica del servizio.Specifies a unique GUID to use for identifying the default shared log file used by all reliable services on all nodes in the cluster that do not specify the SharedLogId in their service specific configuration. Se viene specificato lo SharedLogId, deve anche essere specificato lo SharedLogPath.If SharedLogId is specified, then SharedLogPath must also be specified.
SharedLogPathSharedLogPath Nome di percorso completoFully qualified path name """" Specifica il percorso completo in cui il file di log condiviso viene utilizzato da tutti i servizi Reliable Services su tutti i nodi del cluster che non specificano lo SharedLogPath nella configurazione specifica del servizio.Specifies the fully qualified path where the shared log file used by all reliable services on all nodes in the cluster that do not specify the SharedLogPath in their service specific configuration. Tuttavia, se è stato specificato SharedLogPath, lo deve essere anche SharedLogId.However, if SharedLogPath is specified, then SharedLogId must also be specified.
SharedLogSizeInMBSharedLogSizeInMB MegabyteMegabytes 81928192 Specifica il numero di MB di spazio su disco da allocare in modo statico per il log condiviso.Specifies the number of MB of disk space to statically allocate for the shared log. Il valore deve essere maggiore di 2048.The value must be 2048 or larger.

In ARM di Azure o nel modello JSON locale, l'esempio seguente illustra come modificare il log delle transazioni condiviso che viene creato per eseguire il backup di eventuali raccolte affidabili per i servizi con stato.In Azure ARM or on-premises JSON template, the example below shows how to change the the shared transaction log that gets created to back any reliable collections for stateful services.

"fabricSettings": [{
    "name": "KtlLogger",
    "parameters": [{
        "name": "SharedLogSizeInMB",
        "value": "4096"
    }]
}]

Esempio di sezione del manifesto del cluster per gli sviluppatori in localeSample local developer cluster manifest section

Per modificare questa sezione nell'ambiente di sviluppo locale, è necessario modificare il file clustermanifest.xml locale.If you want to change this on your local development environment, you need to edit the local clustermanifest.xml file.

   <Section Name="KtlLogger">
     <Parameter Name="SharedLogSizeInMB" Value="4096"/>
     <Parameter Name="WriteBufferMemoryPoolMinimumInKB" Value="8192" />
     <Parameter Name="WriteBufferMemoryPoolMaximumInKB" Value="8192" />
     <Parameter Name="SharedLogId" Value="{7668BB54-FE9C-48ed-81AC-FF89E60ED2EF}"/>
     <Parameter Name="SharedLogPath" Value="f:\SharedLog.Log"/>
   </Section>

OsservazioniRemarks

Il logger dispone di un pool di memoria globale allocato dalla memoria non di paging del kernel disponibile per tutti i servizi Reliable Services su un nodo per il caching dei dati sullo stato prima che siano scritti sul log dedicato associato alla replica del servizio Reliable Services.The logger has a global pool of memory allocated from non paged kernel memory that is available to all reliable services on a node for caching state data before being written to the dedicated log associated with the reliable service replica. La dimensione del pool è controllata dalle impostazioni WriteBufferMemoryPoolMinimumInKB e WriteBufferMemoryPoolMaximumInKB.The pool size is controlled by the WriteBufferMemoryPoolMinimumInKB and WriteBufferMemoryPoolMaximumInKB settings. WriteBufferMemoryPoolMinimumInKB specifica la dimensione iniziale del pool di memoria e la dimensione minima alla quale è possibile ridurre la memoria.WriteBufferMemoryPoolMinimumInKB specifies both the initial size of this memory pool and the lowest size to which the memory pool may shrink. WriteBufferMemoryPoolMaximumInKB è la dimensione massima che può raggiungere il pool di memoria.WriteBufferMemoryPoolMaximumInKB is the highest size to which the memory pool may grow. Ogni replica del servizio Reliable Services aperta può aumentare la dimensione del pool di memoria di una quantità determinata dal sistema, fino a WriteBufferMemoryPoolMaximumInKB.Each reliable service replica that is opened may increase the size of the memory pool by a system determined amount up to WriteBufferMemoryPoolMaximumInKB. Qualora la domanda per la memoria sia superiore alla disponibilità del pool di memoria, le richieste per la memoria sono ritardate finché la memoria non è disponibile.If there is more demand for memory from the memory pool than is available, requests for memory will be delayed until memory is available. Pertanto se il pool di memoria del buffer di scrittura è troppo piccolo per una configurazione specifica, le prestazioni potrebbero risentirne.Therefore if the write buffer memory pool is too small for a particular configuration then performance may suffer.

Le impostazioni SharedLogId e SharedLogPath vengono sempre utilizzate per definire GUID e percorso del log condiviso predefinito per tutti i nodi del cluster.The SharedLogId and SharedLogPath settings are always used together to define the GUID and location for the default shared log for all nodes in the cluster. Il log condiviso predefinito viene utilizzato per tutti i servizi Reliable Services che non specificano le impostazioni nel file settings.xml per il servizio specifico.The default shared log is used for all reliable services that do not specify the settings in the settings.xml for the specific service. Per ottenere le migliori prestazioni, i file di log condivisi devono essere memorizzati su dischi riservati esclusivamente al file di log condiviso, in modo da ridurre le situazioni di contesa della testina.For best performance, shared log files should be placed on disks that are used solely for the shared log file to reduce contention.

SharedLogSizeInMB specifica la quantità di spazio su disco da preallocare per il log condiviso predefinito su tutti i nodi.SharedLogSizeInMB specifies the amount of disk space to preallocate for the default shared log on all nodes. Le impostazioni SharedLogId e SharedLogPath non devono essere specificate per specificare SharedLogSizeInMB.SharedLogId and SharedLogPath do not need to be specified in order for SharedLogSizeInMB to be specified.

Configurazione specifica del servizioService Specific Configuration

È possibile modificare le configurazioni predefinite di Reliable Services con stato usando il pacchetto di configurazione (Config) o l'implementazione del servizio (codice).You can modify stateful Reliable Services' default configurations by using the configuration package (Config) or the service implementation (code).

  • Config : la configurazione tramite il pacchetto config viene realizzata modificando il file Settings.xml generato nella radice del pacchetto Microsoft Visual Studio presente nella cartella Config per ogni servizio dell'applicazione.Config - Configuration via the config package is accomplished by changing the Settings.xml file that is generated in the Microsoft Visual Studio package root under the Config folder for each service in the application.
  • Codice: la configurazione tramite il codice viene realizzata creando un ReliableStateManager usando un oggetto ReliableStateManagerConfiguration con il set di opzioni appropriato.Code - Configuration via code is accomplished by creating a ReliableStateManager using a ReliableStateManagerConfiguration object with the appropriate options set.

Per impostazione predefinita, il runtime di Azure Service Fabric cerca i nomi di sezione predefiniti nel file settings.xml e usa i valori di configurazione durante la creazione dei componenti di runtime sottostanti.By default, the Azure Service Fabric runtime looks for predefined section names in the Settings.xml file and consumes the configuration values while creating the underlying runtime components.

Nota

Non eliminare i nomi di sezione delle configurazioni seguenti nel file Settings.xml generato nella soluzione Visual Studio, a meno che non si preveda di configurare il servizio tramite codice.Do not delete the section names of the following configurations in the Settings.xml file that is generated in the Visual Studio solution unless you plan to configure your service via code. La ridenominazione del pacchetto di configurazione o dei nomi di sezione richiede una modifica del codice quando si configura ReliableStateManager.Renaming the config package or section names will require a code change when configuring the ReliableStateManager.

Configurazione della sicurezza del replicatoreReplicator security configuration

Le configurazioni della sicurezza del replicatore consentono di proteggere il canale di comunicazione usato durante la replica.Replicator security configurations are used to secure the communication channel that is used during replication. Questo significa che i servizi non potranno visualizzare l'uno il traffico di replica dell'altro, garantendo la sicurezza dei dati a disponibilità elevata.This means that services will not be able to see each other's replication traffic, ensuring that the data that is made highly available is also secure. Per impostazione predefinita, una sezione di configurazione della sicurezza vuota non abilita la sicurezza della replica.By default, an empty security configuration section prevents replication security.

Nome predefinito della sezioneDefault section name

ReplicatorSecurityConfigReplicatorSecurityConfig

Nota

Per modificare questo nome di sezione, sostituire il parametro replicatorSecuritySectionName del costruttore ReliableStateManagerConfiguration durante la creazione di ReliableStateManager per questo servizio.To change this section name, override the replicatorSecuritySectionName parameter to the ReliableStateManagerConfiguration constructor when creating the ReliableStateManager for this service.

Configurazione del replicatoreReplicator configuration

Le configurazioni del replicatore consentono di configurare il replicatore responsabile di garantire l'elevata affidabilità dello stato di Reliable Services con stato replicando e rendendo permanente lo stato in locale.Replicator configurations configure the replicator that is responsible for making the stateful Reliable Service's state highly reliable by replicating and persisting the state locally. La configurazione predefinita viene generata dal modello di Visual Studio e dovrebbe essere sufficiente.The default configuration is generated by the Visual Studio template and should suffice. Questa sezione descrive le configurazioni aggiuntive che sono disponibili per ottimizzare il replicatore.This section talks about additional configurations that are available to tune the replicator.

Nome predefinito della sezioneDefault section name

ReplicatorConfigReplicatorConfig

Nota

Per modificare questo nome di sezione, sostituire il parametro replicatorSettingsSectionName del costruttore ReliableStateManagerConfiguration durante la creazione di ReliableStateManager per questo servizio.To change this section name, override the replicatorSettingsSectionName parameter to the ReliableStateManagerConfiguration constructor when creating the ReliableStateManager for this service.

Nomi delle configurazioniConfiguration names

NomeName UnitàUnit Valore predefinitoDefault value OsservazioniRemarks
BatchAcknowledgementIntervalBatchAcknowledgementInterval SecondiSeconds 0,0150.015 Periodo di tempo per cui il replicatore, dopo aver ricevuto un'operazione, attende presso il replicatore secondario prima di inviare un acknowledgement al replicatore principale.Time period for which the replicator at the secondary waits after receiving an operation before sending back an acknowledgement to the primary. Gli altri acknowledgement relativi alle operazioni elaborate all'interno di questo intervallo vengono inviati come risposta unica.Any other acknowledgements to be sent for operations processed within this interval are sent as one response.
ReplicatorEndpointReplicatorEndpoint N/DN/A Nessun valore predefinito: parametro obbligatorioNo default--required parameter Indirizzo IP e porta che il replicatore principale/secondario userà per comunicare con altri replicatori nel set di repliche.IP address and port that the primary/secondary replicator will use to communicate with other replicators in the replica set. Deve fare riferimento a un endpoint di risorsa TCP nel manifesto del servizio.This should reference a TCP resource endpoint in the service manifest. Per ulteriori informazioni sulla definizione delle risorse dell'endpoint in un manifesto del servizio, vedere Specificare le risorse in un manifesto del servizio .Refer to Service manifest resources to read more about defining endpoint resources in a service manifest.
MaxPrimaryReplicationQueueSizeMaxPrimaryReplicationQueueSize Numero di operazioniNumber of operations 81928192 Numero massimo di operazioni nella coda principale.Maximum number of operations in the primary queue. Un'operazione viene liberata quando il replicatore principale riceve un acknowledgement da tutti i replicatori secondari.An operation is freed up after the primary replicator receives an acknowledgement from all the secondary replicators. Questo valore deve essere maggiore di 64 ed essere una potenza di 2.This value must be greater than 64 and a power of 2.
MaxSecondaryReplicationQueueSizeMaxSecondaryReplicationQueueSize Numero di operazioniNumber of operations 1638416384 Numero massimo di operazioni nella coda secondaria.Maximum number of operations in the secondary queue. Un'operazione viene liberata quando il relativo stato viene reso altamente disponibile tramite persistenza.An operation is freed up after making its state highly available through persistence. Questo valore deve essere maggiore di 64 ed essere una potenza di 2.This value must be greater than 64 and a power of 2.
CheckpointThresholdInMBCheckpointThresholdInMB MBMB 5050 Quantità di spazio del file di log dopo il quale viene eseguito un checkpoint dello stato.Amount of log file space after which the state is checkpointed.
MaxRecordSizeInKBMaxRecordSizeInKB KBKB 10241024 La dimensione massima dei record che il replicatore può scrivere nel log.Largest record size that the replicator may write in the log. Questo valore deve essere un multiplo di 4 ed essere maggiore di 16.This value must be a multiple of 4 and greater than 16.
MinLogSizeInMBMinLogSizeInMB MBMB 0 (determinato dal sistema)0 (system determined) Dimensioni minime del log delle transazioni.Minimum size of the transactional log. Il log non potrà essere troncato a una dimensione inferiore a quella impostata.The log will not be allowed to truncate to a size below this setting. 0 indica che il replicatore determinerà le dimensioni del log minimo.0 indicates that the replicator will determine the minimum log size. Aumentando il valore si aumenta la possibilità di eseguire copie parziali e backup incrementali poiché le probabilità di troncamento dei record dei log rilevanti si riducono.Increasing this value increases the possibility of doing partial copies and incremental backups since chances of relevant log records being truncated is lowered.
TruncationThresholdFactorTruncationThresholdFactor FattoreFactor 22 Determina a quali dimensioni del log verrà attivato il troncamento.Determines at what size of the log, truncation will be triggered. La soglia di troncamento è determinata dal parametro MinLogSizeInMB moltiplicato per il parametro TruncationThresholdFactor.Truncation threshold is determined by MinLogSizeInMB multiplied by TruncationThresholdFactor. TruncationThresholdFactor deve essere maggiore di 1.TruncationThresholdFactor must be greater than 1. MinLogSizeInMB * TruncationThresholdFactor deve essere minore di MaxStreamSizeInMB.MinLogSizeInMB * TruncationThresholdFactor must be less than MaxStreamSizeInMB.
ThrottlingThresholdFactorThrottlingThresholdFactor FattoreFactor 44 Determina le dimensioni del log a cui la replica inizierà a essere limitata.Determines at what size of the log, the replica will start being throttled. La soglia di limitazione (in MB) viene determinata da Max((MinLogSizeInMB * ThrottlingThresholdFactor),(CheckpointThresholdInMB * ThrottlingThresholdFactor)).Throttling threshold (in MB) is determined by Max((MinLogSizeInMB * ThrottlingThresholdFactor),(CheckpointThresholdInMB * ThrottlingThresholdFactor)). Il valore della soglia di limitazione (in MB) deve essere superiore al valore della soglia di troncamento (in MB).Throttling threshold (in MB) must be greater than truncation threshold (in MB). Il valore della soglia di troncamento (in MB) deve essere inferiore al valore di MaxStreamSizeInMB.Truncation threshold (in MB) must be less than MaxStreamSizeInMB.
MaxAccumulatedBackupLogSizeInMBMaxAccumulatedBackupLogSizeInMB MBMB 800800 Dimensioni massime accumulate (in MB) dei log di backup in una data catena di log di backup.Max accumulated size (in MB) of backup logs in a given backup log chain. Una richiesta di backup incrementale avrà esito negativo se il backup incrementale dovesse generare un log di backup che causasse i log di backup accumulati poiché il backup completo rilevante sarebbe più grande di tali dimensioni.An incremental backup requests will fail if the incremental backup would generate a backup log that would cause the accumulated backup logs since the relevant full backup to be larger than this size. In questi casi, l'utente deve eseguire un backup completo.In such cases, user is required to take a full backup.
SharedLogIdSharedLogId GUIDGUID """" Specifica un GUID unico da utilizzare per l'identificazione del file di log condiviso usato con la replica in oggetto.Specifies a unique GUID to use for identifying the shared log file used with this replica. In genere, i servizi non devono usare questa impostazione.Typically, services should not use this setting. Tuttavia, se è stato specificato SharedLogId, lo deve essere anche SharedLogPath.However, if SharedLogId is specified, then SharedLogPath must also be specified.
SharedLogPathSharedLogPath Nome di percorso completoFully qualified path name """" Specifica il percorso completo in cui verrà creato il file di log condiviso per la replica in oggetto.Specifies the fully qualified path where the shared log file for this replica will be created. In genere, i servizi non devono usare questa impostazione.Typically, services should not use this setting. Tuttavia, se è stato specificato SharedLogPath, lo deve essere anche SharedLogId.However, if SharedLogPath is specified, then SharedLogId must also be specified.
SlowApiMonitoringDurationSlowApiMonitoringDuration SecondiSeconds 300300 Imposta l'intervallo di monitoraggio per le chiamate API gestite.Sets the monitoring interval for managed API calls. Esempio: funzione di callback di backup fornita dall'utente.Example: user provided backup callback function. Al termine dell'intervallo verrà inviato un report sull'integrità di avviso a Health Manager.After the interval has passed, a warning health report will be sent to the Health Manager.

Configurazione di esempio tramite codiceSample configuration via code

class Program
{
    /// <summary>
    /// This is the entry point of the service host process.
    /// </summary>
    static void Main()
    {
        ServiceRuntime.RegisterServiceAsync("HelloWorldStatefulType",
            context => new HelloWorldStateful(context, 
                new ReliableStateManager(context, 
        new ReliableStateManagerConfiguration(
                        new ReliableStateManagerReplicatorSettings()
            {
                RetryInterval = TimeSpan.FromSeconds(3)
                        }
            )))).GetAwaiter().GetResult();
    }
}    
class MyStatefulService : StatefulService
{
    public MyStatefulService(StatefulServiceContext context, IReliableStateManagerReplica stateManager)
        : base(context, stateManager)
    { }
    ...
}

File di configurazione di esempioSample configuration file

<?xml version="1.0" encoding="utf-8"?>
<Settings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2011/01/fabric">
   <Section Name="ReplicatorConfig">
      <Parameter Name="ReplicatorEndpoint" Value="ReplicatorEndpoint" />
      <Parameter Name="BatchAcknowledgementInterval" Value="0.05"/>
      <Parameter Name="CheckpointThresholdInMB" Value="512" />
   </Section>
   <Section Name="ReplicatorSecurityConfig">
      <Parameter Name="CredentialType" Value="X509" />
      <Parameter Name="FindType" Value="FindByThumbprint" />
      <Parameter Name="FindValue" Value="9d c9 06 b1 69 dc 4f af fd 16 97 ac 78 1e 80 67 90 74 9d 2f" />
      <Parameter Name="StoreLocation" Value="LocalMachine" />
      <Parameter Name="StoreName" Value="My" />
      <Parameter Name="ProtectionLevel" Value="EncryptAndSign" />
      <Parameter Name="AllowedCommonNames" Value="My-Test-SAN1-Alice,My-Test-SAN1-Bob" />
   </Section>
</Settings>

OsservazioniRemarks

BatchAcknowledgementInterval controlla la latenza di replica.BatchAcknowledgementInterval controls replication latency. Il valore '0' determina la latenza più bassa possibile a scapito della velocità effettiva, in quanto è necessario inviare ed elaborare una maggiore quantità di messaggi di acknowledgement, ciascuno dei quali contenente un numero minore di acknowledgement.A value of '0' results in the lowest possible latency, at the cost of throughput (as more acknowledgement messages must be sent and processed, each containing fewer acknowledgements). Più alto è il valore di BatchAcknowledgementInterval, maggiore sarà la velocità effettiva di replica complessiva, ma con una latenza delle operazioni più elevata.The larger the value for BatchAcknowledgementInterval, the higher the overall replication throughput, at the cost of higher operation latency. Questo ha un impatto diretto sulla latenza dei commit delle transazioni.This directly translates to the latency of transaction commits.

Il valore per CheckpointThresholdInMB controlla la quantità di spazio su disco che il replicatore può usare per archiviare le informazioni sullo stato nel file di log dedicato della replica.The value for CheckpointThresholdInMB controls the amount of disk space that the replicator can use to store state information in the replica's dedicated log file. Aumentando questo valore rispetto all'impostazione predefinita, è possibile favorire tempi di riconfigurazione più rapidi quando una nuova replica viene aggiunta al set.Increasing this to a higher value than the default could result in faster reconfiguration times when a new replica is added to the set. Questo a causa del trasferimento di stato parziale che viene eseguito in seguito alla disponibilità di una maggiore cronologia di operazioni nel logThis is due to the partial state transfer that takes place due to the availability of more history of operations in the log. e che può aumentare il tempo di ripristino di una replica dopo un arresto anomalo.This can potentially increase the recovery time of a replica after a crash.

L'impostazione MaxRecordSizeInKB definisce la dimensione massima dei record che il replicatore può scrivere nel file di log.The MaxRecordSizeInKB setting defines the maximum size of a record that can be written by the replicator into the log file. Nella maggior parte dei casi, la dimensione predefinita del record, 1024 KB, è ottimale.In most cases, the default 1024-KB record size is optimal. Tuttavia, se il servizio richiede che nelle informazioni sullo stato vengano inclusi elementi dati di dimensioni maggiori, è possibile che sia necessario aumentare questo valore.However, if the service is causing larger data items to be part of the state information, then this value might need to be increased. La riduzione delle dimensioni di MaxRecordSizeInKB a meno di 1024 KB comporta vantaggi relativi, perché i record di dimensioni minori usano soltanto lo spazio necessario.There is little benefit in making MaxRecordSizeInKB smaller than 1024, as smaller records use only the space needed for the smaller record. È probabile che questo valore debba essere modificato solo in rari casi.We expect that this value would need to be changed in only rare cases.

Le impostazioni SharedLogId e SharedLogPath vengono sempre usate insieme e consentono a un servizio di usare un log condiviso separato dal log condiviso predefinito per il nodo.The SharedLogId and SharedLogPath settings are always used together to make a service use a separate shared log from the default shared log for the node. Per ottenere migliori prestazioni, il maggior numero di servizi possibile dovrebbe specificare lo stesso log condiviso.For best efficiency, as many services as possible should specify the same shared log. I file di log condivisi devono essere memorizzati su dischi riservati esclusivamente a questo tipo di file, in modo da ridurre le situazioni di contesa della testina.Shared log files should be placed on disks that are used solely for the shared log file to reduce head movement contention. È probabile che questo valore debba essere modificato solo in rari casi.We expect that this value would need to be changed in only rare cases.

Passaggi successiviNext steps