Ограничение максимального количества одновременных запросов django / apache - PullRequest
4 голосов
/ 27 апреля 2010

У меня есть сайт django, который демонстрирует использование инструмента. Одно из моих представлений принимает файл в качестве входных данных и выполняет довольно тяжелые вычисления с помощью внешнего сценария Python и возвращает некоторые выходные данные пользователю. Инструмент работает достаточно быстро, чтобы вернуть результат в том же запросе. Однако я хотел бы ограничить количество одновременных запросов для этого URL / представления, чтобы сервер не перегружался.

Какие-нибудь советы, как мне поступить? Сама по себе страница очень проста, и ее использование будет низким.

Ответы [ 2 ]

4 голосов
/ 27 апреля 2010

Предполагая, что вы используете mod_wsgi, вы можете сегментировать приложение WSGI по нескольким группам процессов демона mod_wsgi с конкретными URL-адресами, которые вы хотите ограничить, делегировать их собственной группе процессов демона mod_wsgi с меньшим числом процессов / потоков.

WSGIDaemonProcess myapp processes=2 threads=10
WSGIDaemonProcess myapp-restricted threads=2

WSGIScriptAlias / /some/path/app.wsgi

WSGIProcessGroup myapp

<Location /some/specific/url>
WSGIProcessGroup myapp-restricted
</Location>

Обратите внимание, что запросы, поставленные в очередь для получения доступа к этим двум потокам в ограниченном процессе, будут по-прежнему использовать рабочий поток в дочерних процессах основного сервера Apache. Таким образом, вы хотите убедиться, что вы используете рабочий MPM (поэтому не mod_php) и настраивает MPM с достаточным количеством резервных потоков для обработки этих резервных запросов, а также обычного трафика.

1 голос
/ 27 апреля 2010

Это действительно вопрос о mod_wsgi, предполагая, что вы используете его для обслуживания своего приложения из Apache (а если нет, то действительно так и должно быть).

Создатель mod_wsgi, Грэм Дамплтон, иногда зависает вокруг этих частей, но, ожидая его появления, вы можете посмотреть превосходную документацию Похоже, что один или другой аргумент директивы WSGIDaemonProcess может быть тем, что вы ищете.

...