cgi,wsgi,uwsgi简介

原创 ryan007  2017-03-30 11:11  阅读 403 次

回顾一下Web协议出现顺序:

CGI -> FCGI -> WSGI -> uwsgi

  1. CGI,最早的协议
  2. FCGI,比CGI快
  3. WSGI,Python专用的协议
  4. uwsgi,比FCGI和WSGI都快,是uWSGI项目自有的协议,主要特征是采用二进制来存储数据,之前的协议都是使用字符串,所以在存储空间和解析速度上,都优于字符串型协议.官方介绍

CGI(Common Gateway Inteface): 字面意思就是通用网关接口,我觉得之所以看字面意思跟没看一样是因为这个称呼本身很学术,所以对于通俗的理解就存在一定困难,这里我觉得直接把 Gateway 当作 server 理解就好。

 

它是外部应用程序与Web服务器之间的接口标准

意思就是它用来规定一个程序该如何与web服务器程序之间通信从而可以让这个程序跑在web服务器上。当然,CGI 只是一个很基本的协议,在现代常见的服务器结构中基本已经没有了它的身影,更多的则是它的扩展和更新。

在讲更进一步之前首先我们要了解目前比较常见的服务端结构:

假设我们使用 python 的 Django 框架写了一个网站,现在要将它挂在网上运行,我们一般需要:

  1. nginx 做为代理服务器:负责静态资源发送(js、css、图片等)、动态请求转发以及结果的回复;
  2. uWSGI 做为后端服务器:负责接收 nginx 请求转发并处理后发给 Django 应用以及接收 Django 应用返回信息转发给 nginx;
  3. Django 应用收到请求后处理数据并渲染相应的返回页面给 uWSGI 服务器。

接下来的协议及接口就是应用在以上三者之间:

FastCGI: CGI的一个扩展, 提升了性能,废除了 CGI fork-and-execute (来一个请求 fork 一个新进程处理,处理完再把进程 kill 掉)的工作方式,转而使用一种长生存期的方法,减少了进程消耗,提升了性能。

这里 FastCGI 就应用于前端 server(nginx)与后端 server(uWSGI)的通信中,制定规范等等,让前后端服务器可以顺利理解双方都在说什么(当然 uWSGI 本身并不用 FastCGI, 它有另外的协议)

WSGI(Python Web Server GateWay Interface):它是用在 python web 框架编写的应用程序与后端服务器之间的规范(本例就是 Django 和 uWSGI 之间),让你写的应用程序可以与后端服务器顺利通信。在 WSGI 出现之前你不得不专门为某个后端服务器而写特定的 API,并且无法更换后端服务器,而 WSGI 就是一种统一规范, 所有使用 WSGI 的服务器都可以运行使用 WSGI 规范的 web 框架,反之亦然。

uWSGI: 是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。用于接收前端服务器转发的动态请求并处理后发给 web 应用程序。

uwsgi: 是uWSGI服务器实现的独有的协议, 网上没有明确的说明这个协议是用在哪里的,我个人认为它是用于前端服务器与 uwsgi 的通信规范,相当于 FastCGI的作用。

 

有人对三者的性能做了对比,请看下图:

 

 

实战:看看Django中,各个组件之间如何联系的,简单来讲,这些名词的关系就是下图:

对于 CGI ,我认为在 CGI 制定的时候也许没有考虑到现代的架构,所以他只是一个通用的规范,而后来的 WSGI 也好 Fastcgi 也好等等这些都是在 CGI 的基础上扩展并应用于现代Web Server 不同地方的通信规范, 所以我在图中将 CGI 标注在整个流程之上。

注意:有些版本的nginx对“IP:port”这种格式支持不好,请使用socket:

location / {
    include    uwsgi_params;
    uwsgi_pass localhost:9000;
}

改为:

location / {
    include    uwsgi_params;
    uwsgi_pass unix:///tmp/a.sock;
}

 

 

为什么要用uWSGI

uWSGI的主要特点如下:

◆超快的性能。

◆低内存占用(实测为apache2的mod_wsgi的一半左右)。

◆多app管理。

◆详尽的日志功能(可以用来分析app性能和瓶颈)。

◆高度可定制(内存大小限制,服务一定次数后重启等)。

更多也可以参看ppt

 

tips: 如果您要测试、应用请您参考http://uwsgi-docs.readthedocs.io/en/latest/

uwsgi配置django的文章非常多,在此不再一一叙述,本篇介绍结束。如果对您有帮助,请您打赏~

本文地址:http://it.zhongduwang.com/articles/uwsgi-desc
版权声明:本文为原创文章,版权归 ryan007 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

  1. 动物世界
    动物世界 @回复

    django现在用的人还是很少啊