Partilhar via


Sondas do Service Fabric

Antes de prosseguir com 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 sonda de vivacidade e prontidão usando arquivos de manifesto.

Sonda de vivacidade

A partir da versão 7.1, o Azure Service Fabric dá suporte a um mecanismo de sonda de vivacidade para aplicativos em contêineres e não conteinerizados. Uma sonda de vivacidade ajuda a relatar a vivacidade de um pacote de código, que será reiniciado se ele não responder rapidamente.

Sonda de prontidão

A partir da versão 8.2, a sonda de prontidão também é suportada. Um teste de prontidão é usado para decidir se um pacote de código está pronto para aceitar tráfego. Por exemplo, se o contêiner estiver demorando muito para processar a solicitação ou se a fila de solicitações estiver cheia, o pacote de código não poderá aceitar mais tráfego e, portanto, os pontos de extremidade para alcançar o pacote de código serão removidos.

O comportamento da Sonda de Prontidão é:

  1. A instância do pacote container/code é iniciada
  2. Os parâmetros de avaliação são publicados imediatamente
  3. A sonda de prontidão começa a ser executada
  4. A sonda de prontidã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. O teste de prontidão percebe que a instância está pronta e publica o ponto de extremidade novamente
  7. As solicitações são encaminhadas novamente e são bem-sucedidas, uma vez que estava pronto para atender às solicitações

Nota

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

Semântica

Você pode especificar apenas uma sonda de animação e uma sonda de prontidão por pacote de código e pode controlar seu comportamento usando estes campos:

  • type: Usado para especificar se o tipo de sonda é Liveness ou Readiness. Os valores suportados são Liveness ou Readiness

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

  • timeoutSeconds: O período em segundos após o qual consideramos que a sonda falhou, se não tiver sido concluída com êxito. O valor suportado é int. O padrão é 1 e o mínimo é 1.

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

  • failureThreshold: Quando atingirmos esse valor, o contêiner será reiniciado. O valor suportado é int. O padrão é 3 e o mínimo é 1.

  • successThreshold: Em caso de falha, para que a sonda seja considerada bem-sucedida, ela deve ser executada com êxito para esse valor. O valor suportado é int. O padrão é 1 e o mínimo é 1.

Pode haver, no máximo, uma sonda para um contêiner a qualquer momento. Se o teste não terminar no tempo definido em timeoutSeconds, aguarde e conte o tempo em direção ao failureThreshold.

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

  • OK: O teste é bem-sucedido para o valor definido em successThreshold.

  • Error: O teste failureCount == failureThreshold, antes que o contêiner seja reiniciado.

  • Warning:

    • O teste falha e failureCount<failureThreshold. Este relatório de integridade permanece até que failureCount atinja o valor definido em failureThreshold ou successThreshold.
    • Sobre o sucesso após o fracasso, o aviso permanece, mas com sucessos consecutivos atualizados.

Especificando uma sonda

Você pode especificar uma sonda no arquivo ApplicationManifest.xml em ServiceManifestImport.

A sonda pode ser para qualquer um dos seguintes:

  • HTTP
  • TCP
  • Exec

Sonda HTTP

Para uma sonda HTTP, o Service Fabric enviará uma solicitação HTTP para a porta e o caminho especificados. Um código de retorno maior ou igual a 200 e menor que 400 indica sucesso.

Aqui está um exemplo de como especificar uma sonda HTTP Liveness:

  <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 sonda HTTP tem propriedades adicionais que você pode definir:

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

  • port: A porta a ser usada para sondas. Esta propriedade é obrigatória. O intervalo é de 1 a 65535.

  • scheme: O esquema a ser usado para se conectar ao pacote de código. Se essa propriedade estiver 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. Você pode especificar vários cabeçalhos.

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

Nota

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

Sonda TCP

Para uma sonda TCP, o Service Fabric tentará abrir um soquete no contêiner usando a porta especificada. Se puder estabelecer uma conexão, a sonda será considerada bem-sucedida. Aqui está um exemplo de como especificar uma sonda 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>

Sonda Exec

Esse teste emitirá um comando exec no contêiner e aguardará a conclusão do comando.

Nota

O comando Exec usa uma cadeia de caracteres separada por vírgula. O comando no exemplo a seguir funcionará para um contêiner Linux. Se você estiver tentando 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óximos passos

Consulte o seguinte artigo para obter informações relacionadas: