Padrão do EstranguladorStrangler pattern

Migre incrementalmente um sistema herdado substituindo gradualmente partes específicas de funcionalidade por serviços e aplicativos novos.Incrementally migrate a legacy system by gradually replacing specific pieces of functionality with new applications and services. Como os recursos do sistema herdado são substituídos, o novo sistema acaba substituindo todos os recursos do sistema antigo, estrangulando o sistema antigo e permitindo que você o encerre.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

Conforme o sistema envelhece, as ferramentas de desenvolvimento, a tecnologia de hospedagem e até mesmo as arquiteturas do sistema em que elas foram criadas podem se tornar cada vez mais obsoletas.As systems age, the development tools, hosting technology, and even system architectures they were built on can become increasingly obsolete. Conforme são adicionados novos recursos e funcionalidades, a complexidade desses aplicativos pode aumentar consideravelmente, tornando mais difícil de manter ou adicionar novos recursos.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.

Substituir completamente um sistema complexo pode ser uma tarefa muito grande.Completely replacing a complex system can be a huge undertaking. Geralmente, você precisará de uma migração gradual para um novo sistema, mantendo o sistema antigo para manipular recursos que ainda não tenham sido migrados.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 um aplicativo significa que os clientes precisam saber o local em que determinados recursos estão localizados.However, running two separate versions of an application means that clients have to know where particular features are located. Sempre que um recurso ou serviço for migrado, os clientes precisarão ser atualizados para apontar para o novo local.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 da funcionalidade por novos serviços e aplicativos.Incrementally replace specific pieces of functionality with new applications and services. Crie uma fachada que intercepte solicitações para o sistema herdado de back-end.Create a façade that intercepts requests going to the backend legacy system. A fachada encaminha essas solicitações para o aplicativo herdado ou para os novos serviços.The façade routes these requests either to the legacy application or the new services. Os recursos existentes podem ser migrados para o novo sistema gradualmente e os consumidores podem continuar usando a mesma interface, sem que estejam cientes de que qualquer migração ocorreu.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 do Estrangulador

Esse padrão ajuda a minimizar o risco da migração e distribui 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 roteando com segurança os usuários para o aplicativo correto, você pode adicionar funcionalidade ao novo sistema em qualquer velocidade que desejar, enquanto garante que o aplicativo herdado 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, conforme os recursos são migrados para o novo sistema, o sistema herdado acaba sendo “estrangulado" e não é mais necessário.Over time, as features are migrated to the new system, the legacy system is eventually "strangled" and is no longer necessary. Quando esse processo for concluído, o sistema herdado com segurança poderá ser descontinuado.Once this process is complete, the legacy system can safely be retired.

Problemas e consideraçõesIssues and considerations

  • Considere como lidar com serviços e armazenamentos de dados potencialmente usados por sistemas herdados e novos.Consider how to handle services and data stores that are potentially used by both new and legacy systems. Verifique se ambos podem acessar os recursos lado a lado.Make sure both can access these resources side-by-side.
  • Estruture novos aplicativos e serviços de maneira que possam facilmente ser interceptados e substituídos em futuras migrações com estrangulamento.Structure new applications and services in a way that they can easily be intercepted and replaced in future strangler migrations.
  • Em algum momento, quando a migração for concluída, fachada de estrangulamento desaparecerá ou se transformará em um adaptador para clientes herdados.At some point, when the migration is complete, the strangler façade will either go away or evolve into an adaptor for legacy clients.
  • Verifique se a fachada acompanha a migração.Make sure the façade keeps up with the migration.
  • Verifique se a fachada não se torna um ponto único de falha ou um gargalo de desempenho.Make sure the façade doesn't become a single point of failure or a performance bottleneck.

Quando usar esse padrãoWhen to use this pattern

Use esse padrão ao migrar gradualmente um aplicativo de back-end para uma nova arquitetura.Use this pattern when gradually migrating a back-end application to a new architecture.

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

  • Quando as solicitações ao sistema de back-end não podem ser interceptadas.When requests to the back-end system cannot be intercepted.
  • Para sistemas menores em que a complexidade de toda a substituição é baixa.For smaller systems where the complexity of wholesale replacement is low.