Scalabilità in Service FabricScaling in Service Fabric

Azure Service Fabric semplifica la creazione di applicazioni scalabili gestendo i servizi, le partizioni e le repliche nei nodi di un cluster.Azure Service Fabric makes it easy to build scalable applications by managing the services, partitions, and replicas on the nodes of a cluster. L'esecuzione di molti carichi di lavoro sullo stesso hardware determina il massimo utilizzo delle risorse, ma offre anche la flessibilità in termini di scelta di come scalare i carichi di lavoro.Running many workloads on the same hardware enables maximum resource utilization, but also provides flexibility in terms of how you choose to scale your workloads.

Esistono vari modi per impostare la scalabilità in Service Fabric:Scaling in Service Fabric is accomplished several different ways:

  1. Implementazione della scalabilità tramite creazione o rimozione di istanze del servizio senza statoScaling by creating or removing stateless service instances
  2. Implementazione della scalabilità tramite creazione o rimozione di nuovi servizi denominatiScaling by creating or removing new named services
  3. Implementazione della scalabilità tramite creazione o rimozione di nuove istanze dell'applicazione denominateScaling by creating or removing new named application instances
  4. Implementazione della scalabilità tramite utilizzo di servizi partizionatiScaling by using partitioned services
  5. Implementazione della scalabilità tramite aggiunta e rimozione di nodi dal clusterScaling by adding and removing nodes from the cluster
  6. Implementazione della scalabilità tramite metriche di Gestione risorse clusterScaling by using Cluster Resource Manager metrics

Implementazione della scalabilità tramite creazione o rimozione di istanze del servizio senza statoScaling by creating or removing stateless service instances

Uno dei modi più semplici per scalare all'interno di Service Fabric usa i servizi senza stato.One of the simplest ways to scale within Service Fabric works with stateless services. Quando si crea un servizio senza stato, è possibile definire un oggetto InstanceCount.When you create a stateless service, you get a chance to define an InstanceCount. L'oggetto InstanceCount definisce il numero di copie in esecuzione del codice del servizio che viene creato all'avvio del servizio.InstanceCount defines how many running copies of that service's code are created when the service starts up. Si supponga, ad esempio, che il cluster contenga 100 nodi.Let's say, for example, that there are 100 nodes in the cluster. Si supponga anche che venga creato un servizio con un oggetto InstanceCount impostato su 10.Let's also say that a service is created with an InstanceCount of 10. Durante il runtime, queste 10 copie in esecuzione del codice potrebbero diventare tutte troppo occupate oppure non esserlo a sufficienza.During runtime, those 10 running copies of the code could all become too busy (or could be not busy enough). Un modo per scalare il carico di lavoro consiste nel modificare il numero di istanze.One way to scale that workload is to change the number of instances. Alcuni frammenti di codice di monitoraggio o di gestione potrebbero, ad esempio, modificare il numero esistente di istanze in 50, o in 5, a seconda che il carico di lavoro debba essere scalato orizzontale o verticalmente in base al carico.For example, some piece of monitoring or management code can change the existing number of instances to 50, or to 5, depending on whether the workload needs to scale in or out based on the load.

C#:C#:

StatelessServiceUpdateDescription updateDescription = new StatelessServiceUpdateDescription(); 
updateDescription.InstanceCount = 50;
await fabricClient.ServiceManager.UpdateServiceAsync(new Uri("fabric:/app/service"), updateDescription);

Powershell:Powershell:

Update-ServiceFabricService -Stateless -ServiceName $serviceName -InstanceCount 50

Utilizzo del numero delle istanze dinamicoUsing Dynamic Instance Count

In particolare per i servizi senza stato, Service Fabric offre un modo automatico per modificare il numero delle istanze.Specifically for stateless services, Service Fabric offers an automatic way to change the instance count. Il servizio può così scalare dinamicamente con il numero di nodi disponibili.This allows the service to scale dynamically with the number of nodes that are available. Per applicare questo comportamento, si imposta il numero delle istanze su -1.The way to opt into this behavior is to set the instance count = -1. L'istruzione InstanceCount = -1 indica a Service Fabric di eseguire il servizio senza stato in ogni nodo.InstanceCount = -1 is an instruction to Service Fabric that says "Run this stateless service on every node." Se il numero di nodi cambia, Service Fabric cambia automaticamente il numero delle istanze di conseguenza, assicurandosi che il servizio sia in esecuzione in tutti i nodi validi.If the number of nodes changes, Service Fabric automatically changes the instance count to match, ensuring that the service is running on all valid nodes.

