Перекос балансировки и ошибки health check LB imbalance, bad health checks
ID причины dc-lb-imbalance · Основной ответственный Команда инфраструктуры · Сетевая инфраструктура · Совместно Команда разработки · Разработка сервера
Соединения скапливаются на одном сервере, или балансировщик продолжает отправлять игроков на уже упавший сервер.
Почему Правило распределения не подходит, или health check (проверка работоспособности) не видит реального состояния → Следствие Перегружен только один сервер, или подключения идут на упавший сервер → На экране Только в части каналов или у части игроков слоумо, ошибка входа или бесконечная загрузка
Сразу после входа или техработ, При наплыве игроков
Ответственные
Основной ответственный Команда инфраструктуры · Сетевая инфраструктура · Совместно Команда разработки · Разработка сервера
Команда разработки: задачи
Реализовать health check, который отвечает на запрос балансировщика по реальному состоянию игры (идут ли тики, есть ли соединение с БД), и сообщать заодно нагрузку сервера.
Команда инфраструктуры: задачи
Перевести health check на проверку реального ответа игры, распределять по нагрузке серверов, отслеживать разницу в числе соединений между серверами.
На графике
Высоко только у некоторых · число соединений и загрузка CPU по серверам
Где смотреть
Наложить на один график число соединений (ss -s) и загрузку CPU каждого сервера за балансировщиком и сравнить статус health check целей на балансировщике (в AWS HealthyHostCount и UnHealthyHostCount в CloudWatch) с реальным состоянием игровых серверов
Подтверждает
У одного-двух серверов число соединений и CPU намного выше, чем у остальных, или сервер с остановившимися тиками числится «исправным» и продолжает принимать новые подключения
Опровергает
Если соединения распределены по серверам ровно, а тормозит только один канал, дело в нагрузке внутри этого канала («Перегрузка однопоточной локации (хотспот)»)
Load Balancing in the DatacenterGoogle При простом round robin загрузка CPU между задачами расходится до 2 раз, взвешенное распределение, при котором бэкенд передаёт свою нагрузку в ответах и health check, состояние lame duck, в котором бэкенд просит больше не присылать ему запросы
Health checks for Network Load Balancer target groupsAWS Health check по умолчанию раз в 30 с, после 2 неудач цель исключается, UDP-сервисы проверяются через TCP или HTTP health check, поэтому рекомендуется настроить проверку так, чтобы она отражала реальное состояние сервиса