nginx + tmpfs 替代缓冲服务器
在nginx服务器上划分一块内存作为tmpfs 然后将网站数据全部复制到tmpfs内 将nginx的documen...
扫描右侧二维码阅读全文
11
2008/04

nginx + tmpfs 替代缓冲服务器

在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要求更多的内存.

Last modification:November 26th, 2018 at 04:16 pm
If you think my article is useful to you, please feel free to appreciate

8 comments

  1. tangfl

    tmpfs 文件系统没有实现 sendfile 函数调用,如果 nginx 配置里打开了 sendfile 选项的话,size 比较大的文件的传输会发生错误。

  2. Johnny Woo

    那如果这样.从硬盘启动windows之后的任何操作.和将操作系统放入内存启动之后的操作性能应该是一模一样的.
    但是实际上差别还是非常大的.
    还有如果我有2G内存.用播放器放两部300M的片子.如果打开文件会被全部缓冲到内存.那么我再复制或者打开这两部片子.所有执行的操作应该都是在内存中的.这样速度应该非常快.但是实际上并不是.我们的硬盘灯还是会亮.

  3. chanix

    打开文件的cache只存在于硬盘的那4~16M cache.
    打开文件被放置到内存中是跟随打开文件的程序一起被加载到内存里的.而不是单独这个文件.

    这个认识不对。

  4. Johnny Woo

    打开文件的cache只存在于硬盘的那4~16M cache.
    打开文件被放置到内存中是跟随打开文件的程序一起被加载到内存里的.而不是单独这个文件.

  5. chanix

    还有打开文件OS不会做cache,只有执行程序时才会.

    ?????

  6. Johnny Woo

    tmpfs的容量是用来存放网站程序而非网站数据
    一个网站的纯代码部分能超过200M已经是很恐怖的了.
    还有打开文件OS不会做cache,只有执行程序时才会.
    只有一部分会保存在硬盘的cache中.但是硬盘的cache多大.命中率就算乐观估计有50%就不错了.

  7. Chanix

    这个思路不可取。

    首先 tmpfs 的容量是有限的,其次,即使文件不在 tmpfs 中,打开文件时OS本身就会做CACHE,效率高的多。

  8. jack

    很不错的思路

Leave a Comment