关于动态内容前是否加载squid服务器的想法[原创]

今天在回家的路上想了这样的一个问题,这个问题也是我曾经面试的时候,那个公司的技术总监问我的问题,但当时我不知道如何作答。问题是:在动态内容前是否还有必要加squid服务器。

squid在静态文件的缓存加速方面还是很强大的,但如果应用都是动态的内容,有没有squid就两可了,很多人都是这样认为的。我是这样想的,web服务比如apahce带有keepalive参数,当这个参数打开的时候,apache出来完客户端的请求,是不会马上关闭这次的tcp连接的,当超过了设置的keepalive超时时间的时候,这次的tcp连接才会断开,这样做的好处就是可以在一次的tcp会话中完成多次请求。当apache直接对外提供服务的时候,apache面对的是所有的client,假如有10个不同ip的客户端发起请求,apache就会建立起10个tcp的连接提供服务,当这个10个客户端的这次访问完毕之后,这10个tcp连接并不会断开,而是继续保持状态,假如这10个客户端在超时时间内都没有再提交请求,那这10个tcp连接的资源就是浪费并成为了负担。
如果在apache前端加上了squid,这样apache看到的客户端始终就是一个,那就是squid,这样apache和squid建立连接后,不会因为真实客户端ip的变化而导致apache上tcp连接的浪费,这样无形当中提高了tcp的复用率,提高了性能。当然有人会说,在squid层面上的压力会增大,tcp的利用率会降低。我认为,squid自从2.6的发展以来,性能的提升还是很可观的,加入了很多实用的元素,比如负载均衡,使用效率更高的epoll,而且squid使用文件描述符,对于单台squid来说,跑到占用了6w文件描述符基本没什么问题。
当然以上只是apache前加squid的做法,你仍然可以使用负载均衡设备替代squid达到同样的效果,我想法的目的,就是充分的利用apache的keepalive参数,提高tcp复用率。

以上只是本人的一些想法,欢迎各位高手拍砖,想的不对的地方还望指出,谢谢