HTTP代理服務(wù)器的架構(gòu)-天啟HTTP
HTTP架構(gòu)師一般都會使用多種復(fù)雜的機制來將多個模塊組合建成一個HTTP服務(wù)?,F(xiàn)在的網(wǎng)絡(luò)爬蟲中,已經(jīng)形成了4種基本的模式。如果已經(jīng)編寫了用于生成動態(tài)內(nèi)容的網(wǎng)絡(luò)爬蟲Python代碼,并且已經(jīng)選擇了某個支持WSGI的API或框架,應(yīng)該如何將HTTP服務(wù)部署到線上呢?介紹下HTTP代理服務(wù)器的四種架構(gòu)。

第一,運行一個使用網(wǎng)絡(luò)爬蟲Python編寫的服務(wù)器,服務(wù)器的代碼中可以直接調(diào)用WSGI接口?,F(xiàn)在流行的是Green Unicorn(Gunicorn)服務(wù)器,不過也有其他已經(jīng)可以用于生產(chǎn)環(huán)境的純Python服務(wù)器。
第二,配置mod_wsgi并運行Apache,在一個獨立的WSFIDaemonProcess中運行Python代碼,由mod_wsgi啟動守護進程。
第三在后端運行一個類似于Gunicorn的Python HTTP服務(wù)器(或者支持所選異步框架的任何服務(wù)器),然后在前端運行一個既能返回靜態(tài)文件,又能對Python編寫的動態(tài)資源服務(wù)進行反向代理的Web服務(wù)器。
第四步在前端運行一個純粹的反向代理(如Varnish),在該反向代理后端運行Apache或者nginx,在后端運行Python編寫的HTTP服務(wù)器。這是一個三層的架構(gòu)。這些反向代理可以分布在不同的地理位置,這樣子就能夠?qū)㈦x客戶端近的反向代理上的緩存資源返回給發(fā)送請求的客戶端。
長期以來,對這4個架構(gòu)的選擇主要基于CPython的3個運行時的特性,即解釋器占用內(nèi)存大、解釋器運行慢、全局解釋器(GIL,Global Interpreter Lock)禁止多個線程同時運行Python字節(jié)碼。但同時帶來了內(nèi)存中只能載入一定數(shù)量的Python實例。