C#:C#:

StatelessServiceDescription serviceDescription = new StatelessServiceDescription();
//Set other service properties necessary for creation....
serviceDescription.InstanceCount = -1;
await fc.ServiceManager.CreateServiceAsync(serviceDescription);

Powershell:Powershell:

New-ServiceFabricService -ApplicationName $applicationName -ServiceName $serviceName -ServiceTypeName $serviceTypeName -Stateless -PartitionSchemeSingleton -InstanceCount "-1"

Implementazione della scalabilità tramite creazione o rimozione di nuovi servizi denominatiScaling by creating or removing new named services

Un'istanza del servizio denominata è un'istanza specifica di un tipo di servizio (vedere l'articolo Ciclo di vita dell'applicazione Service Fabric) all'interno di un'istanza dell'applicazione denominata nel cluster.A named service instance is a specific instance of a service type (see Service Fabric application life cycle) within some named application instance in the cluster.

È possibile creare o rimuovere nuove istanze del servizio denominate man mano che aumenta o diminuisce l'utilizzo dei servizi.New named service instances can be created (or removed) as services become more or less busy. In questo modo le richieste possono essere distribuite tra più istanze del servizio, con conseguente riduzione del carico sui servizi esistenti.This allows requests to be spread across more service instances, usually allowing load on existing services to decrease. Quando si creano i servizi, Gestione risorse cluster di Service Fabric li inserisce nel cluster secondo una modalità distribuita.When creating services, the Service Fabric Cluster Resource Manager places the services in the cluster in a distributed fashion. Le decisioni precise vengono gestite dalle metriche nel cluster e da altre regole di posizionamento.The exact decisions are governed by the metrics in the cluster and other placement rules. Esistono vari modi per creare i servizi, ma i più comuni prevedono azioni amministrative, ad esempio un utente che chiama l'oggetto New-ServiceFabricService o la chiamata di codice CreateServiceAsync.Services can be created several different ways, but the most common are either through administrative actions like someone calling New-ServiceFabricService, or by code calling CreateServiceAsync. L'oggetto CreateServiceAsync può persino essere chiamato all'interno di altri servizi in esecuzione nel cluster.CreateServiceAsync can even be called from within other services running in the cluster.

La creazione dinamica dei servizi può essere usata in tutti i tipi di scenari ed è un criterio di uso comune.Creating services dynamically can be used in all sorts of scenarios, and is a common pattern. Si consideri ad esempio un servizio con stato che rappresenta uno specifico flusso di lavoro.For example, consider a stateful service that represents a particular workflow. Le chiamate che rappresentano il lavoro vengono presentate al servizio e questo esegue i passaggi per tale flusso di lavoro e ne registra lo stato.Calls representing work are going to show up to this service, and this service is going to execute the steps to that workflow and record progress.

In che modo si potrebbe scalare questo servizio specifico?How would you make this particular service scale? Il servizio potrebbe essere multi-tenant in qualche forma e accettare le chiamate nonché avviare i passaggi per varie istanze dello stesso flusso di lavoro in una sola volta.The service could be multi-tenant in some form, and accept calls and kick off steps for many different instances of the same workflow all at once. Con questa soluzione, tuttavia, il codice diventa più complesso, poiché ora deve occuparsi di molte istanze diverse dello stesso flusso di lavoro, tutte in fasi diverse e derivanti da clienti diversi.However, that can make the code more complex, since now it has to worry about many different instances of the same workflow, all at different stages and from different customers. La gestione di più flussi di lavoro alla volta, inoltre, non risolve il problema della scalabilità.Also, handling multiple workflows at the same time doesn't solve the scale problem. Il servizio arriverà infatti ad un certo punto in cui consumerà troppe risorse per un computer specifico.This is because at some point this service will consume too many resources to fit on a particular machine. Molti servizi che non sono creati fin dall'inizio con questo criterio sono inoltre soggetti a problemi legati ad alcuni colli di bottiglia intrinseci o a rallentamento del codice.Many services not built for this pattern in the first place also experience difficulty due to some inherent bottleneck or slowdown in their code. Questi tipi di problemi impediscono anche la corretta esecuzione del servizio quando il numero dei flussi di lavoro simultanei controllati dal servizio aumenta.These types of issues cause the service not to work as well when the number of concurrent workflows it is tracking gets larger.

