С 4 сентября 2018 года «Operation Grim Sky» стала доступна в основной версии игры. В обновлении были представлены изменения, благодаря которым процесс выбора сервера во время подбора игроков должен был стать более плавным. После запуска «Grim Sky» мы заметили, что по сравнению с фазой тестирования стало возникать больше ошибок в работе системы подбора. После ее запуска игроки, особенно из региона «Северная Америка», не могли присоединиться к играм.
Ниже мы приводим описание ситуации и шаги, предпринятые для ее разрешения.
Процесс подбора игроков
При выборе сетевой игры в любом режиме запускается 2-этапный процесс.
Сначала игра устанавливает связь со службами подбора игроков для поиска подходящей игры. Обычно этот этап — в зависимости от режима, ранга игрока и текущего количества пользователей — занимал от 10 до 60 секунд (качество работы системы в этой ситуации не изменилось).
Затем клиент пытается подключиться к игровому серверу. Именно на этом этапе и стали возникать неполадки.
При подключении к игровому серверу между клиентом и сервером происходит обмен UDP-сообщениями (UDP — протокол пользовательских датаграмм). Представить этот процесс можно примерно так:
Клиент определяет канал связи с сервером, делает паузу (~16 мс) и начинает отправлять на него сообщения (Hello).
Обнаружение неполадки
В процессе изучения неполадки мы обнаружили ошибку в установке связи со стороны сервера: если 4-е сообщение (Hello) достигало его раньше 3-го (Ack) за довольно короткий срок, связь обрывалась без возможности восстановления. В результате возникала ошибка 6-0x00001000 (время ожидания подключения истекло).
В большинстве случаев порядок сообщений при отправке сохраняется и при их получении. Изменение порядка и, соответственно, возникновение неполадок — редкая ситуация. Стоит уточнить, что подобное может происходить и на стороне игрока: например, при неправильно настроенном брандмауэре, усложняющем процесс воспроизведения ошибки. Смысл в том, что небольшое количество неполадок возникает всегда и не является чем-то неожиданным. В то же время возникновение большого числа ошибок — явное отклонение от нормы. Основной причиной, по которой нам не удалось отследить неполадку в рамках фазы тестирования, стал малый размер собственно тестового сервера.
Дальнейшее снижение качества
В Operation Grim Sky исчезла пауза перед отправкой клиентом 3-го и 4-го сообщений: они пересылались друг за другом за короткий промежуток времени. В случае с большинством провайдеров это изменение ни на что не повлияло. Но в некоторых ситуациях период отправки был очень небольшим, порядок сообщений менялся, а ошибка гарантированно мешала игроку пользоваться системой. Причиной ее возникновения являлось низкое значение показателя задержки: в сущности, чем меньше была задержка, тем выше была вероятность воспроизведения неполадки.
Более того, если один из участников не мог присоединиться к игре, то и остальные члены команды лишались возможности подключиться к серверу (ошибка 2-0x0000D012). Благодаря вышеописанному изменению нам хотелось добиться целостности команд при подборе игроков, но вышло так, что ошибка распространялась на другие клиенты, связанные с системой подбора.
Обнаружив неполадку и установив причины ее возникновения, мы нашли решение для игрового сервера, благодаря которому в будущем она больше не будет возникать.
Процесс устранения
В первые несколько дней мы пытались максимально точно воспроизвести все события, приводившие к возникновению неполадки. К сожалению, наша работа не увенчалась успехом. Какими бы ни были показатель задержки, стабильность сигнала и объем потерянных пакетов, нам не удавалось обнаружить корень проблемы. Трата времени и ресурсов на исправление того, что не является причиной неполадки, не принесла бы пользы ни нам, ни игрокам.
К счастью, с нами связались представители сообщества и предложили свою помощь. Вместе с несколькими игроками, которые сталкивались с ошибкой довольно часто и были готовы к плотному сотрудничеству, нам удалось добиться значительного прогресса. Ко второй сессии отладки мы были уверены, что нашли изначальную причину и можем начать поиск решения. К вечеру субботы появилась финальная версия исправления, а в понедельник — после итоговой сессии при участии игроков — стало ясно, что неполадка устранена и можно внести изменение в основную версию игры. Внедрение назначили на следующий же день — вторник.
Следующие шаги
Главной помехой при определении причин возникновения неполадки стал тот факт, что она проявилась параллельно с запуском крупного обновления. У нас не было возможности восстановить предыдущую версию игры — пришлось бы отменять сезон.
В будущем мы улучшим процесс запуска обновлений, чтобы новые элементы — в частности, сезонные, — внедрялись в игру отдельно от незначительных изменений, не касающихся игрового процесса напрямую. В таком случае при возникновении аналогичных неполадок у нас будет возможность провести откат к предыдущей версии.
Хотелось бы поблагодарить всех, кто не пожалел личного времени и предложил свою помощь в устранении ошибки, коснувшейся всего сообщества Rainbow Six. Вы лучшие!
Мы также продолжаем работу над исправлением неполадки, в результате которой на всех платформах игра периодически прекращает работу. Эти и другие изменения появятся игре в рамках обновления 3.1.