Questão de Arquitetura de Software — Arquitetura de Software — TJ-PI 2025
Arquitetura de Software›Arquitetura de Software
Código
qg614914
Banca
TJ-PI
Órgão
TJ-PI
Ano
2025
Nível
Superior
Cargo
Residente Tecnológico
O sistema de autenticação unificada (Single Sign-On) do TJPI, que atende ao PJe, SEl e outros sistemas internos, depende de um serviço externo de validação de identidade. Recentemente, falhas intermitentes nesse serviço externo têm causado um efeito cascata: as requisições para o serviço de autenticação ficam presas aguardando resposta, esgotando o pool de threads do servidor de aplicação e, consequentemente, derrubando o acesso a todos os sistemas integrados. Qual padrão de resiliência de software é o mais indicado para prevenir esse tipo de falha em cascata?
APadrão Retry, que consiste em tentar novamente a chamada ao serviço externo várias vezes antes de desistir.
BPadrão Bulkhead, que consiste em isolar as chamadas para o serviço externo em um pool de threads limitado e separado, para que sua falha não consuma todos os recursos do sistema principal.
CPadrão Circuit Breaker, que monitora as falhas nas chamadas ao serviço externo e, após atingir um limiar, "abre o circuito", fazendo com que as chamadas subsequentes falhem imediatamente por um determinado período, sem tentar contatar o serviço falho.
DPadrão Load Balancer, que consiste em distribuir a carga entre múltiplas instâncias do serviço de autenticação do TJPI.
EPadrão Cache-Aside, que consiste em armazenar em cache as respostas bem-sucedidas do serviço externo para evitar chamá-lo repetidamente para o mesmo usuário.
Revelar gabarito e comentário▾
GabaritoC — Padrão Circuit Breaker, que monitora as falhas nas chamadas ao serviço externo e, após atingir um limiar, "abre o circuito", fazendo com que as chamadas subsequentes falhem imediatamente por um determinado período, sem tentar contatar o serviço falho.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Padrões de Resiliência em Sistemas Distribuídos
Gabarito: letra C. O Padrão Circuit Breaker é o mais indicado porque, ao monitorar falhas e abrir o circuito após um limiar, faz com que as chamadas subsequentes falhem imediatamente, evitando que threads fiquem presas aguardando resposta do serviço externo falho. Isso interrompe o efeito cascata de exaustão do pool de threads do servidor de aplicação.
A banca testa a compreensão dos principais padrões de resiliência (Resilience Patterns) usados em sistemas distribuídos. O cenário descreve um serviço externo de autenticação que falha intermitentemente, causando retenção de requisições e esgotamento do pool de threads. O padrão que previne esse tipo de falha em cascata é o Circuit Breaker.
Padrões de resiliência: Retry (Agrava espera); Bulkhead (Isola mas não falha rápido); Circuit Breaker (Falha imediata após limiar); Load Balancer (Não resolve falha intermitente); Cache-Aside (Não evita espera em falha)
Alternativa A — ❌ Incorreta
O Padrão Retry consiste em tentar novamente a chamada ao serviço externo várias vezes antes de desistir. No cenário, isso agravaria o problema, pois cada tentativa adicional manteria as threads ocupadas por mais tempo, acelerando a exaustão do pool e piorando o efeito cascata.
Alternativa B — ❌ Incorreta
O Padrão Bulkhead isola as chamadas para o serviço externo em um pool de threads separado e limitado. Embora evite que a falha consuma todos os recursos do sistema principal, ainda permite que as requisições fiquem presas aguardando resposta, esgotando o pool isolado e não solucionando o problema de espera prolongada. O Circuit Breaker é mais eficaz por falhar rapidamente.
Alternativa C — ✅ Correta ⟵ GABARITO
O Padrão Circuit Breaker monitora as falhas nas chamadas ao serviço externo. Quando o número de falhas ultrapassa um limiar configurado, o circuito "abre" e todas as chamadas subsequentes falham imediatamente (sem tentar contatar o serviço), por um período de tempo. Isso evita que threads fiquem aguardando, protege o pool de threads e dá tempo para o serviço externo se recuperar, prevenindo o efeito cascata.
Alternativa D — ❌ Incorreta
O Padrão Load Balancer distribui a carga entre múltiplas instâncias do serviço. Se todas as instâncias estiverem falhando (mesmo que parcialmente), o problema de espera persistirá. O Load Balancer não resolve a falha intermitente nem evita o esgotamento de threads.
Alternativa E — ❌ Incorreta
O Padrão Cache-Aside armazena em cache as respostas bem-sucedidas para evitar chamadas repetidas ao serviço externo. No entanto, em caso de falha (cache miss), a chamada ainda será feita e poderá ficar presa. Além disso, o cache não se aplica a chamadas de autenticação que exigem validação atualizada (o cache pode conter dados obsoletos).
NÃO CAIA NESSA!
A banca pode confundir o candidato com o Padrão Bulkhead (alternativa B). Embora o Bulkhead isole recursos, ele não interrompe as chamadas que já estão esperando — apenas limita o estrago. O Circuit Breaker é o único que efetivamente "quebra" o circuito para evitar a espera prolongada, sendo a solução mais direta para o efeito cascata descrito.