Arquitetura Monolítica vs Microsserviços | [SIS]ANO2C2B2S8A1
[ SIS ] ANO2C2B2S8A1 · Unidade 2 · Componente 2 · Aula 8 · Ensino Médio Técnico — Desenvolvimento de Sistemas

Entenda por que a escolha arquitetural define o custo de manutenção, a capacidade de escala e a saúde do seu time de desenvolvimento — muito antes de qualquer linha de código ser escrita.

Python Back-end Arquitetura de Software SEDUC-SP Design Patterns

Por que o código que funciona hoje pode travar sua empresa amanhã?

Imagine um sistema construído em seis meses que começa a responder mais devagar à medida que a base de usuários cresce. O time tenta escalar um único módulo — o de pagamentos — mas descobre que só é possível escalar a aplicação inteira. O deploy de uma correção simples derruba o sistema por vinte minutos. Ninguém mais sabe exatamente onde cada funcionalidade está. Isso tem nome: é o monolito de barro, e ele começa sempre como uma decisão razoável.

Compreender arquitetura de software não é um detalhe técnico reservado para engenheiros sênior. É uma decisão estratégica que todo desenvolvedor precisa tomar conscientemente — mesmo ao escrever seu primeiro CRUD em Python.

Custo concreto de ignorar essa decisão: um sistema monolítico sem separação de responsabilidades cresce exponencialmente em complexidade. A cada nova feature, o risco de quebrar funcionalidades não relacionadas aumenta. Equipes que não dominam esse conceito reproduzem o problema em todo projeto que entregam.

Como ensinar arquitetura de software no ensino médio técnico público?

A aula [SIS]ANO2C2B2S8A1 enfrenta um desafio real: o conceito de arquitetura distribuída exige abstração que vai além da sintaxe. Em 50 minutos de aula, sem servidor dedicado, frequentemente com acesso instável à internet e estudantes que acabaram de aprender orientação a objetos, é preciso construir a intuição certa antes de qualquer ferramenta.

A estratégia adotada pela SEDUC-SP é precisa: usar Python com classes simples para representar serviços, partindo de um e-commerce fictício como âncora narrativa. O estudante que compreender esse exemplo estará pronto para evoluir para APIs REST, Docker e Kubernetes quando o momento chegar.

≡ definição · arquitetura monolítica

Sistema em que todos os módulos (usuários, pedidos, pagamentos) coexistem em uma única base de código, compartilham o mesmo processo e são implantados como uma unidade indivisível.

≡ definição · arquitetura de microsserviços

Modelo em que cada domínio funcional é implementado como um serviço autônomo com repositório, deploy e ciclo de vida independentes, comunicando-se via APIs ou filas de mensagens.

Quais são as diferenças fundamentais entre as duas arquiteturas?

DIMENSÃO MONOLÍTICA MICROSSERVIÇOS
Desempenho inicial Mais rápido — chamadas internas sem latência de rede Latência adicional pela comunicação entre serviços via HTTP/gRPC
Escalabilidade Toda a aplicação escala como bloco único — desperdício de recursos Escala cirúrgica: apenas o serviço sobrecarregado recebe mais instâncias
Manutenção Cresce até virar “monolito de barro” — mudanças têm efeito colateral imprevisível Cada serviço tem escopo definido — alterações são isoladas e testáveis
Complexidade operacional Baixa — um único processo, um único deploy Alta — orquestração, service discovery, monitoramento distribuído
Tamanho de equipe ideal Pequenas equipes, startups, MVPs Múltiplos times autônomos por domínio (Lei de Conway)
Quando migrar Quando há gargalos claros, domínios bem delimitados e equipe madura

Como identificar qual arquitetura usar em um projeto real?

{ } método · decisão arquitetural em 5 etapas
  1. Mapear domínios do negócio: identifique as fronteiras naturais do sistema (usuários, pedidos, pagamentos, notificações). Se os limites ainda são nebulosos, o monolito é mais seguro.
  2. Avaliar escala diferenciada: pergunta crítica — algum módulo precisa escalar 10× enquanto os outros ficam parados? Se sim, microsserviços podem compensar o custo.
  3. Auditar maturidade da equipe: microsserviços exigem DevOps avançado, CI/CD por serviço, observabilidade distribuída. Sem isso, a complexidade supera os benefícios.
  4. Considerar sistemas legados: antes de uma migração total, avaliar otimizações pontuais no monolito — cache, índices, balanceamento de carga — pode resolver 80% dos problemas com 20% do esforço.
  5. Definir a estratégia de migração: o padrão Strangler Fig permite extrair microsserviços incrementalmente, sem reescrever o sistema do zero e sem interrupção do serviço.

