Pianificazione della capacità per le applicazioni Service FabricCapacity planning for Service Fabric applications

Questo documento illustra come stimare la quantità di risorse (CPU, RAM e spazio di archiviazione su disco) necessaria per eseguire le applicazioni di Azure Service Fabric.This document teaches you how to estimate the amount of resources (CPUs, RAM, disk storage) you need to run your Azure Service Fabric applications. I requisiti delle risorse tendono a cambiare nel tempo.It is common for your resource requirements to change over time. In genere sono necessarie poche risorse durante lo sviluppo e il test del servizio e un numero maggiore nella fase di produzione e di aumento della popolarità dell'applicazione.You typically require few resources as you develop/test your service, and then require more resources as you go into production and your application grows in popularity. Quando si progetta un'applicazione, occorre prendere in considerazione i requisiti di lungo termine e adottare subito i provvedimenti necessari affinché il servizio possa essere ridimensionato per soddisfare le richieste elevate dei clienti.When you design your application, think through the long-term requirements and make choices that allow your service to scale to meet high customer demand.

Quando si crea un cluster di Service Fabric si definiscono i tipi di macchine virtuali (VM) che costituiscono il cluster.When you create a Service Fabric cluster, you decide what kinds of virtual machines (VMs) make up the cluster. Ogni VM è dotata di una quantità limitata di risorse sotto forma di CPU (core e velocità), larghezza di banda di rete, RAM e spazio di archiviazione su disco.Each VM comes with a limited amount of resources in the form of CPUs (cores and speed), network bandwidth, RAM, and disk storage. Con la crescita del servizio nel tempo, è possibile aggiornare le VM affinché offrano un numero maggiore di risorse e/o aggiungere VM al cluster.As your service grows over time, you can upgrade to VMs that offer greater resources and/or add more VMs to your cluster. Per farlo è necessario progettare il servizio in modo che possa sfruttare i vantaggi offerti dall'aggiunta di nuove VM al cluster in modo dinamico.To do the latter, you must architect your service initially so it can take advantage of new VMs that get dynamically added to the cluster.

Alcuni servizi gestiscono pochi dati o addirittura nessun dato nelle VM.Some services manage little to no data on the VMs themselves. La pianificazione della capacità per questi servizi deve pertanto riguardare principalmente le prestazioni, ovvero è necessario scegliere le CPU appropriate (memorie centrali e velocità) per le VM.Therefore, capacity planning for these services should focus primarily on performance, which means selecting the appropriate CPUs (cores and speed) of the VMs. È consigliabile valutare anche la larghezza di banda della rete, compresa la frequenza con cui si verificano trasferimenti di rete nonché la quantità dei dati trasferiti.In addition, you should consider network bandwidth, including how frequently network transfers are occurring and how much data is being transferred. Se il servizio deve mantenere un buon livello di prestazioni con l'aumento dell'utilizzo, è possibile aggiungere altre VM al cluster e bilanciare il carico delle richieste di rete in tutte le VM.If your service needs to perform well as service usage increases, you can add more VMs to the cluster and load balance the network requests across all the VMs.

Per i servizi che gestiscono una grande quantità di dati nelle VM la pianificazione della capacità deve concentrarsi soprattutto sulla dimensione.For services that manage large amounts of data on the VMs, capacity planning should focus primarily on size. È necessario pertanto valutare attentamente la capacità della RAM e dello spazio di archiviazione su disco della VM.Thus, you should carefully consider the capacity of the VM's RAM and disk storage. Per il codice dell'applicazione il sistema di gestione della memoria virtuale di Windows rende lo spazio di archiviazione su disco analogo alla RAM.The virtual memory management system in Windows makes disk space look like RAM to application code. Inoltre il runtime di Service Fabric fornisce il paging intelligente mantenendo in memoria solo i dati attivi e spostando sul disco i dati inattivi.In addition, the Service Fabric runtime provides smart paging keeping only hot data in memory and moving the cold data to disk. Le applicazioni possono così usare più memoria di quella fisicamente disponibile nella VM.Applications can thus use more memory than is physically available on the VM. Una maggiore disponibilità di RAM consente di aumentare le prestazioni, in quanto la VM può sfruttare più spazio di archiviazione su disco nella RAM.Having more RAM simply increases performance, since the VM can keep more disk storage in RAM. La VM selezionata deve disporre di un disco sufficiente per archiviare i dati desiderati nella VM.The VM you select should have a disk large enough to store the data that you want on the VM. Allo stesso modo la VM deve disporre di RAM sufficiente per fornire le prestazioni desiderate.Similarly, the VM should have enough RAM to provide you with the performance you desire. Se i dati del servizio aumentano nel tempo, è possibile aggiungere altre VM al cluster e partizionare i dati in tutte le VM.If your service's data grows over time, you can add more VMs to the cluster and partition the data across all the VMs.

