Introdução ao serviço de análise de falhasIntroduction to the Fault Analysis Service

O serviço de análise de falhas foi concebido para fins de teste de serviços que são criados no Microsoft Azure Service Fabric.The Fault Analysis Service is designed for testing services that are built on Microsoft Azure Service Fabric. Com o serviço de análise de falhas pode induza falhas significativas e executar cenários de teste completa contra as suas aplicações.With the Fault Analysis Service you can induce meaningful faults and run complete test scenarios against your applications. Estas falhas e cenários de exercitem e validar os diversos Estados e transições que um serviço irá ocorrer em toda a sua vida, tudo de forma consistente, controlada e segura.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.

As ações são as falhas individuais visando um serviço de teste.Actions are the individual faults targeting a service for testing it. Um desenvolvedor de serviço pode utilizar como blocos de construção para cenários complicados de escrever.A service developer can use these as building blocks to write complicated scenarios. Por exemplo:For example:

  • Reinicie o nó para simular a qualquer número de situações em que uma máquina ou VM é reiniciada.Restart a node to simulate any number of situations where a machine or VM is rebooted.
  • Mova uma réplica do seu serviço com monitorização de estado para simular o balanceamento de carga, ativação pós-falha ou atualização da aplicação.Move a replica of your stateful service to simulate load balancing, failover, or application upgrade.
  • Invoca perda de quórum no serviço com estado para criar uma situação em que as operações de escrita não podem continuar porque não existe suficiente réplicas "backup" ou "secundárias" para aceitar novos dados.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.
  • Invoca perda de dados num serviço com monitorização de estado para criar uma situação em que todos os Estados de dentro da memória é completamente eliminados.Invoke data loss on a stateful service to create a situation where all in-memory state is completely wiped out.

Os cenários são operações complexas, compostas por uma ou mais ações.Scenarios are complex operations composed of one or more actions. O serviço de análise de falhas fornece dois cenários completos incorporados:The Fault Analysis Service provides two built-in complete scenarios:

  • Cenário de ChaosChaos Scenario
  • Cenário de ativação pós-falhaFailover Scenario

Teste como um serviçoTesting as a service

O serviço de análise de falhas é um serviço de sistema do Service Fabric que é iniciado automaticamente com um cluster do Service Fabric.The Fault Analysis Service is a Service Fabric system service that is automatically started with a Service Fabric cluster. Este serviço funciona como host para inserção de falhas, a execução do cenário de teste e a análise do Estado de funcionamento.This service acts as the host for fault injection, test scenario execution, and health analysis.

Serviço de análise de falhas

Quando é iniciado um cenário de teste ou de ação de falhas, um comando é enviado para o serviço de análise de falhas para executar o cenário de teste ou de ação de falhas.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. O serviço de análise de falhas é com monitoração de estado para que possa fiável executar cenários e as falhas e validar os resultados.The Fault Analysis Service is stateful so that it can reliably run faults and scenarios and validate results. Por exemplo, um cenário de teste de execução longa pode ser executado com confiança pelo serviço de análise de falhas.For example, a long-running test scenario can be reliably executed by the Fault Analysis Service. E porque estão sendo executados testes de dentro do cluster, o serviço pode examinar o estado do cluster e seus serviços para fornecer informações mais detalhadas sobre falhas.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.

Teste de sistemas distribuídosTesting distributed systems

O Service Fabric garante que a tarefa de criação e gestão de aplicações dimensionáveis distribuídas significativamente mais fácil.Service Fabric makes the job of writing and managing distributed scalable applications significantly easier. O serviço de análise de falhas torna o teste de uma aplicação distribuída da mesma forma mais fácil.The Fault Analysis Service makes testing a distributed application similarly easier. Existem três principais problemas que precisam ser resolvidos ao testar:There are three main issues that need to be solved while testing:

  1. Simulando/gerar falhas que podem ocorrer em cenários reais: Um dos aspectos importantes do Service Fabric é o que permite que as aplicações distribuídas recuperar a partir de várias falhas.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. No entanto, para testar que o aplicativo é capaz de recuperar a partir destas falhas, é necessário um mecanismo para simular/gerar essas falhas do mundo real num ambiente de teste controlado.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. A capacidade de gerar falhas correlacionadas: Básicas falhas no sistema, como falhas de rede e falhas de máquina, são fáceis de produzir individualmente.The ability to generate correlated failures: Basic failures in the system, such as network failures and machine failures, are easy to produce individually. Gerar um número significativo de cenários que podem ocorrer no mundo real, como resultado as interações destas falhas individuais não é simples.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. Experiência unificada em vários níveis de desenvolvimento e implementação: Existem vários sistemas de injeção de falha que podem fazer a vários tipos de falhas.Unified experience across various levels of development and deployment: There are many fault injection systems that can do various types of failures. No entanto, a experiência em todas elas é ruim quando mudar de cenários de programação de one box, para executar os mesmos testes em ambientes de teste grande, para as utilizar para testes em produção.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.

Embora haja vários mecanismos para resolver estes problemas, um sistema que faz o mesmo com garantias necessárias, desde um ambiente de desenvolvimento de one box, para testar em clusters de produção – está em falta.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. O serviço de análise de falhas ajuda os desenvolvedores de aplicativos se concentrar na respetiva lógica de negócio de teste.The Fault Analysis Service helps the application developers concentrate on testing their business logic. O serviço de análise de falhas fornece todas as funções necessárias para testar a interação do serviço com o sistema distribuído subjacente.The Fault Analysis Service provides all the capabilities needed to test the interaction of the service with the underlying distributed system.

Simulando/geração de cenários de falha do mundo realSimulating/generating real-world failure scenarios

Para testar a robustez de um sistema distribuído contra falhas, precisamos de um mecanismo para gerar falhas.To test the robustness of a distributed system against failures, we need a mechanism to generate failures. Embora, em teoria, gerar uma falha, como um nó inativo parece fácil, ele começa a atingir o mesmo conjunto de problemas de consistência que o Service Fabric está a tentar resolver.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. Por exemplo, se quisermos encerrar um nó, o fluxo de trabalho necessário é a seguinte:As an example, if we want to shut down a node, the required workflow is the following:

  1. A partir do cliente, emita um pedido de nó de encerramento.From the client, issue a shutdown node request.

  2. Envie o pedido para o nó correto.Send the request to the right node.

    a.a. Se o nó não for encontrado, ele falhará.If the node is not found, it should fail.

    b.b. Se o nó for encontrado, ele deverá retornar apenas se o nó é encerrado.If the node is found, it should return only if the node is shut down.

Para verificar se a falha de uma perspectiva de teste, o teste precisa saber que quando esta falha é induzidas pelo, a falha, na verdade, acontece.To verify the failure from a test perspective, the test needs to know that when this failure is induced, the failure actually happens. A garantia de que o Service Fabric fornece é que qualquer um do nó irá descer, ou já estava pendente quando o comando atingido o nó.The guarantee that Service Fabric provides is that either the node will go down or was already down when the command reached the node. Em ambos os casos, o teste deve ser capaz de ponderar sobre o estado corretamente e ter êxito ou falhar corretamente na sua validação.In either case the test should be able to correctly reason about the state and succeed or fail correctly in its validation. Um sistema implementado fora do Service Fabric para fazer o mesmo conjunto de falhas conseguiu acertar muitos rede, hardware e problemas de software, que iria impedi-lo de fornecer as garantias anteriores.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. Na ocorrência de problemas de afirmado anteriormente, Service Fabric do componente irá reconfigurar o estado do cluster para resolver os problemas, e, por conseguinte, o serviço de análise de falhas ainda será capaz de lhe dar o conjunto certo de garantias.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.

A gerar eventos necessários e cenáriosGenerating required events and scenarios

Embora a simular uma falha de mundo real de forma consistente é difícil para começar, a capacidade de gerar falhas correlacionadas é cada vez mais difícil.While simulating a real-world failure consistently is tough to start with, the ability to generate correlated failures is even tougher. Por exemplo, uma perda de dados ocorrerá num serviço com estado persistente quando ocorrem os seguintes procedimentos:For example, a data loss happens in a stateful persisted service when the following things happen:

  1. Apenas um quórum de escrita das réplicas são processadas na replicação.Only a write quorum of the replicas are caught up on replication. Todas as réplicas secundárias de desfasamento da primária.All the secondary replicas lag behind the primary.
  2. O quórum de escrita fica inativo por causa das réplicas ficará indisponível (devido a um pacote do código ou na direção para baixo do nó).The write quorum goes down because of the replicas going down (due to a code package or node going down).
  3. O quórum de escrita não é possível se levante porque os dados para as réplicas são perdidos (devido à corrupção de disco ou da recriação da imagem de máquina).The write quorum cannot come back up because the data for the replicas is lost (due to disk corruption or machine reimaging).

Estas falhas correlacionadas acontecer no mundo real, mas não como falhas individuais frequentemente como.These correlated failures do happen in the real world but not as frequently as individual failures. A capacidade de teste para esses cenários antes de ocorrerem na produção é fundamental.The ability to test for these scenarios before they happen in production is critical. Ainda mais importante é a capacidade de simular estes cenários com cargas de trabalho de produção em circunstâncias controladas (no meio do dia com todos os engenheiros na mesa de jogos).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). Que é muito melhor do que acontecer pela primeira vez na produção às 2:00hThat is much better than having it happen for the first time in production at 2:00 A.M.

Experiência unificada entre ambientes diferentesUnified experience across different environments

A prática tem sido tradicionalmente criar três diferentes conjuntos de experiências, uma para o ambiente de desenvolvimento, uma para testes e outra para produção.The practice traditionally has been to create three different sets of experiences, one for the development environment, one for tests, and one for production. O modelo foi:The model was:

  1. No ambiente de desenvolvimento, produza as transições de estado que permitem que os testes de unidade de métodos individuais.In the development environment, produce state transitions that allow unit tests of individual methods.
  2. No ambiente de teste, produza falhas para permitir testes de ponta a ponta que exerçam vários cenários de falha.In the test environment, produce failures to allow end-to-end tests that exercise various failure scenarios.
  3. Manter o ambiente de produção original para evitar eventuais falhas não natural e para garantir que existe extremamente rápida resposta humana a falha.Keep the production environment pristine to prevent any non-natural failures and to ensure that there is extremely quick human response to failure.

No Service Fabric, através do serviço de análise de falhas, estamos propondo transformar isso em torno e utilizar a mesma metodologia de ambiente de programação para produção.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. Existem duas formas de fazer isso:There are two ways to achieve this:

  1. Para induza falhas controladas, utilize as APIs de serviço da análise de falhas, a partir de um ambiente de uma caixa para clusters de produção.To induce controlled failures, use the Fault Analysis Service APIs from a one-box environment all the way to production clusters.
  2. Para dar uma febre que faz com que induction automática de falhas de cluster, utilize o serviço de análise de falhas para gerar falhas automática.To give the cluster a fever that causes automatic induction of failures, use the Fault Analysis Service to generate automatic failures. Controlar a taxa de falhas através da configuração permite que o mesmo serviço para ser testada de maneira diferente em ambientes diferentes.Controlling the rate of failures through configuration enables the same service to be tested differently in different environments.

Com o Service Fabric, embora a escala de falhas deve ser diferente em ambientes diferentes, os mecanismos de reais seriam idênticos.With Service Fabric, though the scale of failures would be different in the different environments, the actual mechanisms would be identical. Isso permite que um pipeline muito mais rápida código de implantação e a capacidade de testar os serviços em cargas reais.This allows for a much quicker code-to-deployment pipeline and the ability to test the services under real-world loads.

Utilizar o serviço de análise de falhasUsing the Fault Analysis Service

C#C#

Funcionalidades do serviço de análise de falhas estão no namespace System. Fabric no pacote Microsoft.ServiceFabric NuGet.Fault Analysis Service features are in the System.Fabric namespace in the Microsoft.ServiceFabric NuGet package. Para usar os recursos de serviço de análise de falhas, inclua o pacote nuget como referência no seu projeto.To use the Fault Analysis Service features, include the nuget package as a reference in your project.

PowerShellPowerShell

Para utilizar o PowerShell, tem de instalar o SDK do Service Fabric.To use PowerShell, you must install the Service Fabric SDK. Após a instalação do SDK, o módulo do ServiceFabric PowerShell é automaticamente carregado para que possa utilizar.After the SDK is installed, the ServiceFabric PowerShell module is auto loaded for you to use.

Passos SeguintesNext steps

Para realmente criar serviços de escala da cloud, é fundamental para garantir, ambos antes e após a implementação, que serviços podem suportar a falhas do mundo real.To create truly cloud-scale services, it is critical to ensure, both before and after deployment, that services can withstand real world failures. No mundo dos serviços hoje em dia, a capacidade de inovar rapidamente e mover rapidamente o código para produção é muito importante.In the services world today, the ability to innovate quickly and move code to production quickly is very important. O serviço de análise de falhas ajuda os desenvolvedores de serviço para fazer exatamente isso.The Fault Analysis Service helps service developers to do precisely that.

Começar a testar seus aplicativos e serviços usando o incorporado testar cenários, ou criar seus próprios cenários de teste usando a ações de falha fornecidas pelo serviço de análise de falhas.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.