很多高性能的web框架,例如沈崴的euraisa,fackbook的tornado(这两个都是python)框架,都是http的。这和我们的印象相反,python,或者其他高级语言不是都很慢么?为什么都用这个来做http服务器呢?

这个我们得从服务器架构开始说起。最初的时候,没得说,所有的都在同一个机器上,甚至可能使用cgi模式。在访问压力上去后,为了增强性能,首先被拆出去的应该是数据库服务器。而后会考虑使用fastcgi或者scgi进行部署,前面使用apache或者nginx做前端。在这个时候,fastcgi是有道理的。因为apache在静态文件处理的性能上远高于python框架(而且快数倍),而nginx在大规模静止长连接的情况下性能更优异。而且,更进一步说,在性能压力加大的时候,应用服务器会被拆分,这时候apache/nginx做反向代理很容易做到负载均衡集群。

然而,如果压力再上去呢?在这种情况下,通常考虑的两件事情是静态文件拆分单独的服务器和应用服务器的硬件负载均衡(没钱的话也得考虑LVS了)。道理很简单,即使服务器性能能无限提升,网络接口的性能也不会无限制的上升的。完成这两步后,我们再来看整个架构,会发现反向代理变成了一个鸡肋。静态文件处理?不在这些服务器上了。负载均衡,系统级有了。apache/nginx有什么用呢?难道就是把http协议转换为fastcgi协议?

所以说,要达到高性能,框架应当是直接处理http的,并且支持大量的客户进行长连接。当压力小的时候,使用nginx的反向代理模式进行工作(而不是fastcgi协议)。当压力大的时候,拆开静态文件,直接上去服务全社会。