ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: freebsd+nginx+php-fpm



 fastcgi_connect_timeout 1s;
1с и то много
чего там от бекенда ждать дольше секунды?

 fastcgi_read_timeout 5s;
 fastcgi_send_timeout 5s;

и нет проблем
отдал страницу с извенениями, либо флеш туда, либо ещё что, что само отрефрешит или что то сделает красивое

а если что-то рефрешит страницу, то это нетерпеливый юзер у меня есть сведения (не я их получал, но на практике подобное подтвердилось), что в среднем, тело ждёт 7 секунд и потом начинает нервничать нажимать рефреш, закрывать страницу и тд и тп

Cisco Guard DDoS Mitigation Appliances не поможет от нормальных, начавших нервничать юзеров



On 19.06.2009, at 15:13, Gena Makhomed wrote:

On Thursday, June 18, 2009 at 23:16:44, Andrei Nigmatulin wrote:

AN> Тогда оставьте в покое listening queue. Отправлять запрос AN> на резервный backend надо через fastcgi_connect_timeout.

вот этой Вашей рекомендации я не понимаю. вместо тюнинга размера listening queue вы предлагаете полагаться на tcp retransmissions и ждать пока frontend устанет долбить перегруженный backend новыми запросами, что будет только мешать этому backend`у нормально обрабатывать старые запросы.

fastcgi_connect_timeout - это ~ 60 секунд, и вряд-ли клиент дождется даже первого перехода между backend`ами, не говоря уже об остальных.

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

в случае переполнения listening queue, т.е. когда backend понимает, что он уже не в состоянии обработать новые запросы - frontend практически мгновенно получает 502 ошибку от этого backend`а.

в предлагаемом Вами варианте - frontend тупо ждет 60 секунд, и только через 60 сек он начинает соображать, что этот backend уже будет не в состоянии обработать этот конкретный новый запрос.

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

AN> Я подразумеваю, что у нас имеется обычный web сайт, один фронтенд AN> и несколько backends. Я подразумеваю, что все backends равномерно AN> загружены запросами и резервных нет. Ну вот не вижу смысла держать AN> резервные простаивающие backends, правда.

резервные (backup) backend`ы могут быть полезны для сглаживания особенно больших всплесков, с которыми активные backend`ы уже не могут справиться.

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

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

AN> В случае всплесков мне нужно пытаться обслужить клиента до последнего и мне AN> бесполезна возможность моментально узнать что backend загружен под завязку.

Вы видели хотя бы одного клиента который будет сидеть перед монитором и ждать ответ от сервера например, 60 секунд ? обычное больше 5-15 секунд не ждут.

AN> Скорее всего, это значит, что остальные backends в похожем состоянии, AN> и запросу все равно суждено висеть пока не он обработается или клиент AN> не устанет ждать. Это все что я могу сделать.
AN> Как мне тут может помочь 502 ошибка ?

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

есть два подхода - "make it good" и "make it looks good".

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

когда listening queue у работающего backend`а
уже переполнена - новые запросы этим backend`oм обрабатывались бы слишком долго - клиенты столько времени ждать ответа не станут. поэтому - сразу 502.

и у frontend`а появляется шанс решить эту проблему.

AN> Как мне на практике использовать этот шанс ? AN> Как для вышеописанной ситуации мне может помочь 502 ошибка ?

например, добавить backup`ных backend`ов для обработки всплесков. если действительно, "в случае всплесков нужно обслужить клиента".

...

AN> не будет никакого resource wasting.

будет в предлагаемом Вами варианте - вместо тюнинга backlog`а надеяться на retransmission из Transmission Control Protocol.

AN> Я не говорю что backlog выставлять не нужно.

"Тогда оставьте в покое listening queue" - это Ваши слова?

AN> Я говорю, что сколько вы не выставляйте, все равно есть ненулевая AN> вероятность, что в единицу времени может прийти запросов больше, AN> чем расчитывалось при выставлении backlog.

если размер backlog`а backend`а выставлен адекватно - это означает что поток запросов больше чем мощность этого backend`а, и эту ситуацию уже нельзя будет назвать словом "кратковременный всплеск", потому *все* кратковременные всплески *сглаживаются* с помощью backlog`а backend`а.

фактически это будет еще одна, достаточно неэффективная, listening queue, реализованная внутри frontend`а сервера. неэффективная из-за постоянных повторных попыток подключения.

AN> Ну поскольку вы предлагаете в качестве альтернативы AN> все избыточные запросы отправлять на второй backend

я прежде всего предлагаю не изобретать велосипед с квадратными колесами, - я предлагаю использовать backlog по его прямому назначению, для сглаживания "всплесков (кратковременному, непериодическому увеличению) кол-ва запросов".

AN> А я предлагаю делать безглючные сайты,

подход "make it looks good" или все-таки "make it good" ?

AN> когда я не знаю что делать с 502 ошибкой на фронтенде.

можно придумать что-то интереснее чем полное зависание и ноль реакции.

AN> Если человек видит внизу броузера "Waiting for reply...", AN> а не рефрешит страницу error_page 502, где красиво написано о том AN> что сервер недоступен, то общее количество поступающих запросов громадным AN> образом снижается, и авария постепенно сходит на нет. Так показывает опыт.

так "авария" или "всплеск" ? мы тут вроде бы обсуждали обработку кратковременных и непериодических всплесков количества запросов.

сглаживанием *всплесков* занимается именно backlog, если его размер настроен администратором адекватно двум ранее названным параметрам.

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

по крайней мере, Google не стесняется признаваться пользователям, что у них проблемы с backend`ами, несколько раз видел на Gmail их сообщение о 502-й ошибке. и почему-то у меня совсем не было желания в тот момент сидеть и постоянно рефрешить эту страницу.

тем более, что рефреш страницы www.example.com/502.html всегда будет возвращать только эту статическую страницу

AN> По мне, клиент, долбящий frontend гораздо страшнее, чем frontend, AN> ожидающий медленный backend. Это - экономия ресурсов, а не wasting.

и Вы предлагаете сделать frontend долбящий громадным количеством запросов и так уже перегруженные обработкой запросов backend`ы ?

если у вас что-то постоянно рефрешит страницы - это боты, а не пользователи. и такая ситуация называется "DDoS-атака", это совсем не "кратковременный всплеск нормальных запросов".

причина проблемы тогда в том, что не совсем качественно отфильтровываются DDoS-боты от нормальных пользователей, и тюнить размер listening queue в этом случае нет смысла, как и долбить frontend`ом и так уже перегруженные backend`ы.

доводить сервер до состояния, когда все пользователи видят пустой екран и сообщение браузера "Waiting for reply..." в статусной строке - это трудно назвать словом "solution".

поможет наверное только Cisco Guard DDoS Mitigation Appliances или аналогичные програмно-аппаратные решения для защиты от DDoS.

======================================================================

On Thursday, June 18, 2009 at 15:41:37, Andrei Nigmatulin wrote:

AN> при переполнении listening queue в случае unix sockets AN> клиент будет получать ошибку 502, тогда как tcp поддерживает AN> retransmission и соответственно, более устойчив к всплескам AN> (кратковременному, непериодическому увеличению) кол-ва запросов.

======================================================================

скорее всего под словосочетанием "кратковременный всплеск" Вы здесь подразумеваете фразу "DDoS-атака" или "авария на части backend`ов".

--
Best regards,
Gena





 




Copyright © Lexa Software, 1996-2009.