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?
- Obtenha uma vista geral da arquitetura de microsserviços no App Engine.
- Compreenda como criar e atribuir nomes a ambientes de desenvolvimento, teste, controlo de qualidade, preparação e produção com microsserviços no App Engine.
- Conheça as práticas recomendadas para criar APIs que comuniquem entre microsserviços.
- Saiba mais sobre as práticas recomendadas para o desempenho dos microsserviços.