设为首页收藏本站

亚洲数据论坛

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3251|回复: 0

【教程】 内存作缓存,让你的站点飞起来!

[复制链接]

576

主题

764

帖子

15

精华

Rank: 7Rank: 7Rank: 7

积分
3859
1859 枚
0 枚
2 枚
发表于 2016-1-10 22:30:52 | 显示全部楼层 |阅读模式
本帖最后由 勇敢的心 于 2016-1-10 23:07 编辑

让你的站点缓存驻入内存?没错,只要能摆脱普通机械硬盘的读写瓶颈你就可以让你的站点运行速度飞起来!


我们都知道,一个流量稍大些的站点,每天都会产生大量的系统文件,为了加快站点的运行速度,降低Web服务的资源消耗,现在的站点程序都会加入文件缓存机制,把缓存数据存放在服务器的硬盘空间中,方便文件的快速调用。这里要注意的是,由于服务器IOPS[1]的处理能力有限,当经常读取大量数据时,它会变得不再那么高效了(这是由服务器上硬盘的读写瓶颈决定的)。而与此相对的另外一种内存缓存模式,由于这些文件的缓存数据都存放在服务器的内存空间中,瞬间闪电般的读写速度成就了内存缓存的超高效率,那么我们为何不将站点的缓存文件放置内存中存储,充分利用内存运行速度最快的优势呢?下面我们就以Debian Web服务环境为例,看看它是如何能引爆你的站点运行速度的。


一、内存作为站点文件缓存优劣势分析


毫无疑问,内存的最大优势在于它的运行速度。由于没有机械硬盘不能亲测一下机械硬盘、固态硬盘与内存读写三者之间速度的差距对比,故在中关村的测试文章内随机挑选了几张读写测试截图,使大家对此有些简单直接的了解。


机械硬盘:


内存作缓存,让你的站点飞起来!机械硬盘、固态硬盘与内存速度的对比截图 -1 ... ... ... ...

内存作缓存,让你的站点飞起来!机械硬盘、固态硬盘与内存速度的对比截图 -1 ... ... ... ...


固态硬盘:


内存作缓存,让你的站点飞起来!机械硬盘、固态硬盘与内存速度的对比截图 -2 ... ... ... ...

内存作缓存,让你的站点飞起来!机械硬盘、固态硬盘与内存速度的对比截图 -2 ... ... ... ...


Win下内存虚拟成硬盘:


内存作缓存,让你的站点飞起来!机械硬盘、固态硬盘与内存速度的对比截图 -3 ... ... ... ...

内存作缓存,让你的站点飞起来!机械硬盘、固态硬盘与内存速度的对比截图 -3 ... ... ... ...


以上不难看出内存与这些块存储设备的读写速度差异之大了,当然我们也应该看到内存虚拟为硬盘[2]的缺陷,那就是这些内存中的数据断电或系统重启之后不会被保留。当然我们只将它用来做站点的缓存,这些缓存文件即使被删除后也会自动生成的,所以我们大可不必为它的安全性而过多担心。


二、Debian Web站点缓存应用tmpfs文件系统实战之保守策略篇


在行动以前,我们需要先来了解下/dev/shm这个看似普通的文件夹,接下来的实例中我们会用到它。


内存作缓存,让你的站点飞起来!-4

内存作缓存,让你的站点飞起来!-4


在终端下运行 df -h命令我们会看到/dev/shm/这个设备文件,它使用就是tmpfs文件系统[3]。在Redhat/CentOS等Linux发行版中默认大小为物理内存的一半,如果想修改它的默认大小只需在/etc/fstab修改,添加上size参数即可:


  1. tmpfs       /dev/shm    tmpfs  defaults,size=512m    0 0
复制代码

/dev/shm在Debian下并非由/etc/fstab配置文件创建,但我们可以在这里重新创建并设置它的各种具体参数。修改并保存后执行mount -o remount /dev/shm 重新挂载下即可。


