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
Um pouco sobre mim...
Globalcode – Open4education
Agenda
Globalcode – Open4education
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
Respondentes: 300 líderes de TI e engenharia de software (2023)
Globalcode – Open4education
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
Fonte: https://github.com/scalecube/scalecube-services
Globalcode – Open4education
Fonte: https://github.com/scalecube/scalecube-services
Fonte: https://starwars.fandom.com/pt/wiki/Estrela_da_Morte
Globalcode – Open4education
Fonte: https://www.infoq.com/articles/cloud-native-architecture-adoption-part1/
Globalcode – Open4education
Fonte: https://x.com/Werner/status/741673514567143424
Globalcode – Open4education
Fonte: https://www.uber.com/en-BR/blog/microservice-architecture/
Globalcode – Open4education
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
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
Como podemos evitar?
Globalcode – Open4education
Big Ball of Mud: Criação de microsserviços de forma desordenada
Causa
Considere evitar
Resultado
Favoreça
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
Orquestrador
B
C
A
Com Orquestrador
Centralização disfarçada de descentralizada
Globalcode – Open4education
B
C
A
Evento A
Evento B
Sem Orquestrador
Globalcode – Open4education
Causa
Considere evitar
Resultado
Favoreça
Big Ball of Mud: Microsserviços consumidos sem critério
Globalcode – Open4education
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
Causa
Considere evitar
Resultado
Favoreça
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
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
Se você refatora seu código, considere refatorar sua arquitetura também.
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