DEV Community

Eduardo Rosa
Eduardo Rosa

Posted on

O Que Define uma Boa Fronteira de Microsserviço?

Introdução: Definindo as Fronteiras Certas

como decidimos o que se torna um microsserviço? Dividir um sistema grande em partes menores parece bom, mas fazer as divisões erradas pode criar mais problemas do que soluções. Como encontrar as "fronteiras" ideais para nossos microsserviços, garantindo que eles sejam coesos, independentes e alinhados ao negócio.

O Que Define uma Boa Fronteira de Microsserviço?

Encontrar a divisão certa é uma arte, mas existem princípios que nos guiam:

  1. Ocultação de Informação (Information Hiding): Um princípio clássico da engenharia de software. Cada microsserviço deve esconder seus detalhes internos (como sua estrutura de banco de dados ou lógica complexa) atrás de uma interface bem definida (a API). Outros serviços só interagem através dessa interface, sem precisar saber como o serviço funciona por dentro. Isso permite que a implementação interna mude sem quebrar quem depende do serviço.

  2. Coesão (Cohesion): As funcionalidades dentro de um microsserviço devem estar fortemente relacionadas, trabalhando juntas para um propósito comum. Um serviço deve ter uma responsabilidade clara e única. Por exemplo, um serviço de "Gerenciamento de Perfis de Usuário" é coeso se lida apenas com dados e operações de perfil. Se ele também começa a gerenciar postagens de blog, ele perde coesão.

    • Visual: Um diagrama mostrando um círculo (microsserviço) com vários pontos relacionados dentro (alta coesão) vs. um círculo com pontos desconexos (baixa coesão).
  3. Acoplamento (Coupling): Mede o grau de dependência entre microsserviços. Queremos baixo acoplamento, ou seja, que as mudanças em um serviço tenham o mínimo impacto possível em outros. Se para alterar o serviço A, você sempre precisa alterar o serviço B, eles estão fortemente acoplados.

acoplamento
A Dança entre Coesão e Acoplamento: Geralmente, buscar alta coesão dentro de um serviço ajuda a alcançar baixo acoplamento entre serviços. Se um serviço faz uma coisa bem feita (alta coesão), ele tende a depender menos dos detalhes internos de outros (baixo acoplamento).

Tipos de Acoplamento (O Que Evitar)

  • Acoplamento de Domínio (Domain Coupling): O mais comum. Um serviço precisa entender parte do domínio de outro para interagir. É necessário, mas deve ser minimizado.
  • Acoplamento Passa-Através (Pass-Through Coupling): O serviço A chama B, que apenas repassa a chamada para C. Isso adiciona complexidade desnecessária.
  • Acoplamento Comum (Common Coupling): Vários serviços dependem de um recurso compartilhado, como um banco de dados. Isso é muito perigoso em microsserviços, pois viola a autonomia (cada um deve ter seus dados).
  • Acoplamento de Conteúdo (Content Coupling): O pior tipo! O serviço A modifica ou depende diretamente dos dados internos do serviço B (ex: acessa a tabela do banco de dados do outro). Isso destrói a independência e deve ser evitado a todo custo. ## Domain-Driven Design (DDD): Uma Ferramenta Poderosa

Como encontrar essas fronteiras coesas e de baixo acoplamento na prática? O Design Orientado ao Domínio (DDD) oferece conceitos valiosos:

  1. Linguagem Ubíqua (Ubiquitous Language): Criar um vocabulário comum entre desenvolvedores e especialistas do negócio para descrever o domínio. Falar a mesma língua evita ambiguidades e ajuda a modelar o software de forma mais precisa.

  2. Agregado (Aggregate): Um agrupamento de objetos de domínio que são tratados como uma única unidade. Pense em um "Pedido" em um e-commerce. Ele inclui itens, endereço de entrega, status, etc. O Agregado "Pedido" garante que todas essas partes sejam consistentes. Geralmente, um microsserviço é modelado em torno de um ou mais agregados.

  3. Contexto Delimitado (Bounded Context): Define uma fronteira clara onde um modelo de domínio específico (e sua Linguagem Ubíqua) é válido. Dentro do contexto de "Vendas", a palavra "Cliente" pode ter um significado; no contexto de "Suporte", pode ter outro. O Bounded Context é frequentemente o candidato ideal para se tornar um microsserviço. Ele encapsula um modelo e protege sua integridade.
    bounded_contexts
    Mapeando DDD para Microsserviços: A ideia central é alinhar as fronteiras dos microsserviços com as fronteiras dos Bounded Contexts identificados no domínio do negócio. Isso naturalmente leva a serviços mais coesos e com menor acoplamento.

Event Storming: Uma técnica colaborativa (workshop) mencionada para ajudar a descobrir esses domínios, eventos e contextos delimitados, envolvendo tanto técnicos quanto especialistas do negócio.

Top comments (0)