2013-05-01 271 views
0

我有使用uwsgi和nginx部署的python web應用程序(WSGi)。我將爲許多用戶(客戶)提供此應用程序 - 每個用戶都有自己的設置,數據庫,模板,數據文件夾等。應用程序的代碼可以共享。Python web應用程序部署多個應用程序實例

我最初的想法是每個客戶都有一個uwsgi進程。但這是相當浪費的做法,因爲目前該應用程序具有大約100MB的內存佔用量。我預計這些實例中的大多數都會在大部分時間裏休眠(每天最多500次請求)。

我想出了這個解決方案:

應用程序將在方式修改,即一個實例可以服務於更多的客戶。基於所請求的域,它將爲該客戶準備(加載)正確的設置,數據庫連接等。

這是個好主意嗎?或者我應該專注於降低內存佔用?

謝謝你的回答!

+0

如果多個用戶請求相同的域名會怎麼樣? – 2013-05-01 12:16:10

+0

我希望我沒有太多簡化這個問題......但是當然,這個應用程序是(並且將會)運行多次(多進程)並且是線程化的。 – JoshuaBoshi 2013-05-01 12:20:28

回答

1

該應用程序將以這種方式進行修改,即一個實例可能爲更多的客戶提供 服務。根據請求的域,它將爲該客戶準備(加載)正確的設置,數據庫連接等。

這是個好主意嗎?

嗯,我已經使用在生產類似的系統,其中有應用的n實例,但每個實例都可以服務於任何客戶,基於HTTP Host頭,而且它工作得很好。

由於客戶數量足夠多,每個客戶只需要一個實例可能不具有成本效益,甚至不實用。

+0

非常感謝你的回覆。你有沒有遇到過這個系統的意外問題?乍一看,對我來說似乎很簡單。 – JoshuaBoshi 2013-05-01 12:43:44

+0

@JoshuaBoshi雖然這個系統的設計目的是從頭開始工作,而不是稍後修改,但並不是真的。這主要是爲了讓稍後添加新客戶變得微不足道,並且還可以更輕鬆地處理域重定向。如果沒有看到來自您的實施的一些示例代碼,我不能更具體。例如,如果上下文切換是昂貴的,例如加載設置以及建立數據庫連接,那麼您可能會遇到問題。我所能建議的就是嘗試一下,看看它的工作效果如何。 – Aya 2013-05-01 12:49:30

+0

對,我應該早點問這個問題:)但我想,這不會是這樣的問題。我將使用sqlalchemy的連接池並將其他內容(如設置)保存在內存中(對於每個客戶),因此上下文切換成本應該最小。非常感謝你! – JoshuaBoshi 2013-05-01 13:14:19