LINUX.ORG.RU
ФорумAdmin

Работа с WGSI без порождения процесса по каждому запросу пользователя

 , , ,


0

1

При работе со связкой apache2+mod_wsgi+kerberos возникает проблема, что apache на каждый http запрос порождает новый процесс с атрибутами сессии пользователя. В статье http://lab50.net/веб-приложения-в-защищённой-среде/ написано:

"Существует возможность использования запущенного WSGI-процесса для обработки последовательности запросов от пользователя в рамках постоянного HTTP-соединения. Веб-сервер не завершает запущенные обработчики WSGI в пределах параметра KeepAliveTimeout. Клиенты могут повторно использовать установленное соединение для ускорения обработки запросов."  

Как это реализовать? Далее в статье несколько слов про django - он поможет реализовать данную возможность (как)?

Ответ на: комментарий от WitcherGeralt

почитала, интересно. Точно ли префорк?

Apache MPM PreFork запускает по отдельному процессу на каждый запрос. Иначе говоря, каждый процесс одновременно обрабатывает только 1 поток (thread) на одно соединение. 

Зато вот этот вроде подходит:

Apache MPM Event. По принципу работы он очень похож на MPM Worker.  Главное отличие Event от Worker в том, что он поддерживает выделенный поток для каждого установленного соединения, и передает дочерним потокам запрос только после того, как он был непосредственно сделан. И сразу же после обработки этого запроса — поток освобождается для выполнения следующего запроса. Такой вариант отлично подходит для клиентов, которые делают не частые запросы, но поддерживают долгие keep-alive соединения с сервером.

Он эффективен?

Irbis88
() автор топика
Ответ на: комментарий от eternal_sorrow

как они на астре, сертифицированы ли и работают ли с ALD и мандатными метками, вот в чем вопрос) про apache даже в документации астры много инфы

Irbis88
() автор топика
Ответ на: комментарий от Irbis88

Если много моединений с keep-alive, то лучше использовать Nginx+Gunicorn, а не Apache+mod_wsgi.

Event это тот же worker, от которого ты, судя по теме, желаешь избавиться.

WitcherGeralt ★★
()
Ответ на: комментарий от eternal_sorrow

кого это волнует?

Ты не сечёшь. Прими за факт, что нужно. В МВД, например.

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Ответ на: комментарий от Irbis88

А, так вот оно что, у тебя Астра.

Чтобы работать с мандатными метками нужен mpm-itk, ты его и используешь, видимо. Я сразу не понял тебя, ибо кейс редкий. Хоть и подумал об этом, т.к. сам работал с Астрой, но я решил «процесс с атрибутами сессии пользователя» — это просто неудачная формулировка.

Вариантов нет, нужно порождать отдельный процесс, запущенный от авторизованного юзера, на каждый запрос.

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Ответ на: комментарий от WitcherGeralt

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

Apache MPM PreFork запускает по отдельному процессу на каждый запрос

Как раз порождает кучу процессов. Сейчас он и стоит (правда проверить работу нет возможности, пока все в теории). Что префорк стоит проверяю так.

# apachectl -t -D DUMP_MODULES | grep mpm
mpm_prefork_module (shared)

А Apache MPM Event я так понимаю как раз порождает единый процесс на сессию, но проблема в том, что он по видимому как-то по очереди работает (как я это понимаю по прочитанному, возможно неверно). Или нет?

Irbis88
() автор топика
Ответ на: комментарий от Irbis88

Apache MPM Event я так понимаю как раз порождает единый процесс на сессию, но проблема в том, что он по видимому как-то по очереди работает

Что ты подразумеваешь под сессией в данном контексте? Незакрытое соединение с ssl и keep-alive? Процессы в зависимости от настроек будут работать всегда, а не только для конкретного юзера запускаться.

Это новый MPM, я его не юзал никогда. Вообще доавно в последний раз апач настраивал. Судя по описанию, это тот же воркер, который работает с соединениями асинхронно (упоминаются kqueueи epoll), пока не рридёт запрос и не освободится поток в пуле.

Лимит процессов в любом случае настраивается, так же как и лимит потоков в воркере. Они могут работать всегда, могут умирать.

Там что там с мандатными доступами? Event тебе не поможет тут.

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 3)
Ответ на: комментарий от Irbis88

нее,задача стоит наоборот, чтобы был один процесс,либо один процесс на метку

То есть пойти вопреки требованиям по безопасности в астре?

anonymous
()

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

А могут и не использовать. Что клиент? оно умеет в keepalive [1]?

[1] https://en.wikipedia.org/wiki/HTTP_persistent_connection

drsm ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.