1.如何部署pythonweb程序?
Python Web程序的部署方案
总的来说,nginx+uwsgi是高性能部署Python网站的第一种方式。
Apache+mod_wsgi是一种简单稳定的方式,性能一般。
API服务器可以直接使用tornado或者gevent。
mod_python
关于非常原始的cgi模式部署python没什么好介绍的。对于不追求性能的管理系统和网站,使用Apache部署是个不错的选择。早前使用mode_python部署python的web应用非常流行,官方文档甚至在Django 0.96中推荐了这种方法。
它将Python解释器嵌入到Apache服务器中,提供访问Apache服务器的接口。Mod_python目前性能很差。mod_python的每个http请求都会被一个进程初始化,加载代码,执行,然后销毁。
蓝狮登陆开户mod_wsgi
如果必须使用Apache部署python应用,mod_wsgi是更好的选择。WSGI的全称是Web服务器网关接口,由PEP-333定义。基本上所有python web框架都实现了wsgi接口,任何实现了wsgi的框架都可以用mod_wsgi来部署。事实上,python程序可以用mod_wsgi部署,不需要任何框架。使用mod_wsgi的daemon模式,python程序会常驻内存,初始化和销毁不会有很大的开销,所以性能比mod_python要好。综上所述,使用Apache部署python web程序,推荐使用mod_wsgi的daemon模式。
Fastcgi
首先,不建议fastcgi部署Python web。
几年前,由于lighttpd的流行和豆瓣的成功案例,fastcgi是一种非常流行的部署方式。Fastcgi与具体的语言或web服务器无关。这是一种通用的部署方法。Fastcgi是cgi的增强。CGI程序在独立的进程中运行,并且为每个Web请求建立一个进程。面对大量的请求,大量进程的建立和消亡大大降低了操作系统的性能。
FastCGI不是为每个请求创建一个新的进程,而是使用一个连续的进程来处理一系列请求。这些进程由FastCGI服务器管理,而不是由web服务器管理。当请求进来时,web服务器通过套接字(例如,fastcgi进程和web服务器都位于本地)或TCP连接(FastCGI服务器场,其中FastCGI进程位于远端)将环境变量和页面请求传递给FastCGI进程。
主流的web服务器,Apache,lighttpd,nginx Nginx都支持fastcgi。前几年lighttpd的mod_fcgi模块性能很强,lighttpd+fastcgi很受欢迎。无论是python、ruby还是php,都有大量的站点是这样部署的。由于nginx的兴起,现在很少有人用lighttpd了。
Fastcgi不是专门为python设计的。并不是所有的python框架都天然支持fastcgi,通常需要flup这样的容器来适配。Flup是python写的,和c实现的wsgi容器相比性能相当差,fastcgi对于新兴的wsgi容器的稳定性也有差距。无论如何,部署python web程序,fastcgi已经是过去式了。
uwsgi
几年前nginx还没有内置uwsgi模块的时候,部署uwsgi还是挺麻烦的。在nginx中直接使用uwsgi模块,uwsgi成为部署高性能python web程序最可靠、最便捷的方式。
在1U四核至强服务器上,一个简单的wsgi处理程序甚至可以用AB把qps压到8000以上,是tornado的完全爆发,接近gevent的性能。同时,uwsgi具有优异的稳定性。之前我们有一个站点,每天动态请求500w-1000w。uwsgi部署非常稳定。在一个毁坏的惠普1U服务器上,我们基本上不关心它。
上面提到的部署方式都是相对于网站而言的。移动互联网时代,我们需要高性能的API服务,这些都已经过时了。
龙卷风
龙卷风号称高性能。如果你和他一起写一个网站,一般般,就像uwsgi加一些简单的框架。它真正的功能是写API服务器和长连接服务器。
因为tornado可以直接处理http请求,所以很多人用他来直接裸奔提供服务。这种方式不可取,单线程tornado只能用cpu的一个核心,一旦阻塞,直接就没用了。通常supervisor启动多个tornado进程,通过nginx进行反向代理负载均衡。nginx 1.14以后,反向代理支持长连接,和tornado的comet配合的很好。
Tornado也有一些奇妙的用途,比如制作wsgi容器。
gevent
Gevent是一个可以做很多事情的神器。在web端,处理http请求实际上类似于tornado,但是要简单得多,而且没有cookie。用gevent编写的一些API服务的部署方式类似于tornado,supervisor管理多个守护进程,nginx进行负载平衡。同样,它的奇妙用法和tornado一样,可以用作wsgi容器。
2.编程时构建环境和框架是什么意思?
搭建一个环境就是你需要编程的语言,编程什么,调试什么的总和。
一般来说,搭建框架不是搭建框架,而是试图选择已有的框架。你在编程中总会遇到很多类似的问题和要求。为了避免重复编写,有人设计了一个框架来简化重复需求的编写。
就拿python来说,想用python写程序,必须安装python,必须有编辑器编码,想开发web,必须有WEB服务器测试。这些是编程环境。
构建环境是运行程序文件的基本环境,通常是解释器、服务器或虚拟机。比如java环境就是安装java虚拟机。php环境是安装php解释器。
发表评论