Uma Abordagem de Conformidade Arquitetural para Arquitetura de Microsserviços
Arquitetura de Microsserviços; Conformidade Arquitetural.
Arquitetura de software é definida como um conjunto de decisões de projeto que possuem impacto na construção e evolução de sistemas de software. Essas decisões incluem como tais sistemas são estruturados em componentes e sobre quais restrições esses componentes devem interagir. Para auxiliar na concepção de sistemas que atenda aos princípios da arquitetura de software, paradigmas arquiteturais, tal como a Arquitetura de Microsserviços, têm sido propostos. Esse estilo arquitetural enfatiza a composição de um conjunto de microsserviços independentes que executam funcionalidades bem definidas, permitindo que cada microsserviço seja desenvolvido em diferentes linguagens de programação e gerenciados por diferentes tecnologias de banco de dados. No entanto, tal heterogeneidade implica na dificuldade de verificação da comunicação entre os microsserviços e de cada um dos seus projetos arquiteturais, uma vez que na prática, desvios em relação à arquitetura planejada são comuns. Em geral, tais desvios não são capturados e resolvidos, levando aos fenômenos conhecidos como erosão e desvio arquitetural. Diante desse cenário, este projeto de dissertação é centrado na proposta de uma abordagem de conformidade arquitetural específica para a arquitetura de microsserviços. Para isso, foram definidos (i) uma linguagem de restrição arquitetural, denominada DCL+ -- adaptada da linguagem DCL (Dependency Constraint Language) -- a fim de restringir o espectro das comunicações e dependências aceitáveis entre os microsserviços e de cada um de seus projetos arquiteturais; (ii) um protótipo para uma solução multi-plataforma que permita restringir a comunicação entre os microsserviços e verificar os projetos arquiteturais de cada um deles, denominado DCL+check; e (iii) uma avaliação preliminar da abordagem, a partir de uma aplicação composta por cinco microsserviços, desenvolvidos em duas linguagens distintas (Java e C#).