Я пытаюсь разработать веб-приложение с Django
, которое позволило бы пользователям запускать программы на С на сервере.В настоящее время я выполняю следующие шаги:
- Пользователь вводит код и нажимает кнопку '
Submit
' - Код отправляется на сервер;сервер помещает его во временный файл
- код компилируется с использованием вызова
subprocess.Popen()
- Вывод (ошибка) возвращается обратно в браузер
Этопростая модель и работает нормально.Однако я не уверен, что это «идеальная» модель, и у меня есть некоторые опасения по поводу ее масштабируемости (и безопасности):
- Было бы лучше использовать
threading
? - Было бы лучше использовать
multiprocessing
? - Вопрос о бомбе-вилке был отмечен в связанном с этим вопросе, который я поднял здесь - как с этим бороться?Могут ли следующие настройки в
apache2.conf
справиться с такими ситуациями?
# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
Я рассматриваю случай, когда, скажем, 5, 15, 50 пользователей будут пытаться запустить свой код параллельно,Кроме того, на данный момент я предполагаю, что вредоносный код не будет написан.
Просто упомяните, что mod_wsgi
и mpm-prefork
с Apache2 используются.
Спасибо за все ваши предложения!