2

在多客户端场景中,客户端入口点是子域,我想知道我是否可以将我的客户端分成基本上包含应用程序(如缓存、配置、日志、内核)的目录,然后符号链接回“核心" 其余部分的 Symfony 目录(供应商、src 和 web)。这让我在我的捆绑包方面保持应用程序的统一,但为每个客户端提供了单独的配置。然后我将我的子域指向它们各自的目录。

从表面上看,它似乎很有希望,而且比我一直在考虑的其他一些方法更简单。以后如果我想将客户端升级到版本 2 或添加组件,我可以切换捆绑包,甚至将符号链接指向一个全新的源。它也可能很好地扩展。我还想知道使用这种方法是否允许我在客户端之间维护单独的安全上下文,而不是检查子域并重定向以在用户手动切换子域时进行身份验证。

缺点是多个配置文件的重复,并且更多地涉及初始客户端设置(但老实说,在我看来没什么坏处)。

Symfony2 是否足够灵活来处理这样的重新安排?
在多客户端应用程序中分离缓存是否有速度或安全性等好处?
在每个配置中使用单独的防火墙会导致每个子域的安全上下文不同吗?



背景/附加信息:
我正在将应用程序重新开发为多客户端/租户。我在重新设计中使用 Symfony2,因为原来的版本位于 Doctrine 之上,我现在需要更强大的框架功能。我想维护一个应用程序(所有客户端都相同)并为每个客户端拥有单独的数据库。实际上,我的期望是最多 100-200 个客户(如果我超过了,我会庆祝然后担心它)。数据库之间的架构是相同的,为了便于备份/恢复和稍后的单独升级路径,我将其分开。

我花时间阅读了许多关于多租户的问题和答案。还有关于使用路由和内核侦听器来使用子域来收集客户端 ID,然后动态选择数据库连接等。我最终从 Orm-designer.com 找到了一篇博客文章,概述了他们将网站移至一个新的 VPS。他们在帖子中详细介绍了他们的目录结构,这让我开始思考如何调整这个概念以适应我的目的。

4

1 回答 1

0

如果我理解正确,您有:

  • 基于 Symfony 2 的应用程序,
  • 数据库结构,
  • 几台机器,

你需要:

  • 在约 200 个节点上部署您的应用程序(它们可能位于不同的
    机器上),
  • 保持配置易于维护,
  • 对每个应用程序使用相同的源代码,

你需要:

  • 在您的应用程序中实施维护模式,
  • 决定哪些文件是用户特定的,
  • 从某个共享位置到客户端文件夹的非用户特定符号链接的所有文件,
  • 实现 rsync 脚本来更新所有用户通用的文件,

每次您想更新应用程序的版本时:

  • 让客户知道您的应用程序将在一段时间内不可用,
  • 将所有应用程序置于维护模式,
  • rsync 所有机器之间的公共代码并为每个客户端清除缓存/部署资产,
  • 如果需要准备备份并运行数据库更新脚本,
  • 在所有客户端机器上运行功能测试并关闭维护模式,

客户文件夹:

Machine 1
  SourceFolder
    app
    bin
    src
      Company
        YourBundle
           *Controller
           Resources
             config
             *css
             ...
           ...
    *vendor
    web

带有 * 的目录是指向同一台机器上的多个客户端共享的文件夹的符号链接,其余目录是用户特定的。

于 2013-03-17T07:40:22.037 回答