我的设置:
- 4 台网络服务器
- 静态内容服务器(NFS 挂载)
- 2 个数据库服务器
- 2 个“魔术”服务器
- 另外 8 台指定为多用途的机器。
我正在为三种缓存机制编写一个包装器,以便可以以某种规范化的方式使用它们:文件系统、Memcached 和 APC。我正在尝试提供使用示例(以及实际放入每个缓存中的内容)。
文件系统
处理我们生成然后静态提供的内容。 RSS 提要、旧报告数据、用户特定页面等...这些都缓存到静态服务器。
内存缓存
PHP session 数据、MySQL 查询结果,通常是需要在我们的系统中可用的东西。我们有 8 台机器可以包含在服务器池中。
APC
我不知道。这两个“魔术”服务器不是任何分布式系统的一部分,因此它们似乎可以在 APC 中缓存查询结果并从那里工作。除此之外,我想不出任何东西。
查询缓存
鉴于我们使用 SQL 的性质,查询缓存会降低性能。我已经禁用了它。
一般来说,什么类型的数据应该存放在哪里?这种设置有意义吗?
APC 数据缓存在分布式系统中有什么用处(我想不出一个)吗?
我是否遗漏了一些能让事情变得更简单或更高效的东西?
编辑:我终于明白帕斯卡在说什么了。我一直在想,我只会将我的配置/任何内容的一部分移动到 APC,并仍然从磁盘加载文件的其余部分。还有其他建议吗?
最佳答案
我在某些项目中使用了相同类型的缓存机制;我们使用 APC + memcached 作为缓存系统。
在缓存数据方面,APC 和 memcached 之间有两个/三个主要区别:
- APC 访问速度稍快(如果我没记错的话,大约比 memcached 快 5 倍),因为它只是本地的——即不涉及网络。
- 使用 APC,您的缓存会在每台服务器上复制;使用 memcached,没有跨服务器的重复
- 这意味着 memcached 确保所有服务器都具有相同版本的数据;而存储在 APC 中的数据在每个服务器上可能不同
我们通常使用:
- APC 用于必须经常访问的数据,可以快速生成,并且:
- 两者都不经常修改
- 或者如果它在所有服务器上都不相同也没关系
- memcached 用于生成需要更多时间和/或较少使用的数据。
- 或者对于修改必须立即可见的数据(即,当写入数据库时,也会重新生成缓存的条目)
例如,我们可以:
- 使用 APC 存储配置变量:
- 不要经常改变
- 经常访问
- 很小
- 将 memcached 用于文章内容(例如,对于 CMS 应用程序):
- 不是那么小,而且有很多,这意味着它可能需要比我们单独在一台服务器上拥有的更多的内存
- 很难/很重地生成
一些旁注:
- 如果多个服务器尝试写入通过 NFS 共享的同一个文件,可能会出现问题,因为 NFS 上没有锁定机制(据我所知)
- APC 可用于缓存数据,是的——但使用它的最重要原因是它的操作码缓存功能(可以在 PHP 服务器上节省大量 CPU)
- memcached 中的条目大小有限制:您不能存储大于 1M 的条目(我有时会遇到这个问题——很少,但一旦发生就不好了 ^^)
关于php - 选择合适的缓存机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2353008/