亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

9種python web 程序的部署方式小結

系統 1982 0

主流的web server 一個巴掌就能數出來,apache,lighttpd,nginx,iis

application,中文名叫做應用服務,就是你基于某個web framework寫的應用代碼DB server 泛指存儲服務,web開發中用mysql比較多,最近幾年因為網站規模擴大,memcache,redis這種key-value等存儲也流行開來
放在最前面的 web server 有3個功能

高效率處理靜態文件 ,web server都是用c開發,調用是native的函數,對IO,文件傳輸都做針對性的優化

充當一個簡易的網絡防火墻 ,可以denny一些ip,簡單的控制并發連接數量等等,聊勝于無

處理高并發短連接請求 ,把成千上萬用戶的request 通過內網的幾十個長連接進行轉發,原因一個是web server處理高并發很專業,另外一個原因是大部分的application所用的框架都不具備處理高并發的能力

實際上,市面上有部分web framework由于內置了支持epoll/kqueue 等高效網絡庫,而具備了處理高并發的能力,比如說 python的tornado,java系的tomcat,jetty等等,有人就去掉前端的web server,直接裸奔,但是在部署公網應用時候,最好別這樣做,因為前面提到的1,2兩個原因,用戶brower到web server的網絡狀況是千奇百怪,你無法想象的,

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用途很廣,可以支持任意語言開發的代碼,php,python,perl,只要你代碼實現了fastcgi接口,它都可以幫你管理你的進程

scgi ,全名是Simple Common Gateway Interface,也是cgi的替代版本, scgi協議 很簡單,我覺得和fastcgi差不多,只是沒有怎么推廣開來,nginx對應的配置指令是scgi_pass,你想用就用,flup也支持。

http ,nginx使用proxy_pass轉發,這個要求后端appplication必須內置一個能處理高并發的http server,在python的web框架當中,只能選擇tornado.

python程序員喜歡發明輪子,tornado除了是一個web framework之外,它還可以單獨提供高性能http server,所以,如果你采用其他python框架寫代碼,比如說bottle,也一樣可以通過import tornado 來啟動一個高性能的http server,同樣的可以采用http協議和nginx一起來部署。擴展開來,python包里面能處理高并發的http server還有很多,比如說gevent,也可以被其他框架引用來支持http方式部署。

現實當中,用java來做web程序,通常就用http和nginx配合,應用服務器選擇tomcat或者jetty

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 - `cat / tmp / django.pid`
echo 'restart django....' 
python . / manage.py runfcgi - - settings = lutaf.settings_r maxchildren =  maxspare = minspare =  method = prefork pidfile = / tmp / django.pid host = 127.0 . 0.1  port = outlog = / tmp / dj.out errlog = / tmp / dj.error
          

推薦大家嘗試 Gunicorn ,這是未來發展方向


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲天堂久久精品成人 | xxxx性xx另类 | 日韩欧美一区二区三区四区 | 国产欧美综合一区二区 | 久久婷婷激情 | 国产性一交一乱一伦一色一情 | 中文字幕在线高清 | 视频二区 素人 欧美 日韩 | 91资源| 毛片免费看 | 波多野结衣一区 | 国产精品高清视亚洲乱码 | 日本爱爱网站 | 91精品在线免费 | 99久久精品国内 | 中文字幕久久亚洲一区 | 亚洲欧美另类在线视频 | 女人18毛片a级18毛多水真多 | 伊人国产视频 | 午夜激情男女 | 免费在线精品视频 | 炮房五月 | 七月婷婷精品视频在线观看 | 日日搞夜夜操 | 亚洲欧美国产精品专区久久 | 国产毛片久久精品 | 天天操夜夜操夜夜操 | 日日操网站 | 免费小视频 | 野外一级毛片黑人 | 美女一级毛片视频 | 114一级毛片免费观看 | 免费观看国产一区二区三区 | 欧美精品一区在线看 | 精品999久久久久久中文字幕 | 手机看片99 | 日韩一区二区三区视频 | 久热中文字幕在线观看 | 亚洲最大成人 | 一级一级一级一级毛片 | 久草综合在线观看 |