1 of 24

Trilha – API e MICROSERVICES

Big Ball of Mud em Microsserviços: Da promessa de modernidade ao pesadelo técnico

Marcelo Nascimento

Globalcode – Open4education

Globalcode – Open4education

2 of 24

Um pouco sobre mim...

  • MSc em Computação Aplicada
  • Consultor em Arquitetura
  • ≈20 anos em tecnologia
  • +6 anos em arquitetura
  • Seguros, Previdência, Bancos, Pagamentos, Consultoria de TI
  • Estudante de Computação Quântica

Globalcode – Open4education

3 of 24

Agenda

  • Introdução
  • Death Star
  • Big Ball of Mud
  • Causas e boas práticas

Globalcode – Open4education

4 of 24

Fonte: https://martinfowler.com/microservices/

O estilo de arquitetura baseado em microsserviços é uma abordagem para desenvolver uma aplicação com um conjunto de pequenos serviços, cada um executando em seu próprio processo e se comunicando por meio de mecanismos leves, geralmente uma API de recursos HTTP

Globalcode – Open4education

5 of 24

  • Quase três quartos (74%) das organizações utilizam arquitetura de microsserviços atualmente

  • 23% das organizações ainda não adotaram, mas têm planos de implementar

Respondentes: 300 líderes de TI e engenharia de software (2023)

Globalcode – Open4education

6 of 24

Microsserviço

Escalabilidade granular

Resiliência

e tolerância a falhas

Implantação contínua e independente

Facilidade de manutenção e atualização

Flexibilidade tecnológica

Globalcode – Open4education

7 of 24

Fonte: https://github.com/scalecube/scalecube-services

Globalcode – Open4education

8 of 24

Fonte: https://github.com/scalecube/scalecube-services

Fonte: https://starwars.fandom.com/pt/wiki/Estrela_da_Morte

Globalcode – Open4education

9 of 24

Fonte: https://www.infoq.com/articles/cloud-native-architecture-adoption-part1/

Globalcode – Open4education

10 of 24

Fonte: https://x.com/Werner/status/741673514567143424

Globalcode – Open4education

11 of 24

Fonte: https://www.uber.com/en-BR/blog/microservice-architecture/

Globalcode – Open4education

12 of 24

Big Ball of Mud

Refere-se a um sistema sem uma arquitetura de software clara, com falta de estrutura, organização e separação definida de responsabilidades — e, em algumas situações, sem planejamento. Pode se tornar um sistema difícil de entender e manter, mas que funciona — It works, so why fix it?

Brian Foote e Joseph Yoder (Pattern Languages of Programs - PLoP '97 / EuroPLoP '97)

Martin Fowler acrescenta que, se uma arquitetura baseada em microsserviços for mal estruturada, ela pode se tornar um Big Ball of Microservice Mud.

Fonte: https://martinfowler.com/articles/microservice-trade-offs.html

Fonte: http://www.laputan.org/mud/

Fonte: Thoughtworks

Globalcode – Open4education

13 of 24

Uma arquitetura inapropriada é um dos fatores para o crescimento de elementos de software que dificultam os desenvolvedores de entenderem o sistema e torna mais complexa a modificação.

Software Architecture Guide (Martin Fowler)

Fonte: https://martinfowler.com/architecture/

Globalcode – Open4education

14 of 24

Como podemos evitar?

Globalcode – Open4education

15 of 24

Big Ball of Mud: Criação de microsserviços de forma desordenada

Causa

  • More the merrier1
  • "micro" à risca2
  • Nanosserviços

Considere evitar

  • Microsserviço anêmico (CRUD)
  • Microsserviço com alta dependência
  • Separações prematuras (vai que.....)
  • Orquestradores sem lógica

Resultado

  • Complexidade de troubleshooting
  • Dificuldade de compreensão
  • Mais tempo para testes (QA)
  • Complexidade na implantação
  • Aumento de custo
  • Aumento de latência

Favoreça

  • Opte por serviços que encapsulem regras de negócio e agrupados por capacidade funcional
  • Decisões baseada em dados
  • Refatore, se necessário

Pergunte-se: o custo de integração é maior que o benefício da separação?

1 Chris Richardson – Ref.: https://microservices.io/post/antipatterns/2019/05/21/antipattern-more-the-merrier.html

2 Zhamak Dehghani – Ref.: https://martinfowler.com/articles/break-monolith-into-microservices.html

Globalcode – Open4education

16 of 24

Orquestrador

B

C

A

Com Orquestrador

Centralização disfarçada de descentralizada

Globalcode – Open4education

17 of 24

B

C

A

Evento A

Evento B

Sem Orquestrador

Globalcode – Open4education

18 of 24

Causa

  • Falta de controle de acesso ao microsserviço​

Considere evitar

  • Acesso indiscriminado aos microsserviços internamente
  • Acesso com usuário genérico

Resultado

  • Complexidade de troubleshooting
  • Complexidade de mudanças
  • Pode causar indisponibilidade (ambos os lados)

Favoreça

  • Mecanismo de controle de acesso
  • Defina limites
  • A cada novo consumidor reavalie a infra do microsserviço

Big Ball of Mud: Microsserviços consumidos sem critério

Globalcode – Open4education

19 of 24

A

C

B

Desconhecido / Não Autorizado

Conhecido / Autorizado

A

B

C

Proteção no microsserviço

Proteção fora do microsserviço

Conhecido / Autorizado

Desconhecido / Não Autorizado

Globalcode – Open4education

20 of 24

Causa

  • Várias versões ativas do microsserviço

Considere evitar

  • Exceder um limite máximo de versões
  • Conviver (sem prazo definido) com várias versões ativas

Resultado

  • Complexidade de troubleshooting
  • Complexidade de desenvolvimento
  • Dificuldade de compreensão
  • Mais tempo para testes (QA)
  • Complexidade na implantação
  • Aumento de custo

Favoreça

  • Limite no número máximo de versões
  • Política de ciclo de vida de versões (Deprecation Policy)
  • Alertas de depreciação
  • Controle de acesso

Retrocompatibilidade e flexibilidade não devem ser usados para perpetuar versões obsoletas

Big Ball of Mud: Microsserviços dependentes de versões específicas

Globalcode – Open4education

21 of 24

Não deixe o problema para trás, programe-se para ajustar

Acompanhe a evolução dos microsserviços da sua arquitetura: Quantos microsserviços temos? Quanto cresceu? Acesso indevido?

Construa um catálogo dos seus microsserviços (Ex.: Spotify Backstage)

Registre suas decisões de arquitetura (Architecture Decision Record)

Crie algo como um CoE (Center of Excellence) para direcionadores para todos da equipe

Controle o acesso aos dados para evitar a criação de microsserviços desnecessários

Sugestões

Globalcode – Open4education

22 of 24

Se você refatora seu código, considere refatorar sua arquitetura também.

23 of 24

24 of 24

Principais causas

Falta de desenho de solução

Testar cenários na arquitetura

Realização de assessment periódico

Nanoserviços

Cascateamento de ms?

Testou se aquela quebra realmente fez sentido num caso real?

Componente muito ocisos?

cyclic-deployed dependency.

Quantas versões do ms tenho ativa?

Padrão para coexistência de versões?

Se possui mais de uma versão, possui controle?

Política de desativação de versão

Catálogo

Para acessar um ms da minha arquitetura precisa de autorização?

Quem consome o ms da minha arquitetura?

Serviços com muitas dependências?

Modelo canônico para microsserviços?

Quantos ms tem na minha arquitetura?

CoE?

Centralização disfarçada de descentralizada

Microsserviços compartilhados entre times (não confunda com inner source)

Globalcode – Open4education