源地址:http://www.linuxde.net/2013/03/13097.html

全面解读python web 程序的9种部署方式

web server ---->application -----> DB server

主流的web server 一个巴掌就能数出来,apache,lighttpd,

application,中文名叫做应用服务,就是你基于某个web framework写的应用代码

DB server 泛指存储服务,web开发中用mysql比较多,最近几年因为网站规模扩大,memcache,redis这种key-value等存储也流行开来

放在最前面的web server有3个功能

高效率处理静态文件,web server都是用c开发,调用是native的函数,对IO,文件传输都做针对性的优化

充当一个简易的网络

处理高并发短连接请求,把成千上万用户的request 通过内网的几十个长连接进行转发,原因一个是web server处理高并发很专业,另外一个原因是大部分的application所用的框架都不具备处理高并发的能力

实际上,市面上有部分web framework由于内置了支持epoll/kqueue 等高效网络库,而具备了处理高并发的能力,比如说 python的tornado,

web server 强烈建议使用nginx,原因有三

性能非常卓越,非常稳定

安装简单,依赖包少

conf文件非常容易配置,比apache/lighttpd都要简单

部署python开发的web程序有9种方法

mod_python,这是apache内置的模块,很严重的依赖于mod_python编译使用的python版本,和apache配套使用,不推荐

cgi,这个太old,不推荐,而且nginx不支持cgi方式,只能用lighttpd或者apache

fastcgi ,这个是目前流行最广的做法,通过flup模块来支持的,在nginx里对应的配置指令是 fastcgi_pass

spawn-fcgi,这个是fastcgi多进程管理程序,lighttpd安装包附带的,和flup效果一样,区别是flup是 python代码级引入,spawn-fcgi是外部程序。spawn-fcgi用途很广,可以支持任意语言开发的代码,

scgi,全名是Simple Common Gateway Interface,也是cgi的替代版本,scgi协议很简单,我觉得和fastcgi差不多,只是没有怎么推广开来,nginx对应的配置指令是scgi_pass,你想用就用,flup也支持。

http,nginx使用proxy_pass转发,这个要求后端appplication必须内置一个能处理高并发的http server,在python的web框架当中,只能选择tornado.

python

现实当中,用java来做web程序,通常就用http和nginx配合,应用

uwsgi,包括4部分组成,

uwsgi协议

web server内置支持协议模块

application服务器协议支持模块

进程控制程序

nginx从0.8.4开始内置支持uwsgi协议,uwsgi协议非常简单,一个4个字节header+一个body,body可以是很多协议的包,比如说http,cgi等(通过header里面字段标示),我曾经做个一个小规模的性能对比测试,结果表明,uwsgi和fastcgi相比,性能没有太明显的优势,也可能是数据集较小的原因

uwsgi的特点在于自带的进程控制程序.它是用c语言编写,使用natvie函数,其实和spawn-fcgi/php-fpm类似。所以uwsgi可以支持多种应用框架,包括(python,lua,ruby,erlang,go)等等

Gunicorn,和uwsgi类似的工具,从rails的部署工具(Unicorn)移植过来的。但是它使用的协议是 WSGI,全称是Python Web Server Gateway Interface ,这是python2.5时定义的官方标准(PEP 333 ),根红苗正,而且部署比较简单,http://gunicorn.org/ 上有详细教程

mod_wsgi,apache的一个module,也是支持WSGI协议,https://code.google.com/p/modwsgi/

fastcgi协议和http协议在代码部署中的的优劣对比

fastcgi虽然是二进制协议,相对于http协议,并不节省资源。二进制协议,只能节省数字的表达,比如 1234567,用字符串表示需要7个Byte,用数字就是4个Byte,而字符串到哪里都一样

fastcgi在传输数据的时候,为了兼容cgi协议,还要带上一堆cgi的环境变量,所以和http协议相比,用fastcgi传输数据并不省,反而多一些

fastcgi 唯一的优点是,它是长连接的,用户并发1000个request,fastcgi可能就用10个 链接转发给后端的appplication,如果用http协议,那来多少给多少,会向后端appplication 发起1000个请求

http代理转发方式,在面对超高并发的情况下会出问题,因为,tcp协议栈当中,port是int16整型你本地新建一个connect,需要消耗一个端口,最多能到65536。外部并发几十万个请求,port池耗干,你的服务器只能拒绝响应了

总结

我个人习惯是用 fastcgi 协议部署python程序,简单省事,选择技术方案,一定要选择最简单最常见的,本博客的fastcgi运行脚本如下

kill -9 `cat /tmp/django.pid`

echo 'restart django....'

python ./manage.py runfcgi --settings=lutaf.settings_r maxchildren=8 maxspare=3 minspare=1 method=prefork pidfile=/tmp/django.pid host=127.0.0.1 port=9900 outlog=/tmp/dj.out errlog=/tmp/dj.error

推荐大家尝试 Gunicorn ,这是未来发展方向

