Quiz de Arquitetura

Coloque seu conhecimento à prova com perguntas de múltipla escolha sobre padrões, decisões e conceitos de arquitetura de software.

Objetivo

Este quiz cobre os conceitos fundamentais de arquitetura de software abordados nas seções anteriores. Use-o para avaliar sua compreensão e identificar áreas em que você precisa se aprofundar.

Cada pergunta tem uma explicação detalhada — não fique apenas com a resposta correta, leia o porquê.


Seção 1: Fundamentos

Pergunta 1

Qual é a principal diferença entre um monolito e microsserviços?

  • A) Os microsserviços usam mais tecnologias
  • B) Os microsserviços são implantados de forma independente
  • C) Os monolitos não conseguem escalar
  • D) Os microsserviços são sempre mais rápidos
Ver resposta

Resposta: B

A diferença fundamental é a implantação independente. Cada microsserviço pode ser implantado, escalado e atualizado sem afetar os demais. Um monolito é implantado como uma única unidade.

Os monolitos também conseguem escalar (verticalmente ou com múltiplas instâncias). Os microsserviços não são inerentemente mais rápidos — na verdade, a comunicação pela rede adiciona latência.

Pergunta 2

Qual princípio arquitetural sugere que os módulos de alto nível não devem depender de módulos de baixo nível?

  • A) Single Responsibility Principle
  • B) Open/Closed Principle
  • C) Dependency Inversion Principle
  • D) Interface Segregation Principle
Ver resposta

Resposta: C

O Dependency Inversion Principle (DIP) estabelece que:

  1. Os módulos de alto nível não devem depender de módulos de baixo nível. Ambos devem depender de abstrações.
  2. As abstrações não devem depender de detalhes. Os detalhes devem depender de abstrações.

Na prática, isso significa usar interfaces ou contratos entre camadas, e não dependências diretas de implementações concretas.

Pergunta 3

Quando é apropriado escolher um monolito em vez de microsserviços?

  • A) Nunca — os microsserviços são sempre superiores
  • B) Quando a equipe é pequena e o domínio não está bem definido
  • C) Apenas para protótipos que serão descartados
  • D) Quando você não tem orçamento para a nuvem
Ver resposta

Resposta: B

Um monolito (especialmente um monolito modular) é uma excelente escolha quando:

  • A equipe é pequena (< 8 pessoas)
  • O domínio não está bem definido (os limites dos serviços vão mudar)
  • A velocidade de desenvolvimento é mais importante do que a escalabilidade independente
  • Você não tem a infraestrutura para operar sistemas distribuídos

Os microsserviços adicionam uma complexidade operacional significativa. Se você não precisa dela, não a adicione.


Seção 2: Padrões

Pergunta 4

Qual padrão você usaria para evitar que um serviço externo lento derrube seu sistema?

  • A) Saga Pattern
  • B) Circuit Breaker
  • C) Outbox Pattern
  • D) CQRS
Ver resposta

Resposta: B

O Circuit Breaker detecta quando um serviço externo está falhando ou respondendo lentamente e “abre o circuito” para parar de enviar requisições a ele. Isso evita que as threads fiquem bloqueadas esperando respostas que não chegam, protegendo seu sistema de uma cascata de falhas.

Estados do circuit breaker:

  • Fechado: tudo funciona normalmente, as requisições passam
  • Aberto: o serviço está falhando, as requisições são rejeitadas imediatamente
  • Semiaberto: permite-se uma requisição de teste para verificar se o serviço se recuperou

Pergunta 5

Qual é o propósito principal do padrão Outbox?

  • A) Enviar e-mails de forma assíncrona
  • B) Garantir consistência entre o banco de dados e o message broker
  • C) Armazenar mensagens que falharam para reenviá-las
  • D) Separar as leituras das escritas
Ver resposta

Resposta: B

O Outbox Pattern resolve o problema da escrita dupla: quando você precisa atualizar o banco de dados E publicar um evento, e ambas as operações precisam ser atômicas.

Em vez de publicar diretamente no broker, você grava o evento em uma tabela “outbox” dentro da mesma transação de banco de dados. Um processo separado lê a tabela outbox e publica os eventos no broker. Se a publicação falhar, ela é reenviada. Se a transação falhar, o evento nunca foi gravado na outbox.

