Python Web部署方式

CGI 即通用网关接口(Common Gateway Interface),是外部应用程序(CGI程序)与Web服务器之间的接口标准,是CGI程序和Web服务器之间传递消息的规程。CGI规范允许Web服务器执行外部程序,并将它们输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。通俗的讲CGI就像是一座桥,把网页和Web服务器中的执行程序连接起来,他把HTML接受的指令传递给服务器的执行程序,再把服务器执行的结果返还给HTML页。CGI的跨平台性能极佳。几乎可以在任何操作系统上实现。
 CGI方式在遇到连接请求(用户请求)先要创建CGI的子进程,激活一个CGI进程,然后处理请求,处理完后结束这个子进程。这就是fork-and_execute模式。所以用CGI方式的服务器有多少连接请求就会有多少子进程,子进程反复加载是CGI性能低下的主要原因。当用户请求数量非常多时,会大量挤占系统的资源如内存,CPU时间等,造成效能低下。
  CGI脚本工作流程
 1.浏览器通过HTML表单或超链接请求指向一个CGI应用程序的URL。
 2.服务器执行服务器收发到请求。所指定的CGI应用程序。
 3.CGI应用程序执行所需要的操作,通常是基于浏览者输入的内容。
 4.CGI应用程序把结果格式化为网络服务器和浏览器都能够理解的文档(通常是HTML网页)
 5.网络服务器把结果返回到浏览器中
 Python有CGI模块可支持原生CGI程序
 FastCGI:
 FastCGI是一个可伸缩地、高速地在Http Server和动态脚本语言间通信的接口。多数流行的Http Server都支持FastCGI,包括Apache、Nginx和lighttpd等,同时,FastCGI也被许多脚本语言所支持,其中就有Python。FastCGI是从CGI发展改进而来的。传统CGI接口方式的主要缺点是性能很差,因为每次HTTP服务器遇到动态程序时都需要重新启动脚本解析器来执行解析,然后结果被返回给HTTP服务器。这在处理高并发访问时,几乎是不可用的。FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行者,只要激活后,不会每次都要花费时间去fork一次。CGI就是所谓的短生存期应用程序,FastCGI就是所谓的长生存期应用程序。由于FastCGI程序并不需要不断的产生新进程,可以大大降低服务器的压力并且产生较高的应用效率。他的速度效率至少要比CGI提高5倍以上。它还支持分布式的运算,即FastCGI程序可以在网站服务器以外的主机上执行并且接受来自其他网站服务器来的请求。
 FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail-Over特性等等。FastCGI接口方式采用C/S结构,可以将Http服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当Http服务器每次玉带动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让Http服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。
 FastCGI的工作流程
 1.Web Server启动时载入FastCGI进程管理器
 2.FastCGI进程管理器自身初始化,启动多个CGI解释器进程并等待Web Server的连接
 3.当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web Server将CGI环境变量和标准输入发送到FastCGI子进程。
 4.FastCGI子进程完成处理后将标准输出和错误信息从同一个连接返回Web Server。当FastCGI子进程关闭连接时,请求便处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server)中的下一个连接。
 FastCGI 的特点:
1.打破传统页面处理技术。传统的页面处理技术,程序必须与 Web 服务器或 Application 服务器处于同一台服务器中。这种历史已经早N年被FastCGI技术所打破,FastCGI技术的应用程序可以被安装在服务器群中的任何一台服务器,而通过 TCP/IP 协议与 Web 服务器通讯,这样做既适合开发大型分布式 Web 群,也适合高效数据库控制。
2.明确的请求模式。CGI 技术没有一个明确的角色,在 FastCGI 程序中,程序被赋予明确的角色(响应器角色、认证器角色、过滤器角色)。
WSGI
Python Web服务器网关接口是为Python语言定义的Web服务器和web应用程序或框架之间的一种简单而通用的接口。自从WSGI被开发出来后,许多语言也出现了类似的接口。WSGI是作为Web服务器与Web应用程序或应用框架之间的一种低级别的接口,以提升可移植Web应用开发的共同点。WSGI是基于现存的CGI标准而设计的。
WSGI区分为两个部分:一为“服务器”或“网关”,另一为“应用程序”或“应用框架”。早处理一个WSGI请求时,服务器会为应用程序提供环境上下文及一个回调哈数。当应用程序完成处理请求后,透过先前的回调函数,将结果回传给服务器。所谓的WSGI中间件同时实现了API的两方,因此可以在WSGI服务和WSGI应用之间起调解作用:从WSGI服务器的角度来说,中间件扮演应用程序,而从应用程序的角度来说,中间件扮演服务器。“中间件”组件可以执行以下功能:
1.重写环境变量后,根据目标URL,将请求消息路由到不同的应用对象
2.允许在一个进程中同时运行多个应用程序或应用框架
3.负载均衡和远程处理,通过在网络上转发请求和响应消息
4.进行内容后处理,例如应用XSLT样式表
以前,如何选择合适的Web应用程序框架成为困扰Python初学者的一个问题,这是因为,一般而言,Web应用框架的选择将限制可用的Web服务器的选择,反之亦然。那时的Python应用程序通常是为CGI,FastCGI,mod_python中的一个而设计,甚至是为特定Web服务器的自定义的API接口而设计的。WSGI没有官方的实现, 因为WSGI更像一个协议。只要遵照这些协议,WSGI应用(Application)都可以在任何服务器(Server)上运行, 反之亦然。WSGI就是Python的CGI包装,相对于Fastcgi是PHP的CGI包装。
WSGI将Web组件分为三类:web服务器,web中间件,web应用程序,WSGI基本处理模式为

WSGI Server->(WSGI Middleware)->WSGI Application。


uwsgi:
uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。据称其效率是fcgi的10倍。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值