Ошибки матчмейкинга и выбора региона Wrong region assignment (matchmaking / GeoDNS)
ID причины in-region-match · Основной ответственный Команда разработки · Разработка сервера · Совместно Команда разработки · Разработка клиента, Команда инфраструктуры · Сетевая инфраструктура, Внешние стороны · Внешние стороны
Если игрока отправили на сервер в дальнем регионе вместо ближнего, у него одного пинг всегда высокий, даже если с подключением всё в порядке.
Почему Ошибки в данных GeoIP, VPN, выбор сервера для всей группы по среднему пингу участников, правило расширения поиска на дальние регионы при нехватке игроков, выбор по местоположению DNS-резолвера → Следствие Подключение к серверу в регионе за океаном, хотя есть ближний регион → На экране В игре с серверами в нескольких регионах только у одного игрока (или одной группы) постоянно высокий пинг, задержка ввода, откидывание назад и съеденные умения
Основной ответственный Команда разработки · Разработка сервера · Совместно Команда разработки · Разработка клиента, Команда инфраструктуры · Сетевая инфраструктура, Внешние стороны · Внешние стороны
Команда разработки: задачи
Сервер: выбирать регион по пингу до каждого региона, измеренному клиентом, вместо GeoIP, ограничить пинг в правиле расширения на дальние регионы, для группы смотреть средний пинг вместе с самым высоким пингом участника, писать в лог выбранный регион и пинг на тот момент. Клиент: измерять пинг до каждого региона по UDP и отправлять его вместе с запросом на матчмейкинг, показывать на экране регион подключения и пинг, дать возможность выбрать регион вручную.
Команда инфраструктуры: задачи
Если регион выбирается через DNS, проверить, поддерживает ли авторитативный DNS EDNS Client Subnet (если резолвер игрока его не передаёт, выбор идёт по местоположению резолвера), регулярно обновлять базу GeoIP, добавлять к логам подключений серверов в каждом регионе страну и ASN по GeoIP и искать страны и провайдеров, которые попадают в дальний регион.
Внешние стороны: задачи
Посоветовать игроку выключить VPN или игровой ускоритель и переподключиться, игрокам с корпоративным или зарубежным DNS посоветовать перейти на DNS провайдера, запросить у поставщика GeoIP исправление неверного местоположения.
Цифры для ориентира
Если игрока из Сеула отправить вместо Токио в регион на западе США, пинг вырастает примерно с 30 ms до примерно 130 ms. GeoIP верно определяет страну примерно в 99,8% случаев, но с точностью до города даже в США в пределах 50 km попадает только около 66%, а с VPN вместо игрока определяется местоположение VPN-сервера.
На графике
Высоко только у некоторых · RTT (пинг) по игрокам, распределение по выбранным регионам
Где смотреть
Добавить к IP клиентов из журналов подключений серверов каждого региона (логи доступа балансировщика, VPC Flow Logs) страну и ASN по GeoIP и посчитать, к какому региону подключаются игроки из каждой страны и от каждого провайдера. Для одного игрока сравнить регион, к которому он реально подключён, с пингом до ближнего региона (измеряет игрок, или mtr до IP игрока с сервера в том регионе)
Подтверждает
Игроки и страны с высоким RTT подключены к дальнему региону вместо ближнего, а пинг до ближнего региона низкий
Опровергает
Если игрок правильно попал в ближний регион, а пинг всё равно высокий, причина в неоптимальной маршрутизации или в подключении и Wi-Fi игрока
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)
Подробнее
При выборе региона через DNS (DNS с маршрутизацией по географии или задержке) местоположение угадывается по адресу DNS-резолвера, которым пользуется игрок, вместо адреса самого игрока. Если резолвер не поддерживает EDNS Client Subnet (передачу части адреса пользователя), игроки с корпоративным или далёким DNS получают регион по месту резолвера. Система матчмейкинга тоже может оценивать группу по среднему пингу участников или после долгого ожидания расширять порог пинга и отправлять в дальний регион. В AWS GameLift Servers пинг группы по умолчанию тоже считается как среднее, а в качестве примера приводится настройка, которая расширяет лимит пинга с 50 ms до 100 ms и 200 ms. У игрока с включённым VPN дополнительная задержка от промежуточного сервера (причина «Трафик через VPN или игровой ускоритель») может накладываться на выбор дальнего региона. Различают их так: выключить VPN, переподключиться и посмотреть, сменился ли регион. Случай, когда ближнего региона нет вовсе и приходится подключаться к дальнему, разобран в причине «Задержка распространения (физическое расстояние)».
Источники
RFC 7871: Client Subnet in DNS QueriesIETF DNS, который отвечает по-разному в зависимости от местоположения, угадывает местоположение по адресу резолвера, отправившего запрос, и если пользователь работает через центральный резолвер далеко от себя, ответ получается неподходящим. EDNS Client Subnet (необязательное расширение) передаёт часть адреса пользователя
How Amazon Route 53 uses EDNS0 to estimate the location of a userAWS Если резолвер не поддерживает edns-client-subnet, местоположение пользователя угадывается по адресу резолвера, и ответ даётся по месту резолвера (общее для маршрутизации по географии и по задержке)
Geolocation accuracyMaxMind На уровне страны около 99,8%, на уровне города в США (в пределах 50 km) около 66%. С VPN определяется местоположение VPN-сервера вместо конечного пользователя, а IP мобильных сетей используются на большой территории, поэтому точное место не определить. Базу нужно постоянно обновлять, можно запросить исправление
FlexMatch rule typesAWS Правило задержки (maxLatency) смотрит задержку игрока до каждой локации, для группы по умолчанию берётся среднее по участникам (partyAggregation avg), очередь может разместить игру и в регионе, который не проходит правило задержки
Create a player latency policyAWS Игра размещается в локации с наименьшей средней задержкой для всех игроков, но игроки с экстремальной задержкой тоже попадают в игру. Пример политики, которая расширяет лимит пинга с 50 ms до 100 ms и 200 ms
Amazon GameLift Servers UDP ping beaconsAWS Игровой клиент измеряет задержку через UDP-эндпоинты в каждой локации хостинга и использует её для размещения и матчмейкинга. Это ближе к реальному игровому трафику, чем ICMP-пинг