Flask是一個web框架,用它編寫的任何應用程序都需要一個WSGI服務器來承載它。雖然您可以使用Flask內置開發人員服務器,但您不應該認爲這不適用於生產系統。因此,您需要使用WSGI服務器,如uWSGI,gunicorn或mod_wsgi(mod_wsgi-express)。由於Web應用程序由WSGI服務器託管,因此它只能位於同一個容器中,但Flask沒有單獨的進程,它在Web服務器進程中運行。
無論你需要一個單獨的網絡服務器,如Nginx,然後取決於。在mod_wsgi的情況下,您不會使用Apache Web服務器,因此可以從中直接獲益。當使用mod_wsgi-express時,它也已經設置爲以最佳的基本配置運行,並且它如何避免需要一個單獨的面向前端的web服務器,就像人們在使用uWSGI或gunicorn時經常使用nginx一樣。
對於集裝箱系統,其中平臺已經提供了一個用於負載平衡的路由層,就像Kubernetes中的入口一樣,在混合中使用nginx可能會增加額外的複雜度,而這些複雜度並不需要,可能會降低性能。這是因爲您必須在同一容器中運行nginx,或者在同一個容器中創建單獨的容器,並使用共享的卷類型允許它們仍然通過UNIX套接字進行通信。如果您不使用UNIX套接字並使用INET套接字,或者在完全不同的pod中運行nginx,那麼當您爲流量引入額外的跳躍時,這會有點毫無意義,而這將比密切關注它更昂貴使用UNIX套接字綁定。 uWSGI服務器在與nginx結合使用時通過INET接受請求時表現不佳,並且nginx位於單獨的pod中,可能位於不同的主機上,可能會使情況更糟。
在前面使用nginx的部分原因是它可以保護您免受緩慢的客戶端由於請求緩衝,以及其他潛在的問題。當使用入口時,你已經有了一個haproxy或nginx前端負載均衡器,可以在一定程度上保護你免受這種負載。所以這真的要取決於你在做什麼,以確定在混合中是否引入了額外的nginx代理。將gunicorn或uWSGI直接放在負載平衡器的後面可能會更簡單。
建議如下。
你的燒瓶app和uwsgi/gunicorn必須放在同一個容器中,nginx放在單獨的容器中。 – johnharris85