Como migrar de um aplicativo monolítico para microsserviços

Ao começar com um aplicativo monolítico legado, é preciso encontrar partes que podem ser esculpidas e movidas para microsserviços separados. Muitas vezes, um aplicativo monolítico bem estruturado terá divisões muito naturais, e uma classe de serviço já funcionará como interface para uma camada de armazenamento de dados e lógica de negócios. Essas classes são o local ideal para conectar as chamadas de cliente ao microsserviço.

Como separar a funcionalidade em um aplicativo monolítico

Você poderia adotar algumas abordagens sobre como separar o aplicativo:

  • Procurar uma lógica de negócios no aplicativo que possa ser separada.
  • Encontrar um código naturalmente isolado, por exemplo, usando ferramentas de análise de código estático para identificar as seções.
  • Examinar o aplicativo em busca de uma lógica que possa proporcionar diferentes configurações de escalonamento ou requisitos de memória. Isso poderia acarretar economia de custos e, consequentemente, uma melhor utilização dos recursos.

Talvez seja necessário refatorar o código para remover dependências não naturais. Recomendamos efetuar a refatoração dentro do código legado e implantá-lo na produção antes de tentar separar o aplicativo em serviços separados.

As áreas comuns de microsserviços incluem:

  • informações de usuário ou conta;
  • gerenciamento de autorização e sessão;
  • preferências ou ajustes de configurações;
  • notificações e serviços de comunicações;
  • fotos e mídia, especialmente metadados;
  • trabalhadores da fila de tarefas.

Etapas para migrar um aplicativo

Depois que um conjunto de classes é identificado como candidato para se tornar um microsserviço, as próximas etapas incluem:

  • deixar o código existente em funcionamento no aplicativo legado para facilitar a reversão;
  • criar um novo repositório de código ou pelo menos um subdiretório no repositório existente;
  • copiar as classes para o novo local;
  • escrever uma camada de visualização que forneça os hooks da API HTTP e formate os documentos de resposta da maneira correta;
  • formular o novo código como um aplicativo separado (criar um app.yaml);
  • implantar o novo microsserviço como um serviço ou projeto separado;
  • testar o código para garantir que ele esteja funcionando corretamente;
  • migrar os dados do aplicativo legado para o novo microsserviço. Veja a seguir uma discussão sobre esse assunto;
  • alterar o aplicativo legado existente para usar o novo aplicativo de microsserviços;
  • implantar o aplicativo legado alterado;
  • verificar se tudo funciona conforme esperado e se não é preciso reverter para o aplicativo legado;
  • remover qualquer código inoperante do aplicativo legado.

Como migrar dados em um aplicativo ativo

A migração de dados em um aplicativo ativo pode ser complicada, dependendo muito da situação. Muitas vezes, para facilitar o avanço e o rollback, será preciso escrever um código que preencha as entidades antigas e novas do Cloud Datastore, possivelmente usando uma API temporária no microsserviço e, em seguida, escrever um código que migre o conjunto de dados existente, por exemplo, como um MapReduce. Esse processo geralmente envolve alguma quantidade de código temporário e dados redundantes. Dependendo das especificidades da situação, você também pode precisar executar uma migração de dados de recuperação depois do lançamento. Tenha cuidado para não substituir dados mais recentes por dados mais antigos.

Pode parecer muito trabalho, mas isso é corriqueiro. É importante se preparar para a possibilidade de avançar e reverter no caso de insucesso no cutover para o novo microsserviço. Você só pode remover o código temporário e excluir os dados do antigo local de armazenamento depois de verificar que tudo foi migrado corretamente e está funcionando conforme o esperado. Certifique-se de fazer backups ao longo do processo.

A seguir