Como representar as duas arquiteturas em Python?

Template 1 — Simulação de arquitetura monolítica

Neste modelo, toda a lógica de validação, processamento e resposta está dentro de uma única função. A simplicidade é real, mas o acoplamento também.

monolito.py
# Arquitetura Monolítica — processo centralizado
# Todos os módulos dentro de uma única função

def process_order(user_id, product_id, payment_info):
    # Validação, pedido e pagamento no mesmo bloco
    if not (user_id and product_id and payment_info):
        return "Dados inválidos!"
    print(f"Pedido do produto {product_id} para o usuário {user_id} confirmado.")
    return "Pedido confirmado com sucesso!"

# Exemplo de execução
resultado = process_order(1, 101, "cartao_credito")
print(resultado)
Ponto de atenção: repare que process_order mistura responsabilidades — validação de usuário, lógica de pedido e confirmação de pagamento coexistem no mesmo escopo. Adicionar um novo tipo de pagamento ou uma regra de desconto exige modificar essa mesma função, aumentando o risco de regressão.

Template 2 — Simulação de arquitetura de microsserviços

Cada responsabilidade migra para uma classe independente. Em produção, cada classe se tornaria um serviço com API própria. O contrato entre eles é definido por interface, não por acoplamento interno.

microsservicos.py
# Arquitetura de Microsserviços — responsabilidades separadas
# Cada classe = um serviço com escopo único e bem definido

class UserService:
    def validate_user(self, user_id):
        return user_id is not None  # Simula validação de usuário

class OrderService:
    def confirm_order(self, user_id, product_id):
        if not user_service.validate_user(user_id):
            return "Usuário inválido!"
        print(f"Pedido do produto {product_id} para o usuário {user_id} confirmado.")
        return "Pedido confirmado com sucesso!"

# Instanciando serviços independentes
user_service  = UserService()
order_service = OrderService()

# Exemplo de execução
resultado = order_service.confirm_order(1, 101)
print(resultado)

Como isso aparece em um cenário real de trabalho?

! cenário real · SEDUC-SP — Ser Sempre +

João, o estagiário que questionou o gerente

João é estagiário em uma empresa de software. O sistema monolítico de gestão de clientes começa a falhar em picos de acesso. O gerente de tecnologia propõe migração imediata para microsserviços. João, ao invés de concordar automaticamente, levanta quatro perguntas críticas antes de qualquer decisão:

  • Qual é o real impacto em complexidade de manutenção e custo da migração?
  • É possível otimizar o monolito existente com cache, índices e balanceamento antes de migrar?
  • Os benefícios esperados com microsserviços justificam os riscos e o tempo investido?
  • Existe um plano estruturado para mitigação de riscos durante a transição?

Esse posicionamento ilustra a diferença entre um desenvolvedor que executa e um que pensa com arquitetura. A decisão tecnicamente correta exige análise de contexto, não apenas conhecimento do padrão.

→ expansão estratégica · 4 frentes

Como transformar essa aula em ativo pedagógico e intelectual

{ } Curso Técnico

Evoluir o exemplo Python para uma API REST com Flask — cada classe vira um endpoint. Conectar com a aula de redes para o conceito de comunicação entre serviços.

Blog / Autoridade

Série de artigos comparando decisões arquiteturais com casos reais de empresas brasileiras. Posicionamento como referência em arquitetura para educação técnica.

[ ] Cultura Maker

Projeto integrado: alunos constroem um sistema de gestão para a própria escola (biblioteca, lab, eventos) escolhendo e justificando a arquitetura antes de codar.

>_ Formação Docente

Oficina para professores de informática: como introduzir padrões arquiteturais no ensino médio sem infraestrutura complexa, usando apenas Python e Google Colab.

Síntese da aula: arquitetura monolítica e microsserviços não são opostos em disputa — são ferramentas com contextos de aplicação distintos. O domínio de ambas é o que separa o desenvolvedor que resolve o problema de hoje do arquiteto que previne o problema de amanhã.

Perguntas frequentes sobre arquitetura de software

