如何让博客实现全内存运行?

我博客运行在廉价老旧的vps上,最近实现了博客数据近乎全内存运行,浏览速度提升明显。

下面是我设置全内存运行的方法。

第一层,用tmpfs把缓存挂载到内存。

有访客浏览博客时,数据请求首先会被nginx拦截,内存如果有压缩缓存,会被直接推给浏览者,整过过程php和mysql都不参与,因为缓存数据存储在内存,整个过程非常快。

如何把W3 Total Cache页面缓存到内存里?》这篇文章详细介绍了如何设置。

第二层,Memcached对象缓存。

Memcached的全部数据都在内存。如果在tmpfs内存盘没有找到缓存数据,php会到Memcached对象缓存里寻找数据,如果有缓存数据,就抓取数据拼装页面,把数据快速返回给浏览者,这个过程mysql不参与。在把网页发送给用户的同时,PHP 还会顺手干一件事——把拼好的 HTML 重新写回第一层(tmpfs 内存盘)。

很多缓存插件支持Memcached,记得在php里安装扩展,否则无法使用。

第三层,数据库内存池

如果Memcached也没有缓存数据,php会从数据库内存池innodb_buffer_pool_size中直接捞出原始数据页返回。

PHP 顺手做两件事:
塞给第二层:PHP 把刚拿到的数据顺手存一份到 Memcached 里,下次就不用再查 MySQL 了。
塞给第一层:PHP 把拼接好的完整 HTML 字符串写入 tmpfs 内存盘(也就是生成 .html 和 .html.gz),然后吐给浏览器。

第四层,物理磁盘

在没有评论和更新文章的情况下,博客数据实现了全内存运行,反之,会出现短暂的物理磁盘写入,对于更新频率不高的个人博客来说很少见。但是这一层是保底,即使断电,也不会造成数据丢失,上面三层都做不到。

总结一下,第一层(tmpfs) 负责挡住 90% 的普通读者。第二层(Memcached) 负责拦截剩下的 8% 动态交互,尽量保护数据库。第三层(Buffer Pool) 负责在内存里消化 1.9% 的漏网之鱼。第四层(物理磁盘) 负责最后 0.1% 的数据写入,确保即使服务器炸了,博客数据也绝对不会丢。

1人评论了“如何让博客实现全内存运行?”

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

9 − 7 =

滚动至顶部