通常情况下,HTTP架构师会使用许多复杂的机制来组合多个子模块来构建HTTP服务。如今,在网络爬虫中,有四种最基本的模式。假如编写了网络爬虫Python代码来生成动态内容,并选择了某种支持WSGI的API或框架,那么应该如何将HTTP服务部署到网上?
首先,运行一台用网络爬虫Python编写的服务器,WSGI接口可以在服务器的代码中直接调用。目前最流行的是GreenUnicorn(Gunicorn)服务器,但是还有一些纯Python服务器已经在生产环境中可用。
配置mod_wsgi并运行Apache,在独立的WSFIDaemonProcess中运行Python代码,然后mod_wsgi启动守护进程。
在后端运行类似于Gunicorn的PythonHTTP服务器(或任何支持选定异步框架的服务器),然后在前端运行一个Web服务器,它既可以返回静态文件,也可以对Python编写的动态资源服务进行反向代理。
在最前端运行纯反向代理(例如Varnish),在它的后端运行Apache或nginx,在后端运行Python编写的HTTP服务器。它是一个三层结构。可以在不同的地理位置分布这些反向代理,这样就可以向发送请求的客户端返回最靠近客户端的反向代理上的缓存资源。
长久以来,这4种模式的选择都是基于CPython的3种运行时功能,即解释程序占用大量内存,解释程序运行缓慢,全局解释程序(GIL,GlobalInterpreterLock)禁止多个线程同时运行Python字节码。但是它会导致内存中只能加载一定数量的Python实例。