Partilhar via


Atualização de aplicação do Service Fabric

Um aplicativo do Azure Service Fabric é uma coleção de serviços. Durante uma atualização, o Service Fabric compara o manifesto do novo aplicativo com a versão anterior e determina quais serviços no aplicativo exigem atualizações. O Service Fabric compara a versão nos manifestos de serviço com a versão na versão anterior. Se a versão do serviço não tiver sido alterada, esse serviço não será atualizado.

Nota

ApplicationParameters não são preservados em uma atualização de aplicativo. Para preservar os parâmetros atuais do aplicativo, o usuário deve obter os parâmetros primeiro e passá-los para a chamada de API de atualização, como abaixo:

$myApplication = Get-ServiceFabricApplication -ApplicationName fabric:/myApplication
$appParamCollection = $myApplication.ApplicationParameters

$applicationParameterMap = @{}
foreach ($pair in $appParamCollection)
{
    $applicationParameterMap.Add($pair.Name, $pair.Value);
}

Start-ServiceFabricApplicationUpgrade -ApplicationName fabric:/myApplication -ApplicationTypeVersion 2.0.0 -ApplicationParameter $applicationParameterMap -Monitored -FailureAction Rollback

Visão geral das atualizações contínuas

Em uma atualização de aplicativo sem interrupção, a atualização é executada em etapas. Em cada estágio, a atualização é aplicada a um subconjunto de nós no cluster, chamado de domínio de atualização. Como resultado, o aplicativo permanece disponível durante a atualização. Durante a atualização, o cluster pode conter uma mistura das versões antiga e nova.

Por essa razão, as duas versões devem ser compatíveis com versões anteriores e posteriores. Se eles não forem compatíveis, o administrador do aplicativo será responsável por preparar uma atualização de várias fases para manter a disponibilidade. Em uma atualização de várias fases, a primeira etapa é atualizar para uma versão intermediária do aplicativo que seja compatível com a versão anterior. O segundo passo é atualizar a versão final que quebra a compatibilidade com a versão de pré-atualização, mas é compatível com a versão intermediária.

Os domínios de atualização são especificados no manifesto do cluster quando você configura o cluster. Os domínios de atualização não recebem atualizações em uma ordem específica. Um domínio de atualização é uma unidade lógica de implantação para um aplicativo. Os domínios de atualização permitem que os serviços permaneçam em alta disponibilidade durante uma atualização.

As atualizações sem interrupção são possíveis se a atualização for aplicada a todos os nós do cluster, o que é o caso quando o aplicativo tem apenas um domínio de atualização. Esta abordagem não é recomendada, uma vez que o serviço fica inativo e não está disponível no momento da atualização. Além disso, o Azure não fornece garantias quando um cluster é configurado com apenas um domínio de atualização.

Após a conclusão da atualização, todos os serviços e réplicas (instâncias) permanecerão na mesma versão, ou seja, se a atualização for bem-sucedida, eles serão atualizados para a nova versão; Se a atualização falhar e for revertida, eles serão revertidos para a versão antiga.

Verificações de integridade durante atualizações

Para uma atualização, as políticas de integridade devem ser definidas (ou valores padrão podem ser usados). Uma atualização é considerada bem-sucedida quando todos os domínios de atualização são atualizados dentro dos tempos limite especificados e quando todos os domínios de atualização são considerados íntegros. Um domínio de atualização íntegro significa que o domínio de atualização passou por todas as verificações de integridade especificadas na diretiva de integridade. Por exemplo, uma política de integridade pode exigir que todos os serviços em uma instância de aplicativo sejam íntegros, pois a integridade é definida pelo Service Fabric.

As políticas de integridade e as verificações durante a atualização pelo Service Fabric são agnósticas em relação a serviços e aplicativos. Ou seja, nenhum teste específico de serviço é feito. Por exemplo, seu serviço pode ter um requisito de taxa de transferência, mas o Service Fabric não tem as informações para verificar a taxa de transferência. Consulte os artigos de integridade para as verificações que são executadas. As verificações que acontecem durante uma atualização incluem testes para saber se o pacote do aplicativo foi copiado corretamente, se a instância foi iniciada e assim por diante.

A integridade do aplicativo é uma agregação das entidades filhas do aplicativo. Em resumo, o Service Fabric avalia a integridade do aplicativo por meio da integridade relatada no aplicativo. Também avalia a saúde de todos os serviços para a aplicação desta forma. O Service Fabric avalia ainda mais a integridade dos serviços de aplicativo agregando a integridade de seus filhos, como a réplica de serviço. Quando a política de integridade do aplicativo for satisfeita, a atualização poderá continuar. Se a política de integridade for violada, a atualização do aplicativo falhará.

Modos de atualização

O modo que recomendamos para a atualização do aplicativo é o modo monitorado, que é o modo comumente usado. O modo monitorado executa a atualização em um domínio de atualização e, se todas as verificações de integridade passarem (de acordo com a política especificada), passará para o próximo domínio de atualização automaticamente. Se as verificações de integridade falharem e/ou os tempos limite forem atingidos, a atualização será revertida para o domínio de atualização ou o modo será alterado para manual não monitorado. Você pode configurar a atualização para escolher um desses dois modos para atualizações com falha.

O modo manual não monitorado precisa de intervenção manual após cada atualização em um domínio de atualização, para iniciar a atualização no próximo domínio de atualização. Nenhuma verificação de integridade do Service Fabric é executada. O administrador executa as verificações de integridade ou status antes de iniciar a atualização no próximo domínio de atualização.

Atualizar serviços padrão

Alguns parâmetros de serviço padrão definidos no manifesto do aplicativo também podem ser atualizados como parte de uma atualização do aplicativo. Somente os parâmetros de serviço que suportam a alteração por meio de Update-ServiceFabricService podem ser alterados como parte de uma atualização. O comportamento de alterar os serviços padrão durante a atualização do aplicativo é o seguinte:

  1. Os serviços padrão no novo manifesto do aplicativo que ainda não existem no cluster são criados.
  2. Os serviços padrão que existem nos manifestos do aplicativo anterior e novo são atualizados. Os parâmetros do serviço padrão no manifesto do novo aplicativo substituem os parâmetros do serviço existente. A atualização do aplicativo será revertida automaticamente se a atualização de um serviço padrão falhar.
  3. Os serviços padrão que não existem no novo manifesto do aplicativo são excluídos se existirem no cluster. Observe que excluir um serviço padrão resultará na exclusão de todo o estado desse serviço e não poderá ser desfeito.

Quando uma atualização de aplicativo é revertida, os parâmetros de serviço padrão são revertidos para seus valores antigos antes do início da atualização, mas os serviços excluídos não podem ser recriados com seu estado antigo.

Gorjeta

A configuração de configuração do cluster EnableDefaultServicesUpgrade deve ser true para habilitar as regras 2) e 3) acima (atualização e exclusão de serviço padrão). Esse recurso é suportado a partir da versão 5.5 do Service Fabric.

Atualizando vários aplicativos com pontos de extremidade HTTPS

Você precisa ter cuidado para não usar a mesma porta para instâncias diferentes do mesmo aplicativo ao usar HTTPS. O motivo é que o Service Fabric não poderá atualizar o certificado para uma das instâncias do aplicativo. Por exemplo, se o aplicativo 1 ou o aplicativo 2 quiserem atualizar seu certificado 1 para o certificado 2. Quando a atualização acontece, o Service Fabric pode ter limpo o registro cert 1 com http.sys mesmo que o outro aplicativo ainda esteja usando. Para evitar isso, o Service Fabric deteta que já há outra instância de aplicativo registrada na porta com o certificado (devido a http.sys) e falha na operação.

Portanto, o Service Fabric não oferece suporte à atualização de dois serviços diferentes usando a mesma porta em instâncias de aplicativos diferentes. Em outras palavras, você não pode usar o mesmo certificado em serviços diferentes na mesma porta. Se você precisar ter um certificado compartilhado na mesma porta, precisará garantir que os serviços sejam colocados em máquinas diferentes com restrições de posicionamento. Ou considere usar portas dinâmicas do Service Fabric, se possível, para cada serviço em cada instância de aplicativo.

Se você vir uma falha de atualização com https, um aviso de erro dizendo "A API do Windows HTTP Server não oferece suporte a vários certificados para aplicativos que compartilham uma porta".

Fluxograma de atualização de aplicativos

O fluxograma a seguir a este parágrafo pode ajudá-lo a entender o processo de atualização de um aplicativo do Service Fabric. Em particular, o fluxo descreve como os tempos limites, incluindo HealthCheckStableDuration, HealthCheckRetryTimeout e UpgradeHealthCheckInterval, ajudam a controlar quando a atualização em um domínio de atualização é considerada um sucesso ou uma falha.

O processo de atualização para um aplicativo do Service Fabric

Próximos passos

Atualizando seu aplicativo usando o Visual Studio orienta você através de uma atualização de aplicativo usando o Visual Studio.

Atualizando seu aplicativo usando o PowerShell orienta você por uma atualização de aplicativo usando o PowerShell.

Controle como seu aplicativo é atualizado usando os Parâmetros de Atualização.

Torne as atualizações do seu aplicativo compatíveis aprendendo a usar a Serialização de Dados.

Saiba como usar a funcionalidade avançada ao atualizar seu aplicativo consultando Tópicos Avançados.

Corrija problemas comuns em atualizações de aplicativos consultando as etapas em Solução de problemas de atualizações de aplicativos.