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

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