Memcached 在这种情况下有帮助吗?

Memcached 在这种情况下有帮助吗?

我为一家大型互联网网站工作,人们可以在这里相互分享大量文本。我们将大部分信息存储在 InnoDB 数据库中,但实际的文本存储在基于文本的文件中。这些基于文本的文件大小从几 KB 到 10MB 不等。这些文件有数百万个,我们设置了良好的文件夹/文件结构,以确保一个文件夹中的文件不会太多。

存储这些文件的 Web 服务器(数据库在另一个服务器上)是一台功能强大的机器,配有 4 个 15k SAS 驱动器(RAID10)和 24GB 内存。我们运行 Nginx 作为 Web 服务器,并使用 Xcache 来加速 PHP。这一切都运行良好,负载通常在 0.7 到 1.5 之间变化。

现在,我只打算使用 Memcached 将“基于文本”的文件存储在 RAM 中。这样,每次有人请求需要加载其中一个“基于文本”文件的页面时,就不必从磁盘读取它们。在 PHP 中,我使用 file_get_contents(); 将“基于文本”的文件加载到变量中,然后将其显示在页面的某个位置。

我的问题是,您认为为这个特定功能实现 Memcached 是否真的会降低负载,或者 Linux 本身是否已经具有某种内部文件缓存,当我经常通过 file_get_contents 请求某个文件时会使用它?

答案1

显而易见的答案是,您必须在特定场景中亲自测试各种选项。

也就是说,Linux 会将所有可用的 RAM 用作磁盘缓存,但前提是它不用于其他更重要的用途。

答案2

我猜测从磁盘读取一个小的文本文件(或者,对于流行文件,从缓存的 RAM 中读取)会比与 memcached 对话更快。

您必须对此进行测试,但请记住,Linux 非常积极地缓存文件和目录结构,因此很可能您已经从 RAM 中提供大部分内容。

您是否发现 Web 服务器上的磁盘 I/O 负担很重且速度很慢?

答案3

我假设您有 munin 来监控服务器统计信息(通过 iostat/vmstat)。因此,您可以检查系统是否使用大量磁盘 IO。如果是,则系统缓存效率不高。您可以查看,如果您提供的页面大部分是静态内容。

还可以看看 Linux-ftools。当你想修改系统级文件缓存时,它正是你所需要的。一探究竟

相关内容