Qual é a principal diferença entre arquitetura monolítica e microsserviços?
Na arquitetura monolítica, todos os módulos coexistem em uma única base de código e são implantados juntos. Nos microsserviços, cada domínio funcional é um serviço autônomo com deploy e ciclo de vida independentes, comunicando-se via APIs.
Quando devo usar arquitetura monolítica em vez de microsserviços?
Prefira o monolito em projetos novos com equipe pequena, MVPs ou sistemas com escopo ainda indefinido. Microsserviços compensam quando há domínios bem delimitados, times autônomos por serviço e necessidade real de escala diferenciada entre módulos.
Quais são os maiores riscos de migrar um monolito para microsserviços?
Latência adicional na comunicação entre serviços, complexidade de orquestração, consistência de dados distribuídos, aumento de custo de infraestrutura e curva de aprendizado da equipe.
É possível simular microsserviços em Python sem infraestrutura complexa?
Sim. Em nível didático, classes independentes com responsabilidades únicas já representam o princípio de separação de serviços. Em produção, cada classe evoluiria para um serviço com API própria (Flask, FastAPI) e comunicação via HTTP ou filas de mensagens.
O que é um “monolito de barro” e por que é problemático?
Monolito de barro é um sistema que cresceu sem arquitetura definida: módulos sem separação de responsabilidades, acoplamento excessivo e ausência de testes. Qualquer alteração pode quebrar partes não relacionadas do sistema.

Acesse todos os materiais do Curso Técnico

Slides, roteiros de aula, projetos práticos e reflexões sobre educação tecnológica em escola pública.

→ professorcomia.com.br

A decisão arquitetural como competência fundamental do desenvolvedor

Ensinar arquitetura de software no ensino médio técnico não é antecipar complexidade desnecessária. É plantar a mentalidade certa antes que o estudante escreva código que vai para produção e sustenta negócios reais. A diferença entre um desenvolvedor que codifica o que foi pedido e um engenheiro que projeta o que precisa existir começa exatamente aqui — na capacidade de olhar para um problema e perguntar: qual é a estrutura que vai sustentar isso daqui a dois anos?

João, o estagiário do cenário desta aula, não é um personagem fictício. É o perfil que estamos construindo em cada aula do curso técnico: profissionais que pensam antes de executar, que questionam antes de aceitar, e que entendem que toda decisão técnica é também uma decisão de negócio.

// código da aula: [SIS]ANO2C2B2S8A1 · unidade 2 · componente 2 · aula 8
// componente curricular: desenvolvimento de sistemas · seduc-sp
// publicado em: professorcomia.com.br · diariodeumpoed.com.br
// laboratório de educação digital · poed · 2024

>_ slides da aula

[SIS]ANO2C2B2S8A1 · arquitetura monolítica vs. microsserviços · 2º ano

slide 01
abertura

>_ Arquitetura de Aplicações Back-end

FREQUÊNCIA — registre sua presença no AVA antes de iniciar
  • Código da aula: [SIS]ANO2C2B2S8A1 — Unidade 2 · Componente 2
  • Aula 8: Arquitetura monolítica vs. microsserviços
  • Tema da semana: comparar arquiteturas de software e aplicar design patterns para escalabilidade
? pergunta provocadora Você já usou um app que ficou fora do ar em um dia de Black Friday? O que você acha que causou a falha — e como o código poderia ter evitado isso?
slide 02
objetivos

[ ] O que vamos construir hoje

conceitual

Diferenciar arquitetura monolítica e microsserviços quanto a estrutura, deploy e escalabilidade.

procedimental

Representar as duas arquiteturas em Python usando funções e classes com responsabilidades separadas.

atitudinal

Desenvolver curiosidade crítica ao avaliar arquiteturas sem aceitar soluções como “definitivas”.

≡ recursos · computador ou celular · Google Colab · caderno para anotações
slide 03
problema_gerador

! O sistema que cresceu demais

cenário inicial

Sistema de gestão de eventos online construído como monolito: usuários, eventos e pagamentos em um único bloco de código. Deploy simples, desenvolvimento ágil no início.

problema real

Com o crescimento, performance cai, manutenção fica cara e escalar um módulo significa escalar tudo. A equipe considera migrar para microsserviços — mas tem dúvidas.

? ponto de partida — 8 minutos Quais limitações da arquitetura monolítica podem estar causando os problemas de performance e manutenção nesse sistema? Pense e registre no caderno antes de discutir.
slide 04
conceito

Arquitetura Monolítica monolito

  • Definição: software como um único bloco indivisível — todos os módulos interligados em uma base de código
  • Vantagem real: desenvolvimento inicial rápido, deploy simples, menos overhead de infraestrutura
  • Risco à medida que cresce: interdependência entre módulos — mudar pagamentos pode quebrar cadastro de produtos
  • Ponto crítico: qualquer mudança exige reimplantar a aplicação inteira, mesmo que apenas 3 linhas tenham sido alteradas
01

Se o módulo de pagamentos tiver um bug crítico às 2h da manhã, o que acontece com o cadastro de usuários no sistema monolítico?

02

Que tipo de empresa deveria preferir o monolito? Que tipo deveria evitar?

slide 05
conceito

{ } Arquitetura de Microsserviços microservices

  • Definição: aplicação dividida em serviços independentes e especializados — cada um com deploy e escala autônomos
  • Ganho central: escala cirúrgica — apenas o serviço sobrecarregado recebe mais instâncias
  • Custo oculto: orquestração entre serviços é complexa — latência de rede, consistência de dados, monitoramento distribuído
  • Lei de Conway: a arquitetura do sistema tende a refletir a estrutura de comunicação da equipe que o construiu
01

Se o UserService cair, o que acontece com o OrderService? Como o sistema deve se comportar? Como isso seria tratado no monolito?

02

Qual das arquiteturas você acredita que o Instagram usa hoje? E como você acha que era quando tinha só 13 funcionários?

slide 06
conceito

# Comparando as arquiteturas

DIMENSÃO MONOLÍTICA MICROSSERVIÇOS
desempenho Rápido inicialmente — componentes próximos Escala partes específicas sem escalar tudo
manutenção Vira “monolito de barro” com o tempo Atualizações isoladas por serviço
complexidade Simples no início, complexa ao crescer Complexa de orquestrar, flexível a longo prazo
? debate — 5 minutos Olhando a tabela: existe uma arquitetura “melhor”? O que determina a escolha certa? Anote sua resposta em uma frase antes de ouvir o colega.
slide 07
caderno

Python — Monolito vs. Microsserviços

  • process_order() função única que concentra validação, pedido e pagamento — típico de monolito
  • UserService classe com responsabilidade única: validar usuário
  • OrderService classe com responsabilidade única: confirmar pedido, delegando validação ao UserService
  • user_id is not None simulação de validação — em produção seria uma consulta ao banco
microsservicos.py — núcleo ▶ Google Colab
class UserService:
    def validate_user(self, user_id):
        return user_id is not None

class OrderService:
    def confirm_order(self, user_id, product_id):
        if not user_service.validate_user(user_id):
            return "Usuário inválido!"
        return "Pedido confirmado!"
? leia o código e responda no caderno
  • O que muda se você precisar adicionar um PaymentService — o monolito ou o microsserviço é mais fácil de estender? Por quê?
  • O OrderService depende do UserService. Isso é acoplamento bom ou ruim?
slide 08
aplicacao_conceitual · ser sempre +

{ } João e a decisão arquitetural

cenário profissional

João é estagiário em uma empresa de software. O gerente propõe migração imediata do sistema monolítico para microsserviços após falhas em picos de acesso. João deve responder como desenvolvedor júnior — mas que pensa como arquiteto.

⌨ sua tarefa — 15 minutos Você é João. Escreva sua resposta ao gerente considerando: (1) limitações do monolito atual, (2) riscos e benefícios da migração, (3) alternativas antes da migração total, (4) sua recomendação final com justificativa técnica. Mínimo 5 linhas. Registre no caderno.
01

Quem concorda com o gerente? Quem concorda com João? Justifique com argumento técnico — não vale só opinião.

02

Existe uma terceira opção que nem o gerente nem João mencionaram? O que seria um padrão Strangler Fig?

slide 09
atividade_avaliativa

Atividade — Análise arquitetural aplicada

enunciado

Uma startup de delivery está desenvolvendo seu primeiro sistema. O CTO quer decidir entre arquitetura monolítica e microsserviços. Com base nos conceitos estudados, elabore uma análise técnica justificando sua recomendação para esse contexto.

obrigatório incluir
  • Definição das duas arquiteturas com suas próprias palavras
  • Pelo menos 2 vantagens e 2 desvantagens de cada
  • Justificativa da escolha para o contexto da startup
  • Referência ao código Python estudado na aula
critérios de avaliação
  • Precisão conceitual nas definições
  • Coerência entre argumento e contexto
  • Capacidade de justificar riscos e benefícios
  • Clareza e organização da resposta escrita
⌨ entrega · resposta escrita no AVA + print do código executado no Colab · prazo conforme calendário da turma
slide 10
síntese

Então ficamos assim…

Arquitetura Monolítica

Único bloco de código. Deploy simples. Ideal para início de projeto — torna-se “monolito de barro” sem disciplina arquitetural.

{ } Microsserviços

Serviços independentes com escala autônoma. Maior flexibilidade, maior complexidade operacional. Requer maturidade de equipe.

>_ Python como modelo

Classes com responsabilidade única simulam o princípio dos microsserviços. Base para evoluir para APIs REST com Flask ou FastAPI.

← aula anterior

Linguagens de programação back-end — fundamentos e ecossistema Python para desenvolvimento de sistemas.

→ próxima aula

Desenvolvimento de APIs — como transformar serviços em endpoints REST acessíveis por HTTP, usando Flask ou FastAPI.