Domande frequenti su Service FabricCommonly asked Service Fabric questions

Esistono molte domande frequenti sulle caratteristiche e sulle modalità di uso di Service Fabric.There are many commonly asked questions about what Service Fabric can do and how it should be used. In questo documento vengono illustrate molte di queste domande comuni e le relative risposte.This document covers many of those common questions and their answers.

Configurazione e gestione del clusterCluster setup and management

È possibile creare un cluster che si estenda a più aree di Azure o ai miei data center?Can I create a cluster that spans multiple Azure regions or my own datacenters?

Sì.Yes.

La tecnologia di clustering principale di Service Fabric può essere usata per unire macchine in esecuzione in tutto il mondo, purché dispongano di connettività di rete l'una con l'altra.The core Service Fabric clustering technology can be used to combine machines running anywhere in the world, so long as they have network connectivity to each other. La compilazione e l'esecuzione di questo tipo di cluster possono essere tuttavia complicate.However, building and running such a cluster can be complicated.

Se si è interessati a questo scenario, invitiamo a contattarci tramite Service Fabric Github Issues List o tramite il supporto tecnico per ottenere altro materiale sussidiario.If you are interested in this scenario, we encourage you to get in contact either through the Service Fabric Github Issues List or through your support representative in order to obtain additional guidance. Il team di Service Fabric sta lavorando per fornire ulteriori informazioni, materiale sussidiario e consigli per questo scenario.The Service Fabric team is working to provide additional clarity, guidance, and recommendations for this scenario.

Alcuni aspetti da considerare:Some things to consider:

  1. La risorsa cluster di Service Fabric in Azure è ora divisa in aree, così come i set di scalabilità di macchine virtuali su cui viene creato il cluster.The Service Fabric cluster resource in Azure is regional today, as are the virtual machine scale sets that the cluster is built on. Ciò significa che in caso di malfunzionamento di un'area si potrebbe perdere la possibilità di gestire il cluster tramite Azure Resource Manager o il Portale di Azure.This means that in the event of a regional failure you may lose the ability to manage the cluster via the Azure Resource Manager or the Azure Portal. Questa situazione può verificarsi anche se il cluster resta in esecuzione ed è possibile interagire direttamente con esso.This can happen even though the cluster remains running and you'd be able to interact with it directly. Azure inoltre attualmente non offre la possibilità di disporre di una singola rete virtuale che può essere usata tra le aree.In addition, Azure today does not offer the ability to have a single virtual network that is usable across regions. Ciò significa che un cluster con più aree in Azure richiede indirizzi IP pubblici per ogni macchina virtuale nei set di scalabilità di macchine virtuali di Microsoft Azure o gateway VPN di Azure.This means that a multi-region cluster in Azure requires either Public IP Addresses for each VM in the VM Scale Sets or Azure VPN Gateways. Queste opzioni di rete hanno effetti diversi sui costi, sulle prestazioni e su alcuni livelli di progettazione di applicazioni. È richiesta un'attenta analisi e una pianificazione prima di affrontare un ambiente di questo tipo.These networking choices have different impacts on costs, performance, and to some degree application design, so careful analysis and planning is required before standing up such an environment.
  2. La manutenzione, gestione e monitoraggio di tali computer possono diventare complicati, soprattutto quando estesi su tipi di ambienti, ad esempio tra provider di cloud diversi o tra risorse locali e Azure.The maintenance, management, and monitoring of these machines can become complicated, especially when spanned across types of environments, such as between different cloud providers or between on-premises resources and Azure. È necessario determinare accuratamente gli aggiornamenti, il monitoraggio, la gestione e la diagnostica per il cluster e le applicazioni prima di eseguire i carichi di lavoro di produzione in tale ambiente.Care must be taken to ensure that upgrades, monitoring, management, and diagnostics are understood for both the cluster and the applications before running production workloads in such an environment. Se si ha già grande esperienza di risoluzione di questi problemi in Azure o nei propri Data center, è possibile che si possano applicare queste stesse soluzioni durante la compilazione o l'esecuzione del cluster di Service Fabric.If you already have lots of experience solving these problems in Azure or within your own datacenters, then it is likely that those same solutions can be applied when building out or running your Service Fabric cluster.

