HTTP 代理服務器的架構
HTTP架構師一般都會使用很多種復雜的機制來將多個子模塊組合建成一個HTTP服務。現在的網絡爬蟲中,已經形成了4種基本的模式。如果已經編寫了用于生成動態內容的網絡爬蟲Python代碼,并且已經選擇了某個支持WSGI的API或框架,應該如何將HTTP服務部署到線上呢?
第一步、運行一個使用網絡爬蟲Python編寫的服務器,服務器的代碼中可以直接調用WSGI接口。現在流行的是Green Unicorn(Gunicorn)服務器,不過也有其他已經可以用于生產環境的純Python服務器。
第二步、配置mod_wsgi并運行Apache,在一個獨立的WSFIDaemonProcess中運行Python代碼,由mod_wsgi啟動守護進程。
第三步、在后端運行一個類似于Gunicorn的Python HTTP服務器(或者支持所選異步框架的任何服務器),然后在前端運行一個既能返回靜態文件,又能對Python編寫的動態資源服務進行反向代理的Web服務器。
第四步、在前端運行一個純粹的反向代理(如Varnish),在該反向代理后端運行Apache或者nginx,在后端運行Python編寫的HTTP服務器。這是一個三層的架構。這些反向代理可以分布在不同的地理位置,這樣子就能夠將離客戶端近的反向代理上的緩存資源返回給發送請求的客戶端。
長期以來,對這4個架構的選擇主要基于CPython的3個運行時的特性,即解釋器占用內存大、解釋器運行慢、全局解釋器(GIL,Global Interpreter Lock)禁止多個線程同時運行Python字節碼。但同時帶來了內存中只能載入一定數量的Python實例。提供HTTP代理、HTTPS代理、Socks5代理等,住宅代理極速響應,保障用戶信息的安全。