Utilizando Serverless como camada anticorrupção

minutos de leitura

11 de março de 2022

Escrito por
Adalberto Silva

Com o surgimento de microsserviços, aplicações grandes encaram cada vez mais situações onde entidades de domínio transitam entre serviços. Muitas vezes essa entidade pode ter representações diferentes para partes distintas da aplicação.

Vamos pegar como exemplo uma aplicação responsável por fazer gestão de pessoas em um hospital. Para um médico essa pessoa é um paciente que possui seu histórico de consultas, receitas, doenças, procedimentos sofridos etc. Entretanto para a área financeira desse mesmo hospital tais informações não são tão relevantes apesar de se tratar da mesma pessoa, talvez dados como número do seguro de saúde, informações sobre localidade, formas de pagamento sejam de maior valia que essas anteriores.

Percebam que ambas áreas estão no mesmo local (hospital), porém uma pessoa pode ter significados e processos diversos em áreas diferentes mesmo que façam parte de uma mesma organização.

servidor-serverless-anticorrupcao-1

Em 2003 Eric Evans lançou o livro Domain-Driven Design: Atacando as complexidades no coração do software, no qual aborda vários conceitos e técnicas para modelagem e design de aplicações baseadas no entendimento do seu domínio de neǵocio. Dentre os problemas que esse livro se propõe a esclarecer está o que citamos acima, e para resolvê-lo o autor sugere um padrão de projeto chamado Camada Anticorrupção.

O objetivo desse padrão de projeto é validar e adaptar entidades para que elas transitem entre contextos diferentes, permitindo assim um baixo acoplamento entre si, deixando os times responsáveis focados em suas nuances de negócio, decisões tecnológicas e afins sem que uma mudança que ocorra dentro de um dos contextos afete o outro.

A ideia da camada anticorrupção é ser relativamente simples e não atrelada a nenhum dos contextos que contém reais operações de negócio. Tendo em mente que geralmente um microsserviço representa um contexto de uma aplicação, o problema que apresentamos e as tecnologias de mercado existentes, serverless se mostra uma saída bem viável para implementar esse padrão dentro desse cenário de aplicações distribuídas.

Ok, entendi o problema, mas que bruxaria é essa de serverless?

Falando de uma maneira bem simples uma  Arquitetura Serverless é um modelo de execução onde a pessoa desenvolvedora não precisa se preocupar com a infraestrutura (o que não quer dizer que não devemos nos preocupar com outros fatores como monitoramento, logging, resiliência do serviço e coisas do tipo), pois o próprio provedor da nuvem vai gerenciar isso, mitigando problemas como escalabilidade por exemplo.

Essa tecnologia é uma boa pedida para implementar arquiteturas orientadas a eventos, inclusive se quiser conhecer um pouquinho mais sobre esse tipo de arquitetura, o livro Software Architeture Patterns pode ajudar bastante.

Como utilizamos Serverless para resolver esses problemas aqui dentro de casa

Aqui na Gupy, nós utilizamos Serverless para transacionar entidades correlacionadas entre nossos produtos, vamos usar como exemplo as publicações de vagas no nosso portal de vagas.

O cenário enfrentado aqui é o seguinte: toda vez que uma empresa publica uma vaga na nossa plataforma de gestão de vagas, essa mesma deve ser “refletida” no portal, porém não precisamos que todos os dados sejam transportados de um produto para o outro e não queremos que essas plataformas estejam atreladas a uma requisição http que pode falhar e impactar a experiência do usuário.

Dessa forma, nós decidimos que toda vez que a ação de publicação ocorrer na plataforma de gestão, um evento passa pela nossa camada anticorrupção que adapta essa entidade vaga para torná-la disponível a ser publicada no portal, como mostrado no exemplo abaixo:

fluxo

Com essa solução, nós conseguimos manter ambos os produtos desacoplados e podendo evoluir de maneira independente, com seus dados sincronizados e íntegros dentro dos seus contextos de negócio.

Bem, espero que com esse artigo tenhamos conseguido esclarecer como adaptar esse padrão de projeto para esse contexto de microsserviços e mostrado como os utilizamos aqui dentro de casa.

Muito obrigado por ler esse artigo até o final e até a próxima, valeu!

Ah, estamos com vagas abertas! Se achou interessante, dá uma olhadinha na nossa página de carreiras tech!