LINUX.ORG.RU
решено ФорумAdmin

Почему распараллеливание ssh-тоннелями не увеличивает скорость?

 ,


0

4

nginx на VDS установлен как балансировщик нагрузки (НАГРУЗКИ — из моих уст звучит смешно, так же смешно как SSD НАКОПИТЕЛЬ), который распределяет запросы на другие хосты (ноды).

другими хостами выступают ssh-тоннели, идея в том, что берём горстку ноутбуков, каждый из которых выступает как нода, копируем на него PHP ПРИЛОЖЕНИЕ (я сегодня в ударе), и просто пробрасывая с ноутбука ssh-тоннель на VDS — теперь эта нода может учавствовать в распределении нагрузки и обработке запросов. всё очень легко и прозрачно, любая нода может в любой момент отказать в работе, на работу сайта это не влияет, балансировщик делает своё дело.

                              / -- > PHP NODE < -- > \
                             /                        \
INTERNET -- > LOAD BALANCING -- -- > PHP NODE < -- -- > SQL
                             \                        /
                              \ -- > PHP NODE < -- > /

три ноды, три ssh-тоннеля до балансировщика

# ssh -fnNT -R 8081:localhost:80 spoofing@VDS
# ssh -fnNT -R 8082:localhost:80 spoofing@VDS
# ssh -fnNT -R 8083:localhost:80 spoofing@VDS

когда узким местом станет сетевой стек на балансировщике, то просто берём ещё одну VDS, копируем на неё этот LB (Load Balancing), добавляем в DNS A-запись нового балансировщика, и всё, теперь ещё один LB учавствует в распределении нагрузки, а между LB нагрузка распределяется по методу round-robin на уровне DNS.

1) главное чтобы работала хотя бы одна нода, тогда будет работать и сайт

3) SQL база для всех приложений ясное дело должна быть общей, и она не должна отказывать в работе.

больше узких мест я не вижу.

как мне казалось...

вот такой конфиг nginx на балансировщике

upstream host {
	server localhost:8081;
	server localhost:8082;
	server localhost:8083;
	server localhost:8084 backup;
	server localhost:8085 backup;
}

server {
	...

	location / {
		proxy_pass http://host;

		...
	}
}

с другого локального хоста, который находится в одной сети с одной из нод с адресом 192.168.0.1, я тестирую бенчмарком производительность.

# ab -n 1000 -c 100 -k -H "Host: spfng.com" 192.168.0.1/blog/hello-world/
Requests per second:    601.67 [#/sec] (mean)

600 запросов, боже ты мой, 600 запросов в секунду, на днищеноутбуке с целероном 1.86ггц и 4гб памяти на борту, из которой занято всего 100мб. на запрашиваемой страничке выполняется три SELECT и один UPDATE, база данных SQLite, — нода обрабатывает 600 запросов в секунду. вот, значит выяснили потолок этой ноды.

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

# ab -n 1000 -c 100 -k spfng.com/blog/
Requests per second:    41.61

what the f... почему? ssh-тоннель такой медленный? ssh-тоннель создаёт такой огромный сетевой I/O лаг?

при чём знаете, я с этой же ноды пробрасываю ещё два ssh-тоннеля, что в теории должно увеличивать количество обрабатываемых нодой запросов, ведь они теперь распределяются между несколькими ssh-тоннелями равномерно но... этого не происходит!

почему? и что делать? что с одним ssh-тоннелем я имею 30-40 rps, что с тремя, с пятью ssh-тоннелями работающих _ПАРАЛЛЕЛЬНО_ я имею всё те же самые 30-40 rps.

какого чёрта? какого чёрта, ЛОР?

★★★★★

Подписался. А то сил спать уже нет - так волнует вопрос.

:)

dk-
()

Поставь балансировщик локально и посмотри нагрузку на железку. Учитывая, что хостить сайт ты решил на ноутах, можно предположить что и в у тебя не ВДС а дешёвая хрень, для которой 3 туннеля и балансер неподъёмная задача.

ya-betmen ★★★★★
()
Последнее исправление: ya-betmen (всего исправлений: 1)

мдя.. проблема оказалась проще.

в левом нижнем углу, первая команда ab: сама VDS выдаёт 500 запросов в секунду, и это для неё не предел, отдача файлика localhost/index.html

вторая команда ab: тестирование сайта на ноутбуке через ssh-тоннели, что запущены в tmux (первые три по вертикали).

в обоих случаях узкое место — пропускная способности сети моего провайдера, все запросы упираются в 500кбайт/секунду. что я посылаю запросы через ab, и что эти запросы потом приходят обратно ко мне же, — так и получается что все 500кбайт выделенные мне провайдером выжираются.

надо расширять канал просто. купить тарифный план побольше или сменить провайдера с гигабитными линками.

и ssh-тоннели тут как оказалось не при чём, они выполняют свою работу и как надо распараллеливают нагрузку на ноды. локально нагрузка распределяется и упирается только в процессор.

всем спасибо, извините. =)

Spoofing ★★★★★
() автор топика

ну и получается, распределение нагрузки по разным нодам — как мёртвому припарка, если эти ноды находятся внутри одной сети с пропускной способностью всего 500кбайт.

сделал фейспалм с себя. ушёл менять провайдера.

Spoofing ★★★★★
() автор топика
Ответ на: комментарий от Spoofing

ну и получается, распределение нагрузки по разным нодам — как мёртвому припарка, если эти ноды находятся внутри одной сети с пропускной способностью всего 500кбайт.

Тебя это и правда удивляет?!

dk-
()
Ответ на: комментарий от dk-

нет, всё правильно, просто не думал что 500кбайт это так мало окажется. а потом смутило, что локально сервер выдает 600 rps, vds выдает 500 rps, а ssh-тоннели такое узкое место получается, вот и грешил на них. зря. каюсь. просто забыл большой расход на сеть, когда запрос-ответ проходят огромный путь от локалхоста до вдс и обратно на локалхост. в случае с рядовыми клиентами всё должно быть ок.

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

прокачать домашнюю локалку, все имеющиеся в ней устройства с распределением нагрузки по ним — это как прокачавать свой космический корабль в мморпг eve online какой-нибудь. =)

сейчас вот унал, что dns round robin лажа и лучше отказаться от идеи её использования, а есть какой-то там haproxy, вот читаю что такое.

а потом? а потом затестив всё это в реальных боевых условиях, выяснив _как делать это правильно_, — тащу всё в свой бложек. вот.

Spoofing ★★★★★
() автор топика

600 запросов в секунду, на днищеноутбуке

Настроил бы кеш в nginx было бы более 3тыс

goingUp ★★★★★
()
Ответ на: комментарий от Spoofing

сейчас вот унал, что dns round robin лажа и лучше отказаться от идеи её использования, а есть какой-то там haproxy, вот читаю что такое.

Да ты к успеху идёшь!

tiandrey ★★★★★
()
Ответ на: комментарий от tiandrey

писал пост до того, чтобы хотя бы прочитать, что такое haproxy вообще.

в случае с классической балансировкой http-запросов по другим серверам — haproxy не нужен, с этим и так прекрасно справляется сам nginx.

а dns round robin ни в коем случае не может выступать как самостоятельная балансировка запросов, но иметь два ультранадёжных сервера с A-записями ссылающимися на них — нужно, но это уже выходит за рамки терминологии о балансировке, это обычный доступ к серверам... а round robin это так, ни к селу ни к месту. ну пусть выдает записи по-очередно, если на то пошло.

Spoofing ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.