CDN transcoder load balancing

mrinner

Member
Расскажите, по какому принципу работает балансировка на транскодинг нодах.
Профили одинаковые на нодах.
 

Max

Administrator
Staff member
Добрый день
Сейчас работает так: если профили одинаковые у двух транскодеров в одной группе, то Edge заберет поток либо с того транскодера, где этот поток уже есть, либо с первого по списку в группе.
В данный момент мы работаем над реализацией полноценной балансировки нагрузки между транскодерами.
 

mrinner

Member
Может уже запланирована примерная дата релиза?
Я полагал что балансировка все же есть, хоть и не описано это явно в документации.
Для нас это блокер. Если балансировка появится не в ближайшую неделю, то нужно какой-то обходной вариант придумать. Можно как-то управлять позицией транскодера в списке? Либо к профилям добавлять префикс сервера и вручную разбрасывать стримы (написать демон, который мониторит нагрузку и на основе этого подбирать правильный профиль с префиксом)?
 
Last edited:

Max

Administrator
Staff member
Базовая балансировка готова. Сейчас на верификации. Выпустим на следующей неделе.
Устанавливается порог = L/T
L - load average
T - количество ядер с учетом гипертрединга
Например: cdn_node_cpu_average_threshold = 0.25 (Порог load average 6, ядер с гипертредингом: 24, физических ядер: 12)
Если нагрузка на ноде достигает этого порога, транскодер меняет свой статус в CDN на
GROUP_CONNECTIONS_ALLOWED - раздаю уже транскодированные потоки, новые не транскодирую.
Edge серверы видят этот статус и перестают обращаться к этому транскодеру с запросами на транскодирование, но могут тянуть с него уже протранскодированные стримы.
За новыми стримами обращаются к другим транскодерам в пуле.
Далее, когда нагрузка падает, статус возвращается в ACTIVE и нода начинает принимать запросы на транскодирование.
 

Max

Administrator
Staff member
Да, REST API будет показывать текущий статус нод в CDN.
По результатам отпишем в этой теме.
 

Max

Administrator
Staff member
Добрый день.
Мы выпустили сборку 5.2.88 с поддержкой балансировки нагрузки между Transcoder узлами. Подробнее в документации здесь. Пожалуйста, обновитесь и попробуйте.
 

mrinner

Member
Спасибо, обновились, тестируем.
Расскажите, изменилась ли логика выбора траскодера из списка доступных для новых стримов? Волнует возможная проблема, когда к примеру при рестарте 1го транскодера из 3, все стримы "свалятся" на какой-то 1 нод.
 

Max

Administrator
Staff member
Выше по ссылке в документации описана логика выбора транскодера
Нода в CDN имеет глобальные статусы ACTIVE или PASSIVE
Если вы перезагружаете транскодер, он будет PASSIVE для остальных.
Т.е. к нему перестанут обращаться за стримами.
В этом случае новые попытки получить транскодированные стримы будут распределяться между остальными транскодерами с учетом настройки cdn_node_load_average_threshold
Например
1. У вас было три транскодера T1, T2, T3
2. T1 вышел и нагрузка пошла на T2
3. На T2 был достигнут порог load average cdn_node_load_average_threshold=0.5 и T2 перешел в статус (GROUP_CONNECTION_ALLOWED - не принимаю запросы на создание новых сессий транскодинга, но уже транскодированные отдаю). Нагрузка по новым транскодинг сессиям пошла на T3.
4. T3 достиг порога load average и перешел в статус GROUP_CONNECTION_ALLOWED. Нагрузка пошла на Origin.

Таким образом, система будет работать до тех пор пока на T1, T2, T3, и т.д., существуют серверы у которых load average ниже установленного предела.
Если весь пул утилизировался, Tn перестают принимать новые запросы на транскодинг и нагрузка идет на Origin.
 

mrinner

Member
Логика балансировки по CPU понятна, но load average - рассчитывается за интервал времени (обычно 1 минута), т.е. менее чем за минуту на этот сервер может попасть больше потоков, чем он может потянуть, т.е. к примеру если у нас 3 нода, все они на 80% загружены, то после отказа одного нода, все его стримы уйдут на 1 из 2х оставшихся, и load average может не успеть обновиться, чтобы перестать принимать потоки, т.е. какой-то нод станет перегружен.
 

Max

Administrator
Staff member
Load average пересчитывается каждые 5 секунд и показывает среднюю высчитанную загрузку за последнюю минуту.
Поэтому если на серевре резко начнет расти нагрузка, Load average отреагирует уже через 5 секунд.
 
Top