Compartilhar via


Padrão strangler fig

Esse padrão migra incrementalmente um sistema herdado substituindo gradualmente partes específicas da funcionalidade por novos aplicativos e serviços. À medida que você substitui os recursos do sistema herdado, o novo sistema eventualmente compreende todos os recursos do sistema antigo. Essa abordagem suprime o sistema antigo para que você possa descomissioná-lo.

Contexto e problema

À medida que os sistemas envelhecem, as ferramentas de desenvolvimento, a tecnologia de hospedagem e as arquiteturas do sistema nas quais eles são criados podem se tornar obsoletas. À medida que novos recursos e funcionalidades são adicionados, esses aplicativos se tornam mais complexos, o que pode torná-los mais difíceis de manter ou estender.

Substituir um sistema complexo inteiro é uma tarefa enorme. Em vez disso, muitas equipes preferem migrar para um novo sistema gradualmente e manter o sistema antigo para lidar com recursos não migrados. No entanto, a execução de duas versões separadas de um aplicativo força os clientes a acompanhar qual versão tem recursos individuais. Sempre que as equipes migram um recurso ou serviço, elas devem direcionar os clientes para o novo local. Para superar esses desafios, você pode adotar uma abordagem que dá suporte à migração incremental e minimiza as interrupções nos clientes.

Solução

Use um processo incremental para substituir partes específicas da funcionalidade por novos aplicativos e serviços. Os clientes podem continuar usando a mesma interface, sem saber que essa migração está ocorrendo.

Diagrama do padrão Strangler Fig.

O padrão Strangler Fig oferece uma abordagem de modernização controlada e em fases. Ele permite que o aplicativo existente continue funcionando durante o esforço de modernização. Uma fachada (proxy) intercepta as solicitações que vão para o sistema de back-end herdado. A camada de fachada roteia essas solicitações para o aplicativo legado ou para os novos serviços.

Esse padrão reduz os riscos na migração, permitindo que suas equipes avancem em um ritmo que atenda à complexidade do projeto. À medida que você migra a funcionalidade para o novo sistema, o sistema herdado torna-se obsoleto e você desativa o sistema herdado.

  1. O padrão do Strangler Fig começa introduzindo uma fachada (proxy) entre o aplicativo cliente, o sistema herdado e o novo sistema. A fachada atua como um intermediário. Ele permite que o aplicativo cliente interaja com o sistema herdado e o novo sistema. Inicialmente, a fachada roteia a maioria das solicitações para o sistema herdado.

  2. À medida que a migração progride, a interface gradativamente redireciona as solicitações do sistema legado para o novo sistema. A cada iteração, você implementa mais peças de funcionalidade no novo sistema.

    Essa abordagem incremental reduz gradualmente as responsabilidades do sistema herdado e expande o escopo do novo sistema. O processo é iterativo. Ele permite que a equipe resolva complexidades e dependências em estágios gerenciáveis. Esses estágios ajudam o sistema a permanecer estável e funcional.

  3. Depois de migrar toda a funcionalidade e não houver dependências no sistema herdado, você poderá desativar o sistema herdado. A fachada encaminha todas as solicitações exclusivamente para o novo sistema.

  4. Você remove a fachada e reconfigura o aplicativo cliente para se comunicar diretamente com o novo sistema. Esta etapa marca a conclusão da migração.

Problemas e considerações

Considere os seguintes pontos ao decidir como implementar esse padrão:

  • Considere como lidar com serviços e armazenamentos de dados que o novo sistema e o sistema herdado podem usar. Verifique se ambos os sistemas podem acessar esses recursos ao mesmo tempo.

  • Estruture novos aplicativos e serviços de forma que você possa facilmente interceptá-los e substituí-los em futuras migrações do tipo strangler fig. Por exemplo, procure ter demarcações claras entre partes da sua solução para que você possa migrar cada parte individualmente.

  • Após a migração ser concluída, você de modo geral removerá a fachada strangler fig. Alternativamente, você pode conservar a fachada como um adaptador a ser usado por clientes herdados enquanto você estiver atualizando o sistema básico para os clientes mais recentes.

  • Certifique-se de que a fachada acompanhe a migração.

  • Verifique se a fachada não se torna um único ponto de falha ou um gargalo de desempenho.

Quando usar esse padrão

Use esse padrão quando:

  • Você migra gradualmente um aplicativo de back-end para uma nova arquitetura, especialmente quando a substituição de sistemas grandes, componentes-chave ou recursos complexos introduz riscos.

  • O sistema original pode continuar a existir por um longo período de tempo durante o esforço de migração.

O padrão pode não ser adequado nestes casos:

  • As solicitações ao sistema de back-end não podem ser interceptadas.

  • Você migra um sistema pequeno e substituir todo o sistema é simples.

  • Você precisa desativar totalmente a solução original rapidamente.

Design de carga de trabalho

Avalie como usar o padrão do Strangler Fig no design de uma carga de trabalho para abordar as metas e os princípios dos pilares do Azure Well-Architected Framework. A tabela a seguir fornece diretrizes sobre como esse padrão dá suporte às metas de cada pilar.

Pilar Como esse padrão apoia os objetivos do pilar
As decisões de design de confiabilidade ajudam sua carga de trabalho a se tornar resiliente ao mau funcionamento e a garantir que ela se recupere para um estado totalmente funcional após a ocorrência de uma falha. A abordagem incremental desse padrão pode ajudar a reduzir os riscos durante uma transição de componente em comparação com fazer grandes alterações sistêmicas de uma só vez.

- RE:08 Testes
A Otimização de Custos concentra-se na manutenção e na melhoria do ROI (retorno sobre o investimento) da carga de trabalho. O objetivo dessa abordagem é maximizar o uso de investimentos existentes no sistema atualmente em execução, modernizando-se incrementalmente. Ele permite que você execute substituições de ALTA ROI antes de substituições com baixo ROI.

- CO:07 Custos de componentes
- CO:08 Custos ambientais
A Excelência Operacional ajuda a fornecer qualidade na carga de trabalho por meio de processos padronizados e coesão da equipe. Esse padrão fornece uma abordagem de melhoria contínua. As substituições incrementais que fazem pequenas alterações ao longo do tempo são preferíveis a grandes alterações sistêmicas que são mais arriscadas de implementar.

- OE:06 Cadeia de fornecimento para desenvolvimento de carga de trabalho
- OE:11 Práticas de implantação segura

Considere as compensações em relação às metas dos outros pilares que esse padrão pode introduzir.

Exemplo

Os sistemas herdados normalmente dependem de um banco de dados centralizado. Com o tempo, um banco de dados centralizado pode se tornar difícil de gerenciar e evoluir devido a suas muitas dependências. Para resolver esses desafios, vários padrões de banco de dados podem facilitar a transição para longe desses sistemas herdados. O padrão da figueira estranguladora é um desses padrões. Aplique o padrão do Strangler Fig como uma abordagem em fases para fazer a transição gradual de um sistema herdado para um novo sistema e minimizar a interrupção.

Diagrama do padrão Figueira-Estranguladora aplicado a um banco de dados.

  1. Você apresenta um novo sistema e o novo sistema começa a lidar com algumas solicitações do aplicativo cliente. No entanto, o novo sistema ainda depende do banco de dados herdado para todas as operações de leitura e gravação. O sistema herdado permanece operacional, o que facilita uma transição suave sem alterações estruturais imediatas.

  2. Na próxima fase, você apresenta um novo banco de dados. Você migra o histórico de carga de dados para o novo banco de dados usando um processo de ETL (extração, transformação e carregamento). O processo ETL sincroniza o novo banco de dados com o banco de dados herdado. Durante essa fase, o novo sistema executa gravações sombra. O novo sistema atualiza os dois bancos de dados em paralelo. O novo sistema continua a ler do banco de dados herdado para validar a consistência.

  3. Por fim, o novo banco de dados se torna o sistema de registro. O novo banco de dados assume todas as operações de leitura e gravação. Você pode começar a preterir o banco de dados herdado e o sistema herdado. Depois de validar o novo banco de dados, você pode desativar o banco de dados herdado. Essa aposentadoria conclui o processo de migração com interrupção mínima.

Próxima etapa

Leia a postagem no blog de Martin Fowler sobre o aplicativo de padrão Strangler Fig.

Padrão de ponte do sistema de mensagens