Задать вопрос

Как реализовать распределение трафика по процентам (Traffic Distribution System) для больших нагрузок?

Нужно реализовать распределение трафика: При переходе на example.com должен происходить редирект на лендинги:

Проценты могут изменять (хранятся в redis).

Сам алгоритм разбиения не сложен: считаем каждый переход на example.com и раскидываем по нужным лендингам до приближения необходимых процентых соотношений.

Проблемы возникают при тесте данного алгоритма через Apache Bench с установкой конкурентых запросов (ab -n 100 -c 10 www.example.com).

Смотрел готовые решения TDS - у них аналогичная проблема - нет чёткого распределния по процентам если слать конкурентные запросы.
  • Вопрос задан
  • 420 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@lega
В nginx можно сделать upstream на несколько узлов и задать веса.
После изменения весов можно просто делать reload конфига.
Ответ написан
alsopub
@alsopub
Если проблема конкретно в распределении по процентам параллельных запросов, то как вариант memcache increment, в нем же предварительно расчитанный список url, для вашего случая такой (можно перемешать перед занесением в память):
http://landing1
http://landing1
http://landing1
http://landing1
http://landing1
http://landing2
http://landing2
http://landing2
http://landing2
http://landing3

и выборка url по отстатку от деления значения инкремента на количество url.
На сколько я помню increment в memcache является атомарной операцией и должен гарантировать каждому запросу свое последовательное значение.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы