Равномерное распределение трафика по нескольким ссылкам - Форум успешных вебмастеров - GoFuckBiz.com
 
 
Форум успешных вебмастеров - GoFuckBiz.com

  Форум успешных вебмастеров - GoFuckBiz.com > Бизнес-решения > Скрипты, программы и технические решения
Дата
USD/RUB90.2486
BTC/USD69233.1341
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии.

Закрытая тема
Опции темы Опции просмотра
Старый 06.10.2017, 14:01   #1
lance
Синьор
 
Аватар для lance
 
Регистрация: 30.05.2008
Сообщений: 975
Бабло: $153121
По умолчанию Равномерное распределение трафика по нескольким ссылкам

Привет гофак!
Хочу написать скрипт для раскидывания трафика 50 на 50 по двум и более ссылкам (т.е. на каждую равномерно). Сколько трафика придет заранее не знаю.

ТДС, трекерами и прочей фигней пользоваться не хочу, поэтому хочу накидать свой скрипт на PHP.

Какое решение придумал: делаю условный переключатель - переменную со значением 1 и 0, которое записывается в файл (можно и БД, но хочу без нее обойтись). Первый уник направляется на ссылку1, переменной присваивается значение 1, второй уник идет уже на ссылку2, поскольку у переменной уже значение 1, после перехода в файл записывается значение 0 и т.д. Таким образом достигаем равномерности распределения.

Вопрос: будет ли это работать на объемах 100k/d? Может есть более изящное решение?
__________________
HTF бот заработает для тебя на трейдинге крипты 0.5-3% в день без риска! Не важно падает рынок или растет. Кнопка бабло тут
lance вне форума  
Старый 06.10.2017, 14:43   #2
editeur
Senior Member
 
Регистрация: 27.09.2013
Сообщений: 697
Бабло: $101520
По умолчанию

На объемах в 100к при разумном количестве ссылок хорошо будет работать обычный random. Чем больше объем тем ближе к 50/50.

rand(0, N-1)
editeur вне форума  
Старый 06.10.2017, 15:39   #3
lance
Синьор
 
Аватар для lance
 
Регистрация: 30.05.2008
Сообщений: 975
Бабло: $153121
ТС -->
автор темы ТС По умолчанию

Этот вариант сразу отсек, т.к. нужной точности распределения он не даст.
__________________
HTF бот заработает для тебя на трейдинге крипты 0.5-3% в день без риска! Не важно падает рынок или растет. Кнопка бабло тут
lance вне форума  
Старый 06.10.2017, 16:01   #4
editeur
Senior Member
 
Регистрация: 27.09.2013
Сообщений: 697
Бабло: $101520
По умолчанию

Цитата:
Сообщение от lance Посмотреть сообщение
Этот вариант сразу отсек, т.к. нужной точности распределения он не даст.
Прям надо точно 50000/50000, 50031 на 49969 не подойдет?

С файлами тебе придется постоянно этот файл лочить перед тем как в него что-то писать и читать, запросы же идут параллельно. Так что с определенного момента это станет узким местом, запросы будут выстраиваться в очередь. На объемах в несколько миллионов в день это работать будет.
editeur вне форума  
Старый 06.10.2017, 16:43   #5
Marines
Senior Member
 
Аватар для Marines
 
Регистрация: 14.07.2017
Сообщений: 580
Бабло: $74966
По умолчанию

Цитата:
Сообщение от lance Посмотреть сообщение
Вопрос: будет ли это работать на объемах 100k/d? Может есть более изящное решение?
есть. бритва Оккамы называется. инеблагодари
Marines вне форума  
Старый 06.10.2017, 16:53   #6
lance
Синьор
 
Аватар для lance
 
Регистрация: 30.05.2008
Сообщений: 975
Бабло: $153121
ТС -->
автор темы ТС По умолчанию

Цитата:
Сообщение от editeur Посмотреть сообщение
Прям надо точно 50000/50000, 50031 на 49969 не подойдет?
Надо конечно у математиков спросить, но мне кажется, что расхождение больше будет.

Цитата:
Сообщение от editeur Посмотреть сообщение
С файлами тебе придется постоянно этот файл лочить перед тем как в него что-то писать и читать, запросы же идут параллельно. Так что с определенного момента это станет узким местом, запросы будут выстраиваться в очередь. На объемах в несколько миллионов в день это работать будет.
По поводу файлов согласен, что объемы сорвут всю схему и траф уйдет на ошибку PHP Поэтому и создал топик.

