nginx + tmpfs 替代缓冲服务器

No replies
philip
philip's picture
User offline. Last seen 18 hours 51 min ago. Offline
Joined: 04/11/2010
Points: 15077
Groups: 324

在nginx服务器上划分一块内存作为tmpfs
然后将网站数据全部复制到tmpfs内
将nginx的document root指向这个分区

varnish或者squid都是利用内存和它的连接数来做到加速服务.
但是如果是squid->nginx->fastcgi->mysql
这样当中很多连接是开销在内部的连接之中
而且如果客户端请求php.squid还需要将请求再转发至nginx,然后nginx再转发至fastcgi
对于动态内容的多加了一个步骤.
考虑到nginx有了不低于squid以及varnish的连接能力
那么可以将网站程序直接放在tmpfs中
这样如果是静态的.就会直接从内存读取后返回给用户(和其他缓冲服务器的效果一样)
如果是PHP就丢给后面的fastcgi处理
这样更快.

至于程序同步的问题.
在程序更新的时候使用svn或者rsync去同步tmpfs里面和文件服务器中的内容就可以了

至于服务器重启tmpfs清空的问题
只需要在服务器重启之前,需要将内存中的程序复制到本地硬盘
然后启动之后,将硬盘数据再复制到tmpfs中然后启动服务即可

至于服务器宕机以后无法事先保存tmpfs内容
既然服务器都挂了.在它启动之后用10分钟20分钟把程序全部重新同步过来也不是什么大的开销.
如果是多节点的负载均衡或者HA,那就更没必要担心tmpfs内容丢失的问题.

至于上传文件
如果你都用这么样的架构来加速了.
你的图片还会直接上传到web服务器么?
肯定是直接传到图片服务器了.

至于内存需求过大
一个网站的实际网页和网站程序量不会超过500MB
而使用varnish或者squid等作为缓冲服务器
也绝对是内存大户
所以这种方式不会比varnish或者squid要求更多的内存.