Aplicação e evolução dos microsserviços

No artigo anterior, Microsserviços: Projetando”, apresentamos questões referentes ao desenvolvimento de aplicações baseadas em microsserviços, com foco no projeto. Nesse post vamos falar sobre a evolução da aplicação quando surgirem novas funcionalidades de negócio. Vamos tratar apenas dos microsserviços de negócio, não estamos interessados nos microsserviços que implementam funcionalidades técnicas.

Evolução dos Microsserviços

Uma vez que uma aplicação baseada em microsserviços já está em funcionamento, o que fazer quando uma nova funcionalidade surgir? Deve ser criado um novo microsserviço ou essa nova funcionalidade deve ser adicionada a um microsserviço já existente? 

Para começar a responder essa questão, cabe lembrar (veja artigo inicial dessa série sobre microsserviços) que as propriedades fundamentais de alta coesão, baixo acoplamento, autonomia e independência, que são próprias dos microsserviços, devem ser respeitadas. Assim, o principal desafio está em encontrar os limites certos para cada microsserviço. Não podem ser limites muito reduzidos, para não incorrer em alto acoplamento e, consequentemente, ser difícil realizar sua implantação de forma independentemente. Também não podem ser limites muito amplos para que o microsserviço não assuma muitas responsabilidades e seja pouco coeso.

Admitindo-se que as escolha dos limites foi realizada de maneira adequada durante a construção da aplicação que existe até o momento, o desafio agora é inserir a nova funcionalidade desejada, respeitando esses mesmos critérios.

O ponto de partida é, naturalmente, entender muito bem o negócio, seus casos de uso e entidades, com suas respectivas funcionalidades, para identificar quais serviços da atual aplicação estão relacionados com a nova funcionalidade. Dessa forma, poderemos entender se essa funcionalidade será incorporada aos serviços já existentes ou se um novo microsserviço deverá ser construído para implementá-la.

Estendendo um microsserviço ou criando um novo

Naturalmente, o primeiro reflexo ao se ampliar a funcionalidade de uma aplicação existente seria o de simplesmente incorporá-la aos microsserviços já disponíveis

Antes de ceder ao impulso de se criar um novo microsserviço para a nova funcionalidade da aplicação deve-se considerar se ela pode ser incorporada a algum dos microsserviços já existentes. Para tanto, é fundamental identificar se é possível estender a funcionalidade de um microsserviço sem contrariar suas propriedades básicas de alta coesão, baixo acoplamento, autonomia e independência, isto é, se o bounded context do subdomínio implementado pelo microsserviço não será corrompido pela inclusão da nova funcionalidade. Se este for o caso, basta realizar a implementação da funcionalidade no contexto do microsserviço em questão.

Caso contrário, a nova funcionalidade se caracteriza como fazendo parte de um novo domínio ou subdomínio do contexto da aplicação, justificando a criação de um novo microsserviço. Nesse caso, devem ser respeitados todos os cuidados referentes à criação de um novo microsserviço (veja o artigo Microsserviços: Projetando), incluindo analisar se um único microsserviço é suficiente para implementar toda a nova funcionalidade desejada.

Considerações

A introdução de novas funcionalidades em uma aplicação que já está em funcionamento deve respeitar os mesmos princípios estabelecidos quando criamos uma aplicação do zero. A questão inicial é identificar se as novas funcionalidades irão compor novos microsserviços ou irão estender aqueles já existentes. Em ambos os casos, deve-se inicialmente identificar os contextos dessas novas funcionalidades e definir os microsserviços (estendidos ou novos) respeitando todos os princípios que regem as aplicações desse tipo.

fique atualizado

Assine nossa newsletter e acompanhe as nossas novidades.