我有一个通过wsgi公开的python应用程序,并将其部署到世界。 没有从它提供的静态资产。 该应用程序将被部署到一台机器。 我将使用uwsgi来服务wsgi应用程序,并可以考虑两个选项:
通过机器上的单个uwsgi实例来服务,(弄清楚并用好多的工人/进程来旋转可能会启动2 *#个内核)
在同一台机器上运行多个uwsgi实例,每个实例都有一个worker,位于nginx之后。
在nginx后面运行单个uwsgi实例
有一件事要记住,服务器已经在负载均衡器后面了。
如果我有静态资产,我会考虑试用#2或#3。 因为没有静态文件,所以这似乎是矫枉过正。
在这种情况下,在nginx后面运行uwsgi会有什么好处吗? 反对一个单一的uswgi服务器与适当数量的工人?
我不太了解uWSGI,但是我无法想象任何使用情况,在同一台机器/虚拟机上运行几个类似的实例是明智的,因为它显然是为线程而devise的。 它只是额外的开销。 所以#2是不是一个真正的select(如果你的应用程序必须经常重新启动,修复你的代码,而不是使用这样的设置)。
#3听起来有点无用,但事实并非如此。 nginx并不是很多的开销,与python应用相比,在这种情况下性能和内存占用可能是微不足道的。 它确实会影响延迟,但是对于任何缺lessRTS游戏服务器的应用来说,这也不重要(而且http并不是为低延迟构build的)。 真正的问题是额外的configuration和另一个故障点。 但是,您的应用程序比经过严格testing的Web服务器更有可能失败,因此基本上可以归结为configuration。
有了这个方法,这里有一些事情要考虑。
如果您确定您的应用程序不会比您可以缩放代码更快(或根本不能扩展),则您不需要其额外的function(您的应用程序不像您想象的那样稳定!),你确定你的主机负载均衡能力,跳过nginx。 如果不是,或者如果你不是100%确定上面将保持真实,使用nginx。 它没有太多的开销,但可以为您节省很多麻烦。