🔁 Main Branch: El de los reintentos que empeoraron todo - Issue #37
Hola mi gente linda,
El outage de GitHub del 17 de agosto duró 7 horas y 47 minutos. La causa raíz explica unas tres.
La mayoría de la cobertura se queda con la configuración incorrecta de Istio. El análisis de causa raíz la rastrea hasta un sidecar pod que llegó a sus límites de concurrencia y no pudo hacer autoscaling, porque la política de escalado observaba el servicio host y no los límites del sidecar. Cuatro nodos de HAProxy agotaron sus límites de flujo y se llevaron con ellos el path de autenticación del gateway.
A las 16:36 UTC, GitHub pausó HAProxy en los nodos afectados y recuperó de inmediato gran parte del servicio. Ahí debió terminar todo. Copilot Token Service no se recuperó por completo hasta las 21:02, casi cinco horas después, porque un bug latente de reintentos en VS Code convirtió cada solicitud de token fallida en una pila de solicitudes adicionales. El tráfico pasó de 7 a 9K RPS a 70 a 100K RPS.
El equipo de infraestructura arregló su parte en unas tres horas. Un loop de reintentos del lado del cliente alargó el outage otras cinco.
Cuando millones de instancias de VS Code golpean el mismo endpoint sin hacer backoff, tú te conviertes en el DDoS. Los propios usuarios de GitHub le hicieron un retry storm mientras intentaban usar su producto.
El post de Vlad pone la presión en contexto: los commits mensuales crecieron de 1.400 millones a 2.900 millones desde abril. El trabajo de seguimiento incluye límites de reintentos consistentes, retry budgets y timeouts variables en las interacciones entre servicios. Bien. Esos guardrails ya hacían falta.
🚢 Lo que salió
Revocación y desautorización de credenciales por tipo de token
Los kill switches eran todo o nada. Oprimías el botón durante un incidente y desaparecían todas las credenciales de un usuario, incluidas las que todavía eran confiables. Ahora los enterprise owners, org admins y cualquier persona con el permiso Manage enterprise credentials pueden revocar un solo tipo de credencial: personal access tokens, SSH keys, tokens de OAuth apps o GitHub App user access tokens. Puedes borrar todos los PAT de una cuenta EMU comprometida sin tocar sus SSH keys. Todas las acciones masivas a nivel de enterprise ahora también están disponibles a nivel de organización, en la UI y en las REST APIs. Cada acción queda en el audit log y dispara un email para la persona afectada.
Mejores herramientas para gestionar usuarios bloqueados
Una lista larga de usuarios bloqueados era difícil de leer de verdad. Esta actualización permite buscar por username, nombre completo o email; ordenar y paginar los resultados; y filtrar por el motivo del bloqueo. Puedes adjuntar notas privadas para conservar el contexto, y los bloqueos de organizaciones ahora muestran quién los aplicó y cuándo vencen. El campo de búsqueda está separado del campo para bloquear, así dejas de bloquear por accidente a alguien que solo querías buscar. Está disponible para cuentas personales y organizaciones en Settings > Moderation > Blocked users.
📖 Lo que estoy leyendo
Autoscaling predictivo para Node.js en Kubernetes, de Ivan Tymoshenko, Luca Maraschi y Matteo Collina
El autoscaling de Kubernetes tiene un problema de timing. HPA espera a que la CPU cruce un umbral, y la CPU puede verse bien mientras el event loop está saturado y las solicitudes se acumulan. KEDA agrega mejores triggers, pero conserva el mismo loop reactivo, así que todavía detecta la sobrecarga después de que comienza. El paper pronostica la carga de todo el cluster para el momento en que los pods nuevos estarán listos de verdad y escala antes de llegar ahí. El agregado importa porque agregar pods redistribuye las métricas por instancia, y un scaler que observa un solo pod termina persiguiendo sus propios cambios. El resultado del benchmark es contundente: 26 ms de latencia mediana frente a 154 ms con KEDA y 522 ms con HPA durante una subida sostenida. Es un resultado de investigación, no un controller listo para instalar, pero el enfoque es correcto. El autoscaling reactivo siempre llega tarde por diseño.
Vale tu tiempo si corres Node.js en Kubernetes y tu p99 no coincide con tus gráficas de CPU.
🔧 Lo que estoy usando
Llevo un tiempo haciendo experimentos controlados para medir si AGENTS.md cambia de verdad lo que hacen los coding agents, en vez de asumir que ayuda.
Dos condiciones, la misma tarea y el mismo commit inicial. El baseline no tiene instrucciones del repo. El treatment recibe un AGENTS.md candidato. Después comparas los diffs.
El hallazgo hasta ahora: las tareas simples suelen ser neutrales. Las tareas de guardrails, las que compilan bien pero se rompen en runtime, muestran la señal más clara.
Open source, MIT y sin dependencias. Incluye un demo con fixtures de cinco minutos.
github.com/AndreaGriffiths11/agents-md-benchmark-plugin
✨ Esta semana
Me estoy preparando para viajar a Lima por DevOps Days. Si vas a estar por allá, ven a buscarme.
Con gratitud, nos vemos la próxima semana.
Andrea
📌 P.D. Voy a estar en WeAreDevelopers World Congress North America, del 23 al 25 de septiembre en San José. Si lo que te frena es conseguir una entrada, respóndeme y cuéntame.
El equipo de GitHub Accesscats está haciendo una encuesta sobre necesidades de accesibilidad en gh.io/access-needs. Toma unos cinco minutos.
💛 Si Main Branch te sirve, suscríbete o patrocíname en GitHub.
Subscribe to Main Branch
Join developers shipping real features. Every issue is a three-minute read packed with fundamentals you can apply today.
No spam. Unsubscribe anytime.