I nodi di Service Fabric ricevono automaticamente aggiornamenti del sistema operativo?Do Service Fabric nodes automatically receive OS updates?

Non ancora, ma si tratta di una richiesta comune che Azure intende implementare in futuro.Not today, but this is also a common request that Azure intends to deliver.

Nel frattempo, abbiamo fornito un'applicazione attraverso la quale i sistemi operativi sottostanti ai nodi di Service Fabric ricevono patch e sono aggiornati.In the interim, we have provided an application that the operating systems underneath your Service Fabric nodes stay patched and up to date.

Il problema con gli aggiornamenti del sistema operativo è che solitamente richiedono un riavvio della macchina, causando così una perdita temporanea di disponibilità.The challenge with OS updates is that they typically require a reboot of the machine, which results in temporary availability loss. Di per sé non sarebbe un problema, poiché Service Fabric reindirizzerà automaticamente verso altri nodi il traffico di tali servizi.By itself, that is not a problem, since Service Fabric will automatically redirect traffic for those services to other nodes. Tuttavia, se gli aggiornamenti del sistema operativo non vengono coordinati all'interno del cluster, esiste il rischio di interruzione simultanea per parecchi nodi.However, if OS updates are not coordinated across the cluster, there is the potential that many nodes go down at once. Tali riavvii simultanei possono causare la perdita totale di disponibilità per un servizio o, perlomeno, per una partizione specifica (per un servizio con stato).Such simultaneous reboots can cause complete availability loss for a service, or at least for a specific partition (for a stateful service).

In futuro Microsoft intende supportare un criterio di aggiornamento del sistema operativo completamente automatico e coordinato tra i vari domini di aggiornamento, per garantire la disponibilità nonostante i riavvii e altri guasti o errori imprevisti.In the future, we plan to support an OS update policy that is fully automated and coordinated across update domains, ensuring that availability is maintained despite reboots and other unexpected failures.

È possibile usare set di scalabilità di macchine virtuali di grandi dimensioni nel cluster di Service Fabric?Can I use Large Virtual Machine Scale Sets in my SF cluster?

Risposta breve: no.Short answer - No.

Risposta lunga: anche se con i set di scalabilità di macchine virtuali di grandi dimensioni è possibile arrivare fino a 1000 istanze di VM, per farlo è necessario usare i gruppi di posizionamento.Long Answer - Although the Large Virtual Machine Scale Sets allow you to scale a virtual machine scale set upto 1000 VM instances, it does so by the use of Placement Groups (PGs). I domini di errore e i domini di aggiornamento sono coerenti solo in un gruppo di posizionamento. Service Fabric usa i domini di errore e i domini di aggiornamento per prendere decisioni relative al posizionamento delle repliche del servizio/istanze del servizio.Fault domains (FDs) and upgrade domains (UDs) are only consistent within a placement group Service fabric uses FDs and UDs to make placement decisions of your service replicas/Service instances. Poiché i domini di errore e i domini di aggiornamento sono confrontabili solo in un gruppo di posizionamento, Service Fabric non può usarli.Since the FDs and UDs are comparable only within a placement group SF cannot use it. Se, ad esempio, VM1 nel gruppo di posizionamento 1 ha una topologia di dominio di errore 0 e VM9 nel gruppo di posizionamento 2 ha una topologia di domini di errore 4, non significa che VM1 e VM2 siano in due diversi rack hardware, quindi Service Fabric in questo caso non può usare i valori dei domini di errore per prendere decisioni relative al posizionamento.For example, If VM1 in PG1 has a topology of FD=0 and VM9 in PG2 has a topology of FD=4 , it does not mean that VM1 and VM2 are on two different Hardware Racks, hence SF cannot use the FD values in this case to make placement decisions.

I set di scalabilità di macchine virtuali di grandi dimensioni attualmente presentano altri problemi, ad esempio la mancanza di supporto per il bilanciamento del carico di livello 4.There are other issues with Large virtual machine scale sets currently, like the lack of level-4 Load balancing support. Per altre informazioni, vedere i dettagli sui set di scalabilità di grandi dimensioniRefer to for details on Large scale sets

Qual è la dimensione minima di un cluster di Service Fabric?What is the minimum size of a Service Fabric cluster? Perché non può essere di dimensioni minori?Why can't it be smaller?

La dimensione minima supportata per un cluster di Service Fabric che esegue carichi di lavoro di produzione è di cinque nodi.The minimum supported size for a Service Fabric cluster running production workloads is five nodes. Per scenari di sviluppo e test, sono supportati cluster a tre nodi.For dev/test scenarios, we support three node clusters.

Queste dimensioni minime esistono poiché il cluster di Service Fabric esegue un set di servizi di sistema con stato, inclusi il servizio di denominazione e la gestione del failover.These minimums exist because the Service Fabric cluster runs a set of stateful system services, including the naming service and the failover manager. Questi servizi, che tengono traccia di quali sono stati distribuiti nel cluster e dove sono attualmente ospitati, dipendono da una coerenza elevata.These services, which track what services have been deployed to the cluster and where they're currently hosted, depend on strong consistency. Tale coerenza elevata, a sua volta, dipende dalla possibilità di acquisire un quorum per qualsiasi aggiornamento specifico per lo stato di tali servizi, dove per quorum si intende una stretta maggioranza delle repliche (N/2 + 1) per un determinato servizio.That strong consistency, in turn, depends on the ability to acquire a quorum for any given update to the state of those services, where a quorum represents a strict majority of the replicas (N/2 +1) for a given service.

Detto questo, esaminiamo alcune possibili configurazioni di cluster:With that background, let's examine some possible cluster configurations:

Un nodo: questa opzione non offre una disponibilità elevata, in quanto perdere quel singolo nodo per qualsivoglia motivo significa perdere l'intero cluster.One node: this option does not provide high availability since the loss of the single node for any reason means the loss of the entire cluster.

Due nodi: un quorum per un servizio distribuito tra due nodi (N = 2) è 2 (2/2 + 1 = 2).Two nodes: a quorum for a service deployed across two nodes (N = 2) is 2 (2/2 + 1 = 2). Se viene persa una singola replica, è impossibile creare un quorum.When a single replica is lost, it is impossible to create a quorum. Dato che per aggiornare un servizio è necessario portare temporaneamente offline una replica, questa non è una configurazione utile.Since performing a service upgrade requires temporarily taking down a replica, this is not a useful configuration.

Tre nodi: con tre nodi (N = 3), è comunque necessario creare un quorum di duo nodi (3/2 + 1 = 2).Three nodes: with three nodes (N=3), the requirement to create a quorum is still two nodes (3/2 + 1 = 2). Ciò significa che è possibile perdere un singolo nodo e mantenere comunque il quorum.This means that you can lose an individual node and still maintain quorum.

La configurazione del cluster a tre nodi è supportata per gli scenari di sviluppo e test perché è possibile eseguire aggiornamenti in sicurezza e i guasti ai nodi individuali non rappresentano un rischio elevato, purché che non si verifichino contemporaneamente.The three node cluster configuration is supported for dev/test because you can safely perform upgrades and survive individual node failures, as long as they don't happen simultaneously. Per i carichi di lavoro di produzione, è necessario disporre di una maggiore resilienza a tali guasti simultanei, pertanto sono richiesti cinque nodi.For production workloads, you must be resilient to such a simultaneous failure, so five nodes are required.

È possibile disattivare il cluster di notte o nei fine settimana per ridurre i costi?Can I turn off my cluster at night/weekends to save costs?

Generalmente, no.In general, no. Service Fabric archivia lo stato su dischi locali e temporanei, vale a dire che se la macchina virtuale viene spostata in un host diverso, i dati non vengono spostati con essa.Service Fabric stores state on local, ephemeral disks, meaning that if the virtual machine is moved to a different host, the data does not move with it. In condizioni normali, ciò non rappresenta un problema, in quanto il nuovo nodo viene aggiornato dagli altri nodi.In normal operation, that is not a problem as the new node is brought up to date by other nodes. Tuttavia, se si arrestano tutti i nodi per riavviarli in un secondo momento, è molto probabile che la maggior parte di essi verrà avviata su nuovi host, rendendo impossibile il ripristino dle sistema.However, if you stop all nodes and restart them later, there is a significant possibility that most of the nodes start on new hosts and make the system unable to recover.

Se si desidera creare cluster per testare l'applicazione prima di distribuirla, è consigliabile crearli in maniera dinamica come parte della pipeline integrazione costante/distribuzione costante.If you would like to create clusters for testing your application before it is deployed, we recommend that you dynamically create those clusters as part of your continuous integration/continuous deployment pipeline.

Come aggiorno il sistema operativo? Ad esempio come passo da Windows Server 2012 a Windows Server 2016?How do I upgrade my Operating System (for example from Windows Server 2012 to Windows Server 2016)?

Mentre Microsoft sviluppa un'esperienza migliorata oggi l'utente è responsabile dell'aggiornamento.While we're working on an improved experience, today, you are responsible for the upgrade. È necessario aggiornare l'immagine del sistema operativo nelle macchine virtuali del cluster per una macchina virtuale per volta.You must upgrade the OS image on the virtual machines of the cluster one VM at a time.

Supporto dei contenitoriContainer Support

Perché i contenitori distribuiti in Service Fabric non riescono a risolvere gli indirizzi DNS?Why are my containers that are deployed to SF unable to resolve DNS addresses?

Il problema è stato segnalato nei cluster versione 5.6.204.9494This issue has been reported on clusters that are on 5.6.204.9494 version

Mitigazione: seguire questo documento per abilitare il servizio DNS di Service Fabric nel cluster.Mitigation : Follow this document to enable the DNS service fabric service in your cluster.

Correzione: eseguire l'aggiornamento a una versione del cluster supportata successiva a 5.6.204.9494, se disponibile.Fix : Upgrade to a supported cluster version that is higher than 5.6.204.9494, when it is available. Se il cluster è impostato per gli aggiornamenti automatici, verrà aggiornato automaticamente alla versione in cui questo problema è stato risolto.If your cluster is set to automatic upgrades, then the cluster will automatically upgrade to the version that has this issue fixed.

Progettazione di applicazioniApplication Design

Qual è il modo migliore per eseguire query sui dati in partizioni di una raccolta Reliable Collections?What's the best way to query data across partitions of a Reliable Collection?

Le raccolte Reliable Collections sono in genere partizionate per abilitare l'aumento delle istanze per maggiori prestazioni e velocità effettiva.Reliable collections are typically partitioned to enable scale out for greater performance and throughput. Ciò significa che lo stato di un determinato servizio può essere distribuito in decine o centinaia di macchine.That means that the state for a given service may be spread across 10s or 100s of machines. Per eseguire operazioni su quel set di dati completo, sono disponibili varie opzioni:To perform operations over that full data set, you have a few options:

  • Creare un servizio che esegua una query di tutte le partizioni di un altro servizio per estrarre i dati richiesti.Create a service that queries all partitions of another service to pull in the required data.
  • Creare un servizio che possa ricevere dati da tutte le partizioni di un altro servizio.Create a service that can receive data from all partitions of another service.
  • Inviare periodicamente dati da ogni servizio in un archivio esterno.Periodically push data from each service to an external store. Questo approccio è appropriato solamente se si eseguono query che non fanno parte della logica di business principale.This approach is only appropriate if the queries you're performing are not part of your core business logic.