了解了/dev/shm这个tmpfs系统文件后我们继续,下面是以Discuz!站点的/data/cache目录为例详细分解,其它站点程序也可以参考以下方法略作修改使用。


  1. # mkdir  /dev/shm/cache  // #表示必须以root身份运行该命令,新建cache文件夹
  2. # chgrp -R www-data /dev/shm/cache  //更改cache目录的用户组为www-data;在Debian系上,www-data是默认运行Web服务(Apache/Ngnix/Lighttpd…)的用户/组,安装Web服务程序时由系统自动生成。搭建Web服务的文件夹/文件一般要设置为www-data用户和组
  3. # chmod -R 775 /dev/shm/cache  //cache目录及其下子目录为www-data用户可读、写、执行;www-data群组为可读、写、执行;其它为可读、可执行
  4. # chown -R www-data:www-data /dev/shm/cache  //设定cache目录和文件的所有者和所有组为www-data,www-data
  5. # ln -fs /dev/shm/cache /home/www/discuz/data  //注意这里修改为自己站点cache的实际目录,将cache目录链接到/dev/shm/cache这个新建的tmpfs文件系统下;-f 参数表示删除已有同名目标文件
复制代码

注意,discuz/data/cache目录使用ln -fs命令后会自动连接到/dev/shm/cache开始成为新的tmpfs文件系统使用,由于/dev/shm/cache下的文件为空,所以以前Discuz!的缓存数据也将会被清空,这时需要登录Discuz!后台,手动更新一下系统缓存,否则站点显示可能会因为找不到缓存中的文件出现显示异常[4]


在此我们还需要做些更多的提示:


1. 任何修改之前请养成备份原文件的好习惯,有备才能无患。


2. 在Linux备份你的站点文件时尽管由zip,rar等多种压缩格式可选,但我们还是推荐使用tar工具创建你的备份文件,使用tar -cpzvf backup.tar.gz /file 命令可以很好的保留文件的原来属性(-p参数使文件属性不会依据使用者而变),而使用zip,rar等格式备份的话,上面我们建立的文件链接,文件权限等信息在你恢复备份文件时都可能会被清除掉其属性,这一点需要引起我们Linux新童鞋们的注意(也有可能是本人孤陋寡闻不知道zip、rar提供了类似的功能,的确有类似功能的话还望友情提示一下)。


内存作缓存,让你的站点飞起来!-5

内存作缓存,让你的站点飞起来!-5


3. 虽然debian /dev/shm默认全局可读写,但是创建cache文件后群组的权限就降为可读了,所以有必要按照上述命令重新修改下cache的权限,使www-data用户有读写权限,可以正常写入缓存文件。


4. 本着认真负责的原则,每个命令都亲测、手动输入并将字符修改为英文半角状态,参考和复制无须担心编码问题,但使用时请注意修改为您自己的实际目录。


用心的读者一定还会发现,如果系统重启后上面的工作不就白费了吗,重启后/dev/shm/cache目录将被自动删除,还需再重新建立一次。讲的没错,所以我们需要建立个shell脚本(记得chmod u+x添加可执行权限),添加到/etc/init.d/rc.local里(添加至 exit 0前面位置),让脚本重新启动后自动为我们创建好/dev/shm/cache这个文件。


  1. #!/bin/bash
  2. mkdir /dev/shm/cache
  3. chgrp -R www-data /dev/shm/cache
  4. chmod -R 777 /dev/shm/cache
  5. chown -R www-data:www-data /dev/shm/cache
  6. ln -fs /dev/shm/cache /home/www/discuz/data
  7. exit
复制代码

当然如果并不想创建cache文件链接的话你也可以直接登录管理后台修改缓存目录为/dev/shm/cache即可。Linux是十分灵活强大的,以上这些只是想向新童鞋们说明了解下整个过程是什么样的。如果你看过教程后真的打算在站点缓存目录使用tmpfs文件系统加速你的站点缓存读写速度的话,推荐你使用接下来的这种更简单的方法-----简单到只需要切换至root权限修改一个系统文件添加一行参数。OK,编辑你的/etc/fstab文件,在末尾添加如下一行:


  1. tmpfs /home/www/discuz/data/cache tmpfs noatime,rw,size=300m,uid=33,gid=33,mode=1770 0 0
复制代码