Вообщем спасибо за ответы . Попробую пока действительно на rand, если расхождение будет больше 10%, то буду дальше думать.
__________________
HTF бот заработает для тебя на трейдинге крипты 0.5-3% в день без риска! Не важно падает рынок или растет. Кнопка бабло тут
lance вне форума  
Старый 06.10.2017, 22:15   #7
editeur
Senior Member
 
Регистрация: 27.09.2013
Сообщений: 697
Бабло: $101520
По умолчанию

Цитата:
Сообщение от lance Посмотреть сообщение
Надо конечно у математиков спросить, но мне кажется, что расхождение больше будет.
Будет, но редко. На 100 по 100000 получилось всего два раза с разницей близкой к 800, то есть к 50400/49600
Offtopic
editeur вне форума  
Старый 06.10.2017, 23:45   #8
AntonIon
Senior Member
 
Регистрация: 15.11.2015
Сообщений: 216
Бабло: $29410
По умолчанию

Пиши в файл какой-либо символ. При проверке не читай файл, а проверяй его размер, а потом остаток от деления на количество ссылок для редиректа...

Поставь лимит на файл несколько кб. Желательно подобрать под размер блока в ФС, или даже чуть поменьше. После достижения лимита обнуляй файл. Но не забывай что размер файла кэшируется, там надо флаги выставить правильные.

И да, сначала отдавай редирект, потом пиши в файл, так будет меньше задержка для юзера.
AntonIon вне форума  
Старый 08.10.2017, 08:52   #9
number4
Senior Member
 
Регистрация: 23.04.2017
Адрес: Pattaya
Сообщений: 132
Бабло: $20600
По умолчанию

все эти mt_rand() и openssl_pseudo_random() - полная херня.
Я усредненным распределением трафа на N линков занимался и проводил исследования.
Смысл вот в чем:
есть скажем 10 линков, на которые надо раскидывать рандомно траф. Идеально хочется, чтобы в неограниченном будущем все эти 10 линков получили по одинаковому кол-ву трафа.
То есть
Есть скажем в сутки 10000 трафа. Есть 10 линков. Ожидается, что на каждый линк упадет по 1к трафа.
Если юзать mt_rand без ухищрений, то получается херня типа
на один линк упало 800, на другой 1200 - очень большой разброс от усредненного 1000.
Я специально считал разбросы от усредненного значения, чтобы найти оптимальное решение. То есть в идеале надо, чтобы от среднего 1000 разброс вправо-влево был не более 100 (то есть 10%). Если ставится цель, чтобы траф распределялся наиболее равномерно, то 10% это оптимальный вариант.

mt_rand() дает хреновое усреднение, если делать рандомную выборку:
mt_rand(1,10) - на 10 линков
если сделать round(mt_rand(10,100)/10) - будет чуть получше, так как выбирается рандом не из 10 чисел, а из 90
Но все равно если брать статистику скажем на 10,000 итераций,
то в итоге получается разброс до 30% от усредненного значения. А это слишком много.
openssl_pseudo_rand дает примерно так же.
можно читать из /dev/urandom - будет чуть получше, брать 10 символов, перемешать и вытаскивать случайный.
но тут есть ньанс: одно дело когда трафа 10к в сутки и пару линков на рандом, другое дело, когда 200-300к и около 20 линков на рандом. Тут уже хочется чтобы:
1) рандом работал быстро
2) равномерно распределял траф с минимальным отклонением от среднестатистического значения, без учета накопления статистики

в итоге оказалось, что обычный простой shuffle() дает самый лучший вариант.

то есть так:
у нас есть 10 линков в массиве:
$links=array(
1=>'link1',
2=>'link2',
..
10=>'link10',
);

делаем
shuffle($links);shuffle($links); (два раза, ага)
$redirect=$links[0]

вот при таком варианте разброс от среднестатистического значения составляет около 5% (то есть на один линк упадет 950, на другой 1050, к примеру)
Что вполне приемлимо

А теперь как это выглядит на практике у меня (суточная статистика):

topbanner8 3 487
topbanner2 3 453
topbanner4 3 407
topbanner7 3 379
topbanner5 3 374
topbanner3 3 372
topbanner6 3 346
topbanner1 3 345

----
как видно, 3400 это среднее значение, около которого идет разброс в ту или иную сторону
number4 вне форума  
Старый 08.10.2017, 10:31   #10
AntonIon
Senior Member
 
Регистрация: 15.11.2015
Сообщений: 216
Бабло: $29410
По умолчанию

shuffle() же rand() использует. Только srand() на него не влияет. А по сути, это обычный rand().
AntonIon вне форума