El impacto del bucle de red en nuestros procesos MongoDB y cómo respondimos
Durante el bucle de red, debido a que nuestros procesos MongoDB no podían conectarse normalmente, cada uno marcó todos sus procesos asociados como fuera de línea. Es decir, cada proceso mongoS marcó todos sus procesos mongoD asociados como fuera de línea, y cada proceso mongoD marcó sus miembros del conjunto de réplicas relacionados como fuera de línea. Sin embargo, incluso después de que Rackspace restableciera la conectividad de red en nuestros servidores físicos, ni los procesos mongoS ni mongoD restablecieron todas las conexiones con los otros procesos que habían sido marcados como desconectados.
En este punto, para ayudar en los esfuerzos de remediación de nuestro equipo de administrador de bases de datos (DBA) de Rackspace, los equipos de Braze DevOps comenzaron a depurar y probar rápidamente métodos para restaurar esa conectividad. Nuestra investigación determinó que la única opción disponible era reiniciar cada uno de los casi 16.000 procesos mongoD y más de 6.000 mongoS en sus contenedores virtualizados. Dada la magnitud de esta empresa y el hecho de que no existía la automatización para reiniciar tantos contenedores rápidamente, los ingenieros de Rackspace escribieron un nuevo código durante el incidente para crear una capacidad de automatización sobre la marcha.
Desafortunadamente, a medida que se aceleraba el proceso de reinicio, surgió otro problema en el sistema de nombres de dominio (DNS). A medida que los procesos mongoS y mongoD se conectan, solicitan información de los solucionadores de DNS en un proceso que se conoce como búsqueda de DNS. Con las búsquedas continuas de DNS impulsadas por la velocidad de los reinicios, los servidores DNS sufrieron una gran carga, lo que provocó tiempos de espera de conectividad en las capas de mongoS cuando se reconectaban a los procesos de mongoD. Para adaptarse a esta carga creciente, nuestro equipo de Rackspace aumentó la capacidad de la CPU de DNS, pero luego se vio obligado a reiniciar el nivel mongoS por segunda vez para crear conexiones saludables desde cada mongoS a sus procesos mongoD asociados.
Alrededor de las 17:05 UTC, el proceso de reinicio permitió que algunos clústeres comenzaran a volver a estar en línea. A medida que el rendimiento de la base de datos se recuperó y los clústeres se estabilizaron, Braze continuó aumentando la capacidad de procesamiento de datos y envío de mensajes; sin embargo, ese esfuerzo se vio complicado por el enorme retraso resultante de la falta de disponibilidad previa.
Dada la escala y la sofisticación de nuestro entorno de base de datos Rackspace, que consta de cientos de bases de datos distintas, la duración de la interrupción y el volumen resultante de nuestro trabajo pendiente (que representa miles de millones de mensajes y miles de millones de puntos de datos ingeridos), el proceso de recuperación requerido en -adaptación al momento de nuestros procesos normales de recuperación. Esto era necesario para garantizar que los recursos de la base de datos permanecieran en equilibrio con las demandas de procesamiento en curso, incluida la introducción de una cantidad masiva de capacidad de procesamiento general.
Sin embargo, al hacerlo, Braze alcanzó un límite de AWS en la cantidad de CPU virtuales que pudimos aprovisionar, lo que nos impidió agregar capacidad de servidor adicional. El equipo de Braze rápidamente intensificó esta circunstancia con nuestro equipo de AWS y recibió un aumento, lo que permitió a nuestros ingenieros aumentar la capacidad de procesamiento de nuestro servidor a un nivel récord, que era más de un 50 % mayor que nuestra capacidad máxima anterior, que se había alcanzado en Black. Viernes 2023.
A las 20:30 UTC, todos nuestros clusters de EE. UU., excepto US 01, US 03 y US 08, habían terminado de procesar sus retrasos, y los clusters restantes estaban procesando a velocidades máximas o superiores al día anterior al incidente. En unas pocas horas, todos los clústeres volvieron a procesarse en tiempo real y declaramos que el incidente se resolvió.