Web applications 将基于Python的WebApp部署到Web服务器上,哪种方式更流行?

Web applications 将基于Python的WebApp部署到Web服务器上,哪种方式更流行?,web-applications,deployment,webserver,Web Applications,Deployment,Webserver,我只知道WSGI、FCGI(FastCGI)和uWSGI。 如果你认识其他人,请告诉我。 上述三种方式的应用现状如何,哪一种更受欢迎? 谢谢。我宁愿用。但另一种方法是使用。你把事情弄糊涂了 WSGI是一种API规范。它本身并不是一种部署任何东西的方式。特定的WSGI部署机制将是WSGI规范的实现,它将遵循WSGI规范的Python web应用程序与特定的web托管机制连接起来。这可能是web应用程序最终嵌入到同一web服务器进程中的地方,或者是它通过套接字协议与单独的web服务器通信的地方 FA

我只知道WSGI、FCGI(FastCGI)和uWSGI。 如果你认识其他人,请告诉我。 上述三种方式的应用现状如何,哪一种更受欢迎?
谢谢。

我宁愿用。但另一种方法是使用。你把事情弄糊涂了

WSGI是一种API规范。它本身并不是一种部署任何东西的方式。特定的WSGI部署机制将是WSGI规范的实现,它将遵循WSGI规范的Python web应用程序与特定的web托管机制连接起来。这可能是web应用程序最终嵌入到同一web服务器进程中的地方,或者是它通过套接字协议与单独的web服务器通信的地方

FASTCGI是用于在web应用程序进程和web服务器之间进行通信的套接字协议的一个实例。就Python web应用程序而言,flup是FASTCGI和Python web应用程序之间的WSGI适配器桥接实现的一个示例。套接字协议的另一个示例是SCGI

uWSGI是一个实现,它实际上是一个托管各种语言的web应用程序的保护伞。它可以直接处理HTTP,但通常使用自己的名为uwsgi(小写)的套接字协议与web服务器通信。它通过插件系统支持的语言之一是Python,因此在直接处理它时,它可以作为其uwsgi协议或HTTP的WSGI适配器的实现

至于您可能想问什么,在Python世界中,最流行的WSGI部署机制是:

  • Apache/mod_wsgi
  • uWSGI
  • 古尼科恩
Apache/mod_wsgi是最古老的,被公认为坚如磐石。许多人没有花时间学习如何为pythonweb应用程序正确配置Apache,因此没有充分利用它,从而导致对Apache的许多错误印象。对那些说Apache速度慢且臃肿的人要非常怀疑。这仅仅表明他们从未正确设置Apache。真正让Apache/mod_wsgi大放异彩的最好方法之一是在nginx背后使用它。在使用Apache/mod_wsgi时,最好使用它的守护程序模式,除非您真正知道自己在做什么

gunicorn服务器是一个纯Python服务器,因此具有吸引力。但它仅限于单线程同步工作线程,不支持传统的多线程。因此,您必须使用多进程配置,尽管这在CPU密集型任务中有好处,但对于I/O绑定的任务,正如web应用程序通常使用的那样,这意味着它可以使用比使用多线程和多处理的配置良好的Apache设置多得多的内存。你也可以在gunicorn中使用一些基于couroutine的worker,但是你必须非常小心地使用它们,并确保你使用的所有应用程序代码和模块都是greenlet感知的,并且可以与协同程序一起工作,或者你可能会遇到单点阻塞整个过程的问题

尽管在Apache/mod_wsgi前面使用nginx是一个非常好的组合,但大多数人还是选择了nginx后面的uWSGI。uWSGI的一个问题是,它有太多不同的设置方式,其默认设置不是最好的,您需要确保使用某些选项使其更加健壮。基于uWSGI的代码仍然可以看到非常快速的发展,这在过去一直是一个可靠性问题。因此,请确保您没有使用Linux发行版附带的旧版本,请确保您使用的是最新版本

至于哪一个是最好的,当设置正确时,两者之间的性能差异应该不会太大。瓶颈通常不会出现在部署机制中,除非您把它们的配置搞砸了。真正的瓶颈将出现在web应用程序、数据库和后端服务中

因此,一般来说,您最好根据系统管理员或您自己的理解选择一个,并认为您可以配置和管理最简单的。试着忽略那些虔诚地试图引导你去他们喜欢的人,因为对他们有用的东西并不总是对你有用。对于一个严肃的网站,你需要正确地评估什么是最好的,然后投入适当的精力来正确地建立它,而不是简单地放弃它,并期待最好的结果

现在我还没有提到龙卷风。在Tornado之上使用WSGI不是一个好的选择,除了特定的用例,因为在ASYNC Tornado之上运行阻塞WSGI可能会出现问题。如果您想使用异步API而不是WSGI,那么Tornado和Twisted都是合理的选择。不过,编写异步API可能要复杂得多,在某些情况下,您必须小心使用Tornado,尤其是在执行大量数据上传时,因为Tornado在处理请求之前是如何缓冲请求内容的


最后一点。在复杂的系统中,完全可能需要使用多种技术。不要以为你应该在每件事上都使用一种技术。使用WSGI web框架可以简化web应用程序编程,但WSGI的阻塞特性不一定适合某些高度并发的长轮询类型应用程序。因此,您确实需要了解web应用程序的不同部分需要什么,并将其分解,为每个部分使用适当的技术,而不是在一种技术中使用一个巨大的单片应用程序来尝试做任何事情。

每种方法都有其优点和缺点,mod_wsgi似乎只适用于Apache。谢谢。非常感谢您的帮助。