anonymous@RULINUX.NET~# Last login: 2024-12-23 13:58:51
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

Что nginx имеет в виду под connections/requests?

Соединения (conn) вроде бы это то, что выдается на странице статуса или там netstat'ом. От чего зависит их количество? Это устанавливается в браузере параметром "max connections per server"? Обычно этих соединений не более 8 на одного клиента, но иногда бывает и за двадцать (не говоря уж про очевидные атаки, которые я и пытаюсь предотвратит). Если выставить в конфигурации лимит до 9 соединений на одну айпишку, то согласно документации остальные соединения получат 503. Как это выглядит на деле? Если у пользователя в браузере стоит большее количество этих самых соединений, то половина страницы не загрузится что-ли?

Далее, что такое requests и где их вообще смотреть? На странице статуса есть "handled requests", но это же количество запросов за определенное время (в данном случае, за все время работы энджинкса), так? А лимиты то выставляются на количество одновременных запросов, если я правильно понимаю. Что это вообще значит? И там ещё есть rate, это как раз количество запросов за время, да? Где можно посмотреть текущие статы во время реальной нагрузки, чтобы прикинуть, какие лимиты выставлять? В одном руководстве предлагают ограничивать 15 запросов в минуту, в другом 200 в секунду, нифига не понятно.

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

anonymous(*) (2012-05-07 12:06:56)

Opera/9.80 (X11; Linux i686; U; en) Presto/2.10.229 Version/11.60