下面简单解释下其中这些参数的含义:


/home/www/discuz/data/cache //挂载到tmpfs中的目录,也就是你站点的缓存目录文件地址
noatime //关闭atime特性,减少loadcycle 提高性能
rw //挂载为读写权限
size //挂载文件的大小,tmpfs中为动态文件系统,多大的文件占用多大的内存,请根据实际情况自行定义
uid,gid //www-data用户和组id均为33,发行版不同可能会不尽相同,可以使用id命令查看
1770 //读写权限,www-data用户和www-data组可读、写、执行,其它为禁止,可以自行调整,但需确保www-data用户有缓存文件的读写权限
0 0 //开机无须检查此分区

内存作缓存,让你的站点飞起来!-6

内存作缓存,让你的站点飞起来!-6


编辑并保存,系统会在重启后自动为你把discuz的这个缓存目录挂载到tmpfs文件系统中,这些缓存文件在内存里的读写速度是机械硬盘和固态硬盘所无法匹敌的,在测试效果以前记得删除下后台的缓存,让站点重新生成一下缓存文件。此外,Discuz!常用的缓存文件还有 /data/threadcache 、/uc_server/data/cache 等目录,可以视你的站点情况酌情添加至tmpfs文件系统中。如果你是个站点优化的极热分子推荐你稍候继续阅读下《Discuz!启用memcache内存优化设置教程》这篇文章。Memcache是一套分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度,对一些大型的、需要频繁访问数据库的网站访问速度提升效果十分显著。


三、Debian Web站点缓存应用tmpfs文件系统之激进策略篇


上面介绍的是将Web站点的缓存文件驻入内存中读取和写入,然而这应该只是充分利用内存优化中最简单的一步,因为你不必担心这些站点缓存文件会意外丢失,他们还会被系统重新的生成。下一步我们梦想的更激进的方案是能够将整个站点迁徙至tmpfs文件系统中运行,它最大的难度是如何避免服务器意外宕机后依然能保证我们运行在内存中数据的安全。


虽然意外宕机这种概率在正规的IDC机房并不多常见,但异常操作,服务器遭受攻击等等各种不确定性因素依然很多,一旦系统出现意外,带给我们的数据灾难相信也是毁灭性的。也就是说数据迁徙至tmpfs容易,但百分百确保数据安全难,所以相信目前很少会有人做出这方面的尝试,所以这种异想天开的激进优化策略仍仅停留在理想理念中。目前除非能够出台一份高效的融灾备份机制,可以在系统崩溃以前能够自动将所有重要数据写入硬盘备份,否则现阶段很难全面实现将站点完全运行在内存之中。


事实上最主要的解决内存异常断电丢失数据缺陷的途径还该在于未来硬件技术的升级上,只要能在系统宕机之后仍能有储备的电力供应和技术支持使内存和硬盘得以继续正常工作一段时间,直到数据安全保存后才会真正关机停止运行(据说目前的固态硬盘上已经实现了意外断电后由电容继续供电保存未存储的数据),我们相信有朝一日这种技术终会诞生并成熟应用的,让我们拭目以待吧!


大家都知道原创文章的不易,尤其对于有严格要求的一篇技术类文章,关乎到用户参考的价值与安全可行性,文章初稿到发布耗费了大量的时间与精力,测试、总结、截图,尽管每一步都想力争做到接近权威、完美, 但无奈个人技术能力与表达都非常有限,错误与不足之处在所难免,务请读者朋友们阅读时能够及时指正,大家的谅解与理解永远是对我们文章的最大的认可与支持!




亚洲数据论坛 - 作者版权声明分割线

Respect for the original creation of the hard, the author of : 勇敢的心  In this thanks!



是失败让我乐观;
是快乐让我冷静.
因为我有一颗和你一样勇敢的心!
支持支持 高兴高兴 淡定淡定 惊呆了惊呆了 给力给力 回帖回帖 生气生气 感谢感谢 路过路过
自动排版 | 高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|站点地图|亚洲数据论坛   

GMT+8, 2017-11-18 20:06

©2009-Infinity  Data Forum Asia

快速回复 返回顶部 返回列表