Migrar para microsserviços a partir de uma app monolítica

Quando começar com uma aplicação monolítica antiga, tem de encontrar partes que possam ser separadas e movidas para microserviços separados. Muitas vezes, uma app monolítica bem estruturada tem divisões muito naturais, e uma classe de serviço já funciona como uma interface para uma camada de armazenamento de dados e lógica empresarial. Essas classes são o local ideal para associar as chamadas de cliente ao microsserviço.

Separar a funcionalidade numa app monolítica

Pode adotar algumas abordagens para separar a sua app:

  • Procure lógica de negócio na sua aplicação que possa ser separada.
  • Encontre código que esteja naturalmente isolado, por exemplo, usando ferramentas de análise de código estático para identificar as secções.
  • Examine a sua aplicação para verificar se pode beneficiar de diferentes definições de configuração de escalabilidade ou requisitos de memória em comparação com o resto da aplicação. Isto pode resultar em poupanças de custos que podem levar a uma melhor utilização dos recursos.

Pode ter de refatorar o código para remover dependências não naturais. Recomendamos que faça a refatoração no código existente e o implemente em produção antes de tentar separar a app em serviços separados.

As áreas comuns para microsserviços incluem o seguinte:

  • Informações de utilizadores ou contas
  • Autorização e gestão de sessões
  • Preferências ou definições de configuração
  • Serviços de notificações e comunicações
  • Fotos e conteúdos multimédia, especialmente metadados
  • Trabalhadores da fila de tarefas

Passos para migrar uma app

Depois de um conjunto de classes ter sido identificado como candidato a tornar-se um microsserviço, os passos seguintes incluem:

  • Deixar o código existente no lugar e operacional na aplicação antiga para facilitar o reverter.
  • Criar um novo repositório de código ou, pelo menos, um subdiretório no seu repositório existente.
  • Copiar as turmas para a nova localização.
  • Escrever uma camada de visualização que forneça os hooks da API HTTP e formate os documentos de resposta da forma correta.
  • Formular o novo código como uma aplicação separada (criar um app.yaml).
  • Implementar o novo microsserviço como um serviço ou um projeto separado.
  • Testar o código para garantir que está a funcionar corretamente.
  • Migrar os dados da app antiga para o novo microserviço. Veja abaixo uma discussão.
  • Alterar a sua aplicação antiga existente para usar a nova aplicação de microsserviços.
  • Implementação da aplicação antiga alterada
  • Validar se tudo funciona como esperado e se não precisa de reverter para a aplicação antiga.
  • Remover qualquer código inativo da aplicação antiga.

Migrar dados numa aplicação em direto

A migração de dados numa aplicação em direto pode ser complexa e altamente dependente da sua situação. Muitas vezes, para facilitar a reversão e o avanço, tem de escrever código que preenche as entidades antigas e novas do Cloud Datastore, possivelmente através de uma API temporária no microsserviço e, em seguida, escrever código que migra o conjunto de dados existente, por exemplo, como um MapReduce. Normalmente, este processo envolve alguma quantidade de código temporário e dados redundantes. Consoante os detalhes da sua situação, também pode ter de executar uma migração de dados de sincronização após a publicação. Tenha cuidado para não substituir dados mais recentes por dados mais antigos.

Embora pareça muito trabalho, é uma ocorrência comum e é importante permitir o avanço e o retrocesso caso a mudança para o novo microsserviço não seja bem-sucedida. Pode remover o código temporário e eliminar os dados da localização de armazenamento antiga apenas depois de verificar que tudo foi migrado corretamente e que tudo está a funcionar como esperado. Certifique-se de que faz cópias de segurança durante o processo.

O que se segue?