[Ответить на это сообщение]
[#] [Добавить метку] [Редактировать] Ответ на: Что nginx имеет в виду под connections/requests? от anonymous 2012-05-07 12:06:56
avatar
Скрыть

Re:Что nginx имеет в виду под connections/requests?

Не знаю как там в нгинксе, но если у тебя вызывают вопросы общеупотребительные термины, то лучше разобраться с ними сперва... Пусть товарищи меня поправят если где навру:

Начну с экскурса в HTTP. Есть несколько стандартов этого протокола. До HTTP 1.1 работа с сервером заключается в том, что бровсер устанавливает _соединение_ с сервером и посылает есму запрос (_реквест_) некоторого ресурса, который потребен бровсеру. В простейшем случае запрос выглядит как "GET имя_файла.html" с парой переоводов строки. В ответ на такой запрос сервер находит требуемый ресурс и отдаёт его бровсеру либо, если ресурс не может быть одан по какой-либо причине, сообщает эту причину с соответствующим кодом ошибки. Ключевой момент: после передачи ответа сервер разрывает соединение.

В HTTP 1.1 если оба участника коммуникации - и бровсер и сервер - поддерживают данный протокол, между ними может быть временно установлено keep-alive соединение. То есть после отправки ответа бровсеру сервер не будет сразу же разрывать соединение и бровсер сможет запросить других ресурсов через то же соединение.

В HTTP 1.1 сделано так потому, что обычный сеанс обмена выглядит так, что бровсер запрашивает страничку с сервера, а потом, распарсив страничку, начинает запрашивать с того же сервера другие ресурсы, используемые в страничке - таблицы стилей, скрипты, картинки. Открытие нового соединения - медленная процедура, поэтому и используют keep-alive чтобы не не делать этого по многу раз раз на каждый запрос. Количество одновременно открытых keep-alive соединений на сервере должно ограничиваться в неких разумных пределах.

Для ускорения загрузки страницы бровсер может использовать несколько подключений к серверу. Если он обнаружил, что страничке нужно несколько картинок, стайл-шитов, скриптов и т.п. Он не обязательно будет тащить их все последовательно через единственное keep-alive соединение. Он может попытаться создать несколько соединений и затащить все необходимые ресурсы параллельными потоками. С протоколами до HTTP 1.1 это был единственный способ ускорить загрузку страниц, а в 1.1 наверное бровсер может действовать умнее, но ему никто не запрещает установить несколько соединений и в этом случае. Кроме того, некоторые пользователи держат открытыми в бровсере множество страниц и по этой причине при запуске бровсера тот может ломануться обновить сожержимое этих страниц для восстановления сессии (обычно для тех ресурсов, для которых сервером не была установлена дата устаревания) что может привести к созданию огромного количества одновременных подключений что может быть распознано механизмами защиты как DOS-атака не только на стороне сервера, но даже и на клиенском файрволле, поэтому для клиента также есть смысл ограничивать число подключений в бровсере. Ajax-приложения, время от времени обращающиеся на сервер, так же приводят к созданию соединений.

handled requests - запросы, ответы на которые сервер уже послал. Not handled requests - запросы, которые ещё не были обработаны сервером.

rate - это частота. Если речт про request rate - это количество запросов за единицу времени.

Если речь идёт об ограничении числа подключений с конкретного IP - надо учитывать что из-за NAT'а могут приходить запросы от разных пользователей, но IP у них будет один и тот же. Например, я сильно подозреваю, что livejournal одно время пытался защищаться от DOS-атак подобным образом, при том количество запросов было ограничено настолько, чито уже чтение ЖЖ из дома двумя пользователями иногда приводило к срабатыванию защиты и перенаправлению запросов куда-то нахуй (тут на форуме вроде были сообщения об этом).

Ну и бороться с атаками наверное нужно всё-таки не на стороне веб-сервера, а используя специализированное ПО на роутере. Хотя бы потому, что веб-серверов может на одной машине может крутиться много и коварный враг может попытаться загасить машину распределяя запросы по разным серверам и сервисам, запущенным на этой машине.

anonymous(*)(2012-05-07 13:12:09)

[#] [Добавить метку] [Редактировать] Ответ на: Re:Что nginx имеет в виду под connections/requests? от anonymous 2012-05-07 13:12:09
avatar
Скрыть

Re:Что nginx имеет в виду под connections/requests?

Спасибо за подробный ответ. Вот что мне все равно осталось непонятным, так это подсчет реквестов. Я предполагаю, что они высылаются по одному на каждый элемент, так? То есть, чтобы подсчитать адекватный request rate надо поделить количество элементов на странице на приемлимое время, за которую эта страница может загрузиться. Ну, это что-то порядка 300/2 = 150 (рассматривая пессиместический вариант). Но почему тогда во многих если не во всех приличных руководствах по настройке этого параметра приводятся цифры порядка 5 r/s? Или может быть, здесь request rate относится к одному соединению а общее число их соответственно расчитывается перемножая request rate и connection limit?

И что будет, если на сервере будет выставлен предел, например, в 8 соединений, а браузер будет сконфигурирован на 16 параллельных соединений?

>бороться с атаками наверное нужно всё-таки не на стороне веб-сервера, а используя специализированное ПО на роутере
К сожалению, доступ на роутер имеется далеко не всегда.

anonymous(*)(2012-05-07 16:44:56)

Opera/9.80 (X11; Linux i686; U; en) Presto/2.10.229 Version/11.60
[#] [Добавить метку] [Редактировать] Ответ на: Re:Что nginx имеет в виду под connections/requests? от anonymous 2012-05-07 16:44:56
avatar
Скрыть

Re:Что nginx имеет в виду под connections/requests?

>Спасибо за подробный ответ. Вот что мне все равно осталось непонятным, так это подсчет реквестов. Я предполагаю, что они высылаются по одному на каждый элемент, так?
По идее, от браузера зависит. Так как http 1.1 предполагает возможность повторного использования соединений, точное их количество узнать сложно. Вот тут немного есть по теме.

SystemV(*)(2012-05-07 16:50:20)

Emacs-w3m/1.4.468 w3m/0.5.3
[#] [Добавить метку] [Редактировать] Ответ на: Re:Что nginx имеет в виду под connections/requests? от anonymous 2012-05-07 16:44:56
avatar
Скрыть

Re:Что nginx имеет в виду под connections/requests?

> Я предполагаю, что они высылаются по одному на каждый элемент, так?

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

Т.е. реквестов может оказаться больше чем ожидалось. Или бровсер или проксик может по expiry date ресурса в кеше увидеть что закешированный с прошлого запроса ресурс действителен и вовсе не обращаться к серверу для загрузки данного элемента, а просто возьмёт его из кеша. Т.е. реквестов может оказаться меньше чем ожидалось.

> То есть, чтобы подсчитать адекватный request rate надо поделить количество элементов на странице на приемлимое время, за которую эта страница может загрузиться.

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

> Ну, это что-то порядка 300/2 = 150 (рассматривая пессиместический вариант). Но почему тогда во многих если не во всех приличных руководствах по настройке этого параметра приводятся цифры порядка 5 r/s?

Понятия не имею. Может авторы имеют в виду, что их сервер способен обработать за секунду только пять запросов? Накидать-то реквестов можно сколько хошь.

> Или может быть, здесь request rate относится к одному соединению а общее число их соответственно расчитывается перемножая request rate и connection limit?

Не стоит даже и гадать. Если автор не объяснил что и в каких попугая он меряет - наверное подобной книжкой лучше пренебречь.

> И что будет, если на сервере будет выставлен предел, например, в 8 соединений, а браузер будет сконфигурирован на 16 параллельных соединений?

Зависит от сервера (ничего не знаю про конретную реализацию). По идее 9е соединение не должно бы быть установлено, но чтобы отклонить соединение - серверу надо сокет заакцептить и затем закрыть. Я думаю при этом ACK будет послан, т.е. формально TCP соединение будет установлено. Но там уж не особо мучительно и отписать в сокет причину закрытия с кодом 5хх перед тем как закрывать сокет.. Короче не знаю. Может в реальности у них вообще всё хитрее.

> К сожалению, доступ на роутер имеется далеко не всегда.

В организации обычно есть человек, у которого есть доступ к сетевому оборудованию всегда. Просто рейзишь тикет: "прошу принять меры к предотвращению дос-атак". И всё, твоя совесть с этого момента чиста, пусть там этот сервак хакиры укладывают по сто раз на дню - за это ответственен тот сетевой человек, который занимается роутером.

anonymous(*)(2012-05-07 18:39:27)

[#] [Добавить метку] [Редактировать] Ответ на: Re:Что nginx имеет в виду под connections/requests? от anonymous 2012-05-07 16:44:56
avatar
Скрыть

Re:Что nginx имеет в виду под connections/requests?

>во многих если не во всех приличных руководствах по настройке этого параметра приводятся цифры порядка 5 r/s
Итак, сам же и отвечу. Дело в том, что X r/s - вовсе и не ограничение на количество выполняемых реквестов в период времени, а просто такая неочевидная форма записи скорости реквестов. То есть 5 r/s = 0.2 s/r. В таком случае логично уделять большее вниманию параметру burst, который указывает исключения из правил.

anonymous(*)(2012-05-09 01:17:18)

Opera/9.80 (X11; Linux i686; U; en) Presto/2.10.229 Version/11.60
Этот тред читают 2 пользователя:
Анонимных: 2
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!