ALT Linux sysadmins discussion
 help / color / mirror / Atom feed
From: Vitaly Lipatov <lav@altlinux.ru>
To: <sysadmins@lists.altlinux.org>
Subject: Re: [Sysadmins] Ограничение количества клиентов на хост для Apache ITK
Date: Fri, 30 Oct 2015 11:37:49 +0300
Message-ID: <5895453bc51d32b06cc13937d483f457@office.etersoft.ru> (raw)
In-Reply-To: <20151029230914.GA11034@lks.home>

Konstantin Lepikhov писал 2015-10-30 2:09:
...
>> Но MaxClients задаёт ограничение на количество процессов, общее для
>> всех пользователей и хостов.
>>
>> Есть параметр MaxClientsVhost, который можно указывать в конфиге 
>> сайта.
>> Но между ними большое отличие в поведении:
>> При превышении MaxClients Apache просто не реагирует на коннекты к
>> нему, таким образом накапливается очередь подключений,
>> и пользователи при перегрузке испытывают замедление реакции сайта.
> А цель какая? Ограничить кол-во подключений или кол-во процессов? 
> Если
> подключения, то да, limit_req в nginx для каждого vhost'а, если 
> процессы,
> то крутить cgroups.
Цель — ограничить количество одновременных процессов, обрабатывающих 
запросы к конкретному сайту.
limit_req даёт возможность ограничить количество обращений в секунду, и 
таким образом
может защитить от внешнего врага. Мне же нужно защититься от врага 
внутреннего.
Если сайт вместо 200мс начнёт отвечать за 10с (не важно по каким 
причинам), всё не должно рухнуть от
количества процессов апача и не должны пострадать соседи по апачу 
(другие сайты).
А cgroups будет давать ошибку при форке? И помешает другим процессам 
под этим же UID.

>> А ограничение по MaxClientsVhost сразу возвращает 503 при достижении
>> предела подключений. Что вовсе не желательно, потому
>> что для клиента выглядит как то, что сайт работает быстро, но иногда
>> вместо страницы — ошибка.
>>
>> Может быть есть всем известное решение, которое я не знаю?
>>
>> Другой вариант — это научить nginx ошибку 503 не передавать клиенту, 
>> а
>> ждать и пытаться получить от бэкенда более корректный ответ.
> в этом случае nginx должен что-то ответить клиенту вместо 503 
> (поскольку
> "ждать" он не умеет), что тоже не есть гуд.
Ну умеет же nginx proxy_next_upstream, и ждать он может, если ему не 
отвечать (при достижении ограничения через MaxClients).

Я для себя пока сделал вывод, что либо MaxClientsVHost должен уметь 
переводить запрос в очередь, как это делается при достижении MaxClients,
либо nginx должен уметь ждать и делать повторы. Он умеет это при 
нескольких upstream (там есть и timeout и количество попыток и код 
ошибки 503 понимает).
Видимо, это либо платная функциональность (в nginx Plus есть слово 
queue), либо достижима через расширение.


-- 
С уважением,
Виталий Липатов,
Etersoft


  reply	other threads:[~2015-10-30  8:37 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-10-29 20:46 Vitaly Lipatov
2015-10-29 20:44 ` Anton Gorlov
2015-10-29 23:09 ` Konstantin Lepikhov
2015-10-30  8:37   ` Vitaly Lipatov [this message]
2015-10-30 11:54     ` Konstantin Lepikhov
2015-10-31  8:20       ` Anton Gorlov
2015-11-02 17:41       ` Konstantin Lepikhov
2015-11-02 14:15     ` Sergey Alembekov
2015-11-02 14:12       ` Anton Gorlov
2015-11-02 14:44   ` Michael Shigorin
2015-11-02 14:49     ` Anton Gorlov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5895453bc51d32b06cc13937d483f457@office.etersoft.ru \
    --to=lav@altlinux.ru \
    --cc=sysadmins@lists.altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

ALT Linux sysadmins discussion

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/sysadmins/0 sysadmins/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 sysadmins sysadmins/ http://lore.altlinux.org/sysadmins \
		sysadmins@lists.altlinux.org sysadmins@lists.altlinux.ru sysadmins@lists.altlinux.com
	public-inbox-index sysadmins

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.sysadmins


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git