← Gestão de Incidentes: coordenar e recuperar
09 / 12 · 70 MIN

Laboratório HTTP e resultados incertos

Observa falhas HTTP controladas e compara o estado do processo, da operação e da confirmação do cliente.

Preparar uma observação por camada

O guião cria um servidor HTTP em loopback e uma base SQLite temporária que só contém instruções sintéticas. O primeiro pedido valida o caminho funcional normal. Depois, uma flag controlada representa uma dependência indisponível: /health continua a responder 200, enquanto /ready e a operação devolvem 503. O registo dessa tentativa indica que não houve commit e a consulta encontra zero efeitos. Antes de executar, prevê estes resultados numa tabela com endpoint, etapa, status e critério funcional. A diferença entre sinais é deliberada e ajuda a discutir dashboards que observam apenas o processo. Os nomes dos endpoints não são normas universais; outra aplicação precisa de documentar o que cada verificação realmente cobre.

Perder a resposta depois do commit

Na fase seguinte, a operação é gravada e o servidor fecha deliberadamente a ligação antes de enviar confirmação. O cliente recebe RemoteDisconnected, mas a consulta à base encontra um efeito. Não se trata de um timeout de rede externa ou de um crash do processo; o ponto de falha é controlado pelo guião. A rota sem proteção aplica novamente a mesma intenção quando o cliente repete o pedido. A contagem passa de um para dois. Pede ao aluno que explique o resultado sem dizer que a primeira chamada nunca ocorreu. Num incidente fictício de APS, esta distinção determina se é seguro repetir, se é preciso consultar o consumidor ou se o estado deve continuar explicitamente incerto.

Comparar o contrato de repetição

A rota protegida regista chave e efeito na mesma transação local. Uma repetição com chave e conteúdo iguais recupera o mesmo identificador e devolve replayed=true. Oito chamadas concorrentes produzem uma aplicação e sete replays nesta execução. A chave, sozinha, não explica tudo: o guião consulta o registo existente sob BEGIN IMMEDIATE e mantém a alteração dentro da mesma base. Se o conteúdo muda, a rota devolve 409; se a chave falta, devolve 400. Estes códigos fazem parte do contrato criado para o exercício. Não alteres a chave apenas para contornar um conflito sem decidir se existe uma intenção nova. A análise deve preservar a ligação entre o pedido original, as repetições e os efeitos observados.

Reconhecer a fronteira da evidência

No final, a base contém seis efeitos para cinco intenções, porque a rota sem proteção deixou um duplicado. integrity_check devolve ok, mostrando que a verificação estrutural não aplica uma regra de unicidade de negócio que não foi definida. O laboratório observa pedidos HTTP reais e transações reais, mas num processo e numa base locais. Não implementa autenticação, pagamentos, consenso entre hosts nem uma transação que inclua um sistema externo. A execução termina o servidor, liberta o listener e remove a base temporária. Guarda o relatório antes de discutir resultados com colegas. Usa as observações para formular critérios de aceitação mais representativos, sem apresentar este servidor de treino como solução pronta para produção.

# Local training only; binds 127.0.0.1 on an ephemeral port.
python3 content/labs/incident-runtime/run.py --output /tmp/dr-incident-observation.json
# Actual recorded runtime: Python 3.13.1, SQLite 3.51.2, Darwin arm64.
# Own temporary database is removed; no real credentials or business effects.
NA PRÁTICA

O processo responde a /health, mas a operação falha; noutra fase, a operação é gravada e o cliente perde a resposta.

Armadilhas comuns

Tratar um 200 como serviço recuperado, uma ligação fechada como cancelamento ou uma chave isolada como garantia distribuída.

Tópicos relacionados: Diagnóstico e mitigação · Comunicação e passagem para RUN

Leva esta ideia contigo

Separa a resposta recebida do efeito produzido. A decisão de repetir precisa do contrato e do estado observado.

Criar conta

Referência: Effective Troubleshooting · Incident management practices 2026-09; scoped Google SRE, PagerDuty and Atlassian examples