选择适当的缓存机制

6

我的设置:

  • 4个web服务器
  • 静态内容服务器(NFS挂载)
  • 2个数据库服务器
  • 2个“执行魔法”的服务器
  • 另外8台机器被指定为多用途。

我正在编写一个包装器,使三种缓存机制可以以某种规范化的方式使用:文件系统、Memcached和APC。我正在尝试提供使用示例(以及每个缓存中实际放置什么内容)。

文件系统

处理我们生成并静态服务的内容。RSS订阅源、旧报告数据、用户特定页面等...这些都被缓存在静态服务器上。

Memcached

PHP会话数据、MySQL查询结果,通常是需要在我们的系统中可用的东西。我们有8台机器可以包含在服务器池中。

APC

我不知道。两个“执行魔法”的服务器不属于任何分布式系统,所以它们可以在APC中缓存查询结果,并从那里工作。除此之外,我想不到其他任何东西。

查询缓存

考虑到我们使用SQL的性质,查询缓存会降低性能。我已经禁用了它。

一般来说,应该在哪里存储什么类型的数据?这个设置有意义吗?

在分布式系统中是否有APC数据缓存的任何用途(我想不到)?

是否有其他遗漏的东西可以使事情更加容易或更有效率?

编辑:最后我明白了Pascal在说什么。我一直认为只会将我的配置/其他内容的一部分移动到APC中,并且仍然从磁盘加载其余部分。还有其他建议吗?

1个回答

3
我在一些项目中使用相同的缓存机制;我们使用APC + memcached作为缓存系统。
当涉及到缓存数据时,APC和memcached有两三个主要区别:
- APC访问速度稍快(如果我没记错的话,大约比memcached快5倍),因为它只是本地的——即没有涉及网络。 - 使用APC,您的缓存在每个服务器上都会被复制;而使用memcached,则在服务器之间没有重复。
这意味着memcached确保所有服务器具有相同版本的数据;而存储在APC中的数据可能在每个服务器上都不同。
我们通常使用:
- 对于需要经常访问、生成快速且要么不经常修改要么不必在所有服务器上相同的数据,使用APC。 - 对于需要更长时间生成或使用较少的数据,或者对于修改必须立即可见的数据,使用memcached。
例如,我们可以:
- 使用APC存储配置变量:
- 不经常更改 - 经常访问 - 小
- 使用memcached存储文章内容(例如CMS应用程序):
- 不小,并且有很多,这意味着它可能需要比我们单独一个服务器上拥有的内存更多 - 相当难/繁重生成
几个附注:
- 如果多个服务器尝试写入通过NFS共享的同一文件,则可能会出现问题,因为NFS上没有锁定机制(据我所记)。 - APC可用于缓存数据,是的——但使用它最重要的原因是它的opcode缓存功能(可以在PHP服务器上节省大量CPU)。 - memcached中的条目大小受限制:您不能存储大于1M的条目(我有时会遇到这个问题——很少,但当它发生时不好^^)。

谢谢。你能提供更多关于APC缓存的信息吗?你如何处理在你的Web服务器上过期的数据?这似乎可能会很麻烦。(也许我对“配置数据”的理解与你所描述的不同...)你所描述的项目正是我想要使用APC缓存的原因,如果可能的话 - jasonbar
你不需要处理数据在服务器之间的过期:通常,对于你存储的这种数据,如果不是所有服务器上的版本都相同,那也没关系。 - Pascal MARTIN
是的,这很有道理,但是...存储哪种数据会有用呢?你给出的例子让我想到了一些不适合在APC中缓存的东西。 - jasonbar
数据类型取决于您的应用程序;但我认为翻译字符串和几乎永远不会更改的配置内容是两个很好的选择。 - Pascal MARTIN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接