python程序部署到tomcat服务器_全面解读python web 程序的9种部署方式相关推荐

  1. 部署mmdetection3d到服务器_采坑记录

    部署mmdetection3d到服务器_采坑记录 部署mmdetection3d到服务器_采坑记录 前提 步骤 验证 补充 后记 部署mmdetection3d到服务器_采坑记录 最近刚刚开通了学校的 ...

  2. web工程自动部署(tomcat服务器)

    工作中经常需要把web项目打成war包之后部署到tomcat服务器上,每次更新时步骤比较类似,这里提供公共步骤,编写名为auto_deploy.sh的shell脚本,只需要传递两个参数即可自动完成部署 ...

  3. android studio编写java项目,并部署到Tomcat服务器

    事件回顾:公司需求要自己实现一个即时通讯替换掉现在的第三方即时通讯.于是各种查阅资料,百度之后实现了一个简单的demo(由于本篇不是关于即时通讯的所以就不贴代码了),服务端代码能正常的在本地运行(在a ...

  4. java获取tomcat启动时间不对_部署在Tomcat 服务器中的web应用读取时间与系统时间不一致问题...

    我在部署应用到Ubantu系统上的tomcat服务器中运行,发现操作系统的时间和tomcat中的应用程序获取的时间不一致,总是相差8个小时,但是查看当前操作系统的时区也是CST时区(中国标准时区). ...

  5. 如何在tomcat下应用部署日志_教妹子用IDEA创建web应用,部署到Tomcat服务器

    自从上一篇原创发表之后,粉丝反应热烈.主要分两派,一派关注技术的,觉得看了那么多的公众号文章,终于找到一篇能看懂的了,于是沾沾自喜.另一派是关注妹子的,感叹自己空有一身绝技,公司里却无妹子可教,大喊可 ...

  6. git钩子放服务器_如何使用Git 钩子来自动化开发和部署任务

    介绍 版本控制已成为现代软件开发的中心要求. 它允许项目安全地跟踪更改,启用撤销,完整性检查和协作等好处. 在git的版本控制系统,特别是,已由于其分散式架构,并在它可以使和转让方之间变化的速度看到广 ...

  7. 如何将C 项目部署到云服务器上,如何将C 应用程序放在云服务器上

    如何将C 应用程序放在云服务器上 内容精选 换一换 ServiceStage是一个应用托管和微服务管理平台,可以帮助企业简化部署.监控.运维和治理等应用生命周期管理工作.面向企业提供微服务.移动和We ...

  8. 有了商城源码如何部署到本地服务器_怎么将本地做好的网站部署到服务器上?...

    例如自己自在本地开发好了一个web网站,如何部署到云服务器上,让别人访问?请大神指教 网站如果在本地已经配置好后,需要发布到服务器里的话,具体要怎么做呢! 首先在本地配置的话,只需要配置ip地址就可以 ...

  9. 安卓APP注册登录+Tomcat服务器搭建+MySQL数据库建立+加密传输+servlet后端内容编写及部署到Tomcat服务器

    认真学习安卓也有三四个月了,现在记录一下关于用户的各种操作. 1.安卓APP的实现: 先看一下展示动图吧! 首先是登录界面的xml---------activity_mian.xml <?xml ...

最新文章

  1. 开源仓库Harbor搭建及配置过程
  2. python queue 查询是否在队列中_python队列Queue的详解
  3. javascript中变量
  4. android 自定义view实现拖动放大缩小_自定义itemClickView
  5. 在Visual Studio 2010中创建多项目(解决方案)模板之关键步骤【四】
  6. createelement 设置id_还记得你的第一个网络ID是什么吗?
  7. 关于软件系统维护的一点想法
  8. 妲己机器人怎么升级固件_OnRobot新增爱普生川崎机器人套件、HEX固件升级
  9. Django 使用第三方服务发送电子邮件
  10. python自学视频教程 38-自学 Python,视频教程和代码一看就懂,动手就废,应该这么学...
  11. C# 自定义sqlserver表值函数
  12. 安卓交叉编译环境配置
  13. Git只获取部分目录的内容
  14. oracle数据库基本概念
  15. jspdf打印、pdf打印
  16. 高中计算机基础知识课件,高中信息技术基础教案
  17. 苹果修改wifi密码登陆服务器密码,iphone手机修改wifi密码
  18. python簇状柱形图_使用Matplotlib绘制堆积条形图
  19. elasticsearch SSL 证书过期解决办法
  20. Linux下缓冲区溢出攻击的原理及对策

热门文章

  1. excel批量导入图片名称和图片,图片与名称一一对应
  2. Apache和PHP部署(Windows)
  3. excel到期弹窗提醒桌面弹_求助Excel到期自动弹窗提醒
  4. scanf函数的用法
  5. python首字母不能是_Python实现将不规范的英文名字首字母大写
  6. Armadillo11还提供统计函数并支持复数
  7. 电信网通掐架 用户还要买单多久
  8. 关于算法,那些你不知道的事
  9. android studio输入框下划线,Android开发之TextView的下划线添加
  10. 一个HTTP打趴80%面试者,你是否也被面试官”虐“?