한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Анатомия игровых лагов › L13 Архитектура и эксплуатация серверов

Расхождение часов между серверами Clock skew between servers

ID причины in-clock-skew · Основной ответственный Команда инфраструктуры · Серверная инфраструктура · Совместно Команда разработки · Разработка сервера

Открыть карточку в основной версии с иллюстрациями и экспериментами →

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

Почему На сервере с остановившейся синхронизацией времени часы расходятся с другими серверами на сотни ms или несколько секунд → Следствие Если передавать между серверами абсолютное время (например, момент окончания баффа), проверки расходятся → На экране После перехода пропадает бафф или кулдаун начинается заново

Симптомы
Съеденные действия / роллбэк
Факторы
Задержка
У кого
Только у меня
Когда
В движении и при смене локации
Ответственные
Основной ответственный Команда инфраструктуры · Серверная инфраструктура · Совместно Команда разработки · Разработка сервера
Команда разработки: задачи
Передавать между серверами оставшееся время вместо абсолютного.
Команда инфраструктуры: задачи
Следить за синхронизацией времени (NTP, chrony), настроить алерт на расхождение часов между серверами.
Цифры для ориентира
При нормальной синхронизации времени (NTP, chrony) серверы одного ЦОД обычно расходятся не больше чем на единицы ms. Если синхронизация остановилась или виртуальный сервер долго стоял и потом возобновил работу, расхождение доходит до сотен ms и нескольких секунд.
На графике
Плавный рост · смещение часов по серверам
Где смотреть
Собрать с каждого сервера значения System time (разница между системными часами и временем NTP), Last offset и Ref time (момент, когда последний раз учтено измерение источника времени) из chronyc tracking и сравнить
Подтверждает
Смещение проблемного сервера отличается от остальных на сотни ms и больше или Ref time давно не обновлялось, и расхождения проверок бывают только при переходах на этот сервер и с него
Опровергает
Если смещение на всех серверах в пределах единиц ms, причина в расчёте времени в игре или в ошибке синхронизации часов на клиенте
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)
Подробнее
Разовый скачок часов одного сервера вперёд или назад разобран в слое ОС сервера, в причине «Скачок системных часов (шаговая коррекция NTP)».

Источники

  1. RFC 5905: Network Time Protocol Version 4: Protocol and Algorithms Specification IETF
    NTP-клиент в быстрой локальной сети обычно держит точность в пределах сотен µs
  2. chrony – Frequently Asked Questions chrony
    Дрейф часов обычного компьютера меньше 100 ppm, у виртуальных машин может быть больше. После паузы и возобновления у виртуальной машины время сбивается, и может понадобиться шаговая коррекция
  3. clock_gettime(2) — Linux manual page Linux man-pages
    CLOCK_REALTIME может скачкообразно меняться при ручной установке и коррекции NTP, а CLOCK_MONOTONIC такие скачки не затрагивают
  4. chronyc(1) chrony
    System time (разница между временем NTP и системными часами), Last offset (смещение, оценённое при последней коррекции), Ref time (момент, когда учтено последнее измерение источника времени) из chronyc tracking

Смотрите также

Тот же слой: L13 Архитектура и эксплуатация серверов

Причины с тем же симптомом (Съеденные действия / роллбэк) на других слоях

Карточка в основной версии с иллюстрациями и экспериментами