Compartilhar via


Investigações do Service Fabric

Antes de continuar lendo este artigo, familiarize-se com o modelo de aplicativo do Service Fabric e o modelo de hospedagem do Service Fabric. Este artigo fornece uma visão geral de como definir uma investigação de preparação e atividade com arquivos de manifesto.

Investigação de atividade

Da versão 7.1 em diante, o Azure Service Fabric dá suporte a um mecanismo de investigação de atividade para aplicativos conteinerizados e não conteinerizados. Essa investigação de atividade ajuda a relatar a atividade de um pacote, que é reiniciado quando não responde rapidamente.

Investigação de preparação

Da versão 8.2 em diante, também há suporte para a investigação de preparação. Uma investigação de preparação é usada para decidir se um pacote de códigos está pronto para aceitar o tráfego. Por exemplo, se o contêiner estiver demorando muito tempo para processar a solicitação ou se a fila de solicitações estiver cheia, o pacote de códigos não poderá aceitar mais tráfego e, portanto, os pontos de extremidade para alcançar o pacote de códigos serão removidos.

O comportamento da investigação de preparação é:

  1. A instância do contêiner/pacote de código é iniciada
  2. Os pontos de extremidade são publicados imediatamente
  3. A investigação de preparação começa a ser executada
  4. A investigação de preparação eventualmente atinge o limite de falha e o ponto de extremidade é removido, tornando-o indisponível
  5. A instância eventualmente fica pronta
  6. A Investigação de Preparação percebe que a instância está pronta e publica o ponto de extremidade novamente
  7. As solicitações são roteadas novamente e com êxito porque estavam prontas para atender às solicitações

Observação

Para a investigação de preparação, o pacote de código não é reiniciado, apenas os pontos de extremidade não são publicados para que o conjunto de réplica/partição não seja afetado.

Semântica

Você pode especificar apenas uma investigação de preparação e atividade por pacote de código e pode controlar seu comportamento usando estes campos:

  • type: usado para especificar se o tipo de investigação é de atividade ou preparação. Os valores com suporte são Dinâmico ou Prontidão

  • initialDelaySeconds: o atraso inicial em segundos para iniciar a execução da investigação após a inicialização do contêiner. O valor com suporte é int. O padrão é 0 e o mínimo é 0.

  • timeoutSeconds: o período em segundos após o qual a investigação é considerada como com falha, caso não tenha sido concluída com sucesso. O valor com suporte é int. O padrão é 1 e o mínimo é 1.

  • periodSeconds: o período em segundos para especificar a frequência da investigação. O valor com suporte é int. O padrão é 10 e o mínimo é 1.

  • failureThreshold: quando esse valor for atingido, o contêiner será reiniciado. O valor com suporte é int. O padrão é 3 e o mínimo é 1.

  • successThreshold: em caso de falha, a investigação será considerada bem-sucedida se for executada com êxito para esse valor. O valor com suporte é int. O padrão é 1 e o mínimo é 1.

Pode haver, no máximo, uma investigação para um contêiner por vez. Se a investigação não for concluída no tempo definido em timeoutSeconds, aguarde e conte o tempo até o failureThreshold.

Além disso, o Service Fabric gerará os seguintes relatórios de integridade da investigação em DeployedServicePackage:

  • OK: a investigação é realizada com sucesso para o valor definido em successThreshold.

  • Error: a investigação failureCount == failureThreshold, antes da reinicialização do contêiner.

  • Warning:

    • A investigação falha e failureCount<failureThreshold. Esse relatório de integridade é mantido até que failureCount atinja o valor definido em failureThreshold ou em successThreshold.
    • Em caso de êxito após a falha, o aviso permanece, mas com indicações atualizadas de sucessos consecutivos.

Como especificar uma investigação

Você pode especificar uma investigação no arquivo ApplicationManifest.xml em ServiceManifestImport.

A investigação pode se destinar a qualquer um dos seguintes:

  • HTTP
  • TCP
  • Exec

Investigação HTTP

Para uma investigação HTTP, o Service Fabric enviará uma solicitação HTTP para a porta e o caminho especificados. Qualquer código de retorno superior ou igual a 200 e inferior a 400 indica êxito.

Aqui está um exemplo de como especificar uma investigação de atividade HTTP:

  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Stateless1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <Policies>
      <CodePackagePolicy CodePackageRef="Code">
        <Probes>
          <Probe Type="Liveness" FailureThreshold="5" SuccessThreshold="2" InitialDelaySeconds="10" PeriodSeconds="30" TimeoutSeconds="20">
            <HttpGet Path="/" Port="8081" Scheme="http">
              <HttpHeader Name="Foo" Value="Val"/>
              <HttpHeader Name="Bar" Value="val1"/>
            </HttpGet>
          </Probe>
        </Probes>
      </CodePackagePolicy>
    </Policies>
  </ServiceManifestImport>

A investigação HTTP tem propriedades adicionais que podem ser definidas:

  • path: o caminho a ser usado na solicitação HTTP.

  • port: a porta a ser usada para investigações. Ela é obrigatória. O intervalo é de 1 a 65535.

  • scheme: o esquema a ser usado para se conectar ao pacote de códigos. Se essa propriedade for definida como HTTPS, a verificação do certificado será ignorada. A configuração padrão é HTTP.

  • httpHeader: os cabeçalhos a serem definidos na solicitação. É possível especificar vários cabeçalhos.

  • host: o endereço IP do host ao qual se conectar.

Observação

Não há suporte para porta e esquema para aplicativos não conteinerizados. Para esse cenário, use o atributo EndpointRef="EndpointName". Substitua "EndpointName" pelo nome do ponto de extremidade definido em ServiceManifest.xml.

Investigação TCP

Para uma investigação TCP, o Service Fabric tentará abrir um soquete no contêiner por meio da porta especificada. Se ele conseguir estabelecer uma conexão, a investigação será considerada bem-sucedida. Veja a seguir um exemplo de como especificar uma investigação que usa um soquete TCP:

  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Stateless1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <Policies>
      <CodePackagePolicy CodePackageRef="Code">
        <Probes>
          <Probe Type="Liveness" FailureThreshold="5" SuccessThreshold="2" InitialDelaySeconds="10" PeriodSeconds="30" TimeoutSeconds="20">
            <TcpSocket Port="8081"/>
          </Probe>
        </Probes>
      </CodePackagePolicy>
    </Policies>
  </ServiceManifestImport>

Investigação de exec

Esta investigação emitirá um comando exec no contêiner e aguardará a conclusão dele.

Observação

O comando exec usa uma cadeia de caracteres separada por vírgula. O comando no exemplo a seguir funcionará para um contêiner do Linux. Ao tentar investigar um contêiner do Windows, use cmd.

  <ServiceManifestImport>
    <ServiceManifestRef ServiceManifestName="Stateless1Pkg" ServiceManifestVersion="1.0.0" />
    <ConfigOverrides />
    <Policies>
      <CodePackagePolicy CodePackageRef="Code">
        <Probes>
          <Probe Type="Liveness" FailureThreshold="5" SuccessThreshold="2" InitialDelaySeconds="10" PeriodSeconds="30" TimeoutSeconds="20">
            <Exec>
              <Command>ping,-c,2,localhost</Command>
            </Exec>
          </Probe>        
       </Probes>
      </CodePackagePolicy>
    </Policies>
  </ServiceManifestImport>

Próximas etapas

Consulte os artigos a seguir para obter informações relacionadas: