主流的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方式部署。
新聞熱點
疑難解答