Una soluzione consiste nel creare un'istanza di questo servizio per ogni istanza diversa del flusso di lavoro che si desidera controllare. Questo criterio è un'ottima soluzione e funziona sia con i servizi con stato che con quelli senza stato.A solution is to create an instance of this service for every different instance of the workflow you want to track. This is a great pattern and works whether the service is stateless or stateful. Perché questo criterio funzioni, di solito è presente un altro servizio che agisce da "servizio gestione dei carichi di lavoro".For this pattern to work, there's usually another service that acts as a "Workload Manager Service". Il compito di questo servizio è ricevere le richieste e indirizzarle ad altri servizi.The job of this service is to receive requests and to route those requests to other services. Il servizio gestione può creare dinamicamente un'istanza del servizio del carico di lavoro quando riceve il messaggio e successivamente passare le richieste al servizio.The manager can dynamically create an instance of the workload service when it receives the message, and then pass on requests to those services. Il servizio gestione può anche ricevere i callback quando un determinato servizio del flusso di lavoro completa il processo.The manager service could also receive callbacks when a given workflow service completes its job. Quando il servizio gestione riceve questi callback, può eliminare l'istanza del servizio del flusso di lavoro o conservarla se prevede altre chiamate.When the manager receives these callbacks it could delete that instance of the workflow service, or leave it if more calls are expected.

Nelle sue versioni avanzate, questo tipo di servizio gestione può addirittura creare pool dei servizi che gestisce.Advanced versions of this type of manager can even create pools of the services that it manages. Il pool aiuta ad assicurare che una nuova richiesta in arrivo non debba attendere l'avvio da parte del servizio.The pool helps ensure that when a new request comes in it doesn't have to wait for the service to spin up. Il servizio gestione, invece, può semplicemente selezionare un servizio del flusso di lavoro che non è attualmente occupato dal pool o instradare in modo casuale.Instead, the manager can just pick a workflow service that is not currently busy from the pool, or route randomly. La disponibilità continua di un pool di servizi velocizza la gestione di nuove richieste, in quanto si riducono le probabilità che la richiesta debba attendere l'avvio di un nuovo servizio.Keeping a pool of services available makes handling new requests faster, since it is less likely that the request has to wait for a new service to be spun up. La creazione di nuovi servizi è rapida, ma non è libera o immediata.Creating new services is quick, but not free or instantaneous. Il pool aiuta a ridurre al minimo la quantità di tempo che la richiesta deve attendere prima di essere elaborata dal servizio.The pool helps minimize the amount of time the request has to wait before being serviced. Questo modello basato sul servizio gestione e sul pool viene usato spesso quando i tempi di risposta sono un aspetto molto importante.You'll often see this manager and pool pattern when response times matter the most. L'accodamento della richiesta e la creazione del servizio in background e quindi il relativo passaggio rappresentano un altro criterio di gestione di uso comune, come pure la creazione e l'eliminazione di servizi basati su alcune verifiche della quantità di lavoro che il servizio ha attualmente in sospeso.Queuing the request and creating the service in the background and then passing it on is also a popular manager pattern, as is creating and deleting services based on some tracking of the amount of work that service currently has pending.

Implementazione della scalabilità tramite creazione o rimozione di nuove istanze dell'applicazione denominateScaling by creating or removing new named application instances

La creazione e l'eliminazione di intere istanze dell'applicazione è simile al criterio di creazione ed eliminazione di servizi.Creating and deleting whole application instances is similar to the pattern of creating and deleting services. Questo criterio si basa sull'esistenza di un servizio gestione che prende le decisioni in base alle richieste che vede e alle informazioni che riceve dagli altri servizi nel cluster.For this pattern, there's some manager service that is making the decision based on the requests that it is seeing and the information it is receiving from the other services inside the cluster.

