01
A queda termina e o tráfego não volta ao normal
O comportamento esperado depois de uma falha curta é uma recuperação curta: a dependência volta, as requisições voltam a ter sucesso e o tráfego retorna ao patamar anterior em alguns minutos. O que aconteceu nesse incidente foi diferente, e a diferença está na população de clientes. Durante os doze minutos de falha, cada cliente que recebeu erro não desistiu. Ele guardou o pedido e continuou tentando, e cada tentativa que falhou gerou outra. Quando a dependência voltou, o serviço não encontrou o tráfego normal esperando por ele: encontrou o tráfego normal somado a doze minutos de pedidos acumulados, todos chegando ao mesmo tempo.
Esse volume é suficiente para derrubar o serviço de novo, e aí está o mecanismo que prolonga o incidente. Com o serviço sobrecarregado, uma parte das requisições volta a falhar por tempo esgotado, e cada falha gera uma nova tentativa, que chega a um serviço ainda mais sobrecarregado. O sistema entra em um estado estável que não é o saudável: a carga que o mantém caído é produzida pela própria queda. Ele só sai desse estado quando alguém reduz a carga de fora, desligando uma rota, bloqueando um cliente ou esperando que os usuários desistam por conta própria.
Tráfego recebido pelo servico (1x = pico normal de uma terca-feira)
9x | ##
| ####
6x | ###### ###
| ######## ##### ###
3x | ############### ###### ##
| ######################### ###
1x |##########################################################
+-----+--------+--------+--------+--------+--------+-------
14:00 14:12 14:40 15:10 16:00 17:10
volta a | | | normal
dependencia +-- serviço recai por sobrecarga, repete
a cada onda de tentativas sincronizadas
Queda da dependencia: 12 minutos
Queda percebida pelo usuario: 3 horas e 10 minutos
Participacao de repeticoes no pico: 85% das requisicoes recebidasVisto de fora, o gráfico é idêntico ao de um ataque volumétrico, e a reação instintiva é tratá-lo como um: ativar a regra do firewall de aplicação, bloquear os endereços com mais requisições, ligar o desafio contra robôs. As três medidas pioram o problema. Os endereços com mais requisições são os clientes mais importantes, como a integração do maior parceiro, que envia muito porque vende muito. O desafio contra robôs quebra o aplicativo e as integrações, que não conseguem resolvê-lo, e transforma a falha temporária em falha permanente para quem estava apenas repetindo um pedido legítimo. O tráfego é abusivo no efeito e legítimo na origem, e a defesa precisa separar as duas coisas.