Qual è il modo migliore per eseguire query sui dati nei vari attori?What's the best way to query data across my actors?

Gli attori sono progettati per essere unità indipendenti di stato e calcolo, pertanto è consigliabile non eseguire query generali dello stato degli attori in fase di esecuzione.Actors are designed to be independent units of state and compute, so it is not recommended to perform broad queries of actor state at runtime. Se è necessario eseguire query nel set completo di stati degli attori, è consigliabile piuttosto:If you have a need to query across the full set of actor state, you should consider either:

  • Sostituire i servizi di attori con servizi Reliable con stato, come il numero delle richieste di rete per raccogliere tutti i dati, dal numero di attori al numero di partizioni nel servizio.Replacing your actor services with stateful reliable services, such that the number of network requests to gather all data from the number of actors to the number of partitions in your service.
  • Progettare gli attori per l'invio periodico del relativo stato a un'archiviazione esterna per facilitare le query.Designing your actors to periodically push their state to an external store for easier querying. Come in precedenza, questo approccio è ideale solo se le query in esecuzione non sono richieste per il comportamento di runtime.As above, this approach is only viable if the queries you're performing are not required for your runtime behavior.

Quanti dai è possibile archiviare in una raccolta Reliable Collections?How much data can I store in a Reliable Collection?

In genere i servizi Reliable sono partizionati. Pertanto, la quantità di dati archiviabili è limitata solo dal numero di macchine presenti nel cluster e dalla quantità di memoria disponibile su tali macchine.Reliable services are typically partitioned, so the amount you can store is only limited by the number of machines you have in the cluster, and the amount of memory available on those machines.

Ad esempio, si supponga di avere una raccolta Reliable Collections in un servizio con 100 partizioni e 3 replica, con archiviati oggetti di dimensioni pari a 1 KB di media.As an example, suppose that you have a reliable collection in a service with 100 partitions and 3 replicas, storing objects that average 1kb in size. Si supponga quindi di disporre di un cluster di 10 macchine con 16 GB di memoria per macchina.Now suppose that you have a 10 machine cluster with 16gb of memory per machine. Per ragioni di semplicità e cautela, si supponga che il sistema operativo, i servizi di sistema, il runtime di Service Fabric e i servizi consumino 6 GB di quella memoria, lasciandone così 10 disponibili per ogni macchina o 100 per il cluster.For simplicity and to be very conservative, assume that the operating system and system services, the Service Fabric runtime, and your services consume 6gb of that, leaving 10gb available per machine, or 100gb for the cluster.

Tenendo presente che ciascun oggetto deve essere archiviato tre volte (una primaria e due repliche), si avrà una memoria sufficiente per circa 35 milioni di oggetti nella raccolta, con funzionamento a piena capacità.Keeping in mind that each object must be stored three times (one primary and two replicas), you would have sufficient memory for approximately 35 million objects in your collection when operating at full capacity. Tuttavia, si consiglia di essere preparati in caso di perdita simultanea di un dominio di errore e di un dominio di aggiornamento, che rappresentano circa 1/3 di capacità e ne ridurrebbero così il numero a circa 23 milioni.However, we recommend being resilient to the simultaneous loss of a failure domain and an upgrade domain, which represents about 1/3 of capacity, and would reduce the number to roughly 23 million.

Si noti che questo calcolo presuppone inoltre:Note that this calculation also assumes:

  • Che la distribuzione dei dati nelle partizioni sia approssimativamente uniforme o che si indichino le metriche di caricamento a Cluster Resource Manager.That the distribution of data across the partitions is roughly uniform or that you're reporting load metrics to the Cluster Resource Manager. Per impostazione predefinita, Service Fabric bilancia il carico in base al numero di repliche.By default, Service Fabric will load balance based on replica count. Nell'esempio precedente, vengono inserite 10 repliche primarie e 20 repliche secondarie su ciascun nodo nel cluster.In our example above, that would put 10 primary replicas and 20 secondary replicas on each node in the cluster. Quanto descritto in precedenza è ideale per carichi distribuiti in modo uniforme tra le partizioni.That works well for load that is evenly distributed across the partitions. Se i carichi non sono uniformi, è necessario segnalarli in modo che Resource Manager possa raggruppare più repliche di piccole dimensioni e consentire alle repliche di dimensioni maggiori di utilizzare più memoria su un singolo nodo.If load is not even, you must report load so that the Resource Manager can pack smaller replicas together and allow larger replicas to consume more memory on an individual node.

  • Che il servizio Reliable in questione sia l'unico ad archiviare stato nel cluster.That the reliable service in question is the only one storing state in the cluster. Poiché è possibile distribuire più servizi in un cluster, è necessario tenere conto delle risorse di esecuzione e gestione dello stato richieste da ciascun servizio.Since you can deploy multiple services to a cluster, you need to be mindful of the resources that each will need to run and manage its state.

  • Che il cluster stesso non si stia ampliando o riducendo.That the cluster itself is not growing or shrinking. Se si aggiungono più macchine, Service Fabric bilancerà nuovamente le repliche per sfruttare la capacità aggiuntiva fino a quando il numero di macchine sarà superiore al numero di partizioni nel servizio, poiché una replica singola non può estendersi alle macchine.If you add more machines, Service Fabric will rebalance your replicas to leverage the additional capacity until the number of machines surpasses the number of partitions in your service, since an individual replica cannot span machines. Al contrario, se si riduce la dimensione del cluster rimuovendo le macchine, le repliche saranno raggruppate più strettamente e avranno una minore capacità totale.By contrast, if you reduce the size of the cluster by removing machines, your replicas will be packed more tightly and have less overall capacity.

Quanti dati è possibile archiviare in un attore?How much data can I store in an actor?

Come per i servizi Reliable, la quantità di dati archiviabile in un servizio attore è limitata solo dallo spazio totale su disco e della memoria disponibile tra i nodi del cluster.As with reliable services, the amount of data that you can store in an actor service is only limited by the total disk space and memory available across the nodes in your cluster. Tuttavia, i singoli attori sono più efficaci quando vengono usati per racchiudere una piccola quantità di logica di business di stato e associata.However, individual actors are most effective when they are used to encapsulate a small amount of state and associated business logic. Come regola generale, un singolo attore dovrebbe avere uno stato misurabile in kilobyte.As a general rule, an individual actor should have state that is measured in kilobytes.

Altre domandeOther questions

In che modo Service Fabric è correlato ai contenitori?How does Service Fabric relate to containers?

I contenitori offrono un modo semplice per racchiudere i servizi e le relative dipendenze in modo da risultare eseguibili con coerenza in tutti gli ambiente e usabili in modo isolato su una singola macchina.Containers offer a simple way to package services and their dependencies such that they run consistently in all environments and can operate in an isolated fashion on a single machine. Service Fabric offre un modo per distribuire e gestire servizi, tra cui quelli inclusi in un contenitore.Service Fabric offers a way to deploy and manage services, including services that have been packaged in a container.

Si prevede di rendere disponibile Service Fabric in open source?Are you planning to open source Service Fabric?

Microsoft prevede di rendere disponibili in open source i framework di Reliable Services e Reliable Actors in GitHub e accetterà i contributi della community per questi progetti.We intend to open source the reliable services and reliable actors frameworks on GitHub and will accept community contributions to those projects. Seguire il blog di Service Fabric per le informazioni più recenti.Please follow the Service Fabric blog for more details as they're announced.

Non si prevede attualmente di rendere disponibile in open source il runtime di Service Fabric.The are currently no plans to open source the Service Fabric runtime.

Passaggi successiviNext steps