1. 程式人生 > 其它 >從Python看Web架構的發展

從Python看Web架構的發展

靜態web與動態web

靜態WEB程式中,客戶端使用WEB瀏覽器(IE、FireFox等)經過網路(Network)連線到伺服器上,使用HTTP協議發起一個請求(Request),告訴伺服器我現在需要得到哪個頁面,所有的請求交給WEB伺服器,之後WEB伺服器根據使用者的需要,從檔案系統(存放了所有靜態頁面的磁碟)取出內容。之後通過WEB伺服器返回給客戶端,客戶端接收到內容之後經過瀏覽器渲染解析,得到顯示的效果。

由於這種應用不能與使用者互動、無法顯示個性化的內容,所以動態網頁技術應運而生。

動態WEB程式中,程式依然使用客戶端和服務端,客戶端依然使用瀏覽器(IE、FireFox等),通過網路(Network)連線到伺服器上,使用HTTP協議發起請求(Request),現在的所有請求都先經過一個WEB Server 來處理,用於區分是請求的是靜態資源還是動態資源。

如果WEB Server 發現客戶端請求的是靜態資源,則WEB伺服器從靜態檔案系統中取出內容,傳送回客戶端瀏覽器進行解析執行。

如果WEB Server 發現客戶端請求的是動態資源,則先將請求轉交給Web應用程式,由Web應用程式組織資料,最後把處理結果交給WEB伺服器,之後通過WEB伺服器將內容傳送回客戶端瀏覽器。

web伺服器與web應用程式的介面

gateway interface 是web serverweb應用程式之間的介面規範,這種介面規範規定了web伺服器:

如何將 request 引數化後傳遞給 web應用程式,web應用如何將它的輸出傳送給 webserver,

以及如何呼叫 web應用程式。

CGIFASTCGIWSGI都是web伺服器 與 web應用程式的介面規範,如:

web Server + CGI + shell + DB
web Server + FastCGI + shell php + DB
web server + Serverlet + java + MVC
web Server + WSGI + Python + MVC

web應用程式的再抽象

隨著web應用的動態化, 傳統的靜態web server對於動態內容無能為力,CGI技術用於生成動態內容。 但是CGI技術的效能很差, 主要是因為對於每個請求都要建立一個程序來執行cgi程式, 而程序建立的開銷比較大, 嚴重拖慢了響應速度。隨後fastcgi技術出現了, 為了解決cgi技術中存在的問題,fastcgi

使用一種程序管理器, 用來維持一個程序池,提前建立程序,從而提高了響應速度。

uWSGI是一個WSGI協議的實現,包括四個部分:

實現了 uwsgi協議, 與web server 通訊
web server 內建支援協議模組:
application server協議支援模組: 實現了 WSGI, 與 python框架互動
程序控制程式: 為web request 的處理建立工作程序

為什麼要隔離 framework 和webserver?

https://www.98891.com/article-33-1.html

如果在nginx中直接用WSGI, 那麼 nginx執行緒中就要啟動python直譯器。通常最好在與主Web伺服器不同的程序中執行Python。 這樣,Web伺服器可以具有許多微小的執行緒,這些執行緒可以非常快地提供靜態內容,而單獨的Python程序又大又笨重,並且每個程序都在執行自己的Python直譯器。

更靈活。開發人員可以從Green Unicorn切換到uWSGI,而無需修改實現WSGI的應用程式或框架。

易於擴充套件。一次為成千上萬個動態內容的請求提供服務是WSGI伺服器的任務,而不是框架,職責分離對於有效地擴充套件和分派Web流量很重要。

web框架

Web框架的作用主要是方便我們開發 web應用程式,HTTP請求的動態資料就是由 web框架層來提供的。沒有框架時,實現業務邏輯要面對如何設計路由邏輯,資料如何訪問, 檢視如何設計等問題。

以MVC開發模式來說, 我們要實現MVC 這三個方面的各種細節。 每次開發一個新的app都有大量重複的工作要做。 這些重複的固定的工作與流程被抽象出來,每次只用開發相應的業務邏輯, 大大加快了web開發的速度。