我正在嘗試開發一個能夠讓用戶在服務器上運行C程序的Django
網絡應用程序。我目前以下的步驟:使用Django進行遠程代碼執行的Web應用程序
- 代碼用戶類型和點擊了「
Submit
」按鈕 - 代碼進入服務器;服務器把它放在一個臨時文件
- 代碼是用匯編了呼叫
subprocess.Popen()
- 輸出(錯誤)返回到瀏覽器
這是一個簡單的模型,做工精細。但是,我不知道這是否是「完美」的模式,我有一些擔憂它的可擴展性(和安全性):
- 它會更好使用
threading
? - 使用
multiprocessing
會更好嗎? - 我自己提出的相關問題中指出了叉炸彈問題here - 如何處理?
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正在使用。
感謝您的所有建議!
你在做什麼,使用mod_wsgi和prefork MPM的嵌入模式是一個不好主意。去閱讀http://blog.dscpl.com.au/2009/03/load-spikes-and-excessive-memory-usage.html –