Uber's Failover Architecture: Reconciling Reliability and Efficiency in Hyperscale Microservice Infrastructure

El documento presenta la Arquitectura de Failover de Uber (UFA), un sistema que optimiza la infraestructura de microservicios a escala global al reemplazar el modelo de capacidad 2x por una estrategia diferenciada según la criticidad del servicio, logrando reducir el aprovisionamiento de estado estable de 2x a 1.3x y eliminar más de un millón de núcleos de CPU sin comprometer la disponibilidad del 99,97%.

Mayank Bansal, Milind Chabbi, Kenneth Bogh, Srikanth Prodduturi, Kevin Xu, Amit Kumar, David Bell, Ranjib Dey, Yufei Ren, Sachin Sharma, Juan Marcano, Shriniket Kale, Subhav Pradhan, Ivan Beschastnikh, Miguel Covarrubias, Chien-Chih Liao, Sandeep Koushik Sheshadri, Wen Luo, Kai Song, Ashish Samant, Sahil Rihan, Nimish Sheth, Uday Kiran Medisetty

Publicado Tue, 10 Ma
📖 5 min de lectura🧠 Análisis profundo

Each language version is independently generated for its own context, not a direct translation.

Imagina que Uber es como una gigantesca flota de taxis que opera en todo el mundo, 24 horas al día. Para que esta flota nunca se detenga, incluso si un terremoto o un apagón apaga una ciudad entera (o una región de servidores), Uber tenía una regla de oro muy costosa: "Duplicar todo".

El Problema: El "Plan B" que nunca se usaba

Antes, Uber tenía dos ciudades gemelas (Región A y Región B). Si la Región A se caía, la Región B tenía que asumir todo el tráfico del mundo.

  • La analogía: Imagina que tienes dos restaurantes idénticos. Para estar seguro, el dueño contrata a todos los camareros y chefs para el restaurante A y a todos los mismos para el restaurante B.
  • El resultado: Cuando todo va bien, el restaurante B está medio vacío. La mitad de los empleados están parados, mirando sus teléfonos, esperando una emergencia que quizás nunca llegue.
  • El costo: Uber estaba gastando una fortuna en servidores (los "empleados") que estaban ociosos el 99.7% del tiempo. Solo se usaban unas 20 horas al año en total para una emergencia real.

La Solución: La Arquitectura de "Cambio de Marcha" (UFA)

Uber decidió cambiar esta regla de "duplicar todo" por algo más inteligente y flexible, llamado UFA (Uber Failover Architecture).

Imagina que en lugar de tener dos restaurantes idénticos, tienes un sistema de reservas dinámico:

  1. Clasificación de Servicios (Los "Platos"):
    Uber dividió sus servicios en dos grupos:

    • Los Críticos (El Menú Principal): Pedir un taxi, pagar una carrera. Si esto falla, la gente se queda sin transporte. Estos servicios tienen un "asiento garantizado" y nunca se tocan.
    • Los No Críticos (Los Postres o Publicidad): Ver el historial de viajes de hace un año, herramientas internas para empleados, pruebas. Si esto falla, es molesto, pero no es una catástrofe.
  2. El Truco de la "Silla Vacía" (Oversuscripción Inteligente):
    En lugar de dejar las sillas de la Región B vacías esperando una emergencia, Uber permite que los servicios "No Críticos" se sienten en esas sillas vacías mientras todo está tranquilo.

    • La analogía: Es como un autobús escolar. Normalmente viaja con 20 niños (servicios críticos) y 40 asientos vacíos. En lugar de dejar los asientos vacíos, deja que 30 niños de un club de ajedrez (servicios no críticos) se suban y se sienten en los asientos vacíos. El autobús viaja más lleno y eficiente.
  3. El "Botón de Pánico" (Durante la Emergencia):
    ¿Qué pasa si de repente el restaurante A se incendia y todos los clientes del mundo corren al restaurante B?

    • La acción: El sistema detecta el pánico. Inmediatamente, le pide a los "niños de ajedrez" (servicios no críticos) que se bajen del autobús o que dejen de comer sus postres.
    • La prioridad: Esos asientos se liberan al instante para que los "niños críticos" (los que piden taxis) tengan espacio y sigan viajando seguros.
    • La recuperación: Los servicios no críticos no se destruyen; simplemente se les dice: "Esperen afuera un momento". En menos de una hora, se les consigue otro autobús (servidores en la nube o en otros centros de datos) para que vuelvan a funcionar.

¿Cómo saben que es seguro? (Los "Guardianes")

El mayor miedo era: "¿Y si el servicio de 'Postres' se cae y arrastra consigo al servicio de 'Pedir Taxi'?" (Esto se llama dependencia insegura).

Para evitarlo, Uber creó un sistema de seguridad de tres capas:

  1. Análisis de Código (El Inspector): Revisa el código de los programas antes de que se instalen para asegurar que si un servicio no crítico falla, no tire abajo al crítico.
  2. Pruebas en Vivo (El Simulacro): Hacen ejercicios donde "apagan" los servicios no críticos en vivo para ver si los críticos siguen funcionando. Si un servicio crítico se cae porque le faltó un postre, se le dice a los desarrolladores: "¡Arregla esto antes de volver a subirte al autobús!".
  3. IA y Pruebas Automáticas: Usan robots inteligentes que simulan ser usuarios reales para asegurarse de que todo funciona bien incluso bajo presión.

Los Resultados: ¡Ahorro Masivo!

Gracias a este sistema:

  • Eficiencia: En lugar de tener el 20% de sus servidores trabajando y el 80% durmiendo, ahora trabajan al 30-50%. ¡Es como si hubieran "despertado" a un ejército de servidores ociosos!
  • Ahorro: Eliminaron un millón de núcleos de CPU (procesadores) de su flota. Es como si hubieran despedido a un millón de empleados que no hacían nada, ahorrando millones de dólares.
  • Seguridad: A pesar de usar menos recursos, la disponibilidad (que el servicio funcione) se mantiene en un 99.97%. Nadie notó la diferencia excepto la cuenta bancaria de la empresa.

En Resumen

Uber pasó de tener un seguro de vida excesivo (pagar por dos restaurantes completos todo el tiempo) a tener un sistema de gestión de crisis inteligente (usar el espacio libre para tareas menores y liberarlo rápido si hay un incendio).

No fue solo un cambio técnico, sino un cambio cultural: enseñaron a miles de equipos de ingeniería a pensar en "qué pasa si falla" y a construir sistemas que pueden "soltar peso" sin romperse, garantizando que el taxi siempre llegue a tiempo.