14.9.2018

Снижение качества работы системы подбора игроков после выхода Operation Grim Sky

С 4 сентября 2018 года «Operation Grim Sky» стала доступна в основной версии игры. В обновлении были представлены изменения, благодаря которым процесс выбора сервера во время подбора игроков должен был стать более плавным. После запуска «Grim Sky» мы заметили, что по сравнению с фазой тестирования стало возникать больше ошибок в работе системы подбора. После ее запуска игроки, особенно из региона «Северная Америка», не могли присоединиться к играм.

Ниже мы приводим описание ситуации и шаги, предпринятые для ее разрешения.

Процесс подбора игроков

При выборе сетевой игры в любом режиме запускается 2-этапный процесс.

Сначала игра устанавливает связь со службами подбора игроков для поиска подходящей игры. Обычно этот этап — в зависимости от режима, ранга игрока и текущего количества пользователей — занимал от 10 до 60 секунд (качество работы системы в этой ситуации не изменилось).

Затем клиент пытается подключиться к игровому серверу. Именно на этом этапе и стали возникать неполадки.

При подключении к игровому серверу между клиентом и сервером происходит обмен UDP-сообщениями (UDP — протокол пользовательских датаграмм). Представить этот процесс можно примерно так:

[2018-09-14] MM degrad picture

Клиент определяет канал связи с сервером, делает паузу (~16 мс) и начинает отправлять на него сообщения (Hello).

Обнаружение неполадки

В процессе изучения неполадки мы обнаружили ошибку в установке связи со стороны сервера: если 4-е сообщение (Hello) достигало его раньше 3-го (Ack) за довольно короткий срок, связь обрывалась без возможности восстановления. В результате возникала ошибка 6-0x00001000 (время ожидания подключения истекло).

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

Дальнейшее снижение качества

В Operation Grim Sky исчезла пауза перед отправкой клиентом 3-го и 4-го сообщений: они пересылались друг за другом за короткий промежуток времени. В случае с большинством провайдеров это изменение ни на что не повлияло. Но в некоторых ситуациях период отправки был очень небольшим, порядок сообщений менялся, а ошибка гарантированно мешала игроку пользоваться системой. Причиной ее возникновения являлось низкое значение показателя задержки: в сущности, чем меньше была задержка, тем выше была вероятность воспроизведения неполадки.

Более того, если один из участников не мог присоединиться к игре, то и остальные члены команды лишались возможности подключиться к серверу (ошибка 2-0x0000D012). Благодаря вышеописанному изменению нам хотелось добиться целостности команд при подборе игроков, но вышло так, что ошибка распространялась на другие клиенты, связанные с системой подбора.

Обнаружив неполадку и установив причины ее возникновения, мы нашли решение для игрового сервера, благодаря которому в будущем она больше не будет возникать.

Процесс устранения

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

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

Следующие шаги

Главной помехой при определении причин возникновения неполадки стал тот факт, что она проявилась параллельно с запуском крупного обновления. У нас не было возможности восстановить предыдущую версию игры — пришлось бы отменять сезон.

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

Хотелось бы поблагодарить всех, кто не пожалел личного времени и предложил свою помощь в устранении ошибки, коснувшейся всего сообщества Rainbow Six. Вы лучшие!

Мы также продолжаем работу над исправлением неполадки, в результате которой на всех платформах игра периодически прекращает работу. Эти и другие изменения появятся игре в рамках обновления 3.1.

Посетите наши соцсети

twitter iconyoutube icontwitch icon