Знакомая ситуация: игроки пишут, что всё лагает, блоки возвращаются на место, удары не проходят, а вы смотрите на сервер - TPS ровно 20, процессор свободен, памяти хватает. Сервер работает идеально, но играть невозможно. Это сетевые лаги: проблема не в том, как быстро сервер считает мир, а в том, как быстро данные доходят до игроков и обратно. Разберёмся, откуда они берутся и что с ними можно сделать.
Чем сетевой лаг отличается от серверного
Серверный лаг - это когда сервер не успевает обработать тик. Тогда тормозит всё у всех игроков одновременно: мобы замирают, растения не растут, TPS падает.
Сетевой лаг - когда сервер работает нормально, но данные между ним и игроком идут долго или теряются. Тогда у одних игроков всё хорошо, а у других - нет. Игрок ломает блок, а он появляется обратно. Бьёт моба, но удар засчитывается с задержкой. Телепортируется на несколько блоков назад при движении.
Первый шаг диагностики - понять, у всех ли проблема. Если лагает у всех и TPS падает - ищите проблему на сервере. Если TPS в порядке, а жалуется часть игроков - скорее всего, проблема в сети.
Пинг и расстояние
Пинг - это время, за которое данные доходят от игрока до сервера и обратно. Он зависит прежде всего от расстояния и от того, как проложены маршруты между провайдерами. Если сервер стоит в Германии, а большинство игроков из Сибири, пинг будет заметно выше, чем у игроков из Москвы или Европы.
Поэтому выбор расположения дата-центра - одно из самых важных решений. Смотрите, откуда ваши игроки: если большинство из европейской части России, хорошо подходят Москва и соседние европейские локации. Если аудитория разбросана по всей стране, выбирайте место с хорошей связью с разными регионами и проверяйте пинг до него из разных городов заранее.
Маршруты провайдеров
Иногда пинг высокий даже при небольшом расстоянии. Причина в маршрутах: данные от игрока к серверу могут идти не напрямую, а через соседнюю страну, если провайдер игрока и провайдер дата-центра плохо связаны между собой. Игрок из соседнего города может иметь пинг выше, чем игрок из другой страны.
Повлиять на маршруты чужих провайдеров вы не можете, но можете выбирать хостинг с хорошей связностью. Перед переездом полезно попросить у хостинга тестовый адрес и попросить игроков из разных регионов проверить до него пинг.
Потери пакетов
Кроме пинга, есть потери пакетов: часть данных просто не доходит, и её приходится отправлять заново. Даже небольшой процент потерь заметнее для игры, чем стабильно высокий пинг. Игрок с пингом 80 и без потерь играет комфортнее, чем игрок с пингом 40 и потерей нескольких процентов пакетов.
Потери чаще всего возникают на стороне игрока: плохой Wi-Fi, перегруженный домашний интернет, мобильная сеть. Но если потери у многих игроков одновременно, проблема может быть в канале хостинга или в защите от атак, которая слишком агрессивно фильтрует трафик.
Что делает прокси
Прокси вроде Velocity добавляет промежуточное звено между игроком и игровым сервером. Если прокси и игровые серверы стоят в одном дата-центре, задержка от этого почти не растёт. Но если прокси в одной стране, а игровой сервер - в другой, каждый пакет проходит лишний путь, и пинг заметно увеличивается.
Поэтому держите прокси и игровые серверы рядом, в одной сети. Если вы используете внешнюю защиту от атак, которая работает как прокси, выбирайте точку присутствия ближе к основной аудитории.
Что можно настроить на сервере
Некоторые настройки сервера влияют на объём сетевого трафика. Слишком большая дальность прорисовки отправляет игрокам больше чанков - это нагрузка на канал, особенно у игроков с медленным интернетом. Порог сжатия сетевых пакетов в настройках сервера и прокси влияет на баланс между нагрузкой на процессор и объёмом трафика.
Важно, чтобы сжатие было настроено в одном месте. Если прокси и игровой сервер оба сжимают пакеты, процессор тратится зря. Обычно сжатие оставляют на прокси, а на игровых серверах за ним отключают.
Как понять, кто виноват
Попросите игрока, который жалуется, проверить пинг до сервера и сделать трассировку маршрута. Если задержка растёт на первых участках - проблема в его домашней сети или провайдере. Если в середине пути - в маршрутах между провайдерами. Если в самом конце - в дата-центре или на вашем сервере.
Полезно и сравнивать жалобы: если все жалующиеся из одного региона или у одного провайдера, проблема в маршруте до них. Если жалобы со всех сторон одновременно - смотрите на свой канал и хостинг.
Пример
Сервер переехал на дешёвый хостинг в другой стране, и игроки начали жаловаться на «откаты» блоков, хотя TPS был идеальным. Опрос показал, что жалуются в основном игроки двух крупных провайдеров. Трассировка показала, что их трафик шёл через третью страну. Владелец попросил тестовые адреса у нескольких хостингов, игроки проверили пинг, и сервер переехал в дата-центр, до которого маршруты были прямыми. Жалобы на лаги прекратились без единого изменения в плагинах.
Хорошая привычка - раз в несколько месяцев спрашивать игроков из разных регионов, какой у них пинг, и сравнивать с прошлыми ответами: так ухудшение маршрутов видно раньше, чем начинаются массовые жалобы.
Наш взгляд
Не все лаги лечатся оптимизацией сервера. Если TPS в порядке, а игроки жалуются, смотрите на сеть: расположение дата-центра, маршруты провайдеров, потери пакетов и размещение прокси. Выбор хостинга с проверкой пинга из разных регионов решает больше, чем любые настройки.
Из каких регионов ваши игроки и где стоит ваш сервер?



