L'impact de la boucle réseau sur nos processus MongoDB et comment nous y avons répondu
Pendant la boucle réseau, comme nos processus MongoDB ne pouvaient pas se connecter normalement, chacun a marqué tous ses processus associés comme hors ligne. Autrement dit, chaque processus mongoS a marqué tous ses processus mongoD associés comme étant hors ligne, et chaque processus mongoD a marqué ses membres du jeu de réplicas associés comme étant hors ligne. Cependant, même après la restauration de la connectivité réseau sur nos serveurs physiques par Rackspace, ni les processus mongoS ni mongoD n'ont rétabli toutes les connexions avec les autres processus marqués hors ligne.
À ce stade, afin de contribuer aux efforts de remédiation de notre équipe d'administrateur de base de données Rackspace (DBA), les équipes Braze DevOps ont commencé rapidement à déboguer et à tester des méthodes de restauration de cette connectivité. Notre enquête a déterminé que la seule option disponible était de redémarrer chacun des près de 16 000 processus mongoD et plus de 6 000 mongoS dans leurs conteneurs virtualisés. Compte tenu de l'ampleur de cette entreprise et du fait que l'automatisation n'existait pas pour redémarrer rapidement autant de conteneurs, les ingénieurs de Rackspace ont écrit un nouveau code lors de l'incident pour créer une capacité d'automatisation à la volée.
Malheureusement, à mesure que le processus de redémarrage s'accélérait, un autre problème est apparu dans le système DNS (Domain Name System). Lorsque les processus mongoS et mongoD sont mis en ligne, ils demandent des informations aux résolveurs DNS dans le cadre d'un processus appelé recherche DNS. Avec les recherches DNS continues entraînées par la vitesse des redémarrages, les serveurs DNS ont été soumis à une forte charge, entraînant des délais d'attente de connectivité sur les couches mongoS lors de leur reconnexion aux processus mongoD. Pour faire face à cette charge croissante, notre équipe Rackspace a augmenté la capacité du processeur DNS, mais a ensuite été obligée de redémarrer le niveau mongoS une seconde fois afin de créer des connexions saines de chaque mongoS vers leurs processus mongoD associés.
Vers 17h05 UTC, le processus de redémarrage a permis à certains clusters de commencer à se remettre en ligne. À mesure que les performances des bases de données se rétablissaient et que les clusters se stabilisaient, Braze a continué à augmenter la capacité de traitement des données et d'envoi de messages ; toutefois, cet effort a été compliqué par l'énorme retard résultant de l'indisponibilité préalable.
Compte tenu de l'ampleur et de la sophistication de notre environnement de base de données Rackspace, qui se compose de centaines de bases de données distinctes, de la durée de la panne et du volume de notre backlog qui en résulte (représentant des milliards de messages et des milliards de points de données ingérés), le processus de récupération requis dans -adaptation instantanée de nos processus normaux de récupération. Cela était nécessaire pour garantir que les ressources de la base de données restent en équilibre avec les demandes de traitement continues, y compris l'introduction d'une capacité de traitement globale massive.
Cependant, ce faisant, Braze a atteint une limite AWS concernant le nombre de processeurs virtuels que nous avons pu provisionner, nous empêchant d'ajouter toute capacité de serveur supplémentaire. L'équipe Braze a rapidement fait remonter cette situation à notre équipe AWS et a reçu une augmentation, permettant à nos ingénieurs d'augmenter la capacité de traitement de notre serveur à un niveau record, qui était de plus de 50 % supérieur à notre capacité maximale précédente, qui avait été atteinte sur Black. Vendredi 2023.
À 20h30 UTC, tous nos clusters américains, à l'exception de US 01, US 03 et US 08, avaient fini de traiter leurs arriérés, et les clusters restants traitaient à des taux égaux ou supérieurs à ceux de la veille de l'incident. En quelques heures, tous les clusters ont été rattrapés pour un traitement en temps réel et nous avons déclaré l'incident résolu.