QoS

Gena Makhomed gmm at csdoc.com
Fri May 23 00:46:49 MSD 2008


On Tuesday, May 20, 2008 at 17:25:20, Андрей wrote:

А> почему я не могу выдать пользователю html мгновенно

можно, если есть свободные воркеры
и этот html уже будет в memcached.

А> плохо то что пользователь не может видеть страницу,
А> хотя процессор не нагружен, сеть хорошая и отдача должна
А> происходить мгновенно.

второй вариант решения - прикрутить к php eAccelerator, APC или XCache.
тогда mod_php / php-fpm будет брать php скрипты прямо из shared memory,
вообще без обращения к дисковой подсистеме. но нужны свободные воркеры.

А> Варианта два - либо  все воркеры заблокированы, либо
А> чтение самой php-страницы с диска происходит медленно.

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

другой вариант решения - запустить два различных экземпляра nginx
(на разных IP) - один для отдачи статики, а другой для отдачи html.
я еще не пробовал, поэтому советовать не буду. второй экземпляр apache,
например, у меня удалось запустить только сделав копию бинарного файла.

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

хотя, такого же эффекта очень быстрой отдачи html можно было бы достичь,
если внутри nginx разделить все воркеры на несколько различных классов:

- 0 class/pool, занимается только отдачей из memcached,
- 1 class/pool, занимается только отдачей от fastcgi backend`ов,
- 2 class/pool, занимается только отдачей от http_proxy backend`ов,
- 3 class/pool, занимается только отдачей содержимого cache.
- 4 class/pool, занимается только отдачей static_best_effort.
- 5 class/pool, занимается только отдачей static_idle_priority.

PS реализовать поддержку aio - это вариант борьбы с этой же проблемой,
только другим способом: сделать так, чтобы все воркеры на диске (почти)
не блокировались. не знаю, какой вариант будет лучше (надежнее и быстрее).

PPS в случае DDoS-атаки / большой нагрузки полезной была бы возможность
включить QoS для отдачи статики - какие файлы отдавать в первую очередь,
а какие можно задержать / отбросить. с помощью aio это труднореализуемо.

если воркеры будут разделены на классы - disk io QoS можно реализовать
средствами операционной системы через io scheduling class and priority
ioprio_set(2), чтобы дисковая подсистема сервера работала с учетом QoS
даже после того, как nginx уже отправил запрос на чтение ядру системы.

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

-- 
Best regards,
 Gena






More information about the nginx-ru mailing list