Re: Не отдаёт ответ пока буфер не наполнится

2014-12-23 Пенетрантность Валентин Бартенев
On Thursday 18 December 2014 13:54:53 sofiamay wrote:
[..]
 Вы немножко меня не правильно поняли :-) Я предполагал что Nginx умеет
 одновременно и получать и отдавать свой буфер. Т.е. получил первый байт в
 буфер и тут же начинает передавать ответ клиенту при этом продолжая получать
 данные в буфер. Это как бы совместный доступ к буферу, один поток наполняет,
 а второй одновременно считывает и передаёт клиенту. 
[..]

Неблокирующиеся чтение и запись данных из/в сокет - это по сути операции 
копирования в памяти, очень быстрые.  Делать это одновременно в разных
потоках будет только дороже.  Так что вся ваша идея, по крайней мере в
такой формулировке, лишена смысла и nginx уже работает эффективно в этом 
месте.

Значение off в proxy_buffering, как это и изложено в документации, все
равно подразумевает наличие буфера, размер которого регулируется директивой 
proxy_buffer_size.  Если он достаточно велик, чтобы вместить в себя весь 
ответ, то по возможности он будет получен полностью и это ни чем существенно 
по эффективности не будет отличаться от режима on.

Ваша проблема видимо в том, что бекенд не отдает весь ответ сразу,
а делает это постепенно маленькими порциями, так что непонятно, как
вы намереваетесь его освободить.  Такому бекенду уже ничем не поможешь
и режима работы proxy_buffering off для него будет вполне достаточно.

--
Валентин Бартенев
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Не отдаёт ответ пока буфер не наполнится

2014-12-18 Пенетрантность Vadim A. Misbakh-Soloviov
В письме от Чт, 18 декабря 2014 13:00:28 пользователь sofiamay написал:
 но ведь при этом Nginx не будет получать максимально быстро

А как будет? Не максимально быстро? :)

Нет никакой магии. С буферизацией ответа NginX сначала получает ответ, потом 
отдаёт его. Без буферизации — отдаёт сразу как получил (естественно, трятя 
определённое к-во микросекунд на проход мимо себя).

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

Если бекенд отдаёт ответ медленно, но хочется чтобы клиент не ждал полчаса — 
можно отключить буферизацию ответа.


 Теряется весь смысл в буферах и их полезности.

см. выше.

 Я конечно же спрашиваю о другом - как настроить чтобы Nginx по прежнему
 принимал максимально быстро весь ответ от Апача

Он итак его принимает максимально быстро, на сколько может (на сколько быстро 
его отдаёт бекенд + задержки на путь от бекенда до NgX + пучок микросекунд на 
внутренние проверки).


 но при этом начинал его передавать сразу же с первого байта.

Это взаимоисключающие параграфы. Либо NginX принимает весь ответ в буфер и 
сразу после принятия отдаёт его, либо он отдаёт его сразу как получил. Или 
так, или так. Третьего не дано.

 Что я делаю не так?

Не понимаете сути вещей, например :) // или плохо читаете документацию и код. 
Или и то и другое. Тут сложно судить не будучи телепатом.


-- 
Best regards,
mva


signature.asc
Description: This is a digitally signed message part.
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Не отдаёт ответ пока буфер не наполнится

2014-12-18 Пенетрантность sofiamay
Я читал документацию, даже черезчур усердно. Видимо всё дело в том, что я
переоценил возможности Nginx, я думал что он может принимать ответ в буфер
от Apache и при этом одновременно отдавать его медленному клиенту. Т.е. я
думал что он умеет одновременно и получать и отдавать свой буфер, оказалось
нет. 

Получается что можно либо включить буферизацию и ждать пока первый буфер
полностью не заполнится, либо выключить буферизацию. А то что мне надо Nginx
не умеет. Ok большое спасибо за подсказки.

P.S. Товарищ мне подсказал сделать 500 буферов по 256 байт, но чую это
приведёт лишь к перерасходу ресурсов, накладные расходы и т.д. и это только
во вред.

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,255640,255644#msg-255644

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Не отдаёт ответ пока буфер не наполнится

2014-12-18 Пенетрантность Vadim A. Misbakh-Soloviov
В письме от Чт, 18 декабря 2014 13:23:56 пользователь sofiamay написал:
 Я читал документацию, даже черезчур усердно. Видимо всё дело в том, что я
 переоценил возможности Nginx, я думал что он может принимать ответ в буфер
 от Apache и при этом одновременно отдавать его медленному клиенту. Т.е. я
 думал что он умеет одновременно и получать и отдавать свой буфер, оказалось
 нет.

А смысл от этого?
Воркфлоу с буферами: создал буферы = получил = отдал = уничтожил буферы
Воркфлоу без буферов: получил = отдал

Смысл от буферов, если их содержимое уже у клиента? Зачем его (содержимое) 
тогда буферизировать? Куда его дальше девать?

 Получается что можно либо включить буферизацию и ждать пока первый буфер
 полностью не заполнится, либо выключить буферизацию. А то что мне надо Nginx
 не умеет. Ok большое спасибо за подсказки.

А что Вам надо? Из Вашего объяснения выходит что Вам нужно чтобы клиент 
моментально получал то, что отдал бекенд. Куда тогда контент из буферов 
девать, если он уже у клиента?

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

 
 P.S. Товарищ мне подсказал сделать 500 буферов по 256 байт, но чую это
 приведёт лишь к перерасходу ресурсов, накладные расходы и т.д. и это только
 во вред.

В данном случае — да. Тем более, что в случае NgX и бекенда на одной машине 
буферизация, так-то, не особо и нужна.



P.S. В соседнем треде же говорили: используйте IIS :D

-- 
Best regards,
mva


signature.asc
Description: This is a digitally signed message part.
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Не отдаёт ответ пока буфер не наполнится

2014-12-18 Пенетрантность Максим
А смысл от этого?
 Воркфлоу с буферами: создал буферы = получил = отдал = уничтожил буферы
 Воркфлоу без буферов: получил = отдал

 Смысл от буферов, если их содержимое уже у клиента? Зачем его (содержимое)
 тогда буферизировать? Куда его дальше девать?


Смысл очевиден, освободить драгоценный ресурс - бекенд. Всосать всё в буфер
с максимальной скоростью и отпустить воркера, а отдавать медленному клиенту
уже из буфера.
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Не отдаёт ответ пока буфер не наполнится

2014-12-18 Пенетрантность Maksim Kulik
Смысл вопроса прост, а ответ неочевиден: если клиент медленный и отключена
буферизация? Как поступит nginx? Будет в час по чайной ложке забирать у
бэкенда и передавать клиенту данные, задерживая таким образом бэкенд? Или
все же получит куда-то ответ полностью и будет потихоньку его отдавать?

18 декабря 2014 г., 21:38 пользователь Vadim A. Misbakh-Soloviov 
m...@mva.name написал:

 В письме от Чт, 18 декабря 2014 13:23:56 пользователь sofiamay написал:

 А смысл от этого?


___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Не отдаёт ответ пока буфер не наполнится

2014-12-18 Пенетрантность Aleksandr Sytar
18 декабря 2014 г., 22:41 пользователь sofiamay nginx-fo...@nginx.us
написал:

 Aleksandr Sytar Wrote:
 ---
  А вам не кажется, что в этом случае буфера нет? Или вы путаете
  буферизацию
  с кешированием ответов, или одно из двух.

 Да нет, не кажется. В таком варианте буфер есть, самый что ни на есть. А
 вот
 каким боком вы сюда приплели кэширование ответов, это вызывает вопрос - вы
 ничего не путаете? :-)


Т.е. получил первый байт в
буфер и тут же начинает передавать ответ клиенту при этом продолжая получать
данные в буфер.  - В чем тогда практический смысл буфера, какую он роль,
оп вашему выполняет?
___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Не отдаёт ответ пока буфер не наполнится

2014-12-18 Пенетрантность sofiamay
mva Wrote:
---

 см. выше. В случае быстрых клиентов это не нужно. А с медленными
 можно 
 бороться.

Странный ответ. Уже как несколько лет получаю рассылку, а про борьбу с
медленными клиентами ничего конкретного не было. Постоянные тычки в
документацию про limit conn limi req и прочее, но всё это на самом деле
никак не поможет с DDOS атакой с разных IP нормально организованной. На
слабом сервере отключение буферизации и правильный ddos вмиг положит сервер
залипшими запросами, когда клиент запрашивает самую жирную и медленную
страницу на сервере и крайне медленно её получает. Никаких лимиты тут не
помогут. Апаче иссякнет и будет висеть, вместо того чтобы Nginx быстро
получил ответы в буфера по моей схеме и раздавал их потиху. Решение проблемы
- включение буферизации, но это заметно снижает отклик, как вы сами сказали
негативно сказывается на быстрых клиентах.

Но раз вы утверждаете что предполагаемая мной схема работы с буфером
(которой на самом деле нет) никому не нужна и с медленными коннектами можно
бороться, то у меня к вам вопрос - КАК? Посоветуйте пожалуйста конкретные
методы борьбы с таким типом DDOS, такие методы которые действительно будут
работать. Условия: буферизация выключена, limit conn и limit req не помогают
(это только от детей защита, а нет от медленных клиентов с разных ip), и
Апаче, который дохнет без буферизации Nginx. Заранее спасибо за совет, а то
тут часто любят бросаться фразами типа МОЖНО БОРОТЬСЯ, а вот как, это уже
типо сами ищите. А на деле то никак, кроме как буфером. То есть пустые
фразы. Даже Максим Дунин помнится в рассылке кому-то советовал  limit conn и
limit req и по делу больше ничего не подсказал, а вы говорите есть методы
борьбы, вот мне и интересно стало, уже не те ли это самые методы которые и
так всем известны и помогают они слабо 

Моя схема работы с буфером была бы очень кстати и она никак не блокирует
работу Nginx, раз уж вы говорите про прелесть неблокируемости :-) Жаль что
Nginx так не умеет.

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,255640,255659#msg-255659

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru

Re: Не отдаёт ответ пока буфер не наполнится

2014-12-18 Пенетрантность sofiamay
Aleksandr Sytar Wrote:
---
 Т.е. получил первый байт в
 буфер и тут же начинает передавать ответ клиенту при этом продолжая
 получать
 данные в буфер.  

- В чем тогда практический смысл буфера, какую он
 роль,
 оп вашему выполняет?

Ну как какую, позволяет моментально освободить жирные до памяти и
неповоротливые воркеры Апача с PHP. Это же очевидно. Мой способ работы с
буфером - это та же буферизация, только с моментальной отдачей. И буфер
работает и ответ не задерживается. Я же говорю, изначально думал что так и
есть, просто в конфиге проблема. Оказалось что схема работы с буферами
совсем иная.

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,255640,255660#msg-255660

___
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru