HeadlinesBriefing favicon HeadlinesBriefing.com

Protección de Uber contra tormentas de reintentos

Hacker News •
×

Las tormentas de reintentos han impactado históricamente las operaciones comerciales y la confianza en la marca. Si bien el ajuste de la configuración de reintentos y los presupuestos de reintentos proporcionan una mitigación significativa a nivel de servicio, se configuran manualmente y carecen de visibilidad sobre la amplificación entre servicios causada por cadenas de dependencia profundas y patrones de abanico. Como resultado, puede ser difícil proteger la infraestructura contra el efecto dominó desencadenado por la falla de un solo servicio en lo profundo de la pila.

Una razón clave es que el comportamiento de reintento actual no tiene en cuenta el contexto. Si bien podemos controlar cuántos reintentos ocurren, no podemos controlar con precisión cuándo ocurren. Esto se debe al desafío de distinguir de manera confiable entre errores generados por un servicio y aquellos meramente propagados a través de él. Como resultado, los reintentos se aplican de manera uniforme en lugar de condicional. Este enfoque funciona para fallas transitorias o de baja tasa. Sin embargo, durante una degradación moderada o severa, se vuelve contraproducente.

Reintentar agresivamente contra un servicio que ya está luchando aumenta la carga, acelera la falla y amplifica el tráfico de reintentos en las dependencias ascendentes. Lo que comienza como una interrupción localizada puede escalar rápidamente a un incidente de toda la pila, lo que en última instancia degrada, o en el peor de los casos, rompe por completo la experiencia del usuario final.

Uno podría argumentar que los códigos de error de los servicios descendentes podrían traducirse ascendentes para proporcionar contexto para los reintentos. Si bien es teóricamente posible, este enfoque no escala en Uber debido a la gran entrada y salida, los flujos de llamadas en evolución y la necesidad de cambios adaptativos frecuentes. Por lo tanto, desarrollamos un mecanismo consciente del contexto en infraestructura compartida para manejar errores de manera más eficiente. Este blog explica el mecanismo.