【问题标题】:APC cache isolation in a multi tentant setting (cakephp)多租户设置中的 APC 缓存隔离 (cakephp)
【发布时间】:2011-11-15 19:54:09
【问题描述】:

我正在使用 cakephp 来运行多租户应用程序。该应用程序只有 1 个实例,唯一的区别是每个应用程序连接到的数据库。除此之外,该应用程序是相同的。

我的设置:

  1. Apache 2.2
  2. PHP 5.3
  3. 蛋糕 1.3.10
  4. Win 2k3 服务器

    我将应用程序部署在 apache 的 docroot 下(只有 1 个 应用程序正在运行)。我最近从文件切换到 APC 缓存。这 两个应用程序的缓存文件前缀相同。使用阿帕奇 虚拟主机来决定去哪个应用程序。我正在缓存静态 html/js/css/gif 但不是 php(通过 apache 的 mod_expires)

问题:

我注意到一些本应可供 APP 1 使用的缓存值显示在 App 2 的下拉列表中。看到这种情况发生,我感到很震惊。

如何在应用之间的 APC 缓存层中添加隔离?

更新: 即使我制作了应用程序的新副本并将其放入自己的 docroot 中,也会出现问题!!!

更新2

场景 1) 1 个实例具有所有 perm/comb

如果我有像

这样的 php 代码
if(client=="client1") {
$options = array(opt1,opt2);
}else if(client=="client2") {
$options = array(opt3,opt4);
}

并且此代码由客户端 1 和客户端 2 共享,APC 缓存对此有何影响?

场景 2) 每个客户端自定义 2 个实例

client1.php
$options = array(opt1,opt2);

client2.php
$options = array(opt3,opt4);

这对 APC 缓存有何影响? 如果我理解正确,对于场景 1,客户端 1 数据可能与客户端 2 混合(非常糟糕) 对于场景 2,只要我使用不同的缓存键,我就确定永远不会发生混淆吗?

【问题讨论】:

    标签: php cakephp apc


    【解决方案1】:

    原因:

    1. APC 对虚拟主机、应用程序或其他“apache”事物一无所知。
    2. 这意味着如果共享 apc,则所有 vhost 之间共享任何缓存键。 (你通常想要的)。
    3. APC 没有自己的隔离层。

    解决方法:

    1. 为每个应用程序提供它们自己的缓存键前缀。这允许他们访问各个用户缓存密钥的密钥。 (最简单)
    2. 如果您需要真正的隔离,请使用 memcached 遵循 breiti 的工作流程。 (可能是最好的解决方案)
    3. 您可以考虑为每个单独的虚拟主机运行一个唯一的 PHP.ini 和一个唯一的 fcgiwrapper(请参阅:http://chrisgilligan.com/wordpress/apc-cache-considerations-for-virtual-hosting-environments/)。然而,这意味着内存使用量的大幅增加。 (如果你真的想要它的解决方案)

    【讨论】:

      【解决方案2】:

      一种方法可能是:

      • 为您的用户使用 memcached 而不是 APC
      • 将您的虚拟主机/域绑定到自己的 IP
      • 为您的 vhost 启动 memcache 实例(即 vhost1 = 端口 12345,vhost2 = 端口 12346,...)
      • 添加 iptable 规则,丢弃特定 memcache 端口上的每个数据包,这些数据包与该端口的 vhost ip 不匹配)

      您的问题似乎是,php 作为 fastcgi 运行,因此每个 vhost 都将获得相同的 php 进程来共享它们的缓存。您需要将 php 设置为仅针对每个虚拟主机运行(不知道您要查找的内容)。

      我更喜欢 memcache 方法,因为:

      • memcache 允许您创建 memcache 集群
      • 很容易将您的应用服务器与缓存服务器分开(对于扩展来说,这是一个巨大的优势)
      • 您将字节缓存与用户缓存分开
      • 正确配置非常安全(因为它的 iptables 非常可靠

      【讨论】:

      • 感谢 memcache per IP:port 的想法,但是 opcode 缓存呢?
      猜你喜欢
      • 2020-08-01
      • 2015-07-23
      • 1970-01-01
      • 2011-10-20
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 2011-04-23
      • 1970-01-01
      相关资源
      最近更新 更多