代码之家  ›  专栏  ›  技术社区  ›  jasonbar

选择适当的缓存机制

  •  5
  • jasonbar  · 技术社区  · 15 年前

    我的设置:

    • 4个Web服务器
    • 静态内容服务器(NFS装载)
    • 2分贝服务器
    • 2台“Do Magic”服务器
    • 另外8台机器被指定为多用途。

    我正在为三种缓存机制编写一个包装器,以便它们可以以某种标准化的方式使用:文件系统、memcached和apc。我正试图想出一些使用的例子(以及在每个缓存中实际放置的内容)。

    文件系统

    处理我们生成的内容,然后静态地提供服务。RSS源、旧报告数据、用户特定页面等…所有这些都缓存到静态服务器。

    内存缓存

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

    空气污染指数

    我不知道。这两个“do magic”服务器不是任何分布式系统的一部分,因此它们似乎可以将查询结果缓存到APC中并从中工作。过去,我什么都想不起来。

    查询缓存

    鉴于我们的SQL使用的性质,查询缓存 减少 性能。我禁用了这个。

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

    在分布式系统中,APC数据缓存有什么用途吗(我想不起来)?

    我有没有什么东西会让事情变得更简单或更有效率?

    编辑:我终于明白帕斯卡在说什么了。我把它卡在我的脑海里,我只会把我的配置/任何东西的一部分移动到APC,仍然从磁盘加载文件的其余部分。还有什么建议吗?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Pascal MARTIN    15 年前

    我在一些项目中使用相同的缓存机制;我们使用apc+memcached作为缓存系统。

    在缓存数据方面,apc和memcached有两个/三个主要区别:

    • APC访问速度快一点 (如果我没记错的话,大约比memcached快5倍) 因为它只是本地的——也就是说,不涉及网络。
    • 使用apc,您的缓存在每台服务器上都是重复的;使用memcached,没有跨服务器的重复
      • 这意味着memcached确保所有服务器都具有相同版本的数据;而存储在apc中的数据在每个服务器上都可以是不同的。


    我们通常使用:

    • 对于必须经常访问的数据,APC可以快速生成,并且:
      • 两者都不是经常修改的
      • 或者在所有服务器上都不相同也没关系
    • memcached用于生成和/或使用较少的数据。
      • 或修改必须立即可见的数据 (即,当对数据库进行写操作时,也会重新生成缓存项)

    例如,我们可以:

    • 使用APC存储配置变量:
      • 不要经常改变
      • 经常访问
    • 对文章内容使用memcached (例如,对于CMS应用程序) :
      • 不算太小,而且它们很多,这意味着它可能需要比我们单独在一台服务器上拥有更多的内存。
      • 很难/很重


    一些旁注:

    • 如果多个服务器试图写入通过NFS共享的同一个文件,可能会出现问题,因为在NFS上没有锁定机制。 (据我所知)
    • APC可以用来缓存数据,是的——但最重要的原因是它的操作码缓存功能 (可以在PHP服务器上节省大量CPU)
    • memcached中的条目大小有限:不能存储大于1米的条目 (我有时会遇到这个问题——很少,但当它发生时就不好了^)