Pergunta 6

Qual padrão permite que um serviço trate requisições de leitura e escrita de forma diferente?

  • A) Saga
  • B) Event Sourcing
  • C) CQRS
  • D) API Gateway
Ver resposta

Resposta: C

CQRS (Command Query Responsibility Segregation) separa o modelo de leitura do modelo de escrita. Isso permite:

  • Otimizar as leituras com modelos desnormalizados
  • Escalar leituras e escritas de forma independente
  • Usar diferentes bancos de dados para cada modelo

O CQRS não requer Event Sourcing, embora frequentemente sejam usados juntos.


Seção 3: Resiliência e operações

Pergunta 7

Qual estratégia de retry é mais apropriada para chamadas a serviços externos?

  • A) Retry imediato sem limite
  • B) Retry com backoff exponencial e jitter
  • C) Retry a cada 1 segundo, no máximo 100 vezes
  • D) Não fazer retry — se falhou, falhou
Ver resposta

Resposta: B

O backoff exponencial com jitter é a estratégia recomendada porque:

  • Backoff exponencial: cada nova tentativa espera mais tempo (1s, 2s, 4s, 8s…), dando tempo ao serviço para se recuperar
  • Jitter: adiciona um componente aleatório ao delay para evitar que todos os clientes tentem novamente ao mesmo tempo (thundering herd)
  • Limite de tentativas: sempre defina um máximo (tipicamente 3-5 tentativas)

Retry imediato sem limite pode piorar o problema ao sobrecarregar um serviço que já está com dificuldades.

Pergunta 8

Quais são os três pilares da observabilidade?

  • A) CPU, memória e disco
  • B) Logs, métricas e traces
  • C) Alertas, dashboards e relatórios
  • D) Uptime, latência e throughput
Ver resposta

Resposta: B

Os três pilares da observabilidade são:

  • Logs: registros textuais de eventos discretos (o que aconteceu)
  • Métricas: valores numéricos agregados ao longo do tempo (quanto, quão rápido)
  • Traces: rastreamento de uma requisição através de múltiplos serviços (por onde passou)

Juntos, permitem entender o comportamento de um sistema distribuído. Alertas, dashboards e relatórios são ferramentas que consomem esses dados, mas não são pilares em si.

Pergunta 9

Qual é a diferença entre disponibilidade de 99,9% e 99,99%?

  • A) Não há diferença prática
  • B) 99,9% permite ~8,7 horas de downtime por ano; 99,99% permite ~52 minutos
  • C) 99,99% requer microsserviços; 99,9% não
  • D) 99,99% é impossível de alcançar
Ver resposta

Resposta: B

A diferença é significativa:

  • 99,9% (três noves): ~8,7 horas de downtime por ano (~43 minutos por mês)
  • 99,99% (quatro noves): ~52 minutos de downtime por ano (~4,3 minutos por mês)
  • 99,999% (cinco noves): ~5,2 minutos de downtime por ano

Cada “nove” adicional requer um investimento exponencialmente maior em redundância, monitoramento e automação. A maioria das aplicações não precisa de mais do que três noves.


Seção 4: Segurança

Pergunta 10

Onde a autenticação deve ser validada em uma arquitetura de microsserviços?

  • A) Apenas no frontend
  • B) Em cada microsserviço individualmente
  • C) No API Gateway, propagando a identidade para os serviços internos
  • D) Apenas no banco de dados
Ver resposta

Resposta: C

O padrão recomendado é:

  1. O API Gateway valida o token de autenticação (JWT, session, etc.)
  2. Se for válido, propaga a identidade do usuário (userId, roles) para os serviços internos via headers
  3. Os serviços internos confiam na identidade propagada e aplicam autorização de acordo com suas regras de negócio

Validar em cada serviço é redundante e custoso. Validar apenas no frontend é inseguro — o backend deve sempre verificar.


Resultados

Conte suas respostas corretas:

FaixaNívelRecomendação
9-10AvançadoVocê está pronto para os desafios avançados
7-8IntermediárioBom nível — revise os temas em que errou
5-6BásicoRevise as seções de fundamentos e padrões
< 5InicianteComece do início — cada seção vai te ajudar

Não se preocupe com a pontuação — o importante é identificar quais temas você precisa reforçar e voltar às seções correspondentes.