Introdução ao Serviço de Análise de Falhas

O Serviço de Análise de Falhas foi concebido para testar serviços criados no Microsoft Azure Service Fabric. Com o Serviço de Análise de Falhas, pode induzir falhas significativas e executar cenários de teste completos nas suas aplicações. Estas falhas e cenários são exercidos e validam os inúmeros estados e transições que um serviço irá experimentar ao longo da sua vida, tudo de forma controlada, segura e consistente.

As ações são as falhas individuais que visam um serviço para testá-lo. Um programador de serviços pode utilizá-los como blocos modulares para escrever cenários complicados. Por exemplo:

  • Reinicie um nó para simular qualquer número de situações em que uma máquina ou VM seja reiniciada.
  • Mova uma réplica do seu serviço com estado para simular o balanceamento de carga, a ativação pós-falha ou a atualização da aplicação.
  • Invoque a perda de quórum num serviço com estado para criar uma situação em que as operações de escrita não podem prosseguir porque não existem réplicas de "cópia de segurança" ou "secundárias" suficientes para aceitar novos dados.
  • Invoque a perda de dados num serviço com estado para criar uma situação em que todo o estado dentro da memória é completamente eliminado.

Os cenários são operações complexas compostas por uma ou mais ações. O Serviço de Análise de Falhas fornece dois cenários completos incorporados:

  • Cenário de Caos
  • Cenário de Ativação Pós-falha

Testar como um serviço

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. Este serviço atua como o anfitrião para injeção de falhas, execução de cenários de teste e análise de estado de funcionamento.

Serviço de Análise de Falhas

Quando é iniciada uma ação de falha ou um cenário de teste, é enviado um comando para o Serviço de Análise de Falhas para executar a ação de falha ou o cenário de teste. O Serviço de Análise de Falhas tem estado para que possa executar falhas e cenários de forma fiável e validar resultados. Por exemplo, um cenário de teste de execução prolongada pode ser executado de forma fiável pelo Serviço de Análise de Falhas. E como os testes estão a ser executados dentro do cluster, o serviço pode examinar o estado do cluster e os seus serviços para fornecer informações mais aprofundadas sobre falhas.

Testar sistemas distribuídos

O Service Fabric facilita significativamente a tarefa de escrever e gerir aplicações dimensionáveis distribuídas. O Serviço de Análise de Falhas facilita igualmente o teste de uma aplicação distribuída. Existem três problemas principais que têm de ser resolvidos durante os testes:

  1. Simular/gerar falhas que podem ocorrer em cenários do mundo real: um dos aspetos importantes do Service Fabric é que permite que as aplicações distribuídas recuperem de várias falhas. No entanto, para testar que a aplicação consegue recuperar destas falhas, precisamos de um mecanismo para simular/gerar estas falhas do mundo real num ambiente de teste controlado.
  2. A capacidade de gerar falhas correlacionadas: as falhas básicas no sistema, como falhas de rede e falhas da máquina, são fáceis de produzir individualmente. Gerar um número significativo de cenários que podem acontecer no mundo real como resultado das interações destas falhas individuais não é trivial.
  3. Experiência unificada em vários níveis de desenvolvimento e implementação: existem muitos sistemas de injeção de falhas que podem efetuar vários tipos de falhas. No entanto, a experiência em todos estes cenários é fraca ao passar de cenários de programador de uma caixa para executar os mesmos testes em ambientes de teste grandes, para utilizá-los para testes em produção.

Embora existam muitos mecanismos para resolver estes problemas, um sistema que faz o mesmo com as garantias necessárias– desde um ambiente de programador de uma caixa, para testar em clusters de produção – está em falta. O Serviço de Análise de Falhas ajuda os programadores da aplicação a concentrarem-se em testar a lógica de negócio. O Serviço de Análise de Falhas fornece todas as capacidades necessárias para testar a interação do serviço com o sistema distribuído subjacente.

Simular/gerar cenários de falha no mundo real

Para testar a robustez de um sistema distribuído contra falhas, precisamos de um mecanismo para gerar falhas. Embora, em teoria, gerar uma falha como um nó para baixo pareça fácil, começa a atingir o mesmo conjunto de problemas de consistência que o Service Fabric está a tentar resolver. Por exemplo, se quisermos encerrar um nó, o fluxo de trabalho necessário é o seguinte:

  1. No cliente, emita um pedido de nó de encerramento.

  2. Envie o pedido para o nó direito.

    a. Se o nó não for encontrado, deverá falhar.

    b. Se o nó for encontrado, só deverá ser devolvido se o nó for encerrado.

Para verificar a falha numa perspetiva de teste, o teste tem de saber que, quando esta falha é induzida, a falha ocorre realmente. A garantia que o Service Fabric fornece é que o nó irá ficar inativo ou já estava inativo quando o comando chegou ao nó. Em ambos os casos, o teste deve ser capaz de raciocinar corretamente sobre o estado e ter êxito ou falhar corretamente na validação. Um sistema implementado fora do Service Fabric para efetuar o mesmo conjunto de falhas pode atingir muitos problemas de rede, hardware e software, o que o impediria de fornecer as garantias anteriores. Na presença dos problemas indicados anteriormente, o Service Fabric reconfigurará o estado do cluster para resolver os problemas e, por conseguinte, o Serviço de Análise de Falhas continuará a poder dar o conjunto certo de garantias.

Gerar eventos e cenários necessários

Embora a simulação de uma falha do mundo real seja consistentemente difícil de começar, a capacidade de gerar falhas correlacionadas é ainda mais difícil. Por exemplo, uma perda de dados ocorre num serviço persistente com estado quando acontecem as seguintes coisas:

  1. Apenas um quórum de escrita das réplicas é apanhado na replicação. Todas as réplicas secundárias ficam atrás da primária.
  2. O quórum de escrita fica inativo devido à queda das réplicas (devido a um pacote de código ou nó a descer).
  3. Não é possível fazer uma cópia de segurança do quórum de escrita porque os dados das réplicas são perdidos (devido a danos no disco ou à recriação automática).

Estas falhas correlacionadas ocorrem no mundo real, mas não tão frequentemente como falhas individuais. A capacidade de testar estes cenários antes de acontecerem na produção é fundamental. Ainda mais importante é a capacidade de simular estes cenários com cargas de trabalho de produção em circunstâncias controladas (a meio do dia com todos os engenheiros no convés). É muito melhor do que fazê-lo acontecer pela primeira vez em produção às 2:00 da manhã.

Experiência unificada em diferentes ambientes

A prática tradicionalmente tem sido criar três conjuntos diferentes de experiências, um para o ambiente de desenvolvimento, um para testes e outro para produção. O modelo era:

  1. No ambiente de desenvolvimento, produza transições de estado que permitem testes de unidades de métodos individuais.
  2. No ambiente de teste, produzem falhas para permitir testes ponto a ponto que exerçam vários cenários de falha.
  3. Mantenha o ambiente de produção imaculado para evitar falhas não naturais e para garantir que existe uma resposta humana extremamente rápida ao fracasso.

No Service Fabric, através do Serviço de Análise de Falhas, propomos dar a volta a isto e utilizar a mesma metodologia do ambiente de programador para a produção. Existem duas formas de o conseguir:

  1. Para induzir falhas controladas, utilize as APIs do Serviço de Análise de Falhas a partir de um ambiente de uma caixa até aos clusters de produção.
  2. Para dar ao cluster uma febre que causa a indução automática de falhas, utilize o Serviço de Análise de Falhas para gerar falhas automáticas. Controlar a taxa de falhas através da configuração permite que o mesmo serviço seja testado de forma diferente em ambientes diferentes.

Com o Service Fabric, embora a escala de falhas fosse diferente nos diferentes ambientes, os mecanismos reais seriam idênticos. Isto permite um pipeline de código para implementação muito mais rápido e a capacidade de testar os serviços em cargas do mundo real.

Utilizar o Serviço de Análise de Falhas

C#

As funcionalidades do Serviço de Análise de Falhas estão no espaço de nomes System.Fabric no pacote NuGet Microsoft.ServiceFabric. Para utilizar as funcionalidades do Serviço de Análise de Falhas, inclua o pacote nuget como referência no seu projeto.

PowerShell

Para utilizar o PowerShell, tem de instalar o SDK do Service Fabric. Após a instalação do SDK, o módulo ServiceFabric powerShell é carregado automaticamente para que possa utilizar.

Passos seguintes

Para criar serviços verdadeiramente à escala da cloud, é fundamental garantir, antes e depois da implementação, que os serviços podem suportar falhas no mundo real. No mundo dos serviços de hoje, a capacidade de inovar rapidamente e mover código para a produção rapidamente é muito importante. O Serviço de Análise de Falhas ajuda os programadores de serviços a fazê-lo com precisão.

Comece a testar as suas aplicações e serviços com os cenários de teste incorporados ou crie os seus próprios cenários de teste com as ações de falha fornecidas pelo Serviço de Análise de Falhas.