Entre las 16:30 PDT y las 18:40 PDT del 19 de junio de 2021, DoorDash experimentó un fallo en todo el sistema durante aproximadamente dos horas que cargó a los comerciantes con comidas sin entregar, hizo que Dasher's no pudiera aceptar nuevas entregas o registrarse para nuevos turnos, y dejó a los consumidores sin poder pedir comida o recibir sus pedidos realizados de manera oportuna a través de nuestra plataforma. La causa fue un fallo en cascada de múltiples componentes en la plataforma de DoorDash, que puso una carga extrema en nuestra infraestructura interna de pagos, causando finalmente su fallo. El análisis actual no muestra ningún indicio principal antes de que el incidente se desencadenara a las 16:30 PDT, y la mitigación tardó mucho más que el estándar al que aspiramos como equipo de ingeniería.
Somos plenamente conscientes de nuestra responsabilidad como motor de comercio cuyo principal objetivo es hacer crecer y potenciar las economías locales. Como equipo de ingeniería, creemos firmemente que la fiabilidad es nuestra característica número uno, y en este caso hemos fallado, simple y llanamente. Se reembolsará a los clientes los pedidos cancelados como consecuencia de esta interrupción. También se abonarán a los comerciantes los pedidos cancelados durante este periodo. Además, se compensará a los usuarios de Dasher por los pedidos que no hayan podido completar y se eliminarán de su historial las valoraciones con menos de cinco estrellas durante la interrupción. Los interesados en conocer las causas técnicas y las iniciativas de mitigación y prevención que hemos emprendido desde el incidente pueden seguir leyendo.
El impacto de la interrupción
Desde las 16:30 PDT hasta las 18:36 PDT, la mayoría de los Dashers no pudieron aceptar nuevas entregas o registrarse para sus turnos, lo que degradó significativamente las capacidades de cumplimiento de entrega de DoorDash. Como resultado, a las 17:19 PDT DoorDash tomó medidas para detener los nuevos pedidos de nuestros clientes y a las 17:22 PDT implementó la misma acción para los socios de Drive de DoorDash. Tras encontrar y solucionar la causa del incidente, DoorDash volvió a habilitar la capacidad de realización de pedidos de los socios de Drive a las 18:22 y volvió a habilitar la capacidad completa de realización de pedidos para los clientes de DoorDash entre las 18:32 PDT y las 18:39 PDT.
Cronología
Todas las horas PDT del 19/06/2021
- 16:30 Comienza a aumentar la latencia de algunas API de pagos internos.
- 16:30 Empieza a aumentar la memoria y la CPU para los despliegues internos relacionados con los pagos.
- 16:30 Los servicios relacionados con Dasher comienzan a mostrar un aumento de latencia y la aplicación Dasher comienza a presentar errores a los Dashers que les impiden aceptar nuevos pedidos y registrarse para nuevos turnos.
- 16:35 Se disparan las alertas de todo el sistema y se llama a los técnicos.
- 16:40 Los sistemas de pago se reducen en un 50% en un intento de aliviar la presión de la CPU y la memoria.
- 16:59 Se reinician los sistemas de pago, pero no se consigue una recuperación sostenida.
- 17:01 Los fallos en cascada quintuplican el volumen de llamadas en los pagos.
- 17:19 DoorDash detiene todos los nuevos pedidos de consumidores.
- 17:22 DoorDash Drive se ha desactivado para los socios comerciales.
- 18:12 El equipo de ingeniería fue capaz de identificar el origen del aumento del tráfico en los sistemas Dasher, que a su vez estaba ejerciendo presión sobre nuestros servicios de pago.
- 18:12 Todo el tráfico a los sistemas Dasher se detuvo en la capa de red para permitir que los sistemas se recuperen.
- 18:20 Se volvió a habilitar todo el tráfico hacia los sistemas Dasher en la capa de red, pero volvieron a surgir problemas.
- 18:22 DoorDash Drive se ha vuelto a habilitar.
- 18:25 Se desplegó una configuración en los sistemas Dasher para evitar las llamadas de pago descendentes, lo que alivió los fallos en cascada.
- 18:26 Todo el tráfico a los sistemas Dasher se detuvo en la capa de red por segunda vez para permitir que los sistemas se recuperen.
- 18:28 Se ha vuelto a habilitar todo el tráfico a los sistemas Dasher en la capa de red.
- 18:29 Dasher y la salud del sistema de pago sostenido.
- 18:32 Los pedidos de los consumidores vuelven a estar disponibles en un 25%.
- 18:37 Los pedidos de los consumidores vuelven a estar disponibles en un 50%.
- 18:38 Los pedidos de los consumidores se vuelven a activar al 100%.
Análisis de las causas
A partir de las 16:30 PDT del 19/6/2021, la infraestructura de pagos comenzó a mostrar una alta latencia al obtener los datos requeridos por la aplicación Dasher y sus sistemas de apoyo. Mientras los equipos diagnosticaban esta alta latencia y los fallos resultantes, los intentos de reintento de los sistemas Dasher agravaron el problema, ya que el tráfico adicional causado por estos reintentos sobrecargó la infraestructura de pago, que ya estaba en mal estado. Esto provocó que los Dashers no pudieran completar los pedidos, causando malas experiencias a todos los consumidores, Dashers y comerciantes. Aunque hemos definido y documentado las mejores prácticas para la interacción entre componentes que nos ayudarían a mitigar estos escenarios, los componentes involucrados en este incidente (pagos y Dasher) no tenían estos patrones implementados.
Una de las causas del problema es la falta de técnicas de programación defensivas, como el desdoblamiento de carga y la ruptura de circuitos, diseñadas para proteger los sistemas distribuidos como el nuestro de fallos catastróficos como el que estábamos experimentando. En este caso, el servidor (infraestructura de pagos) carecía de la implementación de load shedding, que habría evitado que se colapsara debido a un elevado volumen de peticiones como resultado de latencias más altas. El cliente (aplicación y sistemas Dasher) carecía de la implementación de interrupción de circuito, que debería haberse activado para evitar temporalmente su invocación de una dependencia descendente no saludable.
El equipo de ingeniería de DoorDash ha pasado todas las horas desde la conclusión del incidente implementando acciones correctivas y prácticas de codificación defensivas mientras investiga activamente los orígenes del desencadenante original de la infraestructura de pagos.
Medidas correctoras de DoorDash
El primer cambio introdujo un mecanismo de eliminación de carga en la infraestructura de pagos que desencadenó el incidente. Este mecanismo, implementado con éxito en la producción el 20/6/2021 a las 07:36 PDT, dotó a la infraestructura de pagos de la capacidad de eliminar de forma ordenada el volumen de solicitudes entrantes que superasen los umbrales de capacidad operativa.
El segundo cambio introdujo mecanismos de ruptura de circuitos en la infraestructura Dasher y en el manual de funcionamiento. Este mecanismo permite a la infraestructura Dasher eludir su dependencia de la infraestructura de pagos en caso de inestabilidad del servicio. Con estos cambios, confiamos en que nuestra infraestructura Dasher pueda soportar una inestabilidad descendente similar con un impacto mínimo o nulo en todo el sistema.
La tercera acción es una auditoría exhaustiva de las interfaces y API de la infraestructura de pagos para garantizar que existe documentación suficiente y que el gráfico de llamadas ascendente se entiende bien y es totalmente diagnosticable.
Creemos que estos cambios inmediatos ayudarán a evitar que ocurran sucesos similares y nos comprometemos a aprovechar este momento para completar una auditoría exhaustiva de nuestros sistemas que garantice que las mejores prácticas y los conocimientos operativos están bien distribuidos y aplicados. Con el tiempo, esperamos recuperar la confianza de quienes hemos perdido y, como siempre, aspiraremos a ser un 1% mejores cada día.