77
python web程序的部署方式小結
python有很多web開發框架,代碼寫完了,部署上線是個大事,通常來說,web應用一般是三層結構web server---->application----->DB server
主流的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),根紅苗正,而且部署比較簡單。
mod_wsgi,apache的一個module,也是支持WSGI協議,
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池耗干,你的服務器只能拒絕響應了
轉載請注明:濰坊網站制作:http://www.144610.tw/newsshow/218.html
關鍵詞
熱門分享
最新文章
2020.11.05
高端網站開發建設:免費建站系統的報價
2019.04.15
貴陽網站開發:如何測試WordPress網站的響應性設計
2019.04.15
臺州企業網站建設:有關Firefox開發工具的所有需要了解的信息
2019.04.15
南寧企業網站建設:MailPoet:如何在WordPress中運行您的電子郵件營銷活動(評論)
2019.04.15
??诰W站建設:使用MailChimp模板的10種鼓舞人心和創造性的方法
2019.04.15
WordPress社區的鳥瞰(&如何參與)
2019.04.15
現存14家最具影響力的WordPress博客網站公司
2019.04.15
展望網絡設計的未來:20年后我們將走向何方?
2019.04.15
AWeber是一個很好的自動響應式網站解決方案嗎?
2019.04.15
為什么你現在應該開始使用Chrome開發工具
隨機推薦
2018.03.30
濰坊網站設計不要把設計批判作為一種侮辱!
2018.05.29
網站建設公司:你不知道的七種技巧
2019.01.05
網站建設濰城:網站空間服務器選擇的四個方面
2018.06.09
濰坊定制網站建設:定制網站開發與模板構建有什么區別
2019.01.10
昌邑網站制作:在網頁設計中遵循這些原則,你將贏得比賽!
2019.01.03
濰坊餐飲網站建設:面向Web和圖形設計師的40 AdobeAIR應用程序
2019.01.03
濰坊網站設計建設:打破傳統茶葉包裝設計的鑒賞
2019.01.05
寒亭高端網站建設:網站建設中確保網站安全的五大技巧
2019.01.10
濰坊網頁制作設計:在微信時代,我們必須了解三個要點
2019.01.03
奎文網站建設推薦:二維碼在網站建設中的作用