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

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

Деплой и перезапуск Deploy / rolling restart

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

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

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

Почему Серверы по очереди перезапускаются при деплое хотфикса → Следствие Сервер останавливается без переноса соединений на другой, и сохранения всех игроков с этого сервера разом идут в БД → На экране Дисконнект без предупреждения, лавина переподключений

Симптомы
Дисконнект, Ошибка входа / бесконечная загрузка, Задержка ввода
Факторы
Остановка
У кого
Весь сервер, Одна локация или канал
Когда
Изредка, случайно, Сразу после входа или техработ
Ответственные
Основной ответственный Команда разработки · Разработка сервера · Совместно Команда инфраструктуры · Серверная инфраструктура
Команда разработки: задачи
Сделать drain (закрыть только новые подключения и ждать, пока уйдут текущие игроки), переносить персонажей на другой сервер, растягивать сохранения перед остановкой, после перезапуска объявлять готовность только после загрузки кэша и прогрева JIT, при горячей перезагрузке заранее читать данные в отдельном потоке и подменять их разом между тиками.
Команда инфраструктуры: задачи
Настроить деплой так, чтобы серверы перезапускались по одному после drain, а перезапущенный сервер получал трафик только после подтверждения готовности (прогрев завершён), заранее объявлять время деплоя.
Цифры для ориентира
Если на одном сервере 5 000 игроков, за несколько секунд до остановки в БД приходят 5 000 сохранений.
На графике
Массовый обрыв соединений · число подключений по серверам, число записей в БД
Где смотреть
Наложить журнал деплой-инструмента (время перезапуска каждого сервера) вертикальными линиями (аннотациями) на графики числа подключений, обрывов, записей в БД и запросов на вход
Подтверждает
Число подключений на серверах по очереди резко падает в моменты перезапуска, прямо перед этим подскакивают записи в БД, сразу после него запросы на вход
Опровергает
Если время обрывов не совпадает с журналом деплоя и перезапусков, причина в падении сервера или в сетевом оборудовании
Чем проверить
Инструменты инфраструктуры (игровой код не нужен)
Подробнее
Первые несколько минут после запуска сервер тоже работает медленно. Кэш пуст, и запросы к БД идут лавиной, а серверы на Java и C# ещё не закончили оптимизацию кода во время выполнения (прогрев JIT), поэтому та же работа занимает больше времени. Перечитывание скриптов и таблиц данных без остановки сервера (горячая перезагрузка) тоже останавливает тик на время чтения и даёт короткий фриз.

Источники

  1. Site Reliability Engineering, Chapter 20: Load Balancing in the Datacenter Google
    Получив SIGTERM, сервер переходит в состояние lame duck: отправляет новые запросы на другие серверы и только завершает текущие. В первые минуты после перезапуска JIT-оптимизация ещё не выполнена и ресурсов уходит больше, поэтому трафик дают только после прогрева
  2. Liveness, Readiness, and Startup Probes Kubernetes
    Проверка готовности (readiness) не пускает трафик, пока не установлены соединения, не загружены файлы и не прогрет кэш
  3. Edit target group attributes for your Network Load Balancer AWS
    После снятия целевого сервера с регистрации новые соединения на него не отправляются, а существующим даётся время завершиться (drain, по умолчанию 300 с)

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

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

Причины с тем же симптомом (Дисконнект) на других слоях

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