Quando è preferibile usare la creazione di una nuova istanza dell'applicazione denominata al posto della creazione di una nuova istanza del servizio denominata in un'applicazione già esistente?When should creating a new named application instance be used instead of creating a new named service instances in some already existing application? Esistono alcuni casi in cui questa soluzione è preferibile:There's a few cases:

  • La nuova istanza dell'applicazione è adatta a un cliente che necessita che il codice venga eseguito con alcune specifiche impostazioni di sicurezza e di identità.The new application instance is for a customer whose code needs to run under some particular identity or security settings.
    • Service Fabric consente di definire pacchetti di codice diversi da eseguire con identità specifiche.Service Fabric allows defining different code packages to run under particular identities. Per avviare lo stesso pacchetto di codice con identità diverse, è necessario che le attivazioni si verifichino in istanze dell'applicazione diverse.In order to launch the same code package under different identities, the activations need to occur in different application instances. Si consideri il caso in cui sono presenti carichi di lavoro distribuiti di un cliente esistente.Consider a case where you have an existing customer's workloads deployed. È possibile eseguire questi carichi con un'identità specifica in modo da poterne monitorare e controllare l'accesso ad altre risorse, ad esempio database remoti o altri sistemi.These may be running under a particular identity so you can monitor and control their access to other resources, such as remote databases or other systems. In questo caso, quando un nuovo cliente si iscrive, è probabile che non si desideri attivare il codice nello stesso contesto (spazio del processo).In this case, when a new customer signs up, you probably don't want to activate their code in the same context (process space). Sebbene possibile, questo rende più difficile al codice operare all'interno del contesto di una specifica identità.While you could, this makes it harder for your service code to act within the context of a particular identity. È necessario in genere disporre di ulteriore codice per la gestione della sicurezza, dell'isolamento e delle identità.You typically must have more security, isolation, and identity management code. Invece di usare istanze del servizio denominate diverse nella stessa istanza dell'applicazione e pertanto nello stesso spazio di processo, è possibile usare istanze dell'applicazione Service Fabric denominate diverse.Instead of using different named service instances within the same application instance and hence the same process space, you can use different named Service Fabric Application instances. In questo modo diventa più semplice definire contesti di identità diversi.This makes it easier to define different identity contexts.
  • La nuova istanza dell'applicazione funge da mezzo di configurazioneThe new application instance also serves as a means of configuration
    • Per impostazione predefinita, tutte le istanze del servizio denominate di un tipo di servizio specifico all'interno di un'istanza dell'applicazione vengono eseguite nello stesso processo in un determinato nodo.By default, all of the named service instances of a particular service type within an application instance will run in the same process on a given node. Ciò significa che, sebbene sia possibile configurare ogni istanza del servizio in modo diverso, si tratta di un approccio complicato.What this means is that while you can configure each service instance differently, doing so is complicated. I servizi devono disporre di un token da usare per cercare la propria configurazione all'interno di un pacchetto di configurazioni.Services must have some token they use to look up their config within a configuration package. Il token è in genere semplicemente il nome del servizio.Usually this is just the service's name. Questo approccio va bene, ma associa la configurazione ai nomi delle singole istanze del servizio denominate all'interno di tale istanza dell'applicazione.This works fine, but it couples the configuration to the names of the individual named service instances within that application instance. Questa situazione può generare confusione e risultare difficile da gestire perché la configurazione è normalmente un artefatto della fase di progettazione con valori specifici dell'istanza dell'applicazione.This can be confusing and hard to manage since configuration is normally a design time artifact with application instance specific values. La creazione di più servizi prevede sempre vari aggiornamenti dell'applicazione per modificare le informazioni all'interno dei pacchetti di configurazione o per distribuirne di nuovi, in modo che i nuovi servizi possano cercare le informazioni specifiche che li riguardano.Creating more services always means more application upgrades to change the information within the config packages or to deploy new ones so that the new services can look up their specific information. È spesso più facile creare un'istanza dell'applicazione denominata completamente nuovaIt's often easier to create a whole new named application instance. e quindi usare i parametri dell'applicazione per impostare la configurazione necessaria per i servizi.Then you can use the application parameters to set whatever configuration is necessary for the services. In questo modo tutti i servizi che vengono creati all'interno dell'istanza dell'applicazione denominata possono ereditare le impostazioni della configurazione specifica.This way all of the services that are created within that named application instance can inherit particular configuration settings. Invece di avere, ad esempio, un unico file di configurazione con le impostazioni e le personalizzazioni per ogni cliente, ad esempio segreti o limiti di risorse per cliente, si dispone di un'istanza dell'applicazione diversa per ogni cliente in cui queste impostazioni sono ignorate.For example, instead of having a single configuration file with the settings and customizations for every customer, such as secrets or per customer resource limits, you'd instead have a different application instance for each customer with these settings overridden.
  • La nuova applicazione funge da limite per l'aggiornamentoThe new application serves as an upgrade boundary
    • All'interno di Service Fabric le diverse istanze dell'applicazione denominate fungono da limiti per l'aggiornamento.Within Service Fabric, different named application instances serve as boundaries for upgrade. Un aggiornamento di un'istanza dell'applicazione denominata non influirà sul codice in esecuzione in un'altra istanza dell'applicazione denominata.An upgrade of one named application instance will not impact the code that another named application instance is running. Le diverse applicazioni finiranno con l'eseguire versioni diverse dello stesso codice negli stessi nodi.The different applications will end up running different versions of the same code on the same nodes. Questo può essere un fattore da considerare quando occorre prendere una decisione sull'implementazione della scalabilità perché è possibile scegliere se il nuovo codice deve seguire o meno gli stessi aggiornamenti di un altro servizio.This can be a factor when you need to make a scaling decision because you can choose whether the new code should follow the same upgrades as another service or not. Si supponga, ad esempio, che arrivi una chiamata al servizio gestione che deve scalare i carichi di lavoro di un determinato cliente tramite la creazione e l'eliminazione dinamiche dei servizi.For example, say that a call arrives at the manager service that is responsible for scaling a particular customer's workloads by creating and deleting services dynamically. In questo caso, tuttavia, la chiamata riguarda un carico di lavoro associato a un nuovo cliente.In this case however, the call is for a workload associated with a new customer. La maggior parte dei clienti preferisce essere isolata dagli altri clienti non solo per i motivi di sicurezza e di configurazione spiegati in precedenza, ma perché l'isolamento offre maggiore flessibilità in termini di esecuzione di versioni specifiche del software e di scelta del periodo ideale per l'aggiornamento.Most customers like being isolated from each other not just for the security and configuration reasons listed previously, but because it provides more flexibility in terms of running specific versions of the software and choosing when they get upgraded. È anche possibile creare una nuova istanza dell'applicazione e crearvi il servizio semplicemente per partizionare ulteriormente la quantità di servizi che saranno interessati da ogni aggiornamento.You may also create a new application instance and create the service there simply to further partition the amount of your services that any one upgrade will touch. L'uso di istanze dell'applicazione separate offre maggiore granularità quando si eseguono gli aggiornamenti dell'applicazione e consente di usare i test A/B e le distribuzioni Blue/Green.Separate application instances provide greater granularity when doing application upgrades, and also enable A/B testing and Blue/Green deployments.
  • L'istanza dell'applicazione esistente è completaThe existing application instance is full
    • In Service Fabric la capacità dell'applicazione è un concetto che può essere usato per controllare la quantità di risorse disponibili per istanze dell'applicazione specifiche.In Service Fabric, application capacity is a concept that you can use to control the amount of resources available for particular application instances. Si può ad esempio decidere che, per scalare un determinato servizio, si debba creare un'altra istanza.For example, you may decide that a given service needs to have another instance created in order to scale. Questa istanza dell'applicazione è tuttavia fuori dalla capacità di una determinata metrica.However, this application instance is out of capacity for a certain metric. Se a questo cliente o carico di lavoro specifico devono essere concesse ancora altre risorse, è possibile aumentare la capacità esistente per l'applicazione o creare una nuova applicazione.If this particular customer or workload should still be granted more resources, then you could either increase the existing capacity for that application or create a new application.

