L'impatto del loop di rete sui nostri processi MongoDB e il modo in cui abbiamo risposto
Durante il loop di rete, poiché i nostri processi MongoDB non potevano connettersi normalmente, ognuno ha contrassegnato tutti i processi associati come offline. Cioè, ogni processo mongoS ha contrassegnato tutti i processi mongoD associati come offline e ogni processo mongoD ha contrassegnato i relativi membri del set di repliche come offline. Tuttavia, anche dopo che la connettività di rete è stata ripristinata sui nostri server fisici da Rackspace, né i processi mongoS né mongoD hanno ristabilito tutte le connessioni agli altri processi che erano stati contrassegnati offline.
A questo punto, al fine di assistere negli sforzi di riparazione del nostro team di amministratori di database (DBA) di Rackspace, i team di Braze DevOps hanno iniziato a eseguire rapidamente il debug e a testare metodi per ripristinare tale connettività. La nostra indagine ha stabilito che l'unica opzione disponibile era riavviare ciascuno dei quasi 16.000 processi mongoD e degli oltre 6.000 mongoS nei rispettivi contenitori virtualizzati. Considerata la portata di questa impresa e il fatto che non esisteva l’automazione per riavviare rapidamente così tanti container, gli ingegneri di Rackspace hanno scritto un nuovo codice durante l’incidente per creare funzionalità di automazione al volo.
Sfortunatamente, con l'accelerazione del processo di riavvio, si è verificato un altro problema nel sistema DNS (Domain Name System). Quando i processi mongoS e mongoD diventano online, richiedono informazioni dai risolutori DNS in un processo noto come ricerca DNS. Con le continue ricerche DNS guidate dalla velocità dei riavvii, i server DNS sono stati sottoposti a carichi pesanti, con conseguenti timeout della connettività sui livelli mongoS mentre si riconnettevano ai processi mongoD. Per far fronte a questo carico crescente, il nostro team Rackspace ha aumentato la capacità della CPU DNS, ma è stato poi costretto a riavviare il livello mongoS una seconda volta per creare connessioni integre da ciascun mongoS ai processi mongoD associati.
Intorno alle 17:05 UTC, il processo di riavvio ha consentito ad alcuni cluster di iniziare a tornare online. Con il recupero delle prestazioni del database e la stabilizzazione dei cluster, Braze ha continuato ad aumentare la capacità di elaborazione dei dati e di invio di messaggi; tuttavia, tale sforzo è stato complicato dall'enorme arretrato derivante da una precedente indisponibilità.
Date le dimensioni e la sofisticatezza del nostro ambiente database Rackspace, che consiste di centinaia di database distinti, la durata dell'interruzione e il volume risultante del nostro arretrato (che rappresenta miliardi di messaggi e miliardi di punti dati acquisiti), il processo di ripristino richiesto in -adattamento immediato dei nostri normali processi di recupero. Ciò era necessario per garantire che le risorse del database rimanessero in equilibrio con le richieste di elaborazione in corso, inclusa l’introduzione di un’enorme quantità di capacità di elaborazione complessiva.
Tuttavia, così facendo, Braze ha raggiunto un limite AWS sul numero di CPU virtuali che potevamo fornire, impedendoci di aggiungere ulteriore capacità del server. Il team Braze ha rapidamente intensificato questa circostanza con il nostro team AWS e ha ricevuto un aumento, consentendo ai nostri ingegneri di aumentare la capacità di elaborazione dei nostri server a un livello record, che era superiore di oltre il 50% rispetto alla nostra precedente capacità massima, che era stata raggiunta su Black Venerdì 2023.
Entro le 20:30 UTC, tutti i nostri cluster statunitensi tranne US 01, US 03 e US 08 avevano terminato l'elaborazione dei rispettivi arretrati e i cluster rimanenti stavano elaborando a velocità di picco o superiori rispetto al giorno prima dell'incidente. Nel giro di poche ore, tutti i cluster sono stati ripristinati per l'elaborazione in tempo reale e abbiamo dichiarato risolto l'incidente.