Réplicas e instâncias

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

Instâncias de serviços sem estado

Uma instância de um serviço sem estado é uma cópia da lógica de serviço que é executada num dos nós do cluster. Uma instância numa partição é identificada exclusivamente pelo respetivo InstanceId. O ciclo de vida de uma instância é modelado no seguinte diagrama:

Ciclo de vida da instância

InBuild (IB)

Depois de o cluster Resource Manager determinar uma colocação para a instância, entra neste estado de ciclo de vida. A instância é iniciada no nó. O anfitrião da aplicação é iniciado, a instância é criada e, em seguida, aberta. Após a conclusão do arranque, a instância transita para o estado pronto.

Se o anfitrião da aplicação ou o nó desta instância falhar, transitará para o estado removido.

Pronto (RD)

No estado pronto, a instância está em execução no nó. Se esta instância for um serviço fiável, o RunAsync foi invocado.

Se o anfitrião da aplicação ou o nó desta instância falhar, transitará para o estado removido.

Fechar (CL)

No estado de fecho, o Azure Service Fabric está em processo de encerrar a instância neste nó. Este encerramento pode dever-se a vários motivos, por exemplo, uma atualização da aplicação, um balanceamento de carga ou o serviço a ser eliminado. Após a conclusão do encerramento, passa para o estado removido.

Removido (DD)

No estado removido, a instância já não está em execução no nó. Neste momento, o Service Fabric mantém os metadados sobre esta instância, que é eventualmente também eliminada.

Nota

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

Réplicas de serviços com estado

Uma réplica de um serviço com monitorização de estado é uma cópia da lógica de serviço em execução num 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 das réplicas com estado:

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

O debate seguinte descreve os serviços com monitorização de estado persistentes. Para serviços com estado voláteis (ou dentro da memória), os estados inativos e removidos são equivalentes.

Ciclo de vida da réplica

InBuild (IB)

Uma réplica inBuild é uma réplica criada ou preparada para associar o conjunto de réplicas. Dependendo da função de réplica, o IB tem semântica diferente.

Se o anfitrião da aplicação ou o nó de uma réplica InBuild falhar, transitará para o estado inativo.

  • Réplicas inBuild primárias: InBuild Primário são as primeiras réplicas de uma partição. Normalmente, esta réplica ocorre quando a partição está a ser criada. As réplicas inBuild primárias também surgem quando todas as réplicas de uma partição são reiniciadas ou removidas.

  • Réplicas InBuild idleSecondary: estas são novas réplicas criadas pelo cluster Resource Manager ou réplicas existentes que ficaram inativas e precisam de ser adicionadas novamente ao conjunto. Estas réplicas são propagadas ou criadas pela primária antes de poderem associar o conjunto de réplicas como ActiveSecondary e participar no reconhecimento de quórum das operações.

  • Réplicas do ActiveSecondary InBuild: este estado é observado em algumas consultas. É uma otimização em que o conjunto de réplicas não está a ser alterado, mas tem de ser criada uma réplica. A réplica em si segue as transições normais da máquina de estado (conforme descrito na secção sobre funções de réplica).

Pronto (RD)

Uma réplica Pronta é uma réplica que está a participar na replicação e na confirmação de quórum das operações. O estado pronto é aplicável às réplicas secundárias primárias e ativas.

Se o anfitrião da aplicação ou o nó de uma réplica pronta falhar, transitará para o estado de inatividade.

Fechar (CL)

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

  • Encerrar o código da réplica: o Service Fabric poderá ter de encerrar o código em execução de uma réplica. Este encerramento pode ser por vários motivos. Por exemplo, pode ocorrer devido a uma atualização da aplicação, dos recursos de infraestrutura ou da infraestrutura ou devido a uma falha reportada pela réplica. Quando a réplica fechar, a réplica transita para o estado de inatividade. O estado persistente associado a esta réplica armazenada no disco não é limpo.

  • Remover a réplica do cluster: o Service Fabric poderá ter de remover o estado persistente e encerrar o código em execução de uma réplica. Este encerramento pode ser por vários motivos, por exemplo, balanceamento de carga.

Removido (DD)

No estado removido, a instância já não está em execução no nó. Também não existe nenhum estado no nó. Neste momento, o Service Fabric mantém os metadados sobre esta instância, que é eventualmente também eliminada.

Baixo (D)

No estado inativo, o código de réplica não está em execução, mas o estado persistente dessa réplica existe nesse nó. Uma réplica pode estar inativa por vários motivos, por exemplo, o nó estar inativo, uma falha no código de réplica, uma atualização da aplicação ou falhas de réplica.

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

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

Abrir (OP)

Uma réplica inativa entra no estado de abertura quando o Service Fabric precisa de voltar a fazer a cópia de segurança da réplica. Por exemplo, este estado pode ocorrer após a conclusão de uma atualização de código para a aplicação num nó.

Se o anfitrião da aplicação ou o nó de uma réplica de abertura falhar, transitará para o estado de inatividade.

A função de 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 inativo e foi então aberto. Esta réplica poderá ser utilizada pelo Service Fabric se precisar de adicionar outra réplica ao conjunto de réplicas (porque a réplica já tem alguma parte do estado e o processo de compilação é mais rápido). Após a expiração de StandByReplicaKeepDuration, a réplica de reserva é eliminada.

Se o anfitrião da aplicação ou o nó de uma réplica de reserva falhar, transita para o estado de inatividade.

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

Nota

Qualquer réplica que não esteja inativa ou removida é considerada como estando em cima.

Nota

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

Função de réplica

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

  • Primário (P): existe um principal no conjunto de réplicas que é responsável por realizar operações de leitura e escrita.
  • ActiveSecondary (S): são réplicas que recebem atualizações de estado da primária, aplicam-nas e, em seguida, devolvem confirmações. Existem várias secundárias ativas no conjunto de réplicas. O número destas secundárias ativas determina o número de falhas que o serviço pode processar.
  • IdleSecondary (I): estas réplicas estão a ser criadas pela primária. Estão a receber o estado da primária antes de poderem ser promovidos para a secundária ativa.
  • Nenhuma (N): estas réplicas não têm uma responsabilidade no conjunto de réplicas.
  • Desconhecido (U): esta é a função inicial de uma réplica antes de receber qualquer chamada à API ChangeRole do Service Fabric.

O diagrama seguinte ilustra as transições de função de réplica e alguns cenários de exemplo em que podem ocorrer:

Função de réplica

  • U -> P: Criação de uma nova réplica primária.
  • U –> I: Criação de uma nova réplica inativa.
  • U -> N: Eliminação de uma réplica de reserva.
  • I -> S: Promoção da secundária inativa para a secundária ativa para que os seus reconhecimentos contribuam para o quórum.
  • I -> P: Promoção da secundária inativa para a primária. Isto pode ocorrer em reconfigurações especiais quando o secundário inativo é o candidato correto para ser primário.
  • I -> N: Eliminação da réplica secundária inativa.
  • S -> P: Promoção da secundária ativa para a primária. Tal pode dever-se à ativação pós-falha do movimento primário ou primário iniciado pelo cluster Resource Manager. Por exemplo, pode ser uma resposta a uma atualização da aplicação ou balanceamento de carga.
  • S -> N: Eliminação da réplica secundária ativa.
  • P -> S: Despromoção da réplica primária. Tal pode dever-se a um movimento primário iniciado pelo cluster Resource Manager. Por exemplo, pode ser uma resposta a uma atualização da aplicação ou balanceamento de carga.
  • P -> N: Eliminação da réplica primária.

Nota

Os modelos de programação de nível superior, como o Reliable Actors e o Reliable Services, ocultam o conceito de funções de réplica do programador. Em Atores, a noção de um papel é desnecessária. Em Serviços, é amplamente simplificado para a maioria dos cenários.

Passos seguintes

Para obter mais informações sobre os conceitos do Service Fabric, veja o seguinte artigo:

Ciclo de vida do Reliable Services - C#