«Они не появляются в логах. У них нет токена. Но они все еще шлют сообщения…»
Глава 1. Началось все с необъяснимой активности
Это случилось два года назад. Поздней ночью один из наших инженеров заметил странное поведение системы — на продакшн-сервере NextBox продолжали поступать сообщения от пользователей, чьи сессии считались завершёнными уже больше недели. Сессии считались закрытыми, а токены протухшими. Но соединения по WebSocket оставались живыми и продолжали обмениваться данными, как если бы пользователь по-прежнему работал в приложении..
“Сначала мы подумали, что это баг в логах,” — вспоминает разработчик.
“А потом поняли — это не баг. Это они.”
Глава 2. Мертвые души
Так мы открыли для себя феномен зомби-сессий. Пользовательских сессий, которые формально завершились, но продолжают жить за счет ошибки в логике завершения соединения. Причина оказалась изощренно проста:
Снаружи все выглядело спокойно. Внутри были десятки «живых мертвецов» в списке активных соединений.
Глава 3. Когда сеть оживает сама
Сначала это не вызывало проблем. Но через пару дней в логах появилась аномалия: старые соединения, которые давно должны были завершиться, всё ещё оставались активными. Эти зомби-сессии продолжали жить своей жизнью — создавали дубли событий, мешали синхронизации и засоряли логи.
“Это было как цифровой Хэллоуин —
старые сессии возвращались из прошлого и ломали настоящее.”
Каждый новый пуш данных шел из ниоткуда. И чем дольше они жили, тем больше мусора приносили.
Глава 4. Как мы их уничтожили
Чтобы остановить этот кошмар, мы переписали логику управления жизненным циклом соединений. Теперь каждый WebSocket в NextBox:
Глава 5. Урок, который мы запомнили
Эта история стала нашим внутренним мемом. Теперь, когда кто-то говорит «почему оно не умерло?», все знают, о чем речь.
Монстры не всегда приходят из фильмов — иногда они живут в стеке WebSocket и не знают, что их уже удалили.
Послесловие от команды NextBox
Мы верим, что надежные системы строятся не только на коде, но и на наблюдательности.Зомби-сессии научили нас уважать мелочи, таймауты, обработку ошибок. И если когда-нибудь вы увидите в логах активность от сессии, которой давно не должно существовать, то просто выключите свет, сделайте кофе… и проверьте WebSocket.