【问题标题】:Multitenancy in MoquiMoqui 中的多租户
【发布时间】:2014-12-30 15:20:23
【问题描述】:

Moqui 框架如何处理多租户? Moqui 的方法是否类似于 Apache OFBiz? Ofbiz 为每个租户提供单独的数据库。 Moqui 是一个强大的框架,它继承了 OFBiz 的许多优点,并进行了许多改进。处理多租户是否有任何改进? 是否有任何示例多租户应用程序(HiveMind 或示例应用程序)

我正在评估一个 webapp 的框架,该框架具有少量数据库交互(只有 10 到 20 个表),它应该为 100 个或更多客户提供服务。为单独的租户拥有单独的数据库变得很难证明这样一个较小的应用程序是合理的。有什么建议可以用 Moqui 处理这个问题吗?一种选择是在此应用程序中的每个实体中创建一个字段名称 tenant_id,并且每次执行数据库操作时,每个数据库查询都应检查该字段。

【问题讨论】:

  • 使用 Moqui 制作应用程序不包括框架的这方面。除了这本书还有其他文档吗?
  • 经过调查来源和发行说明,Moqui 对多租户的支持类似于 Ofbiz,即共享应用服务器与不同的数据库。看看 Moqui 的领域,这是一个明智的做法,因为大型企业的混合数据库变得难以维护。我的问题得到了部分回答。只剩下这一部分:我们如何开发一个针对数据库条目非常有限(仅 10 到 20 个表)的大型客户群的应用程序?

标签: moqui


【解决方案1】:

与 OFBiz 相比,Moqui 在多租户功能方面具有多种附加功能,但它确实使用了相同的方法,即一个应用服务器(或应用服务器集群)和每个租户一个数据库(或者如果数据库,则每个租户多个数据库)被分割)。

要真正支持单个数据库中的大量租户,需要大量工具。您基本上必须在多租户层中构建功能,不仅可以处理应用程序需求,还可以处理通常直接使用数据库完成的所有其他事情(其他应用程序、报告、导出/迁移、需要时的隔离备份等)。当规模真的很大时,您还需要构建对跨多个数据库服务器的分片租户的支持。换句话说,要做到正确、完整,并不是一件简单的事情。

100 个租户还不错,您可以使用每个租户一个数据库来做到这一点。最好构建自动化来配置租户,您可以基于 Moqui 中已有的租户配置服务来实现。如果您(例如)希望将每个数据库服务器限制为 50 或 100 个或任何租户,您甚至可以向其添加逻辑以跨多个数据库服务器“分片”租户。您可以通过这种方式扩展到数千个租户,但您当然需要处理其他扩展细节。

您当然可以使用向每个实体添加一个tenantId 的方法,或者让实体外观自动执行此操作(可能适用于除租户公共组中的所有实体之外的所有实体)。如果您想跨租户进行报告,并且每个租户的数据量不是太大,那么这可能是一个不错的选择。

您可以仅为您的自定义实体执行此操作,但根据所需的功能,您可能还需要将其添加到 Moqui 实体。例如,如果您希望用户在不同的租户之间隔离,您必须向 UserAccount 和大多数其他安全实体(用于授权、用户组、权限等)添加一个tenantId。您也可以将一个tenantId 作为非PK 字段添加到UserAccount(使用extend-entity 以避免修改原始实体定义),然后根据经过身份验证的用户(或者如果用户在单独的连接表中查找租户)可以访问多个租户)。

复杂性和可能的​​变化是无穷无尽的......一切都取决于你想做什么!

与此最接近的概念是 Mantle 数据模型中的组织方。各种事物旨在支持同一系统中的多个组织,但它们之间没有严格的隔离。这实际上适用于伞形组织内的多个部门和其他较小的组织。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-27
    • 2018-05-07
    • 1970-01-01
    • 2021-02-15
    • 2018-03-28
    • 2021-02-15
    • 2015-11-03
    • 2013-05-28
    相关资源
    最近更新 更多