Determinare il numero di nodi necessariDetermine how many nodes you need

Il servizio di partizionamento consente di aumentare i dati del servizio.Partitioning your service allows you to scale out your service's data. Per altre informazioni sul partizionamento, vedere l'articolo sul partizionamento di Service Fabric.For more information on partitioning, see Partitioning Service Fabric. Ogni partizione deve essere contenuta in una singola VM, ma è possibile posizionare più partizioni (di piccole dimensioni) in una singola VM.Each partition must fit within a single VM, but multiple (small) partitions can be placed on a single VM. La presenza di un maggior numero di partizioni piccole offre maggiore flessibilità rispetto alla presenza di poche partizioni grandi.So, having more small partitions gives you greater flexibility than having a few larger partitions. Lo svantaggio è rappresentato dal fatto che la presenza di numerose partizioni aumenta il sovraccarico di Service Fabric impedendo l'esecuzione di operazioni transazionali tra le partizioni.The trade-off is that having lots of partitions increases Service Fabric overhead and you cannot perform transacted operations across partitions. È inoltre disponibile un maggiore traffico di rete potenziale, se il codice del servizio deve accedere spesso a porzioni di dati che si trovano in partizioni diverse.There is also more potential network traffic if your service code frequently needs to access pieces of data that live in different partitions. Quando si progetta il servizio, è opportuno valutare attentamente questi vantaggi e svantaggi per adottare un'efficace strategia di partizionamento.When designing your service, you should carefully consider these pros and cons to arrive at an effective partitioning strategy.

Si supponga che l'applicazione abbia un singolo servizio con stato con una dimensione di archiviazione che si prevede raggiunga i GB della dimensione del database in un anno.Let's assume your application has a single stateful service that has a store size that you expect to grow to DB_Size GB in a year. Si è disposti ad aggiungere altre applicazioni e partizioni, man mano che le dimensioni aumenteranno dopo tale anno.You are willing to add more applications (and partitions) as you experience growth beyond that year. Il fattore di replica, che determina il numero di repliche per il servizio, influisce sul DB_Size totale.The replication factor (RF), which determines the number of replicas for your service impacts the total DB_Size. Il DB_Size totale in tutte le repliche è il fattore di replica moltiplicato per DB_Size.The total DB_Size across all replicas is the Replication Factor multiplied by DB_Size. Node_Size rappresenta lo spazio di archiviazione su disco o RAM per ogni nodo che si vuole usare per il servizio.Node_Size represents the disk space/RAM per node you want to use for your service. Per prestazioni ottimali il valore DB_Size deve essere contenuto nella memoria in tutto il cluster ed è necessario scegliere un Node_Size simile alla RAM della VM.For best performance, the DB_Size should fit into memory across the cluster, and a Node_Size that is around the RAM of the VM should be chosen. Impostare un Node_Size maggiore della capacità di RAM, significa fare affidamento sul paging fornito dal runtime di Service Fabric.By allocating a Node_Size that is larger than the RAM capacity, you are relying on the paging provided by the Service Fabric runtime. Di conseguenza le prestazioni potrebbero non essere ottimali se tutti i dati vengono considerati attivi (perché in questro caso verrebbe eseguito un paging dei dati in/out).Thus, your performance may not be optimal if your entire data is considered to be hot (since then the data is paged in/out). È però più conveniente per molti servizi in cui solo una frazione dei dati è attiva.However, for many services where only a fraction of the data is hot, it is more cost-effective.

Il numero di nodi necessari per ottenere le massime prestazioni può essere calcolato come segue:The number of nodes required for maximum performance can be computed as follows:

Number of Nodes = (DB_Size * RF)/Node_Size

Account per l'espansioneAccount for growth

Si consiglia di calcolare il numero dei nodi in base al DB_Size che si prevede di raggiungere e al DB_Size da cui si parte.You may want to compute the number of nodes based on the DB_Size that you expect your service to grow to, in addition to the DB_Size that you began with. Aumentare quindi il numero di nodi man mano che il servizio cresce, in modo da evitare l'overprovisioning del numero di nodi.Then, grow the number of nodes as your service grows so that you are not over-provisioning the number of nodes. Il numero di partizioni si deve tuttavia basare sul numero di nodi necessari quando si esegue il servizio al livello massimo di espansione.But the number of partitions should be based on the number of nodes that are needed when you're running your service at maximum growth.

