2 pontos por GN⁺ 2023-07-02 | 2 comentários | Compartilhar no WhatsApp
  • Enquanto o feed inicial da Twitter ficou fora do ar durante boa parte daquela manhã, observou-se uma situação em que o cliente web continuava repetindo solicitações de conteúdo, aparentemente provocando um DDOS contra si próprio
  • Mesmo em uma tela que não carregava, as tentativas não paravam; no primeiro vídeo aparecem um erro de rate limited e uma barra de rolagem tremendo
  • No segundo vídeo, vê-se a Twitter enviando para si mesma cerca de 10 solicitações por segundo ao tentar buscar conteúdo que não chegava
  • A causa apontada como possível foi a recente limitação de leitura para usuários não logados, que pode ter criado uma condição inesperada
  • No console de rede do Firefox mostrado em um vídeo posterior, as solicitações também continuavam a jorrar, o que foi interpretado como uma situação de DDOS contra si mesma, com o navegador do usuário repetindo solicitações à Twitter

Solicitações repetidas vistas no cliente web da Twitter

  • O feed inicial da Twitter ficou fora do ar durante boa parte daquela manhã e, mesmo sem carregar nada, o site não parava de tentar novamente as solicitações
  • O primeiro vídeo mostra uma mensagem de erro dizendo que o usuário está em estado de rate limited e a barra de rolagem à direita tremendo
  • O segundo vídeo mostra o motivo de a barra de rolagem estar tremendo: a Twitter tentava buscar conteúdo enviando para si mesma cerca de 10 solicitações por segundo
  • Como pano de fundo para o conteúdo não chegar, foi apontada a mudança que impediu usuários não logados de lerem a Twitter

Verificação posterior e materiais anexos

  • Uma publicação posterior mostra adicionalmente, pela tela do console de rede do Firefox, que as solicitações de rede continuavam ocorrendo
  • A interpretação apresentada foi que o código implantado causou uma condição de corrida (race condition), fazendo com que, no fim, os usuários executassem solicitações com características de DDOS contra a Twitter
  • O autor da publicação afirmou que, inicialmente, fechou a conexão, mas que depois a Twitter manteve por algum tempo a situação em que continuava induzindo solicitações
  • Materiais anexos:
    • Video 4: erro de rate limited e barra de rolagem tremendo
    • Video 5: cena em que a Twitter envia solicitações repetidas a si mesma
    • Video 6: cena em que as solicitações continuam ocorrendo no console de rede do Firefox

2 comentários

 
GN⁺ 2023-07-02
Comentários do Hacker News
  • Pela minha experiência pessoal bastante dolorosa, poucas coisas abalam tanto uma pessoa quanto ser forçada a executar algo que sabe claramente ser uma ideia terrível
    Isso é ainda pior quando você tentou comunicar esse fato à pessoa que está pressionando você a ir contra seu melhor julgamento e falhou, e pior ainda quando depois essa pessoa grita que nunca fez esse pedido, mesmo existindo prova por escrito
    Não sei se as pessoas que trabalham no Twitter alertaram que as medidas recentes poderiam causar efeitos colaterais tão grandes, mas, vendo como a liderança opera, isso não seria nada surpreendente
    Detesto muito o que o Twitter se tornou nos últimos meses e, mesmo antes da aquisição, já não gostava por causa do formato curto, que elimina nuances, e porque algumas poucas postagens fáceis de incorporar viram base de reportagens, mas sinto muita pena de quem precisa trabalhar sob esse tipo de gestão

    • As pessoas no Twitter que entendiam o sistema e conseguiam prever efeitos colaterais provavelmente já foram demitidas ou saíram
      Meu palpite é que Elon disse “o site está muito lento”, os engenheiros viram que as requisições do feed principal estavam lentas, mas não entendiam a estrutura, não tinham ferramentas de profiling e foram pressionados a corrigir isso em um prazo irrealista
      Então a única coisa que quase podiam fazer era disparar várias requisições em paralelo e torcer para que pelo menos uma fosse rápida
      Trabalhando na indústria de games, passei a entender por que jogos são lançados depois de consumir quantidades enormes de dinheiro e tempo e ainda assim saem com até funções básicas quebradas
      Esse tipo de pressão extrema de cronograma paradoxalmente cria um imenso lamaçal em que mudar uma coisa quebra dez, e no fim o progresso para
    • Fazendo o papel de advogado do diabo, os desenvolvedores de frontend também deveriam ser mais espertos
      Isso é tratamento básico de erros que já deveria existir há anos
      Seja 403 ou qualquer outra resposta que bloqueie tweets, isso jamais deveria provocar tentativas infinitas de novo em intervalos curtos
    • Quando me pediram para fazer algo realmente estúpido, uma vez disparei uma bomba de CC como seguro
    • Estou passando exatamente por esse tipo de situação no trabalho agora
      Criei uma ferramenta para gerenciar os tickets de vulnerabilidade da equipe, e o primeiro caso de uso foi apagar todos os tickets de vulnerabilidade, apesar da minha oposição
      Quem está executando isso se preocupa mais em deixar bonito no papel do que em melhorar a segurança de fato
    • Muito pior do que a onda de xingar em conjunto algo que todo mundo usa e com que se importa é a situação em que você sabe a solução, mas fica incapaz de agir por medo até de tentar
      Você sabe disso há muito tempo, sugeriu repetidamente, mas nem sequer tem permissão para tentar, e ainda é tratado como “aquela pessoa” e deixado de lado
      Já vivi isso com abordagens técnicas e de negócio que “o jeito de sempre” ainda consegue manter funcionando de algum modo, mas que vão matando a empresa aos poucos
      Dito isso, se um superior assume claramente a responsabilidade por algo que julgou arriscado, mas necessário, então há muito mais espaço para lidar bem com o problema quando algo dá errado, e o desenvolvedor precisa aguentar menos sarcasmo tardio
      Claro, é bem mais fácil xingar esse tipo de coisa
  • É preciso lembrar que isso aconteceu em um fim de semana de feriado
    Elon empurrou um grande release e basicamente fez os engenheiros irem trabalhar e repetir vários patches nas últimas 12 horas

    • A arrogância dele é tão grande que a palavra arrogância nem basta
      Estou preocupado com os programadores
      O mais impressionante é o quanto a engenharia do Twitter hoje parece baseada em remendos temporários
      Eles não gastam esforço cavando fundo no codebase e escolhem só a correção mais simples e curta, e aí surgem os problemas
    • Os engenheiros do Twitter tiveram mais de um ano para procurar outro emprego
      A esta altura, tanto as condições de trabalho quanto as expectativas do chefe estão muito claras
      Seja qual for o motivo para continuarem, é difícil sentir empatia por quem insiste em ficar
    • Pelo menos eles podiam fazer deploy direto em produção
  • É muito improvável que esse bug seja a causa
    Um limitador de taxa no lado do servidor tem custo baixo, e o bug no frontend só é acionado quando a limitação de taxa é ativada
    Já vi bugs parecidos em sistemas que administro, porque bibliotecas de rede gostam de repetir requisições por padrão sem limites adequados
    Mas essas tentativas nunca sobrecarregaram o limitador de taxa
    Se você atingir uma API que primeiro faz algum trabalho realmente caro e só depois retorna erro, isso fica um pouco mais incômodo, mas é por isso que colocamos limitação de taxa em todos os endpoints públicos
    O webapp provavelmente é a menor parte do tráfego do Twitter, e imagino que os apps nativos não tenham esse problema

    • Não acho que isso precise significar que um DDoS autoinduzido causou problemas técnicos a ponto de bloquear o acesso
      É possível que bloquear o acesso anônimo tenha causado o DDoS, isso tenha gerado um pico gigantesco em alguma métrica e, como resultado, Elon tenha concluído que houve aumento de scraping, então puniu os scrapers com o limite de 600 tweets por dia
      Parece que minha cota foi reiniciada ou a política mudou, porque consigo acessar o site de novo
    • Quando existe uma liderança conhecida por mentir sempre que acha que isso vai trazer ganho pessoal, o próprio conceito de verdade é destruído
      Concordo que é pouco provável que esse bug seja a causa fundamental de tudo
      Mas também não acredito na história que Musk está vendendo como motivo para basicamente fechar o site
      As duas coisas podem ser verdade, e isso faz a gente continuar pensando em outros motivos possíveis, o que é uma perda total de tempo, mas parece uma espécie de isca mental estranha
      O livro "Nothing is true and everything is possible" trata de como Putin usa desinformação para controlar o público e eliminar a política democrática, e parece se aplicar aqui também
      Os fãs do Musk vão repetir exatamente o que ele mandar, mas a maioria provavelmente sabe que isso é só conversa fiada em benefício próprio
      E quem tenta encontrar a causa raiz facilmente escapa para narrativas como este bug, que parecem corretas, mas não têm absolutamente nenhum dado de sustentação
      Se você quiser ver um possível caminho futuro dos EUA, recomendo fortemente este livro
      https://en.wikipedia.org/wiki/Nothing_Is_True_and_Everything...
    • Depende do tamanho do sistema como um todo
      Já vi e tentei mitigar casos degenerativos em que tentativas desse tipo sobrecarregaram tanto o backend que o servidor não conseguia nem acompanhar para recusar as requisições
      Por causa das tentativas repetidas em várias camadas dos chamadores a montante, a situação piorou tanto que as requisições basicamente expiravam nos buffers/filas TCP antes mesmo de serem processadas pela aplicação
      Não sei se o backend da homepage do Twitter tem escala parecida
  • Situação interessante
    Pelos screenshots, parece que está sendo gerado um volume enorme de GET /TweetDetail, e, como os 429 indicam, isso aparentemente aciona algum limite de taxa
    Se isso estiver ligado à decisão recente de exigir autenticação para todas as chamadas de API, o culpado pode muito bem ser o API gateway ou algum componente semelhante abaixo dele
    E esse comportamento também parece não parar, o que não é o esperado de tentativas com retry usando backoff exponencial
    Não estou dizendo que sou um engenheiro melhor do que as pessoas que trabalham no Twitter, mas, mesmo deixando de lado qualquer consideração sobre o Musk, é interessante ver esse tipo de fenômeno em produção

    • Em teoria, backoff exponencial é o ideal, mas não acho que ele seja usado com tanta frequência assim na prática
      Já vi muitas vezes preferirem um backoff aleatório fixo em vez de backoff exponencial, por julgarem importante demais atender as requisições dos usuários com baixa latência
      Já vi em várias reuniões de arquitetura e documentos a decisão explícita de não usar backoff exponencial, entendendo bem o trade-off entre sobrecarga e recuperação do sistema
    • Parece que o frontend foi escrito assumindo que o backend continuaria funcionando mesmo sem autenticação
      A mudança no backend, isto é, autenticação obrigatória + limite de taxa, pode ter sido implantada sem testar frontend e backend juntos de forma suficiente
    • Será que o Elon pagou a conta da AWS?
      Isso parece um culpado plausível
      Pode ser que instâncias do Twitter estejam sendo encerradas à força
  • A Platformer noticiou em 10 de junho que “o Twitter estava se recusando a pagar pelos serviços de nuvem do Google antes da renovação do contrato em 30 de junho”
    Também diz que “o contrato do Twitter com o Google Cloud vinha desde 2018”
    https://www.engadget.com/twitter-has-supposedly-started-payi...
    Ah, isso parece explicar toda essa bagunça

    • Segundo a matéria e reportagens da Bloomberg etc., o Twitter acabou se acertando com o Google e o problema foi resolvido
      Eles provavelmente estão tentando sair do GCP, mas não deve ter sido uma perda repentina de acesso ao GCP por se recusarem a pagar
    • https://www.reuters.com/technology/twitter-resumes-paying-go...
      Essa é uma matéria de uma semana atrás
    • O Twitter não usa o Google Cloud como principal serviço de backend
      É tudo hospedado pela própria empresa
      O Gcloud só dá suporte a jobs em lote e análise de dados
    • Os serviços centrais do Twitter ficam em datacenters on-premises
  • É uma teoria interessante, mas o DDoS veio antes da decisão de desativar o acesso anônimo
    Na verdade, essa decisão foi tomada para mitigar o DDoS em andamento[0][1]
    Portanto, uma lógica suspeita de retry no frontend web pode ter piorado a situação, mas não é a causa raiz
    [0] https://twitter.com/elonmusk/status/1674865731136020505
    “É uma medida temporária de emergência. Estávamos sofrendo um saque de dados tão severo que isso estava degradando a qualidade do serviço para usuários normais!”
    [1] https://twitter.com/elonmusk/status/1674942336583757825
    “Isso será removido em breve. Como dito no post anterior, níveis extremos de raspagem de dados exigiram uma ação drástica e imediata.”
    “Quase toda empresa que faz IA, desde startups até algumas das maiores empresas da Terra, estava raspando enormes quantidades de dados.”
    “É bastante irritante ter que colocar urgentemente uma grande quantidade de servidores no ar só para ajudar na avaliação ridícula de alguma startup de IA.”

    • Sinceramente, parece mais relacionado à decisão de basicamente fechar o acesso à API sem cobrar taxas absurdas do que a startups de IA e coisas do tipo
      Com certeza há por aí enormes arquivos com todos os tweets anteriores a uma determinada data que essas startups usam
    • Essa foi a alegação que o Elon Musk apresentou depois da reação negativa, então é bom encarar isso com bastante ceticismo
  • Alguém sabe se essas requisições já existiam antes da mudança para acesso somente com login?
    Seria muito engraçado se a enorme operação de scraping na verdade fosse um bug de JavaScript deles

    • Nas últimas semanas, vi o frontend martelando o backend com bastante frequência
      Não me surpreenderia nem um pouco se boa parte do “tráfego de scraping” fosse culpa do próprio Twitter
    • Parte do scraping aconteceu porque o Twitter destruiu a API e os bots migraram para scraping
      É um resultado idiota, mas previsível
    • Em certos fluxos, como a tela de perfil, ao apertar “voltar” no Firefox para Android havia claramente um loop infinito de redirecionamento
      Provavelmente isso disparava dezenas de requisições em poucos segundos antes de bater no limite de taxa
      Muitos bugs pequenos assim, somados, podem ter acabado parecendo algum DDoS ou scraping
  • Também pode não ser bug
    O Elon disse que limitou a 600 os tweets vistos por dia, o que é um limite insano
    A maioria das pessoas passaria disso em apenas 5 minutos de rolagem

    • Talvez seja hora de refletirmos sobre quanta informação inútil consumimos
    • 5 minutos talvez seja exagero
      Quando o Tweetbot mostrava mais de 500 itens no meu feed, eu lembro que isso já dava conteúdo idiota suficiente para ler durante alguns trajetos de bonde de 20 minutos
    • Como eu vinha vendo o frontend martelar o backend nas últimas semanas, suspeito que esse novo limite de taxa seja uma resposta a isso, mesmo que o Musk não admita isso publicamente
      Não duvido que o Twitter tenha visto um grande aumento recente de tráfego, mas tenho certa convicção de que boa parte disso foi problema criado por ele mesmo
  • O Elon só precisava ter deixado como estava, mas ah é, tinham 44 bilhões de dólares envolvidos
    Parag Agrawal e sua equipe sabiam exatamente o que estavam fazendo
    É literalmente o ditado de que um tolo e seu dinheiro logo se separam

    • Então ele jogou xadrez 5D com aquela cláusula venenosa?
    • Também existe uma teoria diferente sobre isso
      Depois que Elon foi obrigado pelo tribunal de Delaware a comprar o Twitter, ele teria ido até ditadores ricos, pegado 44 bilhões de dólares deles e prometido incendiar e destruir o Twitter em nome deles
      Sem o Twitter, não há Primavera Árabe, não há atualizações em tempo real sobre desastres, e nem é preciso cortar a internet para impedir que vozes dissidentes se espalhem
  • Não significa muita coisa, mas o limite de velocidade está sendo afrouxado de novo
    6k/600/300 → 8k/800/400 (por volta do meio-dia) → 10k/1k/500 (por volta das 15h)
    https://twitter.com/elonmusk/status/1675214274627530754 e com base nas próprias respostas dele

    • Não dá para ler
      Aparece “Something went wrong”
      Pelas novas regras só para usuários logados, acho que mesmo se o site estivesse no ar ainda não daria para ler
      Agora links do Twitter viraram links contaminados e, na prática, inúteis
    • Só toquei no link e já bati no limite de velocidade, que parece ter sido aumentado de novo
      É um circo completo
    • Voltou a ficar acessível, mas acho que bati no limite de velocidade de novo em 5~6 minutos sob esse novo limite