Wpływ pętli sieciowej na nasze procesy MongoDB i sposób, w jaki zareagowaliśmy
Podczas pętli sieciowej, ponieważ nasze procesy MongoDB nie mogły normalnie się połączyć, każdy z nich oznaczył wszystkie powiązane z nim procesy jako offline. Oznacza to, że każdy proces mongoS oznaczył wszystkie powiązane z nim procesy mongoD jako offline, a każdy proces mongoD oznaczył powiązane elementy zestawu replik jako offline. Jednak nawet po przywróceniu łączności sieciowej z naszymi serwerami fizycznymi przez firmę Rackspace ani procesy mongoS, ani mongoD nie przywróciły wszystkich połączeń z innymi procesami, które zostały oznaczone jako offline.
W tym momencie, aby pomóc naszemu zespołowi administratora bazy danych Rackspace (DBA) w wysiłkach naprawczych, zespoły Braze DevOps rozpoczęły szybkie debugowanie i testowanie metod przywracania tej łączności. Nasze dochodzenie wykazało, że jedyną dostępną opcją było ponowne uruchomienie każdego z prawie 16 000 procesów mongoD i ponad 6000 mongoS w ich zwirtualizowanych kontenerach. Biorąc pod uwagę samą skalę tego przedsięwzięcia oraz fakt, że nie istniała automatyzacja umożliwiająca szybkie ponowne uruchomienie tak wielu kontenerów, inżynierowie firmy Rackspace napisali podczas incydentu nowy kod, aby stworzyć możliwość automatyzacji w locie.
Niestety, wraz z przyspieszeniem procesu ponownego uruchamiania, pojawił się kolejny problem w systemie systemu nazw domen (DNS). Gdy procesy mongoS i mongoD stają się online, żądają informacji od programów rozpoznawania nazw DNS w procesie znanym jako wyszukiwanie DNS. W związku z ciągłymi wyszukiwaniami DNS wynikającymi z szybkości ponownych uruchomień, serwery DNS znalazły się pod dużym obciążeniem, co doprowadziło do przekroczenia limitu czasu łączności w warstwach mongoS podczas ponownego łączenia się z procesami mongoD. Aby sprostać temu rosnącemu obciążeniu, nasz zespół Rackspace zwiększył pojemność procesora DNS, ale został następnie zmuszony do ponownego uruchomienia warstwy mongoS po raz drugi, aby utworzyć zdrowe połączenia między każdym mongoS a powiązanymi z nim procesami mongoD.
Około godziny 17:05 czasu UTC proces ponownego uruchomienia umożliwił niektórym klastrom powrót do trybu online. W miarę wzrostu wydajności bazy danych i stabilizacji klastrów Braze w dalszym ciągu zwiększał wydajność przetwarzania danych i wysyłania wiadomości; jednakże wysiłki te komplikowały ogromne zaległości wynikające z wcześniejszej niedostępności.
Biorąc pod uwagę skalę i stopień zaawansowania naszego środowiska baz danych Rackspace, które składa się z setek odrębnych baz danych, długość przerwy w działaniu i wynikającą z tego wielkość zaległości (reprezentujących miliardy wiadomości i miliardy przejętych punktów danych), proces odzyskiwania wymagany w - momentowa adaptacja naszych normalnych procesów zdrowienia. Było to konieczne, aby zapewnić równowagę zasobów bazy danych z bieżącymi potrzebami w zakresie przetwarzania, w tym wprowadzeniem ogromnej ogólnej mocy obliczeniowej.
Jednak robiąc to, Braze osiągnął limit AWS dotyczący liczby wirtualnych procesorów, które byliśmy w stanie udostępnić, uniemożliwiając nam dodanie jakiejkolwiek dodatkowej mocy obliczeniowej serwera. Zespół Braze szybko eskalował tę sytuację z naszym zespołem AWS i otrzymał podwyżkę, co pozwoliło naszym inżynierom zwiększyć moc obliczeniową naszego serwera do rekordowego poziomu, który był o ponad 50% wyższy niż nasza poprzednia maksymalna wydajność, która została osiągnięta na platformie Black Piątek 2023.
Do godziny 20:30 czasu UTC wszystkie nasze klastry w USA z wyjątkiem US 01, US 03 i US 08 zakończyły przetwarzanie swoich zaległości, a pozostałe klastry przetwarzały dane z szybkością maksymalną lub wyższą z dnia poprzedzającego incydent. W ciągu kilku godzin wszystkie klastry zostały przywrócone do przetwarzania w czasie rzeczywistym i ogłosiliśmy, że incydent został rozwiązany.