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:
- Os módulos de alto nível não devem depender de módulos de baixo nível. Ambos devem depender de abstrações.
- 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 é:
- O API Gateway valida o token de autenticação (JWT, session, etc.)
- Se for válido, propaga a identidade do usuário (userId, roles) para os serviços internos via headers
- 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:
| Faixa | Nível | Recomendação |
|---|---|---|
| 9-10 | Avançado | Você está pronto para os desafios avançados |
| 7-8 | Intermediário | Bom nível — revise os temas em que errou |
| 5-6 | Básico | Revise as seções de fundamentos e padrões |
| < 5 | Iniciante | Comece 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.