0

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

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

4

1 回答 1

1

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

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

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

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

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

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

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

于 2014-12-30T07:20:23.363 回答