Padrão de estrangulamentoStrangler pattern

Migre incrementalmente um sistema legado, ao substituir gradualmente partes específicas de funcionalidades por novas aplicações e serviços.Incrementally migrate a legacy system by gradually replacing specific pieces of functionality with new applications and services. À medida que as funcionalidades do sistema legado são substituídas, o novo sistema substitui eventualmente todas funcionalidades do sistema antigo, estrangulando o sistema antigo e permitindo desativá-lo.As features from the legacy system are replaced, the new system eventually replaces all of the old system's features, strangling the old system and allowing you to decommission it.

Contexto e problemaContext and problem

À medida que os sistemas envelhecem, as ferramentas de desenvolvimento, a tecnologia de alojamento e até as arquiteturas do sistema sobre as quais foram criados podem tornar-se cada vez mais obsoletos.As systems age, the development tools, hosting technology, and even system architectures they were built on can become increasingly obsolete. À medida que são adicionadas novas funcionalidades, a complexidade destas aplicações pode aumentar substancialmente, fazendo com que seja mais difícil manter as aplicações ou adicionar novas funcionalidades.As new features and functionality are added, the complexity of these applications can increase dramatically, making them harder to maintain or add new features to.

A substituição completa de um sistema complexo pode ser um desafio enorme.Completely replacing a complex system can be a huge undertaking. Muitas vezes, precisa de uma migração gradual para um novo sistema, enquanto mantém o sistema antigo para processar as funcionalidades que ainda não foram migradas.Often, you will need a gradual migration to a new system, while keeping the old system to handle features that haven't been migrated yet. No entanto, executar duas versões diferentes de uma aplicação significa que os clientes têm de saber onde estão localizadas as diferentes funcionalidades.However, running two separate versions of an application means that clients have to know where particular features are located. Sempre que uma funcionalidade ou serviço é migrado, precisa de atualizar os clientes para apontar para a nova localização.Every time a feature or service is migrated, clients need to be updated to point to the new location.

SoluçãoSolution

Substitua incrementalmente partes específicas de funcionalidades por novas aplicações e serviços.Incrementally replace specific pieces of functionality with new applications and services. Crie uma fachada que intercete pedidos para o sistema legado de back-end.Create a façade that intercepts requests going to the backend legacy system. A fachada encaminha estes pedidos para a aplicação legada ou para os novos serviços.The façade routes these requests either to the legacy application or the new services. As funcionalidades existentes podem ser migradas para o novo sistema gradualmente e os consumidores podem continuar a utilizar a mesma interface, sem terem conhecimento de que ocorreu qualquer migração.Existing features can be migrated to the new system gradually, and consumers can continue using the same interface, unaware that any migration has taken place.

Diagrama do padrão de estrangulamento

Este padrão ajuda a minimizar o risco da migração e a distribuir o esforço de desenvolvimento ao longo do tempo.This pattern helps to minimize risk from the migration, and spread the development effort over time. Com a fachada a encaminhar com segurança os utilizadores para a aplicação correta, pode adicionar funcionalidades ao novo sistema ao ritmo que quiser, garantindo também que a aplicação legada continua a funcionar.With the façade safely routing users to the correct application, you can add functionality to the new system at whatever pace you like, while ensuring the legacy application continues to function. Ao longo do tempo, à medida que as funcionalidades são migradas para o novo sistema, o sistema legado é eventualmente “estrangulado” e deixa de ser preciso.Over time, as features are migrated to the new system, the legacy system is eventually "strangled" and is no longer necessary. Quando este processo estiver concluído, o sistema legado pode ser descontinuado com segurança.Once this process is complete, the legacy system can safely be retired.

Problemas e consideraçõesIssues and considerations

  • Considere como processar arquivos de dados e serviços que são potencialmente utilizados por sistemas novos e legados.Consider how to handle services and data stores that are potentially used by both new and legacy systems. Garanta que ambos podem aceder a estes recursos lado a lado.Make sure both can access these resources side-by-side.
  • Estruture as novas aplicações e serviços para que possam ser facilmente intercetados e substituídos em migrações de estrangulamento futuras.Structure new applications and services in a way that they can easily be intercepted and replaced in future strangler migrations.
  • A determinada altura, quando a migração estiver concluída, a fachada de estrangulamento vai desaparecer ou evoluir sob a forma de um adaptador para os clientes legados.At some point, when the migration is complete, the strangler façade will either go away or evolve into an adaptor for legacy clients.
  • Garanta que a fachada acompanha a migração.Make sure the façade keeps up with the migration.
  • Garanta que a fachada não se torna um ponto único de falha ou um estrangulamento de desempenho.Make sure the façade doesn't become a single point of failure or a performance bottleneck.

Quando utilizar este padrãoWhen to use this pattern

Utilize este padrão quando migrar gradualmente uma aplicação de back-end para uma nova arquitetura.Use this pattern when gradually migrating a back-end application to a new architecture.

Este padrão pode não ser adequado:This pattern may not be suitable:

  • Quando não puder intercetar pedidos para o sistema de back-end.When requests to the back-end system cannot be intercepted.
  • Para sistemas mais pequenos em que a complexidade da substituição do comércio grossista é baixa.For smaller systems where the complexity of wholesale replacement is low.