Заметки про игры

Истории из командного центра Pax Dei: Путаница с DNS

Команда Pax Dei поделилась закулисными подробностями о том, как они справились с проблемами входа в игру из-за ошибки в DNS. Узнайте, как они вернули игроков в игру и победили технические трудности.

После нескольких дней без крупных проблем большинство команды почувствовали облегчение и начали наслаждаться началом новой недели. Однако технические проблемы тоже знают о понедельниках, и небольшая ошибка может создать огромные проблемы. Это наша третья история из командного центра, и мы называем её «Путаница с DNS» — да, название немного спойлерит, но, как сказали бы некоторые, «это всегда DNS».

В 19:45 по московскому времени некоторые игроки начали сталкиваться с проблемами при входе в игру. Их внезапно выбросило из системы, и они не могли снова войти. Поскольку затронутые игроки были разбросаны по различным регионам, шардам и зонам, наши системы мониторинга зафиксировали лишь незначительное снижение активности пользователей и не подняли тревогу. Однако, следя за активным сообществом в нашем дискорде, один из членов команды Mainframe заметил тревожную тенденцию и быстро решил поднять тревогу и активировать командный центр.

К 20:00 по московскому времени мы начали диагностику. Проблема была связана с логинами, и она затрагивала значительную (и растущую) часть нашей игровой базы. Хотя у нас всё ещё было много активных игроков, кривая активности застыла или начала падать — именно в тот момент, когда она должна была расти.

Первоначальное расследование с помощью мониторинга, метрик, графиков и оповещений указывало на несколько возможных причин. Один из наших центральных сервисов, отвечающий за логины, испытывал повышенную нагрузку на процессор, и логи нашей основной системы аутентификации были заполнены ошибками. Кроме того, мы заметили проблемы с системой обработки прав (определяющей, кто владеет игрой и какого типа лицензия у него есть) и решили следить за этим, сосредоточив внимание на наиболее вероятных виновниках.

К 20:20 по московскому времени мы решили перезапустить систему аутентификации, которая казалась источником проблемы. Оглядываясь назад, это было ошибкой. С уже существующими проблемами при логине и постоянными попытками игроков войти в систему, перезапуск усугубил проблему. Нам пришлось временно закрыть все запросы на аутентификацию, чтобы стабилизировать систему, а поскольку игре нужно регулярно обновлять токены аутентификации, это означало, что со временем все игроки не смогли продолжить игру.

Когда наша система аутентификации восстановилась, мы решили снова разрешить все запросы к системе. Поскольку теперь все наши игроки пытались войти одновременно, проблема с системой прав, замеченная ранее, стала явно очевидной. Система была перегружена и полностью вышла из строя, что означало, что даже те пользователи, которые смогли подключиться, оказались без права на игру. В этот момент мы поняли, что нам нужно сражаться на двух фронтах одновременно. Проблема с системой прав не могла ждать, пока будет устранена коренная причина отключений. К счастью, мы были на грани решения этой проблемы.

Так что же вызвало эту бомбардировку, спросите вы? К сожалению, это была самопроизвольная рана. Во время диагностики мы обнаружили, что некоторые DNS-имена не разрешаются правильно. Один из инженеров на вызове выявил проблему — отсутствующая запись DNS, а именно критическая запись делегирования NS. Другой инженер сразу понял, что произошло.

Ранее в тот день в ходе очистки было удалено ненужное инфраструктурное оборудование, и эта важная запись была ошибочно удалена. Последние команды в очистке были выполнены около 19:40, и, как оказалось, стандартное время жизни (TTL) для многих DNS-записей составляет ровно 5 минут. После нескольких ручных шагов запись была восстановлена, и нам пришлось терпеливо ждать, пока DNS-кэши по всему миру обновятся.

Коренная причина, однако, является лишь начальным моментом, и с дежурным персоналом в нашем командном центре, оценивающим ситуацию, и несколькими старшими инженерами, готовыми к действиям, нам всё ещё нужно было решить проблему с сервисом прав. Мы решили бороться с этой проблемой с двух сторон одновременно:

  • Эскалация и поддержка. Мы связались и передали проблему по цепочке поддержки поставщика, отвечающего за наше хранилище прав. Они подтвердили, что система перегружена, и пообещали вскоре развернуть решение. Часы начали тикать в 20:40 по московскому времени.
  • Путь исправления на лету. Мы изменили наш код системы прав, включив резервный метод, благоприятствующий нашим игрокам. Если у нас возникли проблемы с разрешением прав, но игрок ранее владел определённой лицензией, мы предположим, что он всё ещё владеет ею, и позволим ему пройти. У нас уже был аналогичный код, обрабатывающий случай ограничения скорости. Добавление случая с аналогичным результатом для неотзывчивого сервиса прав было простой задачей, и исправление на лету было рассмотрено, скомпилировано, собрано и развернуто в течение 10 минут.

Теперь у нас было три участника в одной гонке: наше исправление, позволяющее игрокам войти в игру, пока сервис страдал, сам сервис прав, стабилизирующийся с уменьшением числа запросов и внедрением исправлений, и глобальное обновление DNS-кэшей, признающих восстановленную запись.

К 21:35 по московскому времени ситуация значительно улучшилась. Наши игроки успешно входили в игру, система прав догоняла, распространение DNS подходило к завершению, и команда смогла обернуть сложную ситуацию в свою пользу.

Путаница с DNS была разрешёна, и мы были готовы к следующему вызову на горизонте.

Дальше