Implementazione della scalabilità a livello di partizioneScaling at the partition level

Service Fabric supporta il partizionamento.Service Fabric supports partitioning. Il partizionamento suddivide un servizio in più sezioni logiche e fisiche, ognuna delle quali opera in modo indipendente.Partitioning splits a service into several logical and physical sections, each of which operates independently. Ciò è utile con i servizi con stato, poiché nessun set di repliche deve gestire tutte le chiamate e manipolare tutto lo stato in una sola volta.This is useful with stateful services, since no one set of replicas has to handle all the calls and manipulate all of the state at once. L'articolo relativo alla panoramica del partizionamento include informazioni relative ai tipi di schemi di partizionamento supportati.The partitioning overview provides information on the types of partitioning schemes that are supported. Le repliche di ogni partizione vengono distribuite tra i nodi in un cluster, distribuendo così il carico del servizio e assicurando che né il servizio nel suo complesso né le partizioni includano un singolo punto di errore.The replicas of each partition are spread across the nodes in a cluster, distributing that service's load and ensuring that neither the service as a whole or any partition has a single point of failure.

Si consideri un servizio che usa lo schema di partizionamento con intervallo con una chiave inferiore uguale a 0, una chiave superiore uguale a 99 e quattro partizioni.Consider a service that uses a ranged partitioning scheme with a low key of 0, a high key of 99, and a partition count of 4. In un cluster a tre nodi il servizio potrebbe avere un layout con quattro repliche che condividono le risorse in ogni nodo, come illustrato di seguito:In a three-node cluster, the service might be laid out with four replicas that share the resources on each node as shown here:

Layout delle partizioni con tre nodi
Partition layout with three nodes

Se si aumenta il numero dei nodi, Service Fabric sposta nei nuovi nodi alcune delle repliche esistenti.If you increase the number of nodes, Service Fabric will move some of the existing replicas there. Si supponga, ad esempio, che il numero di nodi aumenti a quattro e che le repliche vengano ridistribuite.For example, let's say the number of nodes increases to four and the replicas get redistributed. Il servizio dispone a questo punto di tre repliche in esecuzione in ogni nodo, ognuna appartenente a partizioni diverse.Now the service now has three replicas running on each node, each belonging to different partitions. Si ottiene così un utilizzo ottimale delle risorse in quanto il nuovo nodo non è ad accesso sporadico.This allows better resource utilization since the new node isn't cold. Si ottiene di solito anche un miglioramento delle prestazioni poiché ogni servizio dispone di più risorse.Typically, it also improves performance as each service has more resources available to it.

Layout delle partizioni con quattro nodi
Partition layout with four nodes

Implementazione della scalabilità tramite l'utilizzo di Gestione risorse cluster di Service Fabric e di metricheScaling by using the Service Fabric Cluster Resource Manager and metrics

Le metriche indicano il modo in cui i servizi esprimono il consumo di risorse a Service Fabric.Metrics are how services express their resource consumption to Service Fabric. L'uso delle metriche offre a Gestione risorse cluster la possibilità di riorganizzare e ottimizzare il layout del cluster.Using metrics gives the Cluster Resource Manager an opportunity to reorganize and optimize the layout of the cluster. Nel cluster potrebbero, ad esempio, essere presenti molte risorse, ma non essere allocate ai servizi che svolgono attualmente il lavoro.For example, there may be plenty of resources in the cluster, but they might not be allocated to the services that are currently doing work. L'utilizzo delle metriche consente a Gestione risorse cluster di riorganizzare il cluster in modo da garantire che i servizi abbiano accesso alle risorse disponibili.Using metrics allows the Cluster Resource Manager to reorganize the cluster to ensure that services have access to the available resources.

Implementazione della scalabilità tramite aggiunta e rimozione di nodi dal clusterScaling by adding and removing nodes from the cluster

Un'altra opzione per la scalabilità con Service Fabric consiste nel modificare le dimensioni del cluster.Another option for scaling with Service Fabric is to change the size of the cluster. Modificare le dimensioni del cluster significa aggiungere o rimuovere nodi per uno o più tipi di nodo nel cluster.Changing the size of the cluster means adding or removing nodes for one or more of the node types in the cluster. Si consideri, ad esempio, il caso in cui tutti i nodi del cluster sono attivi.For example, consider a case where all of the nodes in the cluster are hot. Le risorse del cluster sono quindi quasi tutte usate.This means that the cluster's resources are almost all consumed. In questo caso, aggiungere altri nodi al cluster è il modo migliore per applicare la scalabilità.In this case, adding more nodes to the cluster is the best way to scale. Dopo che i nuovi nodi sono stati aggiunti al cluster, Gestione risorse cluster di Service Fabric sposta alcuni servizi nei nuovi nodi, riducendo il carico totale sui nodi esistenti.Once the new nodes join the cluster the Service Fabric Cluster Resource Manager moves services to them, resulting in less total load on the existing nodes. Per i servizi senza stato con numero di istanze = -1, vengono create automaticamente più istanze del servizio.For stateless services with instance count = -1, more service instances are automatically created. Alcune chiamate possono così spostarsi dai nodi esistenti a quelli nuovi.This allows some calls to move from the existing nodes to the new nodes.

L'aggiunta e la rimozione di nodi nel cluster può essere eseguita tramite il modulo PowerShell di Azure Resource Manager di Service Fabric.Adding and removing nodes to the cluster can be accomplished via the Service Fabric Azure Resource Manager PowerShell module.

Add-AzureRmServiceFabricNode -ResourceGroupName $resourceGroupName -Name $clusterResourceName -NodeType $nodeTypeName  -NumberOfNodesToAdd 5 
Remove-AzureRmServiceFabricNode -ResourceGroupName $resourceGroupName -Name $clusterResourceName -NodeType $nodeTypeName -NumberOfNodesToRemove 5

RiassumendoPutting it all together

Si prendano ora tutti i concetti discussi qui e li si applichi a un esempio.Let's take all the ideas that we've discussed here and talk through an example. Si consideri l'esempio seguente: si intende creare un servizio di rubrica, contenente nomi e informazioni sui contatti.Consider the following service: you are trying to build a service that acts as an address book, holding on to names and contact information.

Emergono subito alcune domande in merito alla scalabilità: quanti utenti useranno il servizio?Right up front you have a bunch of questions related to scale: How many users are you going to have? Quanti contatti archivierà ogni singolo utente?How many contacts will each user store? È difficile stabilire subito questi aspetti durante la creazione del servizio.Trying to figure this all out when you are standing up your service for the first time is difficult. Si supponga di voler iniziare con un unico servizio statico con un numero di partizioni specifico.Let's say you were going to go with a single static service with a specific partition count. Scegliere la partizione sbagliata potrebbe portare a problemi di scalabilità futuri.The consequences of picking the wrong partition count could cause you to have scale issues later. Allo stesso modo, anche se si seleziona il numero corretto, si potrebbe non disporre di tutte le informazioni necessarie.Similarly, even if you pick the right count you might not have all the information you need. È, ad esempio, necessario decidere in anticipo anche le dimensioni del cluster, sia in termini di numero di nodi che di dimensioni.For example, you also have to decide the size of the cluster up front, both in terms of the number of nodes and their sizes. È in genere difficile prevedere il numero di risorse che un servizio userà nell'arco della sua esistenza.It's usually hard to predict how many resources a service is going to consume over its lifetime. Può inoltre essere difficile sapere a priori il modello di traffico che il servizio vedrà effettivamente.It can also be hard to know ahead of time the traffic pattern that the service actually sees. Gli utenti potrebbero, ad esempio, aggiungere e rimuovere i propri contatti come prima cosa al mattino oppure il traffico potrebbe essere distribuito uniformemente nell'arco della giornata.For example, maybe people add and remove their contacts only first thing in the morning, or maybe it's distributed evenly over the course of the day. In base al tipo di traffico potrebbe essere necessario aumentare e ridurre le risorse in modo dinamico.Based on this you might need to scale out and in dynamically. Si può forse imparare a prevedere quando sarà necessario aumentare o ridurre, ma in ogni caso sarà probabilmente necessario adottare una soluzione a seconda dei cambiamenti nel consumo di risorse da parte del servizio.Maybe you can learn to predict when you're going to need to scale out and in, but either way you're probably going to need to react to changing resource consumption by your service. Ciò può richiedere la modifica delle dimensioni del cluster per offrire ulteriori risorse quando la riorganizzazione dell'utilizzo delle risorse esistenti non è sufficiente.This can involve changing the size of the cluster in order to provide more resources when reorganizing use of existing resources isn't enough.

Perché mai scegliere uno schema a partizione singola per tutti gli utenti?But why even try to pick a single partition scheme out for all users? Perché limitarsi a un servizio e a un cluster statico?Why limit yourself to one service and one static cluster? La situazione reale è di solito più dinamica.The real situation is usually more dynamic.

Quando si compila per scalare, considerare il modello dinamico seguente.When building for scale, consider the following dynamic pattern. Potrebbe essere necessario adattarlo alla propria situazione:You may need to adapt it to your situation:

  1. Invece di tentare di selezionare in anticipo uno schema di partizionamento per tutti gli utenti, creare un "servizio gestione".Instead of trying to pick a partitioning scheme for everyone up front, build a "manager service".
  2. Il compito del servizio gestione è analizzare le informazioni del cliente quando quest'ultimo si iscrive al servizio.The job of the manager service is to look at customer information when they sign up for your service. In base a tali informazioni, il servizio gestione crea un'istanza del servizio archiviazione-contatti effettivo solo per quel cliente.Then depending on that information the manager service create an instance of your actual contact-storage service just for that customer. Se il cliente richiede una configurazione, un isolamento o aggiornamenti specifici, si può anche decidere di avviare un'istanza dell'applicazione per questo cliente.If they require particular configuration, isolation, or upgrades, you can also decide to spin up an Application instance for this customer.

Questo modello di creazione dinamico offre molti vantaggi:This dynamic creation pattern many benefits:

  • Non si tenterà di indovinare in anticipo il numero di partizioni corretto per tutti gli utenti o di creare un unico servizio che è di per sé scalabile all'infinito.You're not trying to guess the correct partition count for all users up front or build a single service that is infinitely scalable all on its own.
  • I diversi utenti non dovranno avere lo stesso numero di partizioni, numero di repliche, vincoli di posizionamento, metriche, carichi predefiniti, nomi di servizio, impostazioni DNS o qualunque delle altre proprietà specificate a livello di servizio o di applicazione.Different users don't have to have the same partition count, replica count, placement constraints, metrics, default loads, service names, dns settings, or any of the other properties specified at the service or application level.
  • Si ottiene una segmentazione dei dati aggiuntiva.You gain additional data segmentation. Ogni cliente dispone della propria copia del servizioEach customer has their own copy of the service
    • Ogni servizio del cliente può essere configurato in maniera diversa, con più o meno risorse, partizioni o repliche in base alle necessità e alla scalabilità prevista.Each customer service can be configured differently and granted more or fewer resources, with more or fewer partitions or replicas as necessary based on their expected scale.
      • Si supponga, ad esempio, che il cliente abbia pagato per il livello "Gold", che gli consente di ottenere più repliche o un numero superiore di partizioni e potenzialmente risorse dedicate ai servizi attraverso metriche e funzionalità di applicazione.For example, say the customer paid for the "Gold" tier - they could get more replicas or greater partition count, and potentially resources dedicated to their services via metrics and application capacities.
      • Si supponga in alternativa che il cliente abbia indicato che il numero di contatti necessari è "ridotto", quindi ottiene solo alcune partizioni oppure può addirittura essere inserito in un pool di servizi condiviso con altri clienti.Or say they provided information indicating the number of contacts they needed was "Small" - they would get only a few partitions, or could even be put into a shared service pool with other customers.
  • Non si esegue una serie di istanze del servizio o repliche mentre si attende l'arrivo dei clientiYou're not running a bunch of service instances or replicas while you're waiting for customers to show up
  • Se un cliente lascia il servizio, la rimozione delle informazioni dal servizio è facile quanto fare eliminare dal servizio gestione il servizio o l'applicazione creata.If a customer ever leaves, then removing their information from your service is as simple as having the manager delete that service or application that it created.

Passaggi successiviNext steps

Per altre informazioni sui concetti relativi a Service Fabric, vedere gli articoli seguenti:For more information on Service Fabric concepts, see the following articles: