- Mientras el feed de inicio de Twitter estuvo caído durante gran parte de esa mañana, se observó una situación en la que el cliente web seguía repitiendo solicitudes de contenido y parecía provocarse un DDoS a sí mismo
- Incluso en una pantalla que no cargaba, los reintentos no se detenían; en el primer video aparecían un error de rate limited y una barra de desplazamiento temblorosa
- En el segundo video se confirma que, en el proceso de intentar obtener contenido que no llegaba, Twitter se enviaba a sí mismo aproximadamente 10 solicitudes por segundo
- Se señala como posible causa que la reciente restricción de lectura para usuarios no logueados pudo haber creado condiciones inesperadas
- En la consola de red de Firefox de un video posterior también se veían solicitudes que seguían llegando en cascada, lo que se interpretó como una situación de auto-DDoS en la que el navegador del usuario repetía solicitudes a Twitter
Solicitudes repetidas observadas en el cliente web de Twitter
- El feed de inicio de Twitter estuvo caído durante gran parte de esa mañana y, aunque no se cargaba nada, el sitio web no dejaba de reintentar solicitudes
- El primer video muestra un mensaje de error que indica que el usuario está en estado rate limited y una escena con la barra de desplazamiento de la derecha temblando
- El segundo video muestra por qué temblaba la barra de desplazamiento: Twitter intentaba obtener contenido enviándose a sí mismo aproximadamente 10 solicitudes por segundo
- Como trasfondo de que el contenido no llegara, se señala el cambio que impidió a los usuarios no logueados leer Twitter
Verificación posterior y material adjunto
- Una publicación posterior muestra adicionalmente, mediante la consola de red de Firefox, que las solicitudes de red seguían ocurriendo
- Se añadió la interpretación de que el código desplegado provocó una condición de carrera (race condition) y, como resultado, los usuarios terminaron ejecutando solicitudes con características de DDoS contra Twitter
- El autor de la publicación indicó que al principio cerró la conexión, pero que después Twitter mantuvo durante un tiempo la situación en la que seguía induciendo solicitudes
- Material adjunto:
2 comentarios
Twitter cambia temporalmente a un modo de velocidad limitada
Comentarios en Hacker News
Desde una experiencia personal muy dolorosa, pocas cosas sacuden tanto a una persona como que la obliguen a ejecutar algo que claramente sabe que es una idea terrible
Más aún cuando intentaste explicarle ese hecho a la persona que te presiona para ir en contra de tu mejor criterio y fracasaste, y peor todavía si después esa persona grita que nunca hizo esa petición aunque haya pruebas por escrito
No sé si la gente que hoy trabaja en Twitter advirtió que las medidas recientes podían causar efectos secundarios tan grandes, pero viendo cómo opera el liderazgo no sorprendería en absoluto
He odiado mucho en lo que se ha convertido Twitter en los últimos meses, y ni antes de la compra me gustaba por cómo el formato corto elimina los matices y unos pocos tuits fáciles de incrustar terminan siendo la base de artículos, pero de verdad da pena la gente que tiene que trabajar bajo esa directiva
Si tuviera que adivinar, Elon dijo que “el sitio está demasiado lento”, los ingenieros vieron que las solicitudes del feed principal eran lentas, pero no entendían la estructura, no tenían herramientas de profiling, y los presionaron para arreglarlo con plazos irreales
Así que probablemente lo único que podían hacer era lanzar múltiples solicitudes en paralelo y esperar que alguna saliera rápido
Habiendo trabajado en la industria de los videojuegos, entendí por qué salen juegos que, después de gastar cantidades enormes de tiempo y dinero, ni siquiera tienen bien resueltas las funciones básicas
Este tipo de presión extrema de calendario termina creando, paradójicamente, un enorme lodazal donde cambias una cosa y se rompen diez, y al final el progreso se detiene
Esto es manejo básico de errores que debió estar implementado desde hace años
Un 403 o cualquier otra respuesta que bloquee tuits jamás debería disparar reintentos infinitos en intervalos cortos
Hice una herramienta para gestionar los tickets de vulnerabilidades del equipo, y el primer caso de uso fue borrar todos los tickets de vulnerabilidades, pese a mi oposición
A quien lo ejecuta le importa más que en el papel se vea bien que mejorar realmente la seguridad
Es cuando lo sabes desde hace mucho, lo has propuesto repetidamente, ni siquiera te permiten intentarlo y, peor aún, te apartan y te tratan como “ese tipo”
Lo he vivido con enfoques técnicos y de negocio que “la manera de siempre” todavía logra sostener de algún modo, pero que van matando lentamente a la empresa
Dicho eso, si un superior asume con claridad la responsabilidad por algo que considera riesgoso pero necesario, incluso cuando surgen problemas hay mucho más margen para responder bien y el desarrollador tiene que aguantar menos sarcasmo a toro pasado
Claro, igual es más fácil ponerse a criticar
Hay que ver que esto pasó en fin de semana feriado
Elon empujó un gran lanzamiento y básicamente hizo que los ingenieros fueran a trabajar y se pasaran las últimas 12 horas aplicando parche tras parche
Me preocupan los programadores
Lo aún más sorprendente es lo improvisada que se ve hoy la ingeniería de Twitter
Se meten en problemas porque, en vez de invertir esfuerzo en entender a fondo la base de código, eligen siempre el arreglo más simple y más corto
A estas alturas, tanto las condiciones de empleo como las expectativas del jefe son completamente claras
Cuesta sentir mucha empatía por quienes siguen ahí, sea por la razón que sea
Es muy poco probable que este bug haya sido la causa
El rate limiter del lado del servidor tiene un costo pequeño, y el bug del frontend solo se activa cuando el rate limit ya está en funcionamiento
En sistemas que administro también he visto bugs parecidos, porque a las librerías de red les encanta reintentar solicitudes por defecto sin límites razonables
Pero esos reintentos nunca pusieron en aprietos al rate limiter
Si golpeas una API que hace algo realmente costoso antes de devolver el error, sí se vuelve un poco más molesto, pero por eso todos los endpoints públicos tienen rate limit
La web app probablemente sea la porción más pequeña del tráfico de Twitter, y supongo que la app nativa no tiene este problema
Puede que bloquear el acceso anónimo haya provocado un DDoS, que eso generara un pico gigantesco en alguna métrica y que, como resultado, Elon concluyera que había más scraping y luego castigara a los scrapers con el límite de 600 tuits por día
Parece que mi cuota ya se reinició o cambió la política, porque puedo volver a entrar al sitio
Coincido en que es poco probable que este bug sea la causa raíz de todo
Pero tampoco me creo la historia que Musk vende como motivo para prácticamente cerrar el sitio
Puede que ambas cosas sean ciertas, y uno sigue pensando en otras posibles razones, lo cual es una pérdida total de tiempo, pero se siente como una especie de carnada mental extraña
El libro "Nothing is true and everything is possible" trata sobre cómo Putin usa la desinformación para controlar al público y eliminar la política democrática, y se siente aplicable también aquí
Los fans de Musk repetirán exactamente lo que él les diga que repitan, pero la mayoría sabrá que solo es palabrería interesada
Y quien intenta encontrar la causa raíz termina desviándose fácilmente hacia narrativas como este bug, que suenan correctas pero no tienen absolutamente ningún dato que las respalde
Si quieres ver una posible trayectoria futura de Estados Unidos, recomiendo mucho este libro
https://en.wikipedia.org/wiki/Nothing_Is_True_and_Everything...
Yo mismo he visto e intentado mitigar casos degenerados donde este tipo de reintentos saturaba tanto el backend que el servidor ya ni siquiera podía rechazar solicitudes a tiempo
Por los reintentos en varias capas de llamadores aguas arriba, la situación se volvió tan mala que las solicitudes básicamente expiraban en los buffers/colas de TCP antes siquiera de ser procesadas por la aplicación
No sé si el backend de la página principal de Twitter tenga una escala parecida
Es una situación interesante.
Si ves la captura, se genera una cantidad enorme de
GET /TweetDetail, y como aparece un 429, parece estar activando algún límite de velocidad.Si esto se debe a la decisión reciente de exigir autenticación para todas las llamadas a la API, el culpable en realidad podría ser el API gateway o algún componente similar por debajo.
Además, este comportamiento no parece detenerse, lo cual no es lo que se esperaría de reintentos con backoff exponencial.
No digo que yo sea mejor ingeniero que la gente que trabaja en Twitter, pero incluso dejando de lado todo lo relacionado con Musk, es interesante ver algo así en producción.
He visto demasiados casos donde se considera tan importante responder a las solicitudes del usuario con baja latencia que se prefiere un backoff aleatorio constante en lugar de backoff exponencial.
He visto en varias reuniones de diseño y documentos que se toma explícitamente la decisión de no usar backoff exponencial, entendiendo el compromiso entre sobrecarga y recuperación del sistema.
Es posible que un cambio en el backend, es decir, autenticación obligatoria + rate limiting, se haya desplegado sin probar suficientemente juntos el frontend y el backend.
Eso parece un culpable bastante plausible.
También podría ser que las instancias de Twitter estén siendo apagadas a la fuerza.
Platformer reportó el 10 de junio que “Twitter se estaba negando a pagar los costos de los servicios en la nube de Google antes de la fecha de renovación del contrato del 30 de junio”.
También decía que “el contrato de Twitter con Google Cloud existía desde 2018”.
https://www.engadget.com/twitter-has-supposedly-started-payi...
Ah, esto parece explicar todo este desastre.
Probablemente estén tratando de salirse de GCP, pero no parece que esto haya pasado porque de pronto perdieran acceso a GCP por negarse a pagar.
Este artículo es de hace una semana.
Todo está self-hosted.
Gcloud solo soporta trabajos por lotes y análisis de datos.
Es una teoría interesante, pero el DDoS empezó antes de la decisión de desactivar el acceso anónimo.
De hecho, esa decisión se tomó para mitigar un DDoS que ya estaba en curso[0][1].
Así que una lógica sospechosa de reintentos en el frontend web pudo haber empeorado la situación, pero no sería la causa raíz.
[0] https://twitter.com/elonmusk/status/1674865731136020505
“Es una medida temporal de emergencia. El saqueo de datos fue tan intenso que estaba degradando la calidad del servicio para los usuarios normales”.
[1] https://twitter.com/elonmusk/status/1674942336583757825
“Se levantará pronto. Como en la publicación anterior, niveles extremos de scraping de datos hicieron necesarias medidas drásticas e inmediatas”.
“Casi todas las empresas que hacen IA, desde startups hasta algunas de las compañías más grandes del planeta, estaban haciendo scraping de enormes cantidades de datos”.
“Es bastante irritante tener que poner de emergencia una enorme cantidad de servidores solo para ayudar con la absurda valuación de alguna startup de IA”.
Seguro que por ahí andan circulando enormes archivos con todos los tuits anteriores a cierta fecha que esas startups usan.
¿Alguien sabe si ya existían solicitudes así antes del cambio a solo con login?
Sería realmente gracioso si esa enorme operación de scraping en realidad fuera un bug de su JavaScript.
No me sorprendería en absoluto que gran parte del “tráfico de scraping” fuera culpa de Twitter mismo.
Es un resultado obvio, aunque estúpido.
Antes de que entrara el rate limit, seguramente se iban decenas de solicitudes en unos pocos segundos.
Muchos bugs pequeños como ese, juntos, pudieron haber parecido algún DDoS o scraping.
No parece imposible que no sea un bug.
Elon dijo que limitó a 600 los tuits vistos por día, lo cual es una locura.
La mayoría de la gente seguramente supera eso con solo 5 minutos de scroll.
Recuerdo que cuando Tweetbot mostraba más de 500 elementos en mi feed, alcanzaba de sobra para leer tonterías durante varios trayectos de 20 minutos en tranvía.
No dudo que Twitter haya visto un enorme aumento reciente en el tráfico, pero estoy bastante convencido de que gran parte de eso fue un problema que Twitter se creó solo.
Elon simplemente tenía que dejarlo en paz, pero claro, estaban los 44 mil millones de dólares
Parag Agrawal y su equipo sabían exactamente lo que estaban haciendo
Es literalmente el dicho de que un tonto y su dinero pronto se separan
Después de que un tribunal de Delaware obligó a Elon a comprar Twitter, fue con dictadores adinerados, recibió 44 mil millones de dólares y dijo que incendiaría Twitter por ellos
Sin Twitter no hay Primavera Árabe, no hay actualizaciones en tiempo real durante desastres, y ya no hace falta cortar internet para impedir que se difundan voces disidentes
No significa mucho, pero el límite de velocidad se está relajando otra vez
6k/600/300 → 8k/800/400 (cerca del mediodía) → 10k/1k/500 (cerca de las 3 p. m.)
https://twitter.com/elonmusk/status/1675214274627530754 y según sus propias respuestas
Sale “Something went wrong”
Bajo las nuevas reglas de solo iniciar sesión, aunque el sitio estuviera vivo, igual no se habría podido leer
Ahora los enlaces de Twitter se volvieron enlaces contaminados, así que en la práctica ya no sirven
Es un circo total