從Python看Web架構(gòu)的發(fā)展

來源 | https://www.cnblogs.com/stay-real/p/14464321.html
靜態(tài)web與動態(tài)web

由于這種應(yīng)用不能與用戶交互、無法顯示個性化的內(nèi)容,所以動態(tài)網(wǎng)頁技術(shù)應(yīng)運而生。
在動態(tài)WEB程序中,程序依然使用客戶端和服務(wù)端,客戶端依然使用瀏覽器(IE、FireFox等),通過網(wǎng)絡(luò)(Network)連接到服務(wù)器上,使用HTTP協(xié)議發(fā)起請求(Request),現(xiàn)在的所有請求都先經(jīng)過一個WEB Server 來處理,用于區(qū)分是請求的是靜態(tài)資源還是動態(tài)資源。
如果WEB Server 發(fā)現(xiàn)客戶端請求的是靜態(tài)資源,則WEB服務(wù)器從靜態(tài)文件系統(tǒng)中取出內(nèi)容,發(fā)送回客戶端瀏覽器進(jìn)行解析執(zhí)行。
如果WEB Server 發(fā)現(xiàn)客戶端請求的是動態(tài)資源,則先將請求轉(zhuǎn)交給 Web應(yīng)用程序,由Web應(yīng)用程序組織數(shù)據(jù),最后把處理結(jié)果交給WEB服務(wù)器,之后通過WEB服務(wù)器將內(nèi)容發(fā)送回客戶端瀏覽器。

web服務(wù)器與web應(yīng)用程序的接口

gateway interface 是 web server 和 web應(yīng)用程序 之間的接口規(guī)范,這種接口規(guī)范規(guī)定了web服務(wù)器:
如何將 request 參數(shù)化后傳遞給 web應(yīng)用程序,web應(yīng)用如何將它的輸出發(fā)送給 webserver,
以及如何調(diào)用 web應(yīng)用程序。
CGI、FASTCGI、WSGI 都是web服務(wù)器 與 web應(yīng)用程序的接口規(guī)范,如:
web Server + CGI + shell + DBweb Server + FastCGI + shell php + DBweb server + Serverlet + java + MVCweb Server + WSGI + Python + MVC
web應(yīng)用程序的再抽象
隨著web應(yīng)用的動態(tài)化, 傳統(tǒng)的靜態(tài)web server對于動態(tài)內(nèi)容無能為力,CGI技術(shù)用于生成動態(tài)內(nèi)容。
但是CGI技術(shù)的性能很差, 主要是因為對于每個請求都要創(chuàng)建一個進(jìn)程來運行cgi程序, 而進(jìn)程創(chuàng)建的開銷比較大, 嚴(yán)重拖慢了響應(yīng)速度。
隨后fastcgi技術(shù)出現(xiàn)了, 為了解決cgi技術(shù)中存在的問題, fastcgi使用一種進(jìn)程管理器, 用來維持一個進(jìn)程池,提前創(chuàng)建進(jìn)程,從而提高了響應(yīng)速度。

uWSGI 是一個 WSGI 協(xié)議的實現(xiàn),包括四個部分:
實現(xiàn)了 uwsgi協(xié)議, 與web server 通信
web server 內(nèi)置支持協(xié)議模塊:
application server協(xié)議支持模塊: 實現(xiàn)了 WSGI, 與 python 框架交互
進(jìn)程控制程序: 為web request 的處理創(chuàng)建工作進(jìn)程
為什么要隔離 framework 和webserver?
如果在nginx中直接用WSGI, 那么 nginx線程中就要啟動python解釋器。通常最好在與主Web服務(wù)器不同的進(jìn)程中運行Python。
這樣,Web服務(wù)器可以具有許多微小的線程,這些線程可以非常快地提供靜態(tài)內(nèi)容,而單獨的Python進(jìn)程又大又笨重,并且每個進(jìn)程都在運行自己的Python解釋器。
更靈活。開發(fā)人員可以從Green Unicorn切換到uWSGI,而無需修改實現(xiàn)WSGI的應(yīng)用程序或框架。
易于擴(kuò)展。一次為成千上萬個動態(tài)內(nèi)容的請求提供服務(wù)是WSGI服務(wù)器的任務(wù),而不是框架,職責(zé)分離對于有效地擴(kuò)展和分派Web流量很重要。
web框架
Web框架的作用主要是方便我們開發(fā) web應(yīng)用程序,HTTP請求的動態(tài)數(shù)據(jù)就是由 web框架層來提供的。
沒有框架時,實現(xiàn)業(yè)務(wù)邏輯要面對如何設(shè)計路由邏輯,數(shù)據(jù)如何訪問, 視圖如何設(shè)計等問題。
以MVC開發(fā)模式來說, 我們要實現(xiàn)MVC 這三個方面的各種細(xì)節(jié)。每次開發(fā)一個新的app都有大量重復(fù)的工作要做。
這些重復(fù)的固定的工作與流程被抽象出來,每次只用開發(fā)相應(yīng)的業(yè)務(wù)邏輯, 大大加快了web開發(fā)的速度。

本文完~
學(xué)習(xí)更多技能
請點擊下方公眾號
![]()

