ОсновноеRadiotalkПользовательское
Технологии вещания, софт, скрипты
6   •   Посмотреть все темы

Geo IP, распределение нагрузки и redirect

 

23
Сергей @SergikS
Как умные люди реализуют вещание с ретрансляторами по всему глобусу, подключая очередного слушателя к ближайшему ретранслятору, имеющему свободные слоты?

Поддерживают ли плееры редиректы?
Например, пиарить ссылку **********
а этот php будет по ip клиента вычислять ближайший к нему ретранслятор, и http редиректом перекидывать на ********** маунт поиинт?

156
Eugene @MechanisM
zachem ispolzovat tuhliy php esli mozhno vse sdelat na urovne servera.
ya tut nemnogo pisal ob etom ********** i tut **********

admini da chto u was takoe s kodirovkoi to? textoviy parser posmotrite.!

Отредактировано MechanisM - 09.07.2011
23
Сергей @SergikS
MechanisM пишет:

vse sdelat na urovne servera

О, спасибо за ссылки про радио+nginx! Почитаю, что еще народ делает с этой связкой.
У меня задача не для статистики определять, кто откуда, а именно нагрузку балансировать.
Проект русскоязычный, но наши всюду! И для канадцев, или хабаровчан тянуть поток из Питера - не айс : )
Поэтому и планирую сеть ретрансляторов: арендовать серв. в Канаде/штатах, во Владике, в Германии может - они будут как рилеи тянуть поток с питерского "мастера".
Но как перекинуть очередного слушателя на ближайший к нему сервер?
Именно редирект нужен, если это 100% работает для всех плееров. Хотя, они же по протоколу http работают, должны понимать все его спеки..

156
Eugene @MechanisM
SergikS пишет:

U menja zadacha ne dlja statistiki opredeljat', kto otkuda, a imenno nagruzku balansirovat'.

Tak ja ponjal. Ja i imeju vvidu chto s pomow'ju nginx opredeljaesh' stranu i proksish' ili pereadresuesh' v nuzhnyj radio servak.
Esli sam ne razberesh'sja mogu za denezhku sdelat' tebe. NGINX zhe, v svoju ochered', pomimo balansirovki geograficheskoj tak-zhe budet podstavljat' dopolnitel'nye dannye takie kak strana i gorod i koordinaty esli vdrug nuzhny vsjakie vidzhety tipa realtajm karta slushatelej itd itp.
Tak namnogo luchshe chem kazhdyj raz s pomow'ju php ili ewe chego-to dergat' bazu i podstavljat' goroda i strany iz ajpi.

Добавлено спустя 3 минуты 24 секунды:
ADMINI nu voobshe nevozmozhno pisat tut. odni krakozyabri poluchautsya esli na russkom. s drugimi saitami vse okay!
esli chto. browser Chromium poslednij a OS - Ubuntu 11.10 64bit

Отредактировано MechanisM - 10.07.2011
23
Сергей @SergikS
MechanisM пишет:

s pomow'ju nginx opredeljaesh' stranu i proksish' ili pereadresuesh'

С этой же задачей прекрасно справиться правильно написанный PHP или Perl скрипт. Ставить ради такой простой задачи Nginx — палить из пушки по воробьям, средство не адекватно задаче.

Полезно же, из совета использовать Nginx — косвенное упоминание того факта, что плееры понимают HTTP Redirect'ы. Спасибо.

156
Eugene @MechanisM
SergikS пишет:

Stavit radi takoi prostoi zadachi Nginx

hmm a esli u vas osnovnoi http-server ne nginx to ponyatno.
ne odin ya schitau chto apache pora na pomoiku a php saiti zapuskat cherez nginx + php5-fpm. ili v krainem sluchae chtobi nginx razdaval statiku i proksil php v apache.
U menya vse eshe luchshe - nginx + uwsgi + python/django
Naschet chto luchshe - kaneshno cherez nginx. ibo i bistree i ne nado dergat php.

Отредактировано MechanisM - 10.07.2011
23
Сергей @SergikS
MechanisM пишет:

cherez nginx. ibo i bistree i ne nado dergat php

Есть данные профилирования? — сколько точно миллисекунд занимает отработка редиректа после определения гео-принадлежности ip посетителя Nginx'ом и сколько - Apache+PHP или Apache+Perl?

Где, например, живет база гео-ip у Nginx? Уж не обращается ли он каждый раз к другому серверу для разрешения?

468
Klef @Klef
на первый взгляд вижу два варианта
1) обращаемся к geoip,и делать редерикт в зависимости от региона, БД геоип обновлять раз в месяц, бесплатной лайтовой версии хватает как правило.
геоип моно прицепить ко многим вещам. необязательно к геоип. Минусы, geoip не совершенен.
2) при запросе пользователя пырим его ип, передаем его ретрансляторам, ретрансляторы отправляют один icmp пакет, все возращает на мастер. (если делать паралельно, то время сильно не увеличит) делать редерикт на тот релай, с которого отклик меньше. и заносить ип в БД с хранением например месяц, чтоб при втором запросе делать уже запрос к БД а не повторять запросы от релеев. Минусы, icmp могут быть закрыты. (но можно использовать что то другое, кроме ICMP)

Вообще задачка очень интересная, было бы в наличии пяток ретрансляторов по всему миру, занялся бы :)

156
Eugene @MechanisM
SergikS пишет:

Есть данные профилирования? — сколько точно миллисекунд занимает отработка редиректа после определения гео-принадлежности ip посетителя Nginx'ом и сколько - Apache+PHP или Apache+Perl?
Где, например, живет база гео-ip у Nginx? Уж не обращается ли он каждый раз к другому серверу для разрешения?

nasmeshil, kaneshno bistree cherez nginx on ved na C napisan bistree vse delaet. a baza GeoIP - ta-zhe samaya chto i u php. prosto v konfige ukazivaesh put do nee.
tak nginx budet dergat toka GeoIP i perenapravlyat kuda nado. a esli kak ti hochesh to pridetsya serveru dergat php, potom s pomoshu php dergat bazu GeoIP, brat resultat i perenapravlyat. pri bolshom kol-ve zaprosov raznica ochen sushestvennaya. nginx быстрее определит айпи(php берет IP у сервера кстати). быстрее откроет\прочтет GeoIP базу, быстрее перенаправит.
скорее-всего даже nginx сделает все быстрее чем время длительности обращения к php.не говоря о том когда это сделает php.

Отредактировано MechanisM - 13.07.2011
23
Сергей @SergikS
Думаю, все проще: ссылки с сайта на m3u плейлисты, содержание которых и будет генериться php с учетом GeoIP и загруженности рилеев.

156
Eugene @MechanisM
SergikS пишет:

Думаю, все проще: ссылки с сайта на m3u плейлисты, содержание которых и будет генериться php с учетом GeoIP и загруженности рилеев.

у одного из клиентов именно так и реализовал. тем-более что потом попросили iTunes чтобы они в каталоге станций делали ссыль на плейлист а не на поток сразу)

23
Сергей @SergikS
MechanisM пишет:

у одного из клиентов именно так и реализовал

«Дай списать?» часть которая с GeoIP дружит.

156
Eugene @MechanisM
там все это nginx делает. если быть точнее то nginx + ngx_http_geoip_module + ngx_echo
имелось ввиду что такой-же принцип: выдает разный плейлист в зависимости от географического положения.
дергать из-за этого пыху - слишком накладно по времени и ресурсам да и никчему.

Отредактировано MechanisM - 22.09.2011
156
Eugene @MechanisM
лучше всего это реализовать примерно так:
nginx.conf:
http {
[.....]
geoip_country /path/to/GeoIP.dat;
geoip_city /path/to/GeoIPCity.dat;
[.....]
}

например файл radio(который лежит в /etc/nginx/sites_enabled):
upstream EU {
ip_hash;
server **********
server **********
server **********
[.....]
fair;
}
upstream NA {
ip_hash;
server **********
[.....]
fair;
}
[.....]
server {
listen 80;
server_name www.my-cool-radiostream.com;
rewrite ^ ********** permanent; #301 redirect
}
server {
listen 8000; #порт шауткаста или айскаста например или стандартный 80)
server_name my-cool-radiostream.com;
root /home/radio/somepath;
[.....]
location / {
proxy_pass $geoip_city_continent_code;
[.....]
}
# ну и сразу еще один из вариантов--------------------------------------------------------------------------------------------------
location = /playlist.m3u {
alias /some/path/$geoip_city_continent_code.m3u;
}
#--в данном случае выдается разный файл плейлиста из папки. тогда плейлисты должны называться например EU.m3u для Европы.
# абсолютно то-же самое можно сделать и для стран итд итп. ну и чем создавать кучу плейлистов для каждой страны можно просто линк сделать.


# еще один из вариантов с использованием модуля ngx_echo если у вас сервера по субдоменам
location = /playlist.m3u {
echo "http://$geoip_city_continent_code.someserver.com"; # напечатается первый элемент плейлиста пример: **********
}
[.....]
}

тут по континетам из GeoIP:
AS для Азии
EU для Европы
SA для Южной америки
AF для Африки
AN для Антарктики(мало-ли у вас есть сервера в антарктике)) или близлежащих Новой Зеландии, Аргентине итд)
OC для Океании
NA для Северной Америки

много еще что можно напридумывать да и не все способы написаны тут мною
уже нет времени дописывать. потом могу дополнить.
P.S. как показывает практика, nginx делает это быстрее чем например (утрируя) запускается php чтобы вообще что-либо сделать.

не забудьте поменять имена баз GeoIP ибо у меня используются полные базы а не лайт.

Отредактировано MechanisM - 23.09.2011
1
botogen @botogen
Добрый день. Не называйте некрофилом ) Просто эта тема единственное более менее толковое обсуждение которое гугл выдает.
Дайте пожалуйста информацию, как на сегодняшний день дела обстоят с распределением нагрузки между серверами icecast ?

Есть радио... мастер сервер в США, и 4 штуки релеев на разных континентах.
Слушать можно как через плеер с сайта, так и через линки, и через itunse, и через приложения для android и ios...

Подскажите как лучше организовать распрежделение нагркзки между серверами по географическому положению... наиболее гибкий вариант, подходящий для большинсва способов подключения к стриму.


Вслучае с проксированием через nginx, в последнем посте конфиг которого описан. Если я правильно понял, то всеравно основная нагрузка ложится на мастер сервер ?? Тоесть когда клиент получается, его nginx пперенаправляен та домен релея, но весь траффик то всеравно будет постоянно через nginx проходить ?

Отредактировано botogen - 24.01.2014