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 é:
- A instância do pacote container/code é iniciada
- Os parâmetros de avaliação são publicados imediatamente
- A sonda de prontidão começa a ser executada
- A sonda de prontidão eventualmente atinge o limite de falha e o ponto de extremidade é removido, tornando-o indisponível
- A instância eventualmente fica pronta
- O teste de prontidão percebe que a instância está pronta e publica o ponto de extremidade novamente
- 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 ReadinessinitialDelaySeconds
: 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: