【问题标题】:System design for multiple organisations多组织的系统设计
【发布时间】:2017-05-23 14:40:26
【问题描述】:

在我工作的公司,我们为多个组织开发和托管一个 CRM 系统,其中数据库是隔离的 - 即我们的客户不共享 1 个类似于 Facebook 的大型数据库,我们每个客户都有单独的数据库,但相同的 CRM软件。所有其他系统方面(例如缓存)都是特定于组织的。

我们正在将我们的服务器迁移到 AWS,这让我们有机会思考基础设施。

我们的基础系统是使用 CodeIgniter 框架编写的,因此我们考虑创建一个实例并根据主机名/用户帐户附加相关的数据库凭据,而不是拥有同一个 CRM 的多个实例(这种方法,CRM将通过专用 URL 访问)。例如。如果用户 A 为公司 B 工作,我们将连接到公司 B 的数据库,而不是公司 C。这个例子也有助于我们的版本控制。

我只是想知道其他人是否有过类似的经历,一般感觉是保持实例完全隔离还是迁移到真正的“软件即服务”单实例方法?

【问题讨论】:

    标签: php mysql codeigniter amazon-web-services architecture


    【解决方案1】:

    这实际上取决于数据库大小和流量。如果您有大量流量,单独的数据库会更好,因为如果他们需要更多资源,您可以轻松地将它们移到自己的服务器实例上 + 它更易于管理。如果您没有很多流量,您可以使用一个数据库,但如果您需要做一些公司特定的事情,那是有风险的。代码方面,单个实例更容易维护,因为您不必单独为每个实例推出更改,并且如果您的服务器达到容量,只需在负载均衡器上拍打并启动同一网络服务器的更多实例 ()keep请记住,数据库应该位于单独的服务器上。

    【讨论】:

    • 数据库大小相对较小,每个组织 5 GB。我很可能会查看一个额外的用户身份验证层,它映射到一个组织,然后加载相关的数据库凭据。然后让每个人都通过crm.[x].com 访问。 - 我看过负载均衡器,拥有一个域更直接。
    • 如果你有专用的 URL,负载平衡可能会变得复杂,但如果你需要它仍然是可能的。至于解决方案本身,这与我们为多客户端项目所做的相同:一个应用程序和专用数据库,如果所有客户端的核心逻辑相同,则只需按用户组处理数据库连接。
    【解决方案2】:

    这个帖子的作者已经接受了提案作为答案。但是,我建议您阅读multi-tenant architecture,它将为您提供更多指导。在这里,您可以将各个公司关联为租户。

    【讨论】:

      【解决方案3】:

      在选择多租户或单租户架构时有几个重要的考虑因素,包括:

      • 安全性 - 您能否在多租户环境中有效隔离数据、访问、权限等?
      • 基础设施成本 - 您能否有效利用单个租户的服务器/平台容量?在 AWS 上,扩展可以帮助解决这个问题。
      • 许可成本 - 在单租户环境中是否有大量额外的许可成本(通常更多的服务器意味着更多的许可)?
      • 实施和维护的工作量/成本 - 单租户解决方案是否需要更多的工作量来管理部署和维护基础架构?

      【讨论】:

        猜你喜欢
        • 2012-08-09
        • 1970-01-01
        • 2021-03-12
        • 1970-01-01
        • 2011-01-01
        • 2014-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多