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 é:
- A instância do contêiner/pacote de código é iniciada
- Os pontos de extremidade são publicados imediatamente
- A investigação de preparação começa a ser executada
- A investigação de preparação eventualmente atinge o limite de falha e o ponto de extremidade é removido, tornando-o indisponível
- A instância eventualmente fica pronta
- A Investigação de Preparação percebe que a instância está pronta e publica o ponto de extremidade novamente
- 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ãoinitialDelaySeconds
: 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: