freebsd+nginx+php-fpm
Alexey V. Karagodov
kav at karagodov.name
Fri Jun 19 16:08:21 MSD 2009
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
>
>
More information about the nginx-ru
mailing list