Звуки грустного тромбона теперь преследуют нас даже во сне. Каскадный сбой проявляется по-разному: процессы падают, пользователи переподключаются. А дежурный инженер часто узнаёт о происходящем одним из первых – когда на телефон начинают сыпаться уведомления мониторинга.
25 марта с 12:13 до 15:30 по тихоокеанскому летнему времени работа голосовой и видеосвязи в Discord была серьёзно нарушена. Большинство пользователей не могли начать звонок или подключиться к нему, а в статусе вызова отображалось сообщение «Ожидание конечной точки».
Во время планового изменения инфраструктуры из-за ошибки в конфигурации одновременно отключилась значительная часть серверов управления сессиями Discord. Сессии – это пульс инфраструктуры Discord реального времени: каждое подключённое устройство поддерживает собственную сессию, а сами сессии координируют почти всё, что пользователь видит и слышит в приложении. Одновременная потеря 17% сессий запустила цепную реакцию в нескольких нижестоящих системах. В итоге оказался перегружен сервис, который направляет голосовые и видеозвонки на нужные серверы по всему миру.
После инцидента мы подробно разобрали работу наших систем: выяснили, почему они начали деградировать под каскадной нагрузкой, вызванной сбоем сессий, и определили, как использовать полученный опыт для дальнейшего развития инфраструктуры. В распределённой системе резкий скачок нагрузки всегда опасен. Он пробивает старые узкие места и быстро находит новые.