Como a serialização de dados afeta uma atualização da aplicação

Numa atualização sem interrupção da aplicação, a atualização é aplicada a um subconjunto de nós, um domínio de atualização de cada vez. Durante este processo, alguns domínios de atualização encontram-se na versão mais recente da sua aplicação e alguns domínios de atualização encontram-se na versão mais antiga da sua aplicação. Durante a implementação, a nova versão da sua aplicação tem de conseguir ler a versão antiga dos seus dados e a versão antiga da sua aplicação tem de conseguir ler a nova versão dos seus dados. Se o formato de dados não for reencaminhado e retrocompatível, a atualização poderá falhar ou, pior ainda, os dados poderão ser perdidos ou danificados. Este artigo aborda o que constitui o seu formato de dados e oferece melhores práticas para garantir que os seus dados são reencaminhados e retrocompatíveis.

O que compõe o formato de dados?

No Azure Service Fabric, os dados que são persistentes e replicados provêm das classes C#. Para aplicações que utilizam Coleções Fiáveis, esses dados são os objetos nos dicionários e filas fiáveis. Para aplicações que utilizam Reliable Actors, este é o estado de apoio do ator. Estas classes C# têm de ser serializáveis para serem persistentes e replicadas. Por conseguinte, o formato de dados é definido pelos campos e propriedades serializados, bem como pela forma como são serializados. Por exemplo, num IReliableDictionary<int, MyClass> dos dados está um serializado int e um serializado MyClass.

Alterações de código que resultam numa alteração do formato de dados

Uma vez que o formato de dados é determinado pelas classes C#, as alterações às classes podem causar uma alteração no formato de dados. Tem de ter cuidado para garantir que uma atualização sem interrupção pode processar a alteração do formato de dados. Exemplos que podem causar alterações no formato de dados:

  • Adicionar ou remover campos ou propriedades
  • Mudar o nome de campos ou propriedades
  • Alterar os tipos de campos ou propriedades
  • Alterar o nome ou espaço de nomes da classe

Contrato de Dados como serializador predefinido

O serializador é geralmente responsável por ler os dados e anular a sua serialização na versão atual, mesmo que os dados estejam numa versão mais antiga ou mais recente . O serializador predefinido é o serializador do Contrato de Dados, que tem regras de controlo de versões bem definidas. As Coleções Fiáveis permitem que o serializador seja substituído, mas atualmente o Reliable Actors não. O serializador de dados desempenha uma função importante na ativação de atualizações sem interrupção. O serializador do Contrato de Dados é o serializador que recomendamos para aplicações do Service Fabric.

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

Durante uma atualização sem interrupção, existem dois cenários principais em que o serializador pode encontrar uma versão mais antiga ou mais recente dos seus dados:

  1. Depois de um nó ser atualizado e iniciar a cópia de segurança, o novo serializador carregará os dados que persistiam para o disco pela versão antiga.
  2. Durante a atualização sem interrupção, o cluster irá conter uma combinação das versões antigas e novas do seu código. Uma vez que as réplicas podem ser colocadas em domínios de atualização diferentes e as réplicas enviam dados entre si, a versão nova e/ou antiga dos seus dados pode ser encontrada pela nova e/ou antiga versão do serializador.

Nota

A "nova versão" e a "versão antiga" aqui referem-se à versão do seu código em execução. O "novo serializador" refere-se ao código de serializador que está a ser executado na nova versão da sua aplicação. Os "novos dados" referem-se à classe C# serializada da nova versão da sua aplicação.

As duas versões do código e do formato de dados têm de ser compatíveis para a frente e para trás. Se não forem compatíveis, a atualização sem interrupção poderá falhar ou os dados poderão ser perdidos. A atualização sem interrupção pode falhar porque o código ou serializador pode gerar exceções ou uma falha quando encontra a outra versão. Os dados podem ser perdidos se, por exemplo, uma nova propriedade tiver sido adicionada, mas o serializador antigo os rejeitar durante a desserialização.

O Contrato de Dados é a solução recomendada para garantir que os seus dados são compatíveis. Tem regras de controlo de versões bem definidas para adicionar, remover e alterar campos. Também tem suporte para lidar com campos desconhecidos, ligar-se ao processo de serialização e desserialização e lidar com a herança de classes. Para obter mais informações, veja Utilizar Contrato de Dados.

Passos seguintes

Atualizar a sua Aplicação Com o Visual Studio orienta-o através de uma atualização da aplicação com o Visual Studio.

Atualizar a sua Aplicação Com o PowerShell orienta-o através de uma atualização da aplicação com o PowerShell.

Controle a forma como a sua aplicação é atualizada através dos Parâmetros de Atualização.

Saiba como utilizar funcionalidades avançadas ao atualizar a sua aplicação ao referir-se a Tópicos Avançados.

Corrija problemas comuns nas atualizações de aplicações ao consultar os passos em Resolução de Problemas de Atualizações de Aplicações.