Como a serialização de dados afeta uma atualização de aplicativo

Em uma atualização de aplicativo sem interrupção, a atualização é aplicada a um subconjunto de nós, um domínio de atualização de cada vez. Durante esse processo, alguns domínios de atualização estão na versão mais recente do seu aplicativo e alguns domínios de atualização estão na versão mais antiga do seu aplicativo. Durante a implantação, a nova versão do aplicativo deve ser capaz de ler a versão antiga dos dados e a versão antiga do aplicativo deve ser capaz de ler a nova versão dos dados. Se o formato de dados não for compatível com versões anteriores e posteriores, a atualização pode falhar ou, pior, os dados podem ser perdidos ou corrompidos. Este artigo discute o que constitui seu formato de dados e oferece práticas recomendadas para garantir que seus dados sejam compatíveis com versões anteriores e posteriores.

O que compõe o seu formato de dados?

No Azure Service Fabric, os dados que são persistentes e replicados vêm de suas classes C#. Para aplicativos que usam Coleções Confiáveis, esses dados são os objetos nos dicionários e filas confiáveis. Para aplicativos que usam Atores Confiáveis, esse é o estado de suporte para o ator. Essas classes C# devem ser serializáveis para serem persistidas e replicadas. Portanto, o formato de dados é definido pelos campos e propriedades que são serializados, bem como como eles são serializados. Por exemplo, em um IReliableDictionary<int, MyClass> os dados são um serializado int e um serializado MyClass.

Alterações de código que resultam em uma alteração de formato de dados

Como o formato de dados é determinado por classes C#, alterações nas classes podem causar uma alteração no formato de dados. Deve-se ter cuidado para garantir que uma atualização contínua possa lidar com a alteração de formato de dados. Exemplos que podem causar alterações no formato de dados:

  • Adicionar ou remover campos ou propriedades
  • Renomeando campos ou propriedades
  • Alterar os tipos de campos ou propriedades
  • Alterando o nome da classe ou namespace

Contrato de dados como o serializador padrão

O serializador geralmente é responsável por ler os dados e desserializá-los para a versão atual, mesmo que os dados estejam em uma versão mais antiga ou mais recente . O serializador padrão é o serializador de contrato de dados, que tem regras de controle de versão bem definidas. As Coleções Confiáveis permitem que o serializador seja substituído, mas os Atores Confiáveis atualmente não. O serializador de dados desempenha um papel importante na habilitação de atualizações contínuas. O serializador de Contrato de Dados é o serializador que recomendamos para aplicativos do Service Fabric.

Como o formato de dados afeta uma atualização sem interrupção

Durante uma atualização contínua, há dois cenários principais em que o serializador pode encontrar uma versão mais antiga ou mais recente de seus dados:

  1. Depois que um nó é atualizado e inicia o backup, o novo serializador carregará os dados que foram persistidos no disco pela versão antiga.
  2. Durante a atualização contínua, o cluster conterá uma mistura das versões antiga e nova do seu código. Como as réplicas podem ser colocadas em domínios de atualização diferentes e as réplicas enviam dados umas para as outras, a versão nova e/ou antiga dos dados pode ser encontrada pela versão nova e/ou antiga do serializador.

Nota

A "nova versão" e a "versão antiga" aqui referem-se à versão do seu código que está sendo executada. O "novo serializador" refere-se ao código do serializador que está sendo executado na nova versão do seu aplicativo. Os "novos dados" referem-se à classe C# serializada da nova versão do seu aplicativo.

As duas versões de código e formato de dados devem ser compatíveis com versões anteriores e diretas. Se eles não forem compatíveis, a atualização contínua pode falhar ou os dados podem ser perdidos. A atualização sem interrupção pode falhar porque o código ou serializador pode lançar exceções ou uma falha quando encontra a outra versão. Os dados podem ser perdidos se, por exemplo, uma nova propriedade foi adicionada, mas o serializador antigo a descarta durante a desserialização.

O Contrato de Dados é a solução recomendada para garantir que os seus dados são compatíveis. Ele tem regras de controle de versão bem definidas para adicionar, remover e alterar campos. Ele também tem suporte para lidar com campos desconhecidos, conectando-se ao processo de serialização e desserialização e lidando com herança de classe. Para obter mais informações, consulte Usando contrato de dados.

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.

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.