È buona norma disporre di alcune macchine aggiuntive in ogni momento, in modo da poter gestire eventuali picchi imprevisti o errori (ad esempio se alcune VM subiscono un arresto anomalo).It is good to have some extra machines available at any time so that you can handle any unexpected spikes or failure (for example, if a few VMs go down). La capacità extra deve essere determinata sulla base dei picchi previsti, ma un buon punto di partenza è riservare alcune VM aggiuntive (5-10%).While the extra capacity should be determined by using your expected spikes, a starting point is to reserve a few extra VMs (5-10 percent extra).

Quanto detto sopra presuppone l'esistenza di un singolo servizio con stato.The preceding assumes a single stateful service. Se si dispone di più di un servizio con stato, è necessario aggiungere all'equazione i DB_Size associati con gli altri servizi.If you have more than one stateful service, you have to add the DB_Size associated with the other services into the equation. In alternativa è possibile calcolare il numero di nodi separatamente per ogni servizio con stato.Alternatively, you can compute the number of nodes separately for each stateful service. Il servizio può includere repliche o partizioni non bilanciate.Your service may have replicas or partitions that aren't balanced. Si tenga presente che alcune partizioni potrebbero includere più dati di altre.Keep in mind that partitions may also have more data than others. Per altre informazioni sul partizionamento, vedere l' articolo sulle procedure consigliate relative al partizionamento.For more information on partitioning, see partitioning article on best practices. L'equazione sopra non tiene conto tuttavia delle partizioni e delle repliche, poiché Service Fabric garantisce che le repliche siano distribuite tra i nodi in modalità ottimizzata.However, the preceding equation is partition and replica agnostic, because Service Fabric ensures that the replicas are spread out among the nodes in an optimized manner.

Usare un foglio di calcolo per il calcolo dei costiUse a spreadsheet for cost calculation

È ora opportuno inserire alcuni dati reali nella formula.Now let's put some real numbers in the formula. Un foglio di calcolo di esempio illustra come pianificare la capacità di un'applicazione contenente tre tipi di oggetti dati.An example spreadsheet shows how to plan the capacity for an application that contains three types of data objects. Per ogni oggetto sono stati definiti in modo approssimativo la dimensione e il numero di oggetti che dovrebbe contenere.For each object, we approximate its size and how many objects we expect to have. Viene anche definito il numero di repliche per ogni tipo di oggetto.We also select how many replicas we want of each object type. Il foglio di calcolo consente di calcolare la quantità totale di memoria da archiviare nel cluster.The spreadsheet calculates the total amount of memory to be stored in the cluster.

Viene quindi immessa una dimensione di VM e il costo mensile.Then we enter a VM size and monthly cost. In base alla dimensione della VM, il foglio di calcolo indica il numero minimo di partizioni da usare per suddividere i dati affinché possano fisicamente adattarsi ai nodi.Based on the VM size, the spreadsheet tells you the minimum number of partitions you must use to split your data to physically fit on the nodes. È possibile che si desideri un numero maggiore di partizioni per soddisfare le esigenze di calcolo specifiche dell'applicazione e del traffico di rete.You may desire a larger number of partitions to accommodate your application's specific computation and network traffic needs. Il foglio di calcolo illustra che il numero di partizioni che gestiscono gli oggetti del profilo utente è aumentato da 1 a 6.The spreadsheet shows the number of partitions that are managing the user profile objects has increased from one to six.

A questo punto, in base a tali informazioni, il foglio di calcolo mostra che è possibile contenere tutti i dati con le partizioni e le repliche desiderate in un cluster a 26 nodi.Now, based on all this information, the spreadsheet shows that you could physically get all the data with the desired partitions and replicas on a 26-node cluster. Tale cluster risulta tuttavia compresso e possono essere necessari alcuni nodi aggiuntivi per gestire gli aggiornamenti e gli errori del nodo.However, this cluster would be densely packed, so you may want some additional nodes to accommodate node failures and upgrades. Il foglio di calcolo mostra inoltre che la disponibilità di più di 57 nodi non offre alcun valore aggiuntivo in quanto alcuni nodi possono rimanere vuoti.The spreadsheet also shows that having more than 57 nodes provides no additional value because you would have empty nodes. Anche in questo caso, può essere comunque necessario superare i 57 nodi per gestire gli aggiornamenti e gli errori del nodo.Again, you may want to go above 57 nodes anyway to accommodate node failures and upgrades. È possibile apportare modifiche al foglio di calcolo in modo che corrisponda alle esigenze specifiche dell'applicazione.You can tweak the spreadsheet to match your application's specific needs.

Foglio di calcolo per il calcolo dei costi

Passaggi successiviNext steps

Per altre informazioni sul partizionamento del servizio, consultare Partizionamento dei servizi di Service Fabric.Check out Partitioning Service Fabric services to learn more about partitioning your service.