Réplicas e instâncias

Este artigo fornece uma visão geral do ciclo de vida das réplicas de serviços com estado e instâncias de serviços sem monitoração de estado.

Instâncias de serviços sem monitoração de estado

Uma instância de um serviço sem estado é uma cópia da lógica de serviço em execução em um dos nós do cluster. Uma instância dentro de uma partição é identificada exclusivamente pelo seu InstanceId. O ciclo de vida de uma instância é modelado no diagrama a seguir:

Ciclo de vida da instância

InBuild (IB)

Depois que o Gerenciador de Recursos de Cluster determinar um posicionamento para a instância, ele entrará nesse estado de ciclo de vida. A instância é iniciada no nó. O host de aplicativo é iniciado, a instância é criada e, em seguida, aberta. Depois que a inicialização for concluída, a instância fará a transição para o estado pronto.

Se o nó ou o host de aplicativo para essa instância falhar, ele fará a transição para o estado removido.

Pronta (RD)

No estado pronto, a instância entra em funcionamento no nó. Se essa instância for um serviço confiável, o RunAsync terá sido chamado.

Se o nó ou o host de aplicativo para essa instância falhar, ele fará a transição para o estado removido.

Fechamento (CL)

No estado de fechamento, o Azure Service Fabric está no processo de desligamento da instância neste nó. Esse desligamento pode acontecer devido a muitos motivos – por exemplo, uma atualização de aplicativo, balanceamento de carga ou o serviço que está sendo excluído. Após a conclusão do desligamento, ele fará a transição para o estado removido.

Removido (DD)

No estado removido, a instância não está mais em execução no nó. Neste ponto, o Service Fabric mantém os metadados sobre essa instância, que é excluída definitivamente também.

Observação

É possível fazer a transição de qualquer estado para o estado removido usando a opção ForceRemove em Remove-ServiceFabricReplica.

Réplicas de serviços com estado

Uma réplica de um serviço com estado é uma cópia da lógica de serviço em execução em um dos nós do cluster. Além disso, a réplica mantém uma cópia do estado desse serviço. Dois conceitos relacionados descrevem o ciclo de vida e o comportamento de réplicas com estado:

  • Ciclo de vida da réplica
  • Função da réplica

A discussão a seguir descreve os serviços com estado persistentes. Para serviços com estado voláteis (ou na memória), os estados inoperantes e removidos são equivalentes.

Ciclo de vida da réplica

InBuild (IB)

Uma réplica InBuild é uma réplica criada ou preparada para unir o conjunto de réplicas. Dependendo da função da réplica, o IB tem semânticas diferentes.

Se o host do aplicativo ou o nó de uma réplica InBuild falhar, ela fará a transição para o estado inoperante.

  • Réplicas InBuild primárias: as réplicas InBuild primárias são as primeiras em uma partição. Geralmente, essa réplica ocorre quando a partição está sendo criada. As réplicas do InBuild primárias também surgem quando todas as réplicas de uma partição são reiniciadas ou removidas.

  • Réplicas IdleSecondary InBuild: são novas réplicas criadas pelo Gerenciador de Recursos de Cluster ou réplicas existentes que ficaram inoperantes e precisam ser adicionadas novamente ao conjunto. Essas réplicas são propagadas ou criadas pela primária antes de poderem ingressar no conjunto de réplicas como ActiveSecondary e participam da confirmação de quorum de operações.

  • Réplicas ActiveSecondary InBuild: este estado é observado em algumas consultas. É uma otimização em que o conjunto de réplicas não está sendo alterado, mas uma réplica precisa ser criada. A própria réplica segue as transições de computador de estado normal (conforme descrito na seção sobre funções de réplica).

Pronta (RD)

Uma réplica Pronta é uma réplica que está participando da replicação e da confirmação de quorum de operações. O estado pronto é aplicável a réplicas primárias e secundárias ativas.

Se o host do aplicativo ou o nó de uma réplica pronta falhar, ela fará a transição para o estado inoperante.

Fechamento (CL)

Uma réplica entra no estado de fechamento nos seguintes cenários:

  • Desligando o código para a réplica: talvez o Service Fabric precise desligar o código em execução para uma réplica. Esse desligamento pode ocorrer por vários motivos. Por exemplo, isso pode ocorrer devido a uma atualização de aplicativo, de malha ou de infraestrutura ou devido a uma falha relatada pela réplica. Quando o fechamento da réplica for concluído, a réplica fará a transição para o estado inoperante. O estado persistente associado a esta réplica armazenada em disco não é limpo.

  • Removendo a réplica do cluster: talvez o Service Fabric precise remover o estado persistente e desligar o código em execução para uma réplica. Esse desligamento pode ocorrer por vários motivos, por exemplo, balanceamento de carga.

Removido (DD)

No estado removido, a instância não está mais em execução no nó. Também não há mais nenhum estado no nó. Neste ponto, o Service Fabric mantém os metadados sobre essa instância, que é excluída definitivamente também.

Inoperante (D)

No estado inoperante, o código de réplica não está em execução, mas o estado persistente para essa réplica existe nesse nó. Uma réplica pode ficar inoperante por muitos motivos – por exemplo, o nó está inoperante, uma falha no código de réplica, uma atualização do aplicativo ou falhas de réplica.

Uma réplica inoperante é aberta pelo Service Fabric conforme necessário, por exemplo, quando a atualização é concluída no nó.

A função de réplica não é relevante no estado inoperante.

Abertura (OP)

Uma réplica inoperante entra no estado de abertura quando o Service Fabric precisa colocar a réplica em operação novamente. Por exemplo, esse estado poderia ocorrer após a atualização de um código para o aplicativo ser concluído em um nó.

Se o host do aplicativo ou o nó de uma réplica de abertura falhar, ela fará a transição para o estado inoperante.

A função da réplica não é relevante no estado de abertura.

StandBy (SB)

Uma réplica StandBy é uma réplica de um serviço persistente que ficou inoperante e foi aberto. Essa réplica poderá ser usada pelo Service Fabric se ele precisar adicionar outra réplica ao conjunto de réplicas (porque ele já tem alguma parte do estado e o processo de build é mais rápido). Depois que o StandByReplicaKeepDuration expirar, a réplica em espera será descartada.

Se o host do aplicativo ou o nó de uma réplica em espera falhar, ela fará a transição para o estado inoperante.

A função da réplica não é relevante no estado em espera.

Observação

Qualquer réplica que não esteja inoperante nem removida é considerada operante.

Observação

É possível fazer a transição de qualquer estado para o estado removido usando a opção ForceRemove em Remove-ServiceFabricReplica.

Função da réplica

A função da réplica determina sua função no conjunto de réplicas:

  • Primary (P): há uma primária no conjunto de réplicas responsável por executar operações de leitura e de gravação.
  • ActiveSecondary (S): essas são réplicas que recebem atualizações de estado da primária e as aplica e enviam confirmações de volta. Há várias secundárias ativas no conjunto de réplicas. O número dessas secundárias ativas determina o número de falhas que o serviço pode manipular.
  • IdleSecondary (I): essas réplicas estão sendo criadas pela primária. Elas estão recebendo o estado da primária antes de poderem ser promovidas para a secundária ativa.
  • None (N): essas réplicas não têm uma responsabilidade no conjunto de réplicas.
  • Unknown (U): essa é a função inicial de uma réplica antes de receber qualquer chamada à API ChangeRole do Service Fabric.

O diagrama a seguir ilustra as transições da função de réplica e alguns cenários de exemplo no qual elas podem ocorrer:

Função da réplica

  • U -> P: criação de uma nova réplica primária.
  • U -> I: criação de uma nova réplica ociosa.
  • U -> N: exclusão de uma réplica em espera.
  • I -> S: promoção da secundária ociosa para secundária ativa para que suas confirmações contribuam para o quorum.
  • I -> P: promoção de secundária ociosa para primária. Isso pode acontecer em reconfigurações especiais quando a secundária ociosa é a candidata correta a ser primária.
  • I -> N: exclusão da réplica secundária ociosa.
  • S -> P: promoção da secundária ativa para primária. Isso pode ocorrer devido ao failover da primária ou a uma movimentação primária iniciada pelo Gerenciador de Recursos de Cluster. Por exemplo, pode ser em resposta a uma atualização do aplicativo ou o balanceamento de carga.
  • S -> N: exclusão da réplica secundária ativa.
  • P -> S: rebaixamento da réplica primária. Isso pode ocorrer devido a uma movimentação primária iniciada pelo Gerenciador de Recursos de Cluster. Por exemplo, pode ser em resposta a uma atualização do aplicativo ou o balanceamento de carga.
  • P -> N: exclusão da réplica primária.

Observação

Os modelos de programação de nível mais alto, como Reliable Actors e Reliable Services, ocultam o conceito de funções de réplica do desenvolvedor. Em Actors, a noção de uma função é desnecessária. Em Services, ela é amplamente simplificada para a maioria dos cenários.

Próximas etapas

Para obter mais informações sobre os conceitos do Service Fabric, consulte o artigo a seguir:

Ciclo de vida dos Reliable Services - C#