uWSGI 虛擬主機模式與觸摸重載
到目前為止,我一直在嘗試使用uWSGI來替換許多在監督下為 Python wsgi 應用程序建構和設置的 kludgy 伺服器程式碼。我同時執行了幾十個這樣的小項目(Django、Flask 等)。
目前我在Virtualhost模式下執行,我允許 NGINX 基本上隨意呼叫應用程序。但是,似乎重新載入功能“觸摸重新載入”是針對特定文件的。
有沒有辦法使用“touch-reload”來監控正在執行的模組,無論是通過每個站點指定它還是自動指定它?或者有沒有辦法允許為每個應用程序配置觸摸重新載入?
我還研究了皇帝模式,這似乎是一個稍微不那麼令人敬畏的替代品,但我不確定我的案例是否會導致數十個甚至數百個程序產生。我喜歡虛擬主機模式,因為它本質上在所有應用程序上共享一個工作池,這對我來說似乎是最有效的。
目前配置:
uWSGI
<uwsgi> <vhost-host/> <master/> <gid>www-data</gid> <uid>www-data</uid> <catch-exceptions/> <socket>/var/tmp/uwsgi.sock</socket> <chmod-socket/> <idle>300</idle> <processes>6</processes> <no-orphans/> <enable-threads/> <reload-mercy>5</reload-mercy> <threads>10</threads> <no-default-app/> <touch-reload/> <!-- <reload-on-rss>128</reload-on-rss> Reload at 128MB of RSS (memory usage) --> </uwsgi>
更新:
在對 uWSGI 如何處理關閉空閒工作人員進行了一些研究之後,我想我畢竟需要皇帝模式。
我想做的是讓很少使用的應用程序不佔用資源,而經常使用的應用程序佔用更多資源。我正在嘗試這樣做,同時維護像 PHP-FPM 一樣簡單的託管部署。虛擬模式實現了這一點,但似乎只有在所有應用程序都空閒後才會關閉所有工作人員,如果任何應用程序接收到穩定的流量,這將沒有用。如果這是不真實的,我很想在這個問題上得到糾正。
使用皇帝模式的缺點是我必須為每個應用程序製作套接字文件和配置文件(blech!)。我仍然想知道是否可以按照上面提到的方式實現每個應用程序的重新載入。
你應該在官方郵件列表中詢問,你所有的陳述都是真實的,所以你應該嘗試在列表中要求改進。
如果您正在執行多個應用程序,您可能需要在大多數案例(包括您所描述的)
emperor
中取代模式的模式。vhost
對於跨所有應用程序動態擴展工作人員,您有多種選擇。
最簡單的可能是uWSGI 的
cheaper
子系統。它提供了非常細粒度的控制來設置每個應用程序的最小和最大工作人員數量,以及在所有應用程序中強制執行全域記憶體限制(因此,如果所有應用程序同時出現峰值,您就不會完全崩潰。)如果您想要一個跨所有應用程序共享的工人池(而不是為每個應用程序向上/向下旋轉工人),那麼稍微複雜一點的解決方案是皇帝 + Broodlord + Zergs。最好的起點可能是關於 Broodlord 模式的官方文件:http: //uwsgi-docs.readthedocs.org/en/latest/Broodlord.html