我为一家大型互联网网站工作,人们可以在这里相互分享大量文本。我们将大部分信息存储在 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 负担很重且速度很慢?