Introduzione al servizio di analisi degli erroriIntroduction to the Fault Analysis Service

Il servizio di analisi degli errori è progettato per testare servizi basati su Microsoft Azure Service Fabric.The Fault Analysis Service is designed for testing services that are built on Microsoft Azure Service Fabric. Con il servizio di analisi degli errori è possibile causare errori significativi ed eseguire scenari di test completi delle applicazioni.With the Fault Analysis Service you can induce meaningful faults and run complete test scenarios against your applications. Tali errori e scenari verificano e convalidano i numerosi stati e le transizioni sperimentate da un servizio per la relativa durata, il tutto in modo controllato, sicuro e coerente.These faults and scenarios exercise and validate the numerous states and transitions that a service will experience throughout its lifetime, all in a controlled, safe, and consistent manner.

Le azioni sono i singoli errori destinati a un servizio a scopo di test.Actions are the individual faults targeting a service for testing it. Uno sviluppatore di servizi può utilizzarle come blocchi predefiniti per scrivere scenari complicati.A service developer can use these as building blocks to write complicated scenarios. Ad esempio:For example:

  • Riavviare un nodo per simulare un qualsiasi numero di situazioni in cui un computer o una VM viene riavviata.Restart a node to simulate any number of situations where a machine or VM is rebooted.
  • Spostare una replica del servizio con stato per simulare il bilanciamento del carico, il failover o l'aggiornamento dell'applicazione.Move a replica of your stateful service to simulate load balancing, failover, or application upgrade.
  • Richiamare la perdita del quorum in un servizio con stato per creare una situazione in cui le operazioni di scrittura non possono continuare perché il numero delle repliche di "backup" o "secondarie" non è sufficiente per accettare nuovi dati.Invoke quorum loss on a stateful service to create a situation where write operations can't proceed because there aren't enough "back-up" or "secondary" replicas to accept new data.
  • Richiamare la perdita di dati in un servizio con stato per creare una situazione in cui tutto lo stato in memoria sia completamente cancellato.Invoke data loss on a stateful service to create a situation where all in-memory state is completely wiped out.

Gli scenari sono operazioni complesse costituite da una o più azioni.Scenarios are complex operations composed of one or more actions. Il servizio di analisi degli errori offre due scenari completi incorporati:The Fault Analysis Service provides two built-in complete scenarios:

  • Scenario di caosChaos Scenario
  • Scenario di failoverFailover Scenario

Test come servizioTesting as a service

Il servizio di analisi degli errori è un servizio di sistema di Service Fabric che viene avviato automaticamente con un cluster di Service Fabric.The Fault Analysis Service is a Service Fabric system service that is automatically started with a Service Fabric cluster. Questo servizio funge da host per l'inserimento di errori, l'esecuzione degli scenari di test e l'analisi dell'integrità.This service acts as the host for fault injection, test scenario execution, and health analysis.

Servizio di analisi degli errori

Quando viene avviato uno scenario di test o un'azione di errore, viene inviato al servizio di analisi degli errori un comando per eseguire tale scenario o azione.When a fault action or test scenario is initiated, a command is sent to the Fault Analysis Service to run the fault action or test scenario. Il servizio di analisi degli errori è con stato, quindi è in grado di eseguire errori e scenari e convalidare i risultati in modo affidabile.The Fault Analysis Service is stateful so that it can reliably run faults and scenarios and validate results. Ad esempio, uno scenario di test a esecuzione prolungata può essere eseguito in modo affidabile dal servizio di analisi degli errori.For example, a long-running test scenario can be reliably executed by the Fault Analysis Service. E poiché i test vengono eseguiti all'interno del cluster, il servizio può esaminare lo stato del cluster e i servizi per offrire informazioni più dettagliate sugli errori.And because tests are being executed inside the cluster, the service can examine the state of the cluster and your services to provide more in-depth information about failures.

Test dei sistemi distribuitiTesting distributed systems

Infrastruttura di servizi rende molto più semplice il processo di scrittura e gestione delle applicazioni scalabili distribuite.Service Fabric makes the job of writing and managing distributed scalable applications significantly easier. Allo stesso modo, il servizio di analisi degli errori semplifica il test di un'applicazione distribuita.The Fault Analysis Service makes testing a distributed application similarly easier. Esistono tre problemi principali che devono essere risolti durante il test:There are three main issues that need to be solved while testing:

  1. La simulazione e la generazione di errori che potrebbero verificarsi negli scenari reali: uno degli aspetti importanti di Service Fabric è che consente alle applicazioni distribuite di correggere vari errori.Simulating/generating failures that might occur in real-world scenarios: One of the important aspects of Service Fabric is that it enables distributed applications to recover from various failures. Tuttavia, per verificare che l'applicazione sia in grado di correggere questi errori, è necessario un meccanismo per simulare e generare questi errori reali in un ambiente di test controllato.However, to test that the application is able to recover from these failures, we need a mechanism to simulate/generate these real-world failures in a controlled test environment.
  2. La capacità di generare errori correlati: gli errori di base nel sistema, ad esempio gli errori di rete e gli errori dei computer, sono facili da riprodurre singolarmente.The ability to generate correlated failures: Basic failures in the system, such as network failures and machine failures, are easy to produce individually. Generare un numero significativo di scenari che possono verificarsi nel mondo reale in seguito alle interazioni di questi singoli errori non è semplice.Generating a significant number of scenarios that can happen in the real world as a result of the interactions of these individual failures is non-trivial.
  3. L'esperienza unificata tra vari livelli di sviluppo e distribuzione: esistono molti sistemi di fault injection che consentono di generare diversi tipi di errori.Unified experience across various levels of development and deployment: There are many fault injection systems that can do various types of failures. Tuttavia, quando si passa da uno scenario di sviluppo in un ambiente di piccole dimensioni all'esecuzione degli stessi test in ambienti di test di grandi dimensioni per usarli nella produzione, l'esperienza è insoddisfacente.However, the experience in all of these is poor when moving from one-box developer scenarios, to running the same tests in large test environments, to using them for tests in production.

Sebbene esistano numerosi meccanismi per risolvere questi problemi, manca ancora un sistema in grado di eseguire le stesse operazioni con le garanzie richieste, direttamente da un ambiente di sviluppo di piccole dimensioni ai test nei cluster di produzione.While there are many mechanisms to solve these problems, a system that does the same with required guarantees--all the way from a one-box developer environment, to test in production clusters--is missing. Il servizio di analisi degli errori consente agli sviluppatori di applicazioni di concentrarsi sul test della logica di business.The Fault Analysis Service helps the application developers concentrate on testing their business logic. Il servizio di analisi degli errori offre tutte le funzionalità necessarie per testare l'interazione del servizio con il sistema distribuito sottostante.The Fault Analysis Service provides all the capabilities needed to test the interaction of the service with the underlying distributed system.

Simulazione e generazione di scenari di errore realiSimulating/generating real-world failure scenarios

Per verificare l'affidabilità di un sistema distribuito in caso di errori, è necessario un meccanismo per generare errori.To test the robustness of a distributed system against failures, we need a mechanism to generate failures. Sebbene dal punto di vista teorico generare un errore come un nodo inattivo sembri semplice, comporta gli stessi problemi di coerenza che si tenta di risolvere con Service Fabric.While in theory, generating a failure like a node down seems easy, it starts hitting the same set of consistency problems that Service Fabric is trying to solve. Se ad esempio si vuole arrestare un nodo, il flusso di lavoro richiesto è il seguente:As an example, if we want to shut down a node, the required workflow is the following:

  1. Eseguire dal client una richiesta di arresto del nodo.From the client, issue a shutdown node request.
  2. Inviare la richiesta al nodo giusto.Send the request to the right node.

    a.a. Se il nodo non viene trovato, la richiesta ha esito negativo.If the node is not found, it should fail.

    b.b. Se il nodo viene trovato, la richiesta viene restituita solo se il nodo è stato arrestato.If the node is found, it should return only if the node is shut down.

Per verificare l'errore dalla prospettiva del test è necessario sapere che, quando viene provocato, l'errore si verifica effettivamente.To verify the failure from a test perspective, the test needs to know that when this failure is induced, the failure actually happens. La garanzia offerta da Service Fabric consiste nel fatto che il nodo sarà disattivato oppure lo era già quando il comando lo ha raggiunto.The guarantee that Service Fabric provides is that either the node will go down or was already down when the command reached the node. In entrambi i casi il test deve essere in grado di verificare lo stato e procedere con l'esatta convalida (riuscito o non riuscito).In either case the test should be able to correctly reason about the state and succeed or fail correctly in its validation. Un sistema implementato all'esterno di Service Fabric per eseguire lo stesso set di errori potrebbe implicare numerosi problemi di rete, hardware e software che impedirebbero al sistema stesso di offrire le garanzie indicate in precedenza.A system implemented outside of Service Fabric to do the same set of failures could hit many network, hardware, and software issues, which would prevent it from providing the preceding guarantees. In presenza dei problemi elencati, Service Fabric esegue la riconfigurazione dello stato del cluster per risolvere i problemi, pertanto il servizio di analisi degli errori continua a essere in grado di offrire le garanzie corrette.In the presence of the issues stated before, Service Fabric will reconfigure the cluster state to work around the issues, and hence the Fault Analysis Service will still be able to give the right set of guarantees.

Generazione degli eventi e degli scenari richiestiGenerating required events and scenarios

Se è difficile iniziare a simulare un errore reale in modo coerente, essere in grado di generare errori correlati è ancora più complesso.While simulating a real-world failure consistently is tough to start with, the ability to generate correlated failures is even tougher. Ad esempio, in un servizio persistente con stato si verifica una perdita di dati quando si verificano i seguenti eventi:For example, a data loss happens in a stateful persisted service when the following things happen:

  1. Nella replica viene rilevato solo un quorum di scrittura delle repliche.Only a write quorum of the replicas are caught up on replication. Tutte le repliche secondarie restano dietro quelle primarie.All the secondary replicas lag behind the primary.
  2. Il quorum di scrittura si interrompe in quanto le repliche si arrestano a causa dell'arresto di un pacchetto di codice o di un nodo.The write quorum goes down because of the replicas going down (due to a code package or node going down).
  3. Il quorum di scrittura non può tornare attivo perché i dati per le repliche sono stati persi a causa di un danno del disco o della ricreazione dell'immagine del computer.The write quorum cannot come back up because the data for the replicas is lost (due to disk corruption or machine reimaging).

Questi errori correlati si verificano effettivamente nel mondo reale, anche se non con la stessa frequenza dei singoli errori.These correlated failures do happen in the real world but not as frequently as individual failures. La possibilità di testare questi scenari prima che si verifichino nell'ambiente di produzione è fondamentale.The ability to test for these scenarios before they happen in production is critical. Ancora più importante è la possibilità di simulare questi scenari con carichi di lavoro di produzione in circostanze controllate, ad esempio durante la giornata con tutti gli ingegneri al lavoro,Even more important is the ability to simulate these scenarios with production workloads in controlled circumstances (in the middle of the day with all engineers on deck). il che è di gran lunga preferibile al rischio che lo scenario si verifichi per la prima volta nell'ambiente di produzione alle 2:00.That is much better than having it happen for the first time in production at 2:00 A.M.

Esperienza unificata tra ambienti diversiUnified experience across different environments

Di solito, la pratica consisteva nel creare tre set di esperienze diversi, uno per l'ambiente di sviluppo, uno per i test e uno per la produzione.The practice traditionally has been to create three different sets of experiences, one for the development environment, one for tests, and one for production. Il modello era quello indicato di seguito:The model was:

  1. Nell'ambiente di sviluppo generare transizioni di stato che consentissero unit test dei singoli metodi.In the development environment, produce state transitions that allow unit tests of individual methods.
  2. Nell'ambiente di test riprodurre errori per consentire ai test end-to-end di fare pratica con scenari di errore diversi.In the test environment, produce failures to allow end-to-end tests that exercise various failure scenarios.
  3. Mantenere l'ambiente di produzione originario per impedire qualsiasi errore non naturale e garantire una risposta umana estremamente rapida all'errore.Keep the production environment pristine to prevent any non-natural failures and to ensure that there is extremely quick human response to failure.

In Service Fabric il servizio di analisi degli errori consente di capovolgere tutto questo e di usare la stessa metodologia dall'ambiente di sviluppo alla produzione.In Service Fabric, through the Fault Analysis Service, we are proposing to turn this around and use the same methodology from developer environment to production. A questo scopo è possibile procedere in due modi:There are two ways to achieve this:

  1. Per indurre errori controllati, usare le API del servizio di analisi degli errori da un ambiente di piccole dimensioni fino ai cluster di produzione.To induce controlled failures, use the Fault Analysis Service APIs from a one-box environment all the way to production clusters.
  2. Per fare in modo che il cluster induca errori automaticamente, usare il servizio di analisi degli errori per generare errori automatici.To give the cluster a fever that causes automatic induction of failures, use the Fault Analysis Service to generate automatic failures. Il controllo della frequenza degli errori tramite la configurazione consente al servizio stesso di essere sottoposto a test in modo diverso in ambienti differenti.Controlling the rate of failures through configuration enables the same service to be tested differently in different environments.

Con Service Fabric, sebbene la scala degli errori sarà diversa in ambienti differenti, il meccanismo effettivo sarà identico.With Service Fabric, though the scale of failures would be different in the different environments, the actual mechanisms would be identical. Ciò consente l'uso di un codice molto più rapido per la pipeline di distribuzione e la possibilità di testare i servizi con carichi di lavoro reali.This allows for a much quicker code-to-deployment pipeline and the ability to test the services under real-world loads.

Uso del servizio di analisi degli erroriUsing the Fault Analysis Service

C#C#

Le funzionalità del servizio di analisi degli errori si trovano nello spazio dei nomi System.Fabric nel pacchetto NuGet Microsoft.ServiceFabric.Fault Analysis Service features are in the System.Fabric namespace in the Microsoft.ServiceFabric NuGet package. Per usare le funzionalità del servizio di analisi degli errori, includere il pacchetto NuGet come riferimento nel progetto.To use the Fault Analysis Service features, include the nuget package as a reference in your project.

PowerShellPowerShell

Per usare PowerShell, è necessario installare Service Fabric SDK.To use PowerShell, you must install the Service Fabric SDK. Dopo avere installato l'SDK, viene caricato automaticamente il modulo ServiceFabric di PowerShell.After the SDK is installed, the ServiceFabric PowerShell module is auto loaded for you to use.

Passaggi successiviNext steps

Per creare servizi effettivamente a livello di cloud, è fondamentale assicurarsi, prima e dopo la distribuzione, che i servizi siano in grado di resistere agli errori reali.To create truly cloud-scale services, it is critical to ensure, both before and after deployment, that services can withstand real world failures. Con i servizi attuali, la possibilità di innovare rapidamente e spostare velocemente il codice nella produzione è molto importante.In the services world today, the ability to innovate quickly and move code to production quickly is very important. Il servizio di analisi degli errori consente agli sviluppatori dei servizi di ottenere esattamente questo risultato.The Fault Analysis Service helps service developers to do precisely that.

A questo punto è possibile iniziare a testare le applicazioni e i servizi con gli scenari di test predefiniti oppure creare i propri scenari di test tramite le azioni di errore offerte dal servizio di analisi degli errori.Begin testing your applications and services using the built-in test scenarios, or author your own test scenarios using the fault actions provided by the Fault Analysis Service.