Arquitetura Orientada a Eventos para Desacoplamento Digital

Artigo escrito por Luiz Toscano Menezes

Introdução

O ano é 2020. Em meio à crise causada pela pandemia, a equipe de Marketing tem uma idéia sobre um novo produto que pode alavancar as vendas e reposicionar a marca da empresa no mercado. A ideia é apresentada para a diretoria e aprovada imediatamente. Contudo, para que o produto tenha competitividade, ele precisa ser lançado em no máximo 3 meses.

A equipe de Tecnologia logo é envolvida para ajudar a estimar o esforço necessário e os impactos nos sistemas. Após dias de análise a equipe de Tecnologia informa para a área de Marketing que serão necessários 12 meses!

Inconformada, a equipe de Marketing diz que o prazo é inaceitável e exige explicações. A equipe de tecnologia então explica que os sistemas são:

  1. Muito antigos e escritos em tecnologias que poucos profissionais conhecem.
  2. Monolíticos e acoplados, exigindo que quaisquer alterações passem por exaustivos testes regressivos.
  3. O processo de desenvolvimento é burocrático e demorado.

A equipe de Marketing, inconformada, questiona por que os sistemas não são reconstruídos de outra maneira para que os produtos sejam lançados mais rapidamente.

Um último sopro de esperança! É a oportunidade perfeita para a equipe de Tecnologia se livrar daquele sistema antigo e problemático. Mas a esperança dura pouco. Após mais alguns dias de estudo a equipe de Tecnologia conclui que serão necessários 48 meses para reconstruir o sistema. E para piorar será necessário “congelar” todos os projetos no sistema legado durante esse período. Em uma última tentativa de convencimento, a equipe de Tecnologia explica que:

  1. Levantar todas regras contidas no legado leva tempo
  2. Serão necessários muitos testes para garantir que não se esqueça nenhuma funcionalidade importante para trás.
  3. Para garantir o prazo de entrega é preciso delimitar um escopo, o que é impossível se novas funcionalidades forem introduzidas no legado.

Um sentimento de frustração e impotência toma conta de todos e aquela ideia promissora da equipe de Marketing é finalmente abandonada.

https://www.ministrymatters.com/all/entry/6725/7-of-the-quickest- ways-to-frustrate-people-on-a-team

A história acima é uma ficção, mas tenho certeza que muitos de vocês já vivenciaram algo parecido na vida real. E estão se perguntando neste exato momento: “Há uma solução”? Felizmente a resposta é sim. Desacoplamento Digital ao resgate!

O que é Desacoplamento Digital?

De uma forma bem resumida, o Desacoplamento Digital é um conjunto de técnicas para migrar gradualmente funcionalidades de sistemas legados altamente acoplados. Tais técnicas ao mesmo tempo evitam longas jornadas de redesenvolvimento e habilitam rapidamente o desenvolvimento de novas funcionalidades.

O Desacoplamento Digital considera que o sistema legado:

  1. Possui dados importantes para o negócio
  2. Possui funcionalidades valiosas que não podem ser desprezadas
  3. Pode ser decomposto em componentes menos acoplados

Os dados possuem um papel de destaque, pois é a partir deles que a mágica do Desacoplamento Digital começa.

Libertar os dados das “amarras” do sistema legado é o que permite o desenvolvimento de novas funcionalidades que não são possíveis na tecnologia atual.

https://awwmemes.com/i/208c53ef1fef4d1d95dfdf32086dbdc8

Uma das técnicas para “libertar” os dados é o uso de ferramentas de captura de mudança de dados (Change Data Capture) para publicação em um barramento de eventos. A principal vantagem deste tipo de ferramenta é que ela é pouco (ou nada) intrusiva no sistema legado.

Arquitetura Desacoplada

Com os dados “libertos” no barramento de eventos é muito mais fácil desenhar uma arquitetura desacoplada.

Uma arquitetura desacoplada e moderna, em geral:

  1. Utiliza microsserviços
  2. É distribuída e resiliente
  3. É orientada à eventos
  4. É reativa

O uso de microsserviços permite que as funcionalidades do sistema legado sejam reorganizadas por domínio funcional adequadamente. Para entender as funcionalidades do sistema legado, identificar os microsserviços e organizá-los em domínios funcionais tipicamente são usadas técnicas de DDD, com especial destaque para a técnica de Event Storming.

Contudo, utilizar microsserviços não é suficiente para atingir o desacoplamento. Na verdade, o uso indiscriminado de APIs como mecanismo de comunicação entre os microsserviços pode gerar algo ainda mais ingerenciável que o próprio sistema monolítico: um sistema distribuído acoplado. Neste cenário, manter a propagação de falhas sob controle pode ser um verdadeiro pesadelo.

https://dzone.com/articles/navigating-the-microservice-deathstar-with-deployh

Neste sentido, uma arquitetura orientada à eventos é fundamental para manter o desacoplamento entre os microsserviços.

Por fim, uma arquitetura reativa e coreografada reforça o desacoplamento entre os componentes e permitem muito mais elasticidade, técnica e funcional, para a solução.

Em uma arquitetura reativa, os eventos não são utilizados como comandos e sim como notificações. Cada microsserviço notifica ao barramento de eventos algo importante que aconteceu e os demais microsserviços, que assinam o mesmo barramento, decidem se devem ou não tomar alguma ação.

https://dzone.com/articles/saga-pattern-how-to-implement-business-transaction

Nesta “dança” de notificações e reações é possível atingir um alto nível de desacoplamento e elasticidade, pois novos microsserviços podem ser introduzidos para reagirem à eventos já publicados sem nenhum impacto no ecossistema de microsserviços existentes.

Porém, este modelo “coreografado” também tem seus desafios, em especial o controle de transações. É preciso definir com cuidado políticas de compensação para os cenários de falha, uma vez que não há nenhum componente “orquestrando” a dança dos microsserviços.

O “estrangulamento” do Legado

Uma vez estabelecida a nova arquitetura o próximo passo é começar a remover as funcionalidades do legado aos poucos. Esta técnica é conhecida como estrangulamento (strangling) e consiste basicamente em:

  1. Definir as funcionalidades a serem extraídas do legado;
  2. Estabelecer os mecanismos de convivência entre estas funcionalidades e o restante do legado;
  3. Reduzir gradualmente as funcionalidades do legado até que ele seja completamente descontinuado (ou perca a relevância).

Idealmente os mecanismos de convivência devem ocorrer no nível dos dados, evitando assim a necessidade da criação de mecanismos de convivência no legado.

https://en.wikipedia.org/wiki/Strangling#/media/File:Cheetah_with_impala.jpg

Conclusão

Neste artigo abordamos como as técnicas de Desacoplamento Digital podem ser uma saída para um problema comum nos dias atuais: a dificuldade de atender as necessidades do negócio em sistemas monolíticos e acoplados.

Em artigos futuros abordaremos com mais detalhes técnicos a arquitetura, a técnica de “estrangulamento” e os mecanismos de convivência.

Até lá!

Referências

https://www.accenture.com/us-en/insights/us-federal-government/embrace-digital-decoupling

https://www.eventstorming.com/book/

https://microservices